summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJakub Hrozek <jhrozek@redhat.com>2010-06-03 18:50:42 +0200
committerStephen Gallagher <sgallagh@redhat.com>2010-06-14 16:54:42 -0400
commitbae7e43b7fe602beba8952ad9d25e059773e8860 (patch)
tree68241831cd337fb2c08ecf676d0c13a953634f91
parentbdf389ab445986e0ab1d66e51d946bda2dc91c43 (diff)
downloadsssd-bae7e43b7fe602beba8952ad9d25e059773e8860.tar.gz
sssd-bae7e43b7fe602beba8952ad9d25e059773e8860.tar.xz
sssd-bae7e43b7fe602beba8952ad9d25e059773e8860.zip
Fix potential resource leak in copy_tree_ctx()
Ticket #515
-rw-r--r--src/tools/files.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/src/tools/files.c b/src/tools/files.c
index 27ebf72db..3d45679d4 100644
--- a/src/tools/files.c
+++ b/src/tools/files.c
@@ -603,8 +603,8 @@ static int copy_tree_ctx(struct copy_ctx *cctx,
uid_t uid,
gid_t gid)
{
- DIR *src_dir;
- int ret;
+ DIR *src_dir = NULL;
+ int ret, err;
struct dirent *result;
struct dirent direntp;
char *src_name, *dst_name;
@@ -651,12 +651,20 @@ static int copy_tree_ctx(struct copy_ctx *cctx,
}
ret = closedir(src_dir);
+ src_dir = NULL;
if (ret != 0) {
ret = errno;
goto fail;
}
+ ret = EOK;
fail:
+ if (src_dir) { /* clean up on abnormal exit but retain return code */
+ err = closedir(src_dir);
+ if (err) {
+ DEBUG(1, ("closedir failed, bad dirp?\n"));
+ }
+ }
talloc_free(tmp_ctx);
return ret;
}