asn1: Add -q option to asn1_print
This commit is contained in:
		| @@ -40,27 +40,13 @@ | ||||
| .Sh SYNOPSIS | ||||
| .Nm | ||||
| .Bk -words | ||||
| .Oo Fl i \*(Ba Xo | ||||
| .Fl Fl no-indent | ||||
| .Xc | ||||
| .Oc | ||||
| .Oo Fl I \*(Ba Xo | ||||
| .Fl Fl inner | ||||
| .Xc | ||||
| .Oc | ||||
| .Oo Fl l \*(Ba Xo | ||||
| .Fl Fl list-types | ||||
| .Xc | ||||
| .Oc | ||||
| .Oo Fl A \*(Ba Xo | ||||
| .Fl Fl try-all-types | ||||
| .Xc | ||||
| .Oc | ||||
| .Oo Fl S \*(Ba Xo | ||||
| .Fl Fl raw-sequence | ||||
| .Xc | ||||
| .Oc | ||||
| .Oo Fl i \*(Ba Xo Fl Fl no-indent Xc Oc | ||||
| .Oo Fl I \*(Ba Xo Fl Fl inner Xc Oc | ||||
| .Oo Fl l \*(Ba Xo Fl Fl list-types Xc Oc | ||||
| .Oo Fl A \*(Ba Xo Fl Fl try-all-types Xc Oc | ||||
| .Oo Fl S \*(Ba Xo Fl Fl raw-sequence Xc Oc | ||||
| .Oo Fl n \*(Ba Xo Fl Fl no-print Xc Oc | ||||
| .Oo Fl q \*(Ba Xo Fl Fl quiet Xc Oc | ||||
| .Oo Xo Fl Fl test-encode Xc Oc | ||||
| .Oo Xo Fl Fl test-copy Xc Oc | ||||
| .Oo Fl l v \*(Ba Xo | ||||
| @@ -126,6 +112,18 @@ or where a | ||||
| is given, do not output a JSON representation of the value, just | ||||
| attempt to decode it. | ||||
| This is useful for fuzzing. | ||||
| .It Fl q, Fl Fl quiet | ||||
| Similar to | ||||
| .Fl n, Fl Fl no-print | ||||
| but JSON output will be formatted, just not output. | ||||
| As with | ||||
| .Fl n, Fl Fl no-print, | ||||
| this option requires | ||||
| .Fl A / Fl Fl try-all-types | ||||
| or that a | ||||
| .Ar TypeName | ||||
| be given. | ||||
| This is useful for fuzzing. | ||||
| .It Fl Fl test-encode | ||||
| Check that encoding produces the same value as decoding. | ||||
| Useful for fuzzing. | ||||
|   | ||||
| @@ -55,6 +55,7 @@ | ||||
| #include "rfc4108_asn1.h" | ||||
| #include "x690sample_asn1.h" | ||||
|  | ||||
| static int quiet_flag = 0; | ||||
| static int print_flag = 1; | ||||
| static int test_copy_flag; | ||||
| static int test_encode_flag; | ||||
| @@ -410,11 +411,11 @@ dotype(unsigned char *buf, size_t len, char **argv, size_t *size) | ||||
|         ret = sorted_types[i].decode(buf, len, v, &sz); | ||||
|         if (ret == 0) { | ||||
|             matches++; | ||||
|             if (sz == len) { | ||||
|             if (!quiet_flag && sz == len) { | ||||
|                 fprintf(stderr, "Match: %s\n", typename); | ||||
|             } else if (sequence_flag) { | ||||
|                 *size = sz; | ||||
|             } else { | ||||
|             } else if (!quiet_flag) { | ||||
|                 fprintf(stderr, "Prefix match: %s\n", typename); | ||||
|             } | ||||
|             if (print_flag) { | ||||
| @@ -425,7 +426,8 @@ dotype(unsigned char *buf, size_t len, char **argv, size_t *size) | ||||
|                     ret = errno; | ||||
|                     err(1, "Could not print %s\n", typename); | ||||
|                 } | ||||
|                 fprintf(stdout, "%s\n", s); | ||||
|                 if (!quiet_flag) | ||||
|                     printf("%s\n", s); | ||||
|                 free(s); | ||||
|             } | ||||
|             if (test_encode_flag) { | ||||
| @@ -604,6 +606,8 @@ struct getargs args[] = { | ||||
|         "\ttest copy operation (for memory debugging and fuzzing)", NULL }, | ||||
|     { "print", 'n', arg_negative_flag, &print_flag, | ||||
|         "\ttest copy operation (for memory debugging and fuzzing)", NULL }, | ||||
|     { "quiet", 'q', arg_flag, &quiet_flag, | ||||
|         "\tOutput nothing (exit status 0 means type matched)", NULL }, | ||||
|     { "version", 'v', arg_flag, &version_flag, NULL, NULL }, | ||||
|     { "help", 'h', arg_flag, &help_flag, NULL, NULL } | ||||
| }; | ||||
| @@ -636,17 +640,22 @@ main(int argc, char **argv) | ||||
|  | ||||
|     if (sequence_flag && try_all_flag) | ||||
|         errx(1, "--raw-sequence and --try-all-types are mutually exclusive"); | ||||
|     if (quiet_flag && !try_all_flag && argc < 2) | ||||
|         errx(1, "--quiet requires --try-all-types or that a TypeName be given"); | ||||
|     if (!print_flag && !try_all_flag && argc < 2) | ||||
|         errx(1, "--no-print requires --try-all-types or that a TypeName be given"); | ||||
|  | ||||
|     if (list_types_flag) { | ||||
|         size_t i; | ||||
|  | ||||
|         if (argc) | ||||
|             usage(1); | ||||
|             errx(1, "--list-types is exclusive of other options or arguments"); | ||||
|  | ||||
|         for (i = 0; i < sizeof(types)/sizeof(types[0]); i++) | ||||
|             printf("%s\n", types[i].name); | ||||
|         exit(0); | ||||
|     } | ||||
|  | ||||
|     if (argc < 1) | ||||
| 	usage(1); | ||||
|     return doit(argv); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Nicolas Williams
					Nicolas Williams