summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJakub Hrozek <jhrozek@redhat.com>2015-04-10 11:06:44 +0200
committerJakub Hrozek <jhrozek@redhat.com>2015-04-15 14:50:46 +0200
commit99581f84e4ba29c6395617a903376ad045174b8e (patch)
tree41f3663bf0c17f20e470117e21296faed7d496f1
parentff2366926633988146a7e5bfe83222d6c3214ec2 (diff)
downloadsssd-99581f84e4ba29c6395617a903376ad045174b8e.tar.gz
sssd-99581f84e4ba29c6395617a903376ad045174b8e.tar.xz
sssd-99581f84e4ba29c6395617a903376ad045174b8e.zip
selinux: Begin and end the transaction on the same nesting level
Transaction should be started and commited on the same code nesting or abstraction level. Also, transactions are really costly with libselinux and splitting them from initialization will make init function reusable by read-only libsemanage functions. Reviewed-by: Michal Židek <mzidek@redhat.com> (cherry picked from commit 748b38a7991d78cbf4726f2a14ace5e926629a54) (cherry picked from commit 9c695e3a82fe5903b36b2d514b3284efeadc908c)
-rw-r--r--src/util/sss_semanage.c20
1 files changed, 14 insertions, 6 deletions
diff --git a/src/util/sss_semanage.c b/src/util/sss_semanage.c
index d141de1c6..c0342498c 100644
--- a/src/util/sss_semanage.c
+++ b/src/util/sss_semanage.c
@@ -109,12 +109,6 @@ static semanage_handle_t *sss_semanage_init(void)
goto fail;
}
- ret = semanage_begin_transaction(handle);
- if (ret != 0) {
- DEBUG(SSSDBG_CRIT_FAILURE, "Cannot begin SELinux transaction\n");
- goto fail;
- }
-
return handle;
fail:
sss_semanage_close(handle);
@@ -243,6 +237,13 @@ int set_seuser(const char *login_name, const char *seuser_name,
goto done;
}
+ ret = semanage_begin_transaction(handle);
+ if (ret != 0) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Cannot begin SELinux transaction\n");
+ ret = EIO;
+ goto done;
+ }
+
ret = semanage_seuser_key_create(handle, login_name, &key);
if (ret != 0) {
DEBUG(SSSDBG_CRIT_FAILURE, "Cannot create SELinux user key\n");
@@ -303,6 +304,13 @@ int del_seuser(const char *login_name)
goto done;
}
+ ret = semanage_begin_transaction(handle);
+ if (ret != 0) {
+ DEBUG(SSSDBG_CRIT_FAILURE, "Cannot begin SELinux transaction\n");
+ ret = EIO;
+ goto done;
+ }
+
ret = semanage_seuser_key_create(handle, login_name, &key);
if (ret != 0) {
DEBUG(SSSDBG_CRIT_FAILURE, "Cannot create SELinux user key\n");