aboutsummaryrefslogtreecommitdiffstats
path: root/tools/sepolicy-analyze/sepolicy-analyze.c
diff options
context:
space:
mode:
authordcashman <dcashman@google.com>2014-10-20 09:52:55 -0700
committerdcashman <dcashman@google.com>2014-10-31 11:38:32 -0700
commitef4fd30672ebfeac1a0ad04f65deb7b38050b818 (patch)
treed1934cf309a665cff0ec821c011c6c025ada7099 /tools/sepolicy-analyze/sepolicy-analyze.c
parent0ae33a8d1439800439db1c22da0d9a2073fb3a42 (diff)
downloadandroid_external_sepolicy-ef4fd30672ebfeac1a0ad04f65deb7b38050b818.tar.gz
android_external_sepolicy-ef4fd30672ebfeac1a0ad04f65deb7b38050b818.tar.bz2
android_external_sepolicy-ef4fd30672ebfeac1a0ad04f65deb7b38050b818.zip
Accept command-line input for neverallow-check.
Also, divide each sepolicy-analyze function into its own component for simplified command-line parsing and potentially eventual modularization. Bug: 18005561 Change-Id: I45fa07d776cf1bec7d60dba0c03ee05142b86c19
Diffstat (limited to 'tools/sepolicy-analyze/sepolicy-analyze.c')
-rw-r--r--tools/sepolicy-analyze/sepolicy-analyze.c56
1 files changed, 56 insertions, 0 deletions
diff --git a/tools/sepolicy-analyze/sepolicy-analyze.c b/tools/sepolicy-analyze/sepolicy-analyze.c
new file mode 100644
index 0000000..64533d8
--- /dev/null
+++ b/tools/sepolicy-analyze/sepolicy-analyze.c
@@ -0,0 +1,56 @@
+#include <stddef.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "dups.h"
+#include "neverallow.h"
+#include "perm.h"
+#include "typecmp.h"
+#include "utils.h"
+
+#define NUM_COMPONENTS (int) (sizeof(analyze_components)/sizeof(analyze_components[0]))
+
+#define COMP(x) { #x, sizeof(#x) - 1, x ##_usage, x ##_func }
+static struct {
+ const char *key;
+ size_t keylen;
+ void (*usage) (void);
+ int (*func) (int argc, char **argv, policydb_t *policydb);
+} analyze_components[] = {
+ COMP(dups),
+ COMP(neverallow),
+ COMP(permissive),
+ COMP(typecmp)
+};
+
+void usage(char *arg0)
+{
+ fprintf(stderr, "%s must be called on a policy file with a component and the appropriate arguments specified\n", arg0);
+ fprintf(stderr, "%s <policy-file>:\n", arg0);
+ for(int i = 0; i < NUM_COMPONENTS; i++) {
+ analyze_components[i].usage();
+ }
+ exit(1);
+}
+
+int main(int argc, char **argv)
+{
+ char *policy;
+ struct policy_file pf;
+ policydb_t policydb;
+ int rc;
+ if (argc < 3)
+ usage(argv[0]);
+ policy = argv[1];
+ if(load_policy(policy, &policydb, &pf))
+ exit(1);
+ for(int i = 0; i < NUM_COMPONENTS; i++) {
+ if (!strcmp(analyze_components[i].key, argv[2])) {
+ rc = analyze_components[i].func(argc - 2, argv + 2, &policydb);
+ if (rc && USAGE_ERROR) {
+ usage(argv[0]); }
+ return rc;
+ }
+ }
+ usage(argv[0]);
+}