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-14 19:58:21 +0200
commit748b38a7991d78cbf4726f2a14ace5e926629a54 (patch)
treeec143446f9a9d91aa387a5dc3b9b9e50bbfabdbe
parentaa00d67b2a8e07c9080e7798defdc6c774c93465 (diff)
downloadsssd-748b38a7991d78cbf4726f2a14ace5e926629a54.tar.gz
sssd-748b38a7991d78cbf4726f2a14ace5e926629a54.tar.xz
sssd-748b38a7991d78cbf4726f2a14ace5e926629a54.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>
-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");