I ran the new version of scan-build and checked the SSSD. There's a big
number of false positives, anything that follows this construct:

struct foostruct *f = NULL;

get_foo_vals(mem_ctxm &f);

process(f->foomember);

Triggers a warning that f->foomember is dereferencing NULL.

That said, clang also uncovered some real bugs. Attached are fixes for
bugs that are obvious, I will follow up with some others with people who
have more knowledge about the code in question.
>From 5b3d7871c57978c79a44a0047f0008e83c2fd8bb Mon Sep 17 00:00:00 2001
From: Jakub Hrozek <[email protected]>
Date: Mon, 10 Dec 2012 03:08:15 +0100
Subject: [PATCH 1/3] PAC: check the return value of diff_git_lists

---
 src/responder/pac/pacsrv_cmd.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/src/responder/pac/pacsrv_cmd.c b/src/responder/pac/pacsrv_cmd.c
index 
6b6a7a9834b1270ddd59f67346425cdb820b89d8..277cf4b120f9fc7ac44bc880743d9fa33d400dc3
 100644
--- a/src/responder/pac/pacsrv_cmd.c
+++ b/src/responder/pac/pacsrv_cmd.c
@@ -245,6 +245,10 @@ static errno_t pac_add_user_next(struct pac_req_ctx 
*pr_ctx)
                          pr_ctx->gid_count, pr_ctx->gids,
                          &pr_ctx->add_gid_count, &pr_ctx->add_gids,
                          &pr_ctx->del_grp_count, &pr_ctx->del_grp_list);
+    if (ret != EOK) {
+        DEBUG(SSSDBG_OP_FAILURE, ("diff_gid_lists failed.\n"));
+        goto done;
+    }
 
     req = pac_save_memberships_send(pr_ctx);
     if (req == NULL) {
-- 
1.8.0.1

>From cfaa9627424a4135a7bb81da70cfe017a15a3d82 Mon Sep 17 00:00:00 2001
From: Jakub Hrozek <[email protected]>
Date: Mon, 10 Dec 2012 03:11:59 +0100
Subject: [PATCH 2/3] SYSDB: Move misplaced assignment

---
 src/db/sysdb_ops.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/src/db/sysdb_ops.c b/src/db/sysdb_ops.c
index 
80a323b12901b40f6df0c4cd0f0b23b4cf2cf2b2..4bbc76c5c39501a4d878a1d41faa81919a23228f
 100644
--- a/src/db/sysdb_ops.c
+++ b/src/db/sysdb_ops.c
@@ -3153,8 +3153,6 @@ errno_t sysdb_remove_attrs(struct sysdb_ctx *sysdb,
         ldb_msg_remove_attr(msg, remove_attrs[i]);
     }
 
-    ret = EOK;
-
     ret = sysdb_transaction_commit(sysdb);
     if (ret != EOK) {
         DEBUG(SSSDBG_CRIT_FAILURE, ("Failed to commit transaction\n"));
@@ -3163,6 +3161,7 @@ errno_t sysdb_remove_attrs(struct sysdb_ctx *sysdb,
 
     in_transaction = false;
 
+    ret = EOK;
 done:
     if (in_transaction) {
         sret = sysdb_transaction_cancel(sysdb);
-- 
1.8.0.1

>From 895c7023f621e654b2a50dbfb550b0c23baf5d7d Mon Sep 17 00:00:00 2001
From: Jakub Hrozek <[email protected]>
Date: Mon, 10 Dec 2012 03:13:39 +0100
Subject: [PATCH 3/3] LDAP: remove dead assignment

---
 src/providers/ldap/sdap_async_initgroups.c | 1 -
 1 file changed, 1 deletion(-)

diff --git a/src/providers/ldap/sdap_async_initgroups.c 
b/src/providers/ldap/sdap_async_initgroups.c
index 
029096dac06a32dc4942a0daeaff6014f7c2af40..66be76e664f5ff94706f7c0631f16c2484868544
 100644
--- a/src/providers/ldap/sdap_async_initgroups.c
+++ b/src/providers/ldap/sdap_async_initgroups.c
@@ -1826,7 +1826,6 @@ save_rfc2307bis_group_memberships(struct 
sdap_initgr_rfc2307bis_state *state)
     }
     in_transaction = true;
 
-    iter_tmp = membership_state->memberships;
     iter_start = membership_state->memberships;
 
     DLIST_FOR_EACH(iter, membership_state->memberships) {
-- 
1.8.0.1

_______________________________________________
sssd-devel mailing list
[email protected]
https://lists.fedorahosted.org/mailman/listinfo/sssd-devel

Reply via email to