[apparmor] aa-enabled

John Johansen john.johansen at canonical.com
Wed Nov 25 05:44:05 UTC 2015


On 11/24/2015 08:55 PM, Seth Arnold wrote:
> On Tue, Nov 24, 2015 at 04:14:27PM -0800, John Johansen wrote:
>> and along those lines, here is a v2
> 
> Woo, this is great.
> 
> main() is missing this bit of code (which I stole from apparmor_parser's
> parser_main.c):
> 
>         setlocale(LC_MESSAGES, "");
>         bindtextdomain(PACKAGE, LOCALEDIR);
>         textdomain(PACKAGE);
> 

oops, yep

>>
>>
>> #include <errno.h>
>> #include <stdio.h>
>> #include <stdlib.h>
>> #include <string.h>
>> #include <libintl.h>
>> #define _(s) gettext(s)
>>
>> #include <sys/apparmor.h>
>> void print_help(const char *command)
>> {
>> 	printf(_("%s: [options]\n"
>> 		 "  options:\n"
>> 		 "  -q | --quiet		don't print out any messages\n"
>> 		 "  -h | --help		print help\n"),
>> 	       command);
> 
> Do these line up in the output? email always makes it hard to tell when
> whitespace works out well or not.
> 
they did in testing, but I should probably move to spaces instead of tabs to make sure it works on everyones terminal

>> 	exit(1);
>> }
>>
>> int main(int argc, char **argv)
>> {
>> 	int quiet = 0;
>> 	
>> 	if (argc > 2) {
>> 		printf(_("unknown options\n"));
>> 		print_help(argv[0]);
>> 		return 1;
> 
> print_help() doesn't return, you can remove the return 1; here.
> 
yep

>> 	} else if (argc == 2) {
>> 		if (strcmp(argv[1], "--quiet") == 0 ||
>> 		    strcmp(argv[1], "-q") == 0) {
>> 			quiet = 1;
>> 		} else if (strcmp(argv[1], "--help") == 0 ||
>> 			   strcmp(argv[1], "-h") == 0) {
>> 			print_help(argv[0]);
>> 		} else {
>> 			printf(_("unknown option '%s'\n"), argv[1]);
>> 			print_help(argv[0]);
>> 		}
>> 	}
>>
>> 	if (aa_is_enabled()) {
>> 		if (!quiet)
>> 			printf(_("Yes\n"));
>> 		return 0;
>> 	}
>>
>> 	if (!quiet) {
>> 		switch(errno) {
>> 		case ENOSYS:
>> 			printf(_("No - not available on this system.\n"));
>> 			break;
>> 		case ECANCELED:
>> 			printf(_("No - disabled at boot.\n"));
>> 			break;
>> 		case ENOENT:
>> 			printf(_("Maybe - policy interface not available.\n"));
>> 			break;
>> 		case EPERM:
>> 		case EACCES:
>> 			printf(_("Maybe - insufficient permissions to determine availability.\n"));
>> 			break;
>> 		default:
>> 			printf(_("No\n"));
>> 		}
>> 	}
>>
>> 	return errno;
> 
> I think we ought to save aside the errno before the printf() calls; if
> something called by printf() fails, or if printf() itself fails, the
> return value here may not be the one we intend to return.
> 
yeah, thanks




More information about the AppArmor mailing list