diff options
author | Jakub Hrozek <jhrozek@redhat.com> | 2015-04-10 10:55:22 +0200 |
---|---|---|
committer | Jakub Hrozek <jhrozek@redhat.com> | 2015-04-15 14:50:42 +0200 |
commit | ff2366926633988146a7e5bfe83222d6c3214ec2 (patch) | |
tree | 79038a4ab4e6711e9e5a011b7f39efd4b2787427 | |
parent | fcb426997111b84514f38c0dfd8d78a5706d6d04 (diff) | |
download | sssd-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.c | 13 |
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; } |