Home | History | Annotate | Download | only in sepolicy-analyze
      1 #include <stddef.h>
      2 #include <stdio.h>
      3 #include <string.h>
      4 
      5 #include "dups.h"
      6 #include "neverallow.h"
      7 #include "perm.h"
      8 #include "typecmp.h"
      9 #include "utils.h"
     10 
     11 #define NUM_COMPONENTS (int) (sizeof(analyze_components)/sizeof(analyze_components[0]))
     12 
     13 #define COMP(x) { #x, sizeof(#x) - 1, x ##_usage, x ##_func }
     14 static struct {
     15     const char *key;
     16     size_t keylen;
     17     void (*usage) (void);
     18     int (*func) (int argc, char **argv, policydb_t *policydb);
     19 } analyze_components[] = {
     20     COMP(dups),
     21     COMP(neverallow),
     22     COMP(permissive),
     23     COMP(typecmp)
     24 };
     25 
     26 void usage(char *arg0)
     27 {
     28     int i;
     29 
     30     fprintf(stderr, "%s must be called on a policy file with a component and the appropriate arguments specified\n", arg0);
     31     fprintf(stderr, "%s <policy-file>:\n", arg0);
     32     for(i = 0; i < NUM_COMPONENTS; i++) {
     33         analyze_components[i].usage();
     34     }
     35     exit(1);
     36 }
     37 
     38 int main(int argc, char **argv)
     39 {
     40     char *policy;
     41     struct policy_file pf;
     42     policydb_t policydb;
     43     int rc;
     44     int i;
     45 
     46     if (argc < 3)
     47         usage(argv[0]);
     48     policy = argv[1];
     49     if(load_policy(policy, &policydb, &pf))
     50         exit(1);
     51     for(i = 0; i < NUM_COMPONENTS; i++) {
     52         if (!strcmp(analyze_components[i].key, argv[2])) {
     53             rc = analyze_components[i].func(argc - 2, argv + 2, &policydb);
     54             if (rc && USAGE_ERROR) {
     55                 usage(argv[0]); }
     56             return rc;
     57         }
     58     }
     59     usage(argv[0]);
     60     exit(0);
     61 }
     62