[PATCH] libselinux/utils: update getdefaultcon

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

 



* mention -r <role> and -v command line options in usage string
* use distinct error messages on getseuser(3) and
  get_default_context_with_[role]level(3) failure
* always print program name on error
* drop unnecessary double parenthesis

Signed-off-by: Christian Göttsche <cgzones@xxxxxxxxxxxxxx>
---
 libselinux/utils/getdefaultcon.c | 40 ++++++++++++++++++--------------
 1 file changed, 23 insertions(+), 17 deletions(-)

diff --git a/libselinux/utils/getdefaultcon.c b/libselinux/utils/getdefaultcon.c
index 93102e5e..50f1ea91 100644
--- a/libselinux/utils/getdefaultcon.c
+++ b/libselinux/utils/getdefaultcon.c
@@ -11,7 +11,7 @@
 
 static __attribute__ ((__noreturn__)) void usage(const char *name, const char *detail, int rc)
 {
-	fprintf(stderr, "usage:  %s [-l level] [-s service] user [fromcon]\n", name);
+	fprintf(stderr, "usage:  %s [-r role] [-l level] [-s service] [-v] user [fromcon]\n", name);
 	if (detail)
 		fprintf(stderr, "%s:  %s\n", name, detail);
 	exit(rc);
@@ -60,9 +60,9 @@ int main(int argc, char **argv)
 	user = argv[optind];
 
 	/* If a context wasn't passed, use the current context. */
-	if (((argc - optind) < 2)) {
+	if ((argc - optind) < 2) {
 		if (getcon(&cur_context) < 0) {
-			fprintf(stderr, "Couldn't get current context:  %s\n", strerror(errno));
+			fprintf(stderr, "%s:  couldn't get current context:  %s\n", argv[0], strerror(errno));
 			return 2;
 		}
 	} else
@@ -73,23 +73,29 @@ int main(int argc, char **argv)
 		return 3;
 	}
 
-	if ((ret = getseuser(user, service, &seuser, &dlevel)) == 0) {
-		if (! level) level=dlevel;
-		if (role != NULL && role[0]) 
-			ret=get_default_context_with_rolelevel(seuser, role, level,cur_context,&usercon);
-		else
-			ret=get_default_context_with_level(seuser, level, cur_context,&usercon);
+	ret = getseuser(user, service, &seuser, &dlevel);
+	if (ret) {
+		fprintf(stderr, "%s:  failed to get seuser:  %s\n", argv[0], strerror(errno));
+		goto out;
 	}
-	if (ret < 0)
-		perror(argv[0]);
-	else {
-		if (verbose) {
-			printf("%s: %s from %s %s %s %s -> %s\n", argv[0], user, cur_context, seuser, role, level, usercon);
-		} else {
-			printf("%s\n", usercon);
-		}
+
+	if (! level) level=dlevel;
+	if (role != NULL && role[0])
+		ret = get_default_context_with_rolelevel(seuser, role, level, cur_context, &usercon);
+	else
+		ret = get_default_context_with_level(seuser, level, cur_context, &usercon);
+	if (ret) {
+		fprintf(stderr, "%s:  failed to get default context:  %s\n", argv[0], strerror(errno));
+		goto out;
+	}
+
+	if (verbose) {
+		printf("%s: %s from %s %s %s %s -> %s\n", argv[0], user, cur_context, seuser, role, level, usercon);
+	} else {
+		printf("%s\n", usercon);
 	}
 
+out:
 	free(role);
 	free(seuser);
 	if (level != dlevel) free(level);
-- 
2.42.0




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

  Powered by Linux