]> bbs.cooldavid.org Git - net-next-2.6.git/blobdiff - net/netlabel/netlabel_cipso_v4.c
[GENL]: Add genlmsg_reply() to simply unicast replies to requests
[net-next-2.6.git] / net / netlabel / netlabel_cipso_v4.c
index 09986ca962a6d6d086733ee8ccf09daade35eb64..52628878524c9f48b1dd391ea11fd1562839c05f 100644 (file)
@@ -384,11 +384,15 @@ static int netlbl_cipsov4_add(struct sk_buff *skb, struct genl_info *info)
        u32 doi;
        const char *type_str = "(unknown)";
        struct audit_buffer *audit_buf;
+       struct netlbl_audit audit_info;
 
        if (!info->attrs[NLBL_CIPSOV4_A_DOI] ||
            !info->attrs[NLBL_CIPSOV4_A_MTYPE])
                return -EINVAL;
 
+       doi = nla_get_u32(info->attrs[NLBL_CIPSOV4_A_DOI]);
+       netlbl_netlink_auditinfo(skb, &audit_info);
+
        type = nla_get_u32(info->attrs[NLBL_CIPSOV4_A_MTYPE]);
        switch (type) {
        case CIPSO_V4_MAP_STD:
@@ -401,13 +405,14 @@ static int netlbl_cipsov4_add(struct sk_buff *skb, struct genl_info *info)
                break;
        }
 
-       if (ret_val == 0) {
-               doi = nla_get_u32(info->attrs[NLBL_CIPSOV4_A_DOI]);
-               audit_buf = netlbl_audit_start_common(AUDIT_MAC_CIPSOV4_ADD,
-                                                     NETLINK_CB(skb).sid);
-               audit_log_format(audit_buf, " doi=%u type=%s", doi, type_str);
-               audit_log_end(audit_buf);
-       }
+       audit_buf = netlbl_audit_start_common(AUDIT_MAC_CIPSOV4_ADD,
+                                             &audit_info);
+       audit_log_format(audit_buf,
+                        " cipso_doi=%u cipso_type=%s res=%u",
+                        doi,
+                        type_str,
+                        ret_val == 0 ? 1 : 0);
+       audit_log_end(audit_buf);
 
        return ret_val;
 }
@@ -447,7 +452,7 @@ static int netlbl_cipsov4_list(struct sk_buff *skb, struct genl_info *info)
        }
 
 list_start:
-       ans_skb = nlmsg_new(NLMSG_GOODSIZE * nlsze_mult, GFP_KERNEL);
+       ans_skb = nlmsg_new(NLMSG_DEFAULT_SIZE * nlsze_mult, GFP_KERNEL);
        if (ans_skb == NULL) {
                ret_val = -ENOMEM;
                goto list_failure;
@@ -563,7 +568,7 @@ list_start:
 
        genlmsg_end(ans_skb, data);
 
-       ret_val = genlmsg_unicast(ans_skb, info->snd_pid);
+       ret_val = genlmsg_reply(ans_skb, info);
        if (ret_val != 0)
                goto list_failure;
 
@@ -668,20 +673,25 @@ static int netlbl_cipsov4_remove(struct sk_buff *skb, struct genl_info *info)
        int ret_val = -EINVAL;
        u32 doi = 0;
        struct audit_buffer *audit_buf;
+       struct netlbl_audit audit_info;
 
-       if (info->attrs[NLBL_CIPSOV4_A_DOI]) {
-               doi = nla_get_u32(info->attrs[NLBL_CIPSOV4_A_DOI]);
-               ret_val = cipso_v4_doi_remove(doi,
-                                             NETLINK_CB(skb).sid,
-                                             netlbl_cipsov4_doi_free);
-       }
+       if (!info->attrs[NLBL_CIPSOV4_A_DOI])
+               return -EINVAL;
 
-       if (ret_val == 0) {
-               audit_buf = netlbl_audit_start_common(AUDIT_MAC_CIPSOV4_DEL,
-                                                     NETLINK_CB(skb).sid);
-               audit_log_format(audit_buf, " doi=%u", doi);
-               audit_log_end(audit_buf);
-       }
+       doi = nla_get_u32(info->attrs[NLBL_CIPSOV4_A_DOI]);
+       netlbl_netlink_auditinfo(skb, &audit_info);
+
+       ret_val = cipso_v4_doi_remove(doi,
+                                     &audit_info,
+                                     netlbl_cipsov4_doi_free);
+
+       audit_buf = netlbl_audit_start_common(AUDIT_MAC_CIPSOV4_DEL,
+                                             &audit_info);
+       audit_log_format(audit_buf,
+                        " cipso_doi=%u res=%u",
+                        doi,
+                        ret_val == 0 ? 1 : 0);
+       audit_log_end(audit_buf);
 
        return ret_val;
 }