[PATCH 06/13] libsemanage: add default priority to semanage_handle_t

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



For backwards compatiblity purposes we need to provide a default
priority that the current set of module install/upgrade/remove functions
can use.

The default priority is 400.

Adds semanage_module_validate_priority so that it can be used to verify
the given priority. See next patch for other validation functions.
---
 libsemanage/src/handle.c  |   23 +++++++++++++++++++++++
 libsemanage/src/handle.h  |    3 +++
 libsemanage/src/modules.c |   17 +++++++++++++++++
 libsemanage/src/modules.h |    4 ++++
 4 files changed, 47 insertions(+), 0 deletions(-)

diff --git a/libsemanage/src/handle.c b/libsemanage/src/handle.c
index 76caefd..8300cae 100644
--- a/libsemanage/src/handle.c
+++ b/libsemanage/src/handle.c
@@ -59,6 +59,9 @@ semanage_handle_t *semanage_handle_create(void)
 		goto err;
 	sepol_msg_set_callback(sh->sepolh, semanage_msg_relay_handler, sh);
 
+	/* Default priority is 400 */
+	sh->priority = 400;
+
 	/* By default do not rebuild the policy on commit
 	 * If any changes are made, this flag is ignored */
 	sh->do_rebuild = 0;
@@ -137,6 +140,26 @@ void semanage_set_check_contexts(semanage_handle_t * sh, int do_check_contexts)
 	return;
 }
 
+uint16_t semanage_get_default_priority(semanage_handle_t *sh)
+{
+	assert(sh != NULL);
+	return sh->priority;
+}
+
+int semanage_set_default_priority(semanage_handle_t *sh, uint16_t priority)
+{
+	assert(sh != NULL);
+
+	/* Verify priority */
+	if (semanage_module_validate_priority(priority) < 0) {
+		ERR(sh, "Priority %d is invalid.", priority);
+		return -1;
+	}
+
+	sh->priority = priority;
+	return 0;
+}
+
 int semanage_is_connected(semanage_handle_t * sh)
 {
 	assert(sh != NULL);
diff --git a/libsemanage/src/handle.h b/libsemanage/src/handle.h
index 723d811..64175c4 100644
--- a/libsemanage/src/handle.h
+++ b/libsemanage/src/handle.h
@@ -23,6 +23,7 @@
 #ifndef _SEMANAGE_INTERNAL_HANDLE_H_
 #define _SEMANAGE_INTERNAL_HANDLE_H_
 
+#include <stdint.h>
 #include <stddef.h>
 #include "handle_internal.h"
 #include <sepol/handle.h>
@@ -55,6 +56,8 @@ struct semanage_handle {
 	sepol_handle_t *sepolh;
 
 	semanage_conf_t *conf;
+
+	uint16_t priority;
 	int is_connected;
 	int is_in_transaction;
 	int do_reload;		/* whether to reload policy after commit */
diff --git a/libsemanage/src/modules.c b/libsemanage/src/modules.c
index d99ee5b..c7ae301 100644
--- a/libsemanage/src/modules.c
+++ b/libsemanage/src/modules.c
@@ -215,3 +215,20 @@ const char *semanage_module_get_version(semanage_module_info_t * modinfo)
 }
 
 hidden_def(semanage_module_get_version)
+
+#define PRIORITY_MIN 1
+#define PRIORITY_MAX 999
+
+/* Validates priority.
+ *
+ * returns -1 if priority is not in the valid range, returns 0 otherwise
+ */
+int semanage_module_validate_priority(uint16_t priority)
+{
+	if (priority >= PRIORITY_MIN && priority <= PRIORITY_MAX) {
+		return 0;
+	}
+
+	return -1;
+}
+
diff --git a/libsemanage/src/modules.h b/libsemanage/src/modules.h
index 381b108..cac567b 100644
--- a/libsemanage/src/modules.h
+++ b/libsemanage/src/modules.h
@@ -21,6 +21,8 @@
 #ifndef _SEMANAGE_INTERNAL_MODULES_H_
 #define _SEMANAGE_INTERNAL_MODULES_H_
 
+#include <stdint.h>
+
 #include "module_internal.h"
 
 struct semanage_module_info {
@@ -28,4 +30,6 @@ struct semanage_module_info {
 	char *version;
 };
 
+int semanage_module_validate_priority(uint16_t priority);
+
 #endif
-- 
1.6.0.4


--
This message was distributed to subscribers of the selinux mailing list.
If you no longer wish to subscribe, send mail to majordomo@xxxxxxxxxxxxx with
the words "unsubscribe selinux" without quotes as the message.

[Index of Archives]     [Selinux Refpolicy]     [Linux SGX]     [Fedora Users]     [Fedora Desktop]     [Yosemite Photos]     [Yosemite Camping]     [Yosemite Campsites]     [KDE Users]     [Gnome Users]

  Powered by Linux