Blame SOURCES/0009-Fix-help-message-on-sesearch-D.patch

4ea9f2
From bbe9f57845101d07eef31a772946437b3245c7d5 Mon Sep 17 00:00:00 2001
4ea9f2
From: Miroslav Grepl <mgrepl@redhat.com>
4ea9f2
Date: Fri, 11 Apr 2014 18:46:24 +0200
4ea9f2
Subject: [PATCH 09/11] Fix help message on sesearch -D
4ea9f2
4ea9f2
---
4ea9f2
 man/sesearch.1    |  2 +-
4ea9f2
 secmds/sesearch.c | 77 +++++++++++++++++--------------------------------------
4ea9f2
 2 files changed, 25 insertions(+), 54 deletions(-)
4ea9f2
4ea9f2
diff --git a/man/sesearch.1 b/man/sesearch.1
4ea9f2
index 573aedd..dc119eb 100644
4ea9f2
--- a/man/sesearch.1
4ea9f2
+++ b/man/sesearch.1
4ea9f2
@@ -43,7 +43,7 @@ Search for allow rules.
4ea9f2
 Search for neverallow rules.
4ea9f2
 .IP "--auditallow"
4ea9f2
 Search for auditallow rules.
4ea9f2
-.IP "--dontaudit"
4ea9f2
+.IP "-D, --dontaudit"
4ea9f2
 Search for dontaudit rules.
4ea9f2
 .IP "-T, --type"
4ea9f2
 Search for type_transition, type_member, and type_change rules.
4ea9f2
diff --git a/secmds/sesearch.c b/secmds/sesearch.c
4ea9f2
index e1436a7..f53d670 100644
4ea9f2
--- a/secmds/sesearch.c
4ea9f2
+++ b/secmds/sesearch.c
4ea9f2
@@ -24,6 +24,7 @@
4ea9f2
  */
4ea9f2
 
4ea9f2
 #include <config.h>
4ea9f2
+#include <selinux/selinux.h>
4ea9f2
 
4ea9f2
 /* libapol */
4ea9f2
 #include <apol/policy.h>
4ea9f2
@@ -61,9 +62,8 @@ enum opt_values
4ea9f2
 static struct option const longopts[] = {
4ea9f2
 	{"allow", no_argument, NULL, 'A'},
4ea9f2
 	{"neverallow", no_argument, NULL, RULE_NEVERALLOW},
4ea9f2
-	{"audit", no_argument, NULL, RULE_AUDIT},
4ea9f2
 	{"auditallow", no_argument, NULL, RULE_AUDITALLOW},
4ea9f2
-	{"dontaudit", no_argument, NULL, RULE_DONTAUDIT},
4ea9f2
+	{"dontaudit", no_argument, NULL, 'D'},
4ea9f2
 	{"type", no_argument, NULL, 'T'},
4ea9f2
 	{"role_allow", no_argument, NULL, RULE_ROLE_ALLOW},
4ea9f2
 	{"role_trans", no_argument, NULL, RULE_ROLE_TRANS},
4ea9f2
@@ -72,7 +72,6 @@ static struct option const longopts[] = {
4ea9f2
 
4ea9f2
 	{"source", required_argument, NULL, 's'},
4ea9f2
 	{"target", required_argument, NULL, 't'},
4ea9f2
-	{"default", required_argument, NULL, 'D'},
4ea9f2
 	{"role_source", required_argument, NULL, EXPR_ROLE_SOURCE},
4ea9f2
 	{"role_target", required_argument, NULL, EXPR_ROLE_TARGET},
4ea9f2
 	{"class", required_argument, NULL, 'c'},
4ea9f2
@@ -129,7 +128,7 @@ void usage(const char *program_name, int brief)
4ea9f2
 	printf("  -A, --allow               allow rules\n");
4ea9f2
 	printf("  --neverallow              neverallow rules\n");
4ea9f2
 	printf("  --auditallow              auditallow rules\n");
4ea9f2
-	printf("  --dontaudit               dontaudit rules\n");
4ea9f2
+	printf("  -D, --dontaudit           dontaudit rules\n");
4ea9f2
 	printf("  -T, --type                type_trans, type_member, and type_change\n");
4ea9f2
 	printf("  --role_allow              role allow rules\n");
4ea9f2
 	printf("  --role_trans              role_transition rules\n");
4ea9f2
@@ -138,7 +137,6 @@ void usage(const char *program_name, int brief)
4ea9f2
 	printf("EXPRESSIONS:\n");
4ea9f2
 	printf("  -s NAME, --source=NAME    rules with type/attribute NAME as source\n");
4ea9f2
 	printf("  -t NAME, --target=NAME    rules with type/attribute NAME as target\n");
4ea9f2
-	printf("  -D NAME, --default=NAME   rules with type NAME as default\n");
4ea9f2
 	printf("  --role_source=NAME        rules with role NAME as source\n");
4ea9f2
 	printf("  --role_target=NAME        rules with role NAME as target\n");
4ea9f2
 	printf("  -c NAME, --class=NAME     rules with class NAME as the object class\n");
4ea9f2
@@ -296,10 +294,8 @@ static void print_syn_av_results(const apol_policy_t * policy, const options_t *
4ea9f2
 				tmp = apol_cond_expr_render(policy, cond);
4ea9f2
 				enable_char = (enabled ? 'E' : 'D');
4ea9f2
 				branch_char = ((is_true && enabled) || (!is_true && !enabled) ? 'T' : 'F');
4ea9f2
-				if (asprintf(&expr, "[ %s ]", tmp) < 0) {
4ea9f2
-					expr = NULL;
4ea9f2
+				if (asprintf(&expr, "[ %s ]", tmp) < 0)
4ea9f2
 					goto cleanup;
4ea9f2
-				}
4ea9f2
 				free(tmp);
4ea9f2
 				tmp = NULL;
4ea9f2
 				if (!expr)
4ea9f2
@@ -362,10 +358,8 @@ static void print_av_results(const apol_policy_t * policy, const options_t * opt
4ea9f2
 				qpol_iterator_destroy(&iter);
4ea9f2
 				enable_char = (enabled ? 'E' : 'D');
4ea9f2
 				branch_char = (list ? 'T' : 'F');
4ea9f2
-				if (asprintf(&expr, "[ %s ]", tmp) < 0) {
4ea9f2
-					expr = NULL;
4ea9f2
+				if (asprintf(&expr, "[ %s ]", tmp) < 0)
4ea9f2
 					goto cleanup;
4ea9f2
-				}
4ea9f2
 				free(tmp);
4ea9f2
 				tmp = NULL;
4ea9f2
 				if (!expr)
4ea9f2
@@ -421,8 +415,6 @@ static int perform_te_query(const apol_policy_t * policy, const options_t * opt,
4ea9f2
 		apol_terule_query_set_target(policy, teq, opt->tgt_name, opt->indirect);
4ea9f2
 	if (opt->bool_name)
4ea9f2
 		apol_terule_query_set_bool(policy, teq, opt->bool_name);
4ea9f2
-	if (opt->default_name)
4ea9f2
-		apol_terule_query_set_default(policy, teq, opt->default_name);
4ea9f2
 	if (opt->class_name) {
4ea9f2
 		if (opt->class_vector == NULL) {
4ea9f2
 			if (apol_terule_query_append_class(policy, teq, opt->class_name)) {
4ea9f2
@@ -499,14 +491,12 @@ static void print_syn_te_results(const apol_policy_t * policy, const options_t *
4ea9f2
 				tmp = apol_cond_expr_render(policy, cond);
4ea9f2
 				enable_char = (enabled ? 'E' : 'D');
4ea9f2
 				branch_char = ((is_true && enabled) || (!is_true && !enabled) ? 'T' : 'F');
4ea9f2
-				if (asprintf(&expr, "[ %s ]", tmp) < 0) {
4ea9f2
-					expr = NULL;
4ea9f2
+				if (asprintf(&expr, "[ %s ]", tmp) < 0)
4ea9f2
 					goto cleanup;
4ea9f2
-				}
4ea9f2
 				free(tmp);
4ea9f2
 				tmp = NULL;
4ea9f2
 				if (!expr)
4ea9f2
-					goto cleanup;
4ea9f2
+					break;
4ea9f2
 			}
4ea9f2
 		}
4ea9f2
 		if (!(rule_str = apol_syn_terule_render(policy, rule)))
4ea9f2
@@ -567,10 +557,8 @@ static void print_te_results(const apol_policy_t * policy, const options_t * opt
4ea9f2
 				qpol_iterator_destroy(&iter);
4ea9f2
 				enable_char = (enabled ? 'E' : 'D');
4ea9f2
 				branch_char = (list ? 'T' : 'F');
4ea9f2
-				if (asprintf(&expr, "[ %s ]", tmp) < 0) {
4ea9f2
-					expr = NULL;
4ea9f2
+				if (asprintf(&expr, "[ %s ]", tmp) < 0)
4ea9f2
 					goto cleanup;
4ea9f2
-				}
4ea9f2
 				free(tmp);
4ea9f2
 				tmp = NULL;
4ea9f2
 				if (!expr)
4ea9f2
@@ -629,7 +617,6 @@ static int perform_ft_query(const apol_policy_t * policy, const options_t * opt,
4ea9f2
 			goto err;
4ea9f2
 		}
4ea9f2
 	}
4ea9f2
-
4ea9f2
 	if (opt->default_name) {
4ea9f2
 		if (apol_filename_trans_query_set_default(policy, ftq, opt->default_name)) {
4ea9f2
 			error = errno;
4ea9f2
@@ -677,13 +664,12 @@ static void print_ft_results(const apol_policy_t * policy, const options_t * opt
4ea9f2
 {
4ea9f2
 	size_t i, num_filename_trans = 0;
4ea9f2
 	const qpol_filename_trans_t *filename_trans = NULL;
4ea9f2
-	char *filename_trans_str = NULL;
4ea9f2
-	qpol_iterator_t *iter = NULL;
4ea9f2
+	char *tmp = NULL, *filename_trans_str = NULL, *expr = NULL;
4ea9f2
 
4ea9f2
 	if (!(num_filename_trans = apol_vector_get_size(v)))
4ea9f2
 		goto cleanup;
4ea9f2
 
4ea9f2
-	fprintf(stdout, "Found %zd named file transition rules:\n", num_filename_trans);
4ea9f2
+	fprintf(stdout, "Found %zd named file transition filename_trans:\n", num_filename_trans);
4ea9f2
 
4ea9f2
 	for (i = 0; i < num_filename_trans; i++) {
4ea9f2
 		if (!(filename_trans = apol_vector_get_element(v, i)))
4ea9f2
@@ -691,13 +677,17 @@ static void print_ft_results(const apol_policy_t * policy, const options_t * opt
4ea9f2
 
4ea9f2
 		if (!(filename_trans_str = apol_filename_trans_render(policy, filename_trans)))
4ea9f2
 			goto cleanup;
4ea9f2
-		fprintf(stdout, "%s\n", filename_trans_str);
4ea9f2
+		fprintf(stdout, "%s %s\n", filename_trans_str, expr ? expr : "");
4ea9f2
 		free(filename_trans_str);
4ea9f2
 		filename_trans_str = NULL;
4ea9f2
+		free(expr);
4ea9f2
+		expr = NULL;
4ea9f2
 	}
4ea9f2
 
4ea9f2
       cleanup:
4ea9f2
+	free(tmp);
4ea9f2
 	free(filename_trans_str);
4ea9f2
+	free(expr);
4ea9f2
 }
4ea9f2
 
4ea9f2
 static int perform_ra_query(const apol_policy_t * policy, const options_t * opt, apol_vector_t ** v)
4ea9f2
@@ -814,13 +804,6 @@ static int perform_rt_query(const apol_policy_t * policy, const options_t * opt,
4ea9f2
 		}
4ea9f2
 	}
4ea9f2
 
4ea9f2
-	if (opt->default_name) {
4ea9f2
-		if (apol_role_trans_query_set_default(policy, rtq, opt->default_name)) {
4ea9f2
-			error = errno;
4ea9f2
-			goto err;
4ea9f2
-		}
4ea9f2
-	}
4ea9f2
-
4ea9f2
 	if (apol_role_trans_get_by_query(policy, rtq, v)) {
4ea9f2
 		error = errno;
4ea9f2
 		goto err;
4ea9f2
@@ -973,7 +956,7 @@ int main(int argc, char **argv)
4ea9f2
 
4ea9f2
 	memset(&cmd_opts, 0, sizeof(cmd_opts));
4ea9f2
 	cmd_opts.indirect = true;
4ea9f2
-	while ((optc = getopt_long(argc, argv, "ATs:t:c:p:b:dD:RnSChV", longopts, NULL)) != -1) {
4ea9f2
+	while ((optc = getopt_long(argc, argv, "ATs:t:c:p:b:dDRnSChV", longopts, NULL)) != -1) {
4ea9f2
 		switch (optc) {
4ea9f2
 		case 0:
4ea9f2
 			break;
4ea9f2
@@ -1001,18 +984,6 @@ int main(int argc, char **argv)
4ea9f2
 				exit(1);
4ea9f2
 			}
4ea9f2
 			break;
4ea9f2
-		case 'D':	       /* default */
4ea9f2
-			if (optarg == 0) {
4ea9f2
-				usage(argv[0], 1);
4ea9f2
-				printf("Missing default type for -D (--default)\n");
4ea9f2
-				exit(1);
4ea9f2
-			}
4ea9f2
-			cmd_opts.default_name = strdup(optarg);
4ea9f2
-			if (!cmd_opts.default_name) {
4ea9f2
-		
4ea9f2
-				exit(1);
4ea9f2
-			}
4ea9f2
-			break;
4ea9f2
 		case EXPR_ROLE_SOURCE:
4ea9f2
 			if (optarg == 0) {
4ea9f2
 				usage(argv[0], 1);
4ea9f2
@@ -1093,7 +1064,7 @@ int main(int argc, char **argv)
4ea9f2
 		case RULE_AUDITALLOW:
4ea9f2
 			cmd_opts.auditallow = true;
4ea9f2
 			break;
4ea9f2
-		case RULE_DONTAUDIT:
4ea9f2
+		case 'D':
4ea9f2
 			cmd_opts.dontaudit = true;
4ea9f2
 			break;
4ea9f2
 		case 'T':	       /* type */
4ea9f2
@@ -1273,12 +1244,13 @@ int main(int argc, char **argv)
4ea9f2
 		fprintf(stdout, "\n");
4ea9f2
 	}
4ea9f2
 
4ea9f2
-	apol_vector_destroy(&v);
4ea9f2
-	if (perform_ft_query(policy, &cmd_opts, &v)) {
4ea9f2
-		rt = 1;
4ea9f2
-		goto cleanup;
4ea9f2
-	}
4ea9f2
-	if (v) {
4ea9f2
+	if (cmd_opts.all || cmd_opts.type) {
4ea9f2
+		apol_vector_destroy(&v);
4ea9f2
+		if (perform_ft_query(policy, &cmd_opts, &v)) {
4ea9f2
+			rt = 1;
4ea9f2
+			goto cleanup;
4ea9f2
+		}
4ea9f2
+
4ea9f2
 		print_ft_results(policy, &cmd_opts, v);
4ea9f2
 		fprintf(stdout, "\n");
4ea9f2
 	}
4ea9f2
@@ -1317,7 +1289,6 @@ int main(int argc, char **argv)
4ea9f2
 	apol_policy_path_destroy(&pol_path);
4ea9f2
 	free(cmd_opts.src_name);
4ea9f2
 	free(cmd_opts.tgt_name);
4ea9f2
-	free(cmd_opts.default_name);
4ea9f2
 	free(cmd_opts.class_name);
4ea9f2
 	free(cmd_opts.permlist);
4ea9f2
 	free(cmd_opts.bool_name);
4ea9f2
-- 
4ea9f2
1.8.5.3
4ea9f2