diff options
author | Dave Heller <hellerda@linux.vnet.ibm.com> | 2018-02-07 00:17:27 -0500 |
---|---|---|
committer | Dave Heller <hellerda@linux.vnet.ibm.com> | 2018-02-07 00:17:27 -0500 |
commit | 388c49a3f397ce5faf072361862cd18180e2b701 (patch) | |
tree | 17efce6dc21e6cb1ae6c0e4478f31b7e4a13ce66 | |
parent | 6498603b6f3929827cf99c43ac9f07e604e86a2e (diff) | |
download | sb-signing-utils-388c49a3f397ce5faf072361862cd18180e2b701.tar.gz sb-signing-utils-388c49a3f397ce5faf072361862cd18180e2b701.zip |
Don't use getopt_long() on AIX
getopt_long() is not natively supported on AIX, so instead do a
simple long-to-short option replacement in shell. See issue 14
Signed-off-by: Dave Heller <hellerda@linux.vnet.ibm.com>
-rw-r--r-- | create-container.c | 91 | ||||
-rw-r--r-- | hashkeys.c | 62 | ||||
-rw-r--r-- | print-container.c | 60 |
3 files changed, 181 insertions, 32 deletions
diff --git a/create-container.c b/create-container.c index c2b94a4..fb045c4 100644 --- a/create-container.c +++ b/create-container.c @@ -16,9 +16,12 @@ #include <config.h> +#ifndef _AIX +#include <getopt.h> +#endif + #include <errno.h> #include <fcntl.h> -#include <getopt.h> #include <limits.h> #include <openssl/bn.h> #include <openssl/ec.h> @@ -320,6 +323,7 @@ __attribute__((__noreturn__)) void usage (int status) exit(status); } +#ifndef _AIX static struct option const opts[] = { { "help", no_argument, 0, 'h' }, { "verbose", no_argument, 0, 'v' }, @@ -344,11 +348,12 @@ static struct option const opts[] = { { "hw-flags", required_argument, 0, 'f' }, { "sw-flags", required_argument, 0, 'F' }, { "label", required_argument, 0, 'L' }, - { "dumpPrefixHdr", required_argument, 0, 128 }, - { "dumpSwHdr", required_argument, 0, 129 }, - { "dumpContrHdr", required_argument, 0, 130 }, + { "dumpContrHdr", required_argument, 0, '0' }, + { "dumpPrefixHdr", required_argument, 0, '1' }, + { "dumpSwHdr", required_argument, 0, '2' }, { NULL, 0, NULL, 0 } }; +#endif static struct { char *hw_keyfn_a; @@ -380,7 +385,6 @@ int main(int argc, char* argv[]) { int fdin = -1; int fdout; - int indexptr; unsigned int size, offset; void *container = malloc(SECURE_BOOT_HEADERS_SIZE); char *buf = malloc(SECURE_BOOT_HEADERS_SIZE); @@ -407,10 +411,77 @@ int main(int argc, char* argv[]) memset(container, 0, SECURE_BOOT_HEADERS_SIZE); +#ifdef _AIX + for (int i = 1; i < argc; i++) { + if (!strcmp(*(argv + i), "--help")) { + *(argv + i) = "-h"; + } else if (!strcmp(*(argv + i), "--verbose")) { + *(argv + i) = "-v"; + } else if (!strcmp(*(argv + i), "--debug")) { + *(argv + i) = "-d"; + } else if (!strcmp(*(argv + i), "--wrap")) { + *(argv + i) = "-w"; + } else if (!strcmp(*(argv + i), "--hw_key_a")) { + *(argv + i) = "-a"; + } else if (!strcmp(*(argv + i), "--hw_key_b")) { + *(argv + i) = "-b"; + } else if (!strcmp(*(argv + i), "--hw_key_c")) { + *(argv + i) = "-c"; + } else if (!strcmp(*(argv + i), "--sw_key_p")) { + *(argv + i) = "-p"; + } else if (!strcmp(*(argv + i), "--sw_key_q")) { + *(argv + i) = "-q"; + } else if (!strcmp(*(argv + i), "--sw_key_r")) { + *(argv + i) = "-r"; + } else if (!strcmp(*(argv + i), "--hw_sig_a")) { + *(argv + i) = "-A"; + } else if (!strcmp(*(argv + i), "--hw_sig_b")) { + *(argv + i) = "-B"; + } else if (!strcmp(*(argv + i), "--hw_sig_c")) { + *(argv + i) = "-C"; + } else if (!strcmp(*(argv + i), "--sw_sig_p")) { + *(argv + i) = "-P"; + } else if (!strcmp(*(argv + i), "--sw_sig_q")) { + *(argv + i) = "-Q"; + } else if (!strcmp(*(argv + i), "--sw_sig_r")) { + *(argv + i) = "-R"; + } else if (!strcmp(*(argv + i), "--payload")) { + *(argv + i) = "-l"; + } else if (!strcmp(*(argv + i), "--imagefile")) { + *(argv + i) = "-I"; + } else if (!strcmp(*(argv + i), "--hw-cs-offset")) { + *(argv + i) = "-o"; + } else if (!strcmp(*(argv + i), "--sw-cs-offset")) { + *(argv + i) = "-O"; + } else if (!strcmp(*(argv + i), "--hw-flags")) { + *(argv + i) = "-f"; + } else if (!strcmp(*(argv + i), "--sw-flags")) { + *(argv + i) = "-F"; + } else if (!strcmp(*(argv + i), "--label")) { + *(argv + i) = "-L"; + } else if (!strcmp(*(argv + i), "--dumpContrHdr")) { + *(argv + i) = "-0"; + } else if (!strcmp(*(argv + i), "--dumpPrefixHdr")) { + *(argv + i) = "-1"; + } else if (!strcmp(*(argv + i), "--dumpSwHdr")) { + *(argv + i) = "-2"; + } else if (!strncmp(*(argv + i), "--", 2)) { + fprintf(stderr, "%s: unrecognized option \'%s\'\n", progname, + *(argv + i)); + usage(EX_OK); + } + } +#endif + while (1) { int opt; - opt = getopt_long(argc, argv, "?hvdw:a:b:c:p:q:r:A:B:C:P:Q:R:L:I:o:O:f:F:l:", - opts, &indexptr); +#ifdef _AIX + opt = getopt(argc, argv, "?hvdw:a:b:c:p:q:r:A:B:C:P:Q:R:L:I:o:O:f:F:l:0:1:2:"); +#else + opt = getopt_long(argc, argv, + "hvdw:a:b:c:p:q:r:A:B:C:P:Q:R:L:I:o:O:f:F:l:0:1:2:", opts, + NULL); +#endif if (opt == -1) break; @@ -488,13 +559,13 @@ int main(int argc, char* argv[]) case 'L': params.label = optarg; break; - case 128: + case '1': params.prhdrfn = optarg; break; - case 129: + case '2': params.swhdrfn = optarg; break; - case 130: + case '0': params.cthdrfn = optarg; break; default: @@ -16,9 +16,12 @@ #include <config.h> +#ifndef _AIX +#include <getopt.h> +#endif + #include <errno.h> #include <fcntl.h> -#include <getopt.h> #include <limits.h> #include <openssl/bn.h> #include <openssl/ec.h> @@ -161,6 +164,7 @@ __attribute__((__noreturn__)) void usage (int status) exit(status); } +#ifndef _AIX static struct option const opts[] = { { "help", no_argument, 0, 'h' }, { "verbose", no_argument, 0, 'v' }, @@ -170,11 +174,12 @@ static struct option const opts[] = { { "hw_key_b", required_argument, 0, 'b' }, { "hw_key_c", required_argument, 0, 'c' }, { "outfile", required_argument, 0, 'o' }, - { "ascii", no_argument, 0, 128 }, - { "binary", no_argument, 0, 129 }, - { "pretty", no_argument, 0, 130 }, + { "ascii", no_argument, 0, '0' }, + { "binary", no_argument, 0, '1' }, + { "pretty", no_argument, 0, '2' }, { NULL, 0, NULL, 0 } }; +#endif static struct { char *hw_keyfn_a; @@ -188,7 +193,6 @@ static struct { int main(int argc, char* argv[]) { FILE *fp; - int indexptr; int outform = ASCII_OUT; void *container = malloc(SECURE_BOOT_HEADERS_SIZE); ROM_container_raw *c = (ROM_container_raw*) container; @@ -205,10 +209,46 @@ int main(int argc, char* argv[]) memset(container, 0, SECURE_BOOT_HEADERS_SIZE); +#ifdef _AIX + for (int i = 1; i < argc; i++) { + if (!strcmp(*(argv + i), "--help")) { + *(argv + i) = "-h"; + } else if (!strcmp(*(argv + i), "--verbose")) { + *(argv + i) = "-v"; + } else if (!strcmp(*(argv + i), "--debug")) { + *(argv + i) = "-d"; + } else if (!strcmp(*(argv + i), "--wrap")) { + *(argv + i) = "-w"; + } else if (!strcmp(*(argv + i), "--hw_key_a")) { + *(argv + i) = "-a"; + } else if (!strcmp(*(argv + i), "--hw_key_b")) { + *(argv + i) = "-b"; + } else if (!strcmp(*(argv + i), "--hw_key_c")) { + *(argv + i) = "-c"; + } else if (!strcmp(*(argv + i), "--outfile")) { + *(argv + i) = "-o"; + } else if (!strcmp(*(argv + i), "--ascii")) { + *(argv + i) = "-0"; + } else if (!strcmp(*(argv + i), "--binary")) { + *(argv + i) = "-1"; + } else if (!strcmp(*(argv + i), "--pretty")) { + *(argv + i) = "-2"; + } else if (!strncmp(*(argv + i), "--", 2)) { + fprintf(stderr, "%s: unrecognized option \'%s\'\n", progname, + *(argv + i)); + usage(EX_OK); + } + } +#endif + while (1) { int opt; - opt = getopt_long(argc, argv, "?hvdw:a:b:c:o:", - opts, &indexptr); +#ifdef _AIX + opt = getopt(argc, argv, "?hvdw:a:b:c:o:012"); +#else + opt = getopt_long(argc, argv, "?hvdw:a:b:c:o:012", opts, NULL); +#endif + if (opt == -1) break; @@ -241,13 +281,13 @@ int main(int argc, char* argv[]) case 'o': params.outfile = optarg; break; - case 128: + case '0': outform = ASCII_OUT; break; - case 129: + case '1': outform = BINARY_OUT; break; - case 130: + case '2': params.pretty = true; break; default: @@ -295,7 +335,7 @@ int main(int argc, char* argv[]) } else if (outform == ASCII_OUT) { - if (params.pretty) + if (params.pretty) fprintf(fp, "%s", "0x"); for (int i = 0; i < SHA512_DIGEST_LENGTH; i++) diff --git a/print-container.c b/print-container.c index 09e0feb..4012b66 100644 --- a/print-container.c +++ b/print-container.c @@ -16,10 +16,13 @@ #include <config.h> +#ifndef _AIX +#include <getopt.h> +#endif + #include <alloca.h> #include <errno.h> #include <fcntl.h> -#include <getopt.h> #include <limits.h> #include <openssl/bn.h> #include <openssl/ec.h> @@ -557,6 +560,7 @@ __attribute__((__noreturn__)) static void usage (int status) exit(status); } +#ifndef _AIX static struct option const opts[] = { { "help", no_argument, 0, 'h' }, { "verbose", no_argument, 0, 'v' }, @@ -564,12 +568,13 @@ static struct option const opts[] = { { "wrap", required_argument, 0, 'w' }, { "stats", no_argument, 0, 's' }, { "imagefile", required_argument, 0, 'I' }, - { "validate", no_argument, 0, 128 }, - { "verify", required_argument, 0, 129 }, - { "no-print", no_argument, 0, 130 }, - { "print", no_argument, 0, 131 }, + { "validate", no_argument, 0, '0' }, + { "verify", required_argument, 0, '1' }, + { "no-print", no_argument, 0, '2' }, + { "print", no_argument, 0, '3' }, { NULL, 0, NULL, 0 } }; +#endif static struct { char *imagefn; @@ -581,7 +586,6 @@ static struct { int main(int argc, char* argv[]) { - int indexptr; int r; struct stat st; void *container; @@ -598,9 +602,43 @@ int main(int argc, char* argv[]) else progname = argv[0]; +#ifdef _AIX + for (int i = 1; i < argc; i++) { + if (!strcmp(*(argv + i), "--help")) { + *(argv + i) = "-h"; + } else if (!strcmp(*(argv + i), "--verbose")) { + *(argv + i) = "-v"; + } else if (!strcmp(*(argv + i), "--debug")) { + *(argv + i) = "-d"; + } else if (!strcmp(*(argv + i), "--wrap")) { + *(argv + i) = "-w"; + } else if (!strcmp(*(argv + i), "--stats")) { + *(argv + i) = "-s"; + } else if (!strcmp(*(argv + i), "--imagefile")) { + *(argv + i) = "-I"; + } else if (!strcmp(*(argv + i), "--validate")) { + *(argv + i) = "-0"; + } else if (!strcmp(*(argv + i), "--verify")) { + *(argv + i) = "-1"; + } else if (!strcmp(*(argv + i), "--no-print")) { + *(argv + i) = "-2"; + } else if (!strcmp(*(argv + i), "--print")) { + *(argv + i) = "-3"; + } else if (!strncmp(*(argv + i), "--", 2)) { + fprintf(stderr, "%s: unrecognized option \'%s\'\n", progname, + *(argv + i)); + usage(EX_OK); + } + } +#endif + while (1) { int opt; - opt = getopt_long(argc, argv, "?hvdw:sI:", opts, &indexptr); +#ifdef _AIX + opt = getopt(argc, argv, "??hvdw:sI:01:23"); +#else + opt = getopt_long(argc, argv, "?hvdw:sI:01:23", opts, NULL); +#endif if (opt == -1) break; @@ -627,16 +665,16 @@ int main(int argc, char* argv[]) case 'I': params.imagefn = optarg; break; - case 128: + case '0': params.validate = true; break; - case 129: + case '1': params.verify = optarg; break; - case 130: + case '2': params.print_container = false; break; - case 131: + case '3': params.print_container = true; break; default: |