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