summaryrefslogtreecommitdiffstats
path: root/src/responder/nss/nsssrv_cmd.c
diff options
context:
space:
mode:
authorSimo Sorce <simo@redhat.com>2012-12-19 08:48:06 -0500
committerJakub Hrozek <jhrozek@redhat.com>2012-12-19 18:39:52 +0100
commit1f15b746e77f54ad82e1cb5c74f29d327b851c5a (patch)
tree57d144ec13742fae09739564730b9392ca621179 /src/responder/nss/nsssrv_cmd.c
parentaed6196263ebddb6f8ffb12eace11539f5941662 (diff)
downloadsssd-1f15b746e77f54ad82e1cb5c74f29d327b851c5a.tar.gz
sssd-1f15b746e77f54ad82e1cb5c74f29d327b851c5a.tar.xz
sssd-1f15b746e77f54ad82e1cb5c74f29d327b851c5a.zip
sssd_nss: Plug memory leaks
A recent patch introduced a glaring memory leak in the routines that clean up memcache memory on initgroups calls.
Diffstat (limited to 'src/responder/nss/nsssrv_cmd.c')
-rw-r--r--src/responder/nss/nsssrv_cmd.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/src/responder/nss/nsssrv_cmd.c b/src/responder/nss/nsssrv_cmd.c
index c30e21ee2..27cbedcbe 100644
--- a/src/responder/nss/nsssrv_cmd.c
+++ b/src/responder/nss/nsssrv_cmd.c
@@ -154,6 +154,8 @@ void nss_update_pw_memcache(struct nss_ctx *nctx)
ret, strerror(ret)));
}
}
+
+ talloc_zfree(res);
}
}
@@ -1855,6 +1857,7 @@ void nss_update_gr_memcache(struct nss_ctx *nctx)
ret, strerror(ret)));
}
}
+ talloc_zfree(res);
}
}
@@ -3373,6 +3376,7 @@ void nss_update_initgr_memcache(struct nss_ctx *nctx,
const char *name, const char *domain,
int gnum, uint32_t *groups)
{
+ TALLOC_CTX *tmp_ctx = NULL;
struct sss_domain_info *dom;
struct ldb_result *res;
bool changed = false;
@@ -3398,12 +3402,14 @@ void nss_update_initgr_memcache(struct nss_ctx *nctx,
return;
}
- ret = sysdb_initgroups(NULL, dom->sysdb, name, &res);
+ tmp_ctx = talloc_new(NULL);
+
+ ret = sysdb_initgroups(tmp_ctx, dom->sysdb, name, &res);
if (ret != EOK && ret != ENOENT) {
DEBUG(SSSDBG_CRIT_FAILURE,
("Failed to make request to our cache! [%d][%s]\n",
ret, strerror(ret)));
- return;
+ goto done;
}
/* copy, we need the original intact in case we need to invalidate
@@ -3458,6 +3464,9 @@ void nss_update_initgr_memcache(struct nss_ctx *nctx,
}
}
}
+
+done:
+ talloc_free(tmp_ctx);
}
/* FIXME: what about mpg, should we return the user's GID ? */