summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJakub Hrozek <jhrozek@redhat.com>2015-04-10 10:55:22 +0200
committerJakub Hrozek <jhrozek@redhat.com>2015-04-15 14:50:42 +0200
commitff2366926633988146a7e5bfe83222d6c3214ec2 (patch)
tree79038a4ab4e6711e9e5a011b7f39efd4b2787427
parentfcb426997111b84514f38c0dfd8d78a5706d6d04 (diff)
downloadsssd-ff2366926633988146a7e5bfe83222d6c3214ec2.tar.gz
sssd-ff2366926633988146a7e5bfe83222d6c3214ec2.tar.xz
sssd-ff2366926633988146a7e5bfe83222d6c3214ec2.zip
selinux: Disconnect before closing the handle
libsemanage documentation says: ~~~~ be sure that a semanage_disconnect() was previously called if the handle was connected. ~~~~ Otherwise we get a memory leak. Reviewed-by: Michal Židek <mzidek@redhat.com> (cherry picked from commit aa00d67b2a8e07c9080e7798defdc6c774c93465) (cherry picked from commit 816d3cc041e276b138057aacb81d1a2bfb25add6)
-rw-r--r--src/util/sss_semanage.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/src/util/sss_semanage.c b/src/util/sss_semanage.c
index b85831c3d..d141de1c6 100644
--- a/src/util/sss_semanage.c
+++ b/src/util/sss_semanage.c
@@ -68,6 +68,13 @@ static void sss_semanage_error_callback(void *varg,
free(message);
}
+static void sss_semanage_close(semanage_handle_t *handle)
+{
+ /* Calling disconnect on a disconnected handle is safe */
+ semanage_disconnect(handle);
+ semanage_handle_destroy(handle);
+}
+
static semanage_handle_t *sss_semanage_init(void)
{
int ret;
@@ -110,7 +117,7 @@ static semanage_handle_t *sss_semanage_init(void)
return handle;
fail:
- semanage_handle_destroy(handle);
+ sss_semanage_close(handle);
return NULL;
}
@@ -278,7 +285,7 @@ int set_seuser(const char *login_name, const char *seuser_name,
ret = EOK;
done:
semanage_seuser_key_free(key);
- semanage_handle_destroy(handle);
+ sss_semanage_close(handle);
return ret;
}
@@ -350,7 +357,7 @@ int del_seuser(const char *login_name)
ret = EOK;
done:
- semanage_handle_destroy(handle);
+ sss_semanage_close(handle);
return ret;
}