summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDave Heller <hellerda@linux.vnet.ibm.com>2018-02-07 00:17:27 -0500
committerDave Heller <hellerda@linux.vnet.ibm.com>2018-02-07 00:17:27 -0500
commit388c49a3f397ce5faf072361862cd18180e2b701 (patch)
tree17efce6dc21e6cb1ae6c0e4478f31b7e4a13ce66
parent6498603b6f3929827cf99c43ac9f07e604e86a2e (diff)
downloadsb-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.c91
-rw-r--r--hashkeys.c62
-rw-r--r--print-container.c60
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:
diff --git a/hashkeys.c b/hashkeys.c
index 4796a89..d3dc0ed 100644
--- a/hashkeys.c
+++ b/hashkeys.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>
@@ -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:
OpenPOWER on IntegriCloud