You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
92 lines
2.9 KiB
92 lines
2.9 KiB
From 1136e61a9839ad3b60eb2da4d624413c02545c7d Mon Sep 17 00:00:00 2001 |
|
From: Miroslav Grepl <mgrepl@redhat.com> |
|
Date: Fri, 11 Apr 2014 18:42:27 +0200 |
|
Subject: [PATCH 08/11] Add alias support to seinfo -t |
|
|
|
--- |
|
secmds/seinfo.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ |
|
1 file changed, 48 insertions(+) |
|
|
|
diff --git a/secmds/seinfo.c b/secmds/seinfo.c |
|
index 54b2a6a..1878c49 100644 |
|
--- a/secmds/seinfo.c |
|
+++ b/secmds/seinfo.c |
|
@@ -46,6 +46,7 @@ |
|
#include <string.h> |
|
#include <assert.h> |
|
#include <getopt.h> |
|
+#include <selinux/selinux.h> |
|
|
|
#define COPYRIGHT_INFO "Copyright (C) 2003-2007 Tresys Technology, LLC" |
|
|
|
@@ -54,6 +55,7 @@ |
|
|
|
static char *policy_file = NULL; |
|
|
|
+static void print_type_aliases(FILE * fp, const qpol_type_t * type_datum, const apol_policy_t * policydb); |
|
static int print_type_attrs(FILE * fp, const qpol_type_t * type_datum, const apol_policy_t * policydb, const int expand); |
|
static int print_attr_types(FILE * fp, const qpol_type_t * type_datum, const apol_policy_t * policydb, const int expand); |
|
static int print_user_roles(FILE * fp, const qpol_user_t * user_datum, const apol_policy_t * policydb, const int expand); |
|
@@ -514,6 +516,7 @@ static int print_types(FILE * fp, const char *name, int expand, const apol_polic |
|
goto cleanup; |
|
if (print_type_attrs(fp, type_datum, policydb, expand)) |
|
goto cleanup; |
|
+ print_type_aliases(fp, type_datum, policydb); |
|
} else { |
|
if (qpol_policy_get_type_iter(q, &iter)) |
|
goto cleanup; |
|
@@ -1912,6 +1915,51 @@ int main(int argc, char **argv) |
|
} |
|
|
|
/** |
|
+ * Prints the alias of a type. |
|
+ * |
|
+ * @param fp Reference to a file to which to print type information |
|
+ * @param type_datum Reference to sepol type_datum |
|
+ * @param policydb Reference to a policy |
|
+ * attributes |
|
+ */ |
|
+static void print_type_aliases(FILE * fp, const qpol_type_t * type_datum, const apol_policy_t * policydb) |
|
+{ |
|
+ qpol_iterator_t *iter = NULL; |
|
+ size_t alias_size; |
|
+ unsigned char isattr, isalias; |
|
+ const char *type_name = NULL; |
|
+ const char *alias_name; |
|
+ qpol_policy_t *q = apol_policy_get_qpol(policydb); |
|
+ |
|
+ if (qpol_type_get_name(q, type_datum, &type_name)) |
|
+ goto cleanup; |
|
+ if (qpol_type_get_isattr(q, type_datum, &isattr)) |
|
+ goto cleanup; |
|
+ if (qpol_type_get_isalias(q, type_datum, &isalias)) |
|
+ goto cleanup; |
|
+ |
|
+ if (isalias) { |
|
+ fprintf(fp, " TypeName %s\n", type_name); |
|
+ } |
|
+ if (qpol_type_get_alias_iter(q, type_datum, &iter)) |
|
+ goto cleanup; |
|
+ if (qpol_iterator_get_size(iter, &alias_size)) |
|
+ goto cleanup; |
|
+ if (alias_size > 0) { |
|
+ fprintf(fp, " Aliases\n"); |
|
+ for (; !qpol_iterator_end(iter); qpol_iterator_next(iter)) { |
|
+ if (qpol_iterator_get_item(iter, (void **)&alias_name)) |
|
+ goto cleanup; |
|
+ fprintf(fp, " %s\n", alias_name); |
|
+ } |
|
+ } |
|
+ |
|
+ cleanup: |
|
+ qpol_iterator_destroy(&iter); |
|
+ return; |
|
+} |
|
+ |
|
+/** |
|
* Prints a textual representation of a type, and possibly |
|
* all of that type's attributes. |
|
* |
|
-- |
|
1.8.5.3 |
|
|
|
|