summaryrefslogtreecommitdiffstats
path: root/container.c
diff options
context:
space:
mode:
authorDave Heller <hellerda@us.ibm.com>2017-08-24 14:33:37 -0400
committerDave Heller <hellerda@us.ibm.com>2017-08-24 14:33:37 -0400
commitb58fed17ca3fd3839b3443552db4ceb5be31d6e2 (patch)
tree271fec205ca0507a88a9808c40050866013b8e48 /container.c
parent6ee0942231812df4cc6866cf79371eba57e9ac8f (diff)
downloadsb-signing-utils-b58fed17ca3fd3839b3443552db4ceb5be31d6e2.tar.gz
sb-signing-utils-b58fed17ca3fd3839b3443552db4ceb5be31d6e2.zip
Add support for Component ID (container label)
Signed-off-by: Dave Heller <hellerda@us.ibm.com>
Diffstat (limited to 'container.c')
-rw-r--r--container.c43
1 files changed, 41 insertions, 2 deletions
diff --git a/container.c b/container.c
index 1f180a5..ceaa979 100644
--- a/container.c
+++ b/container.c
@@ -76,6 +76,11 @@ void debug_print(char *lead, unsigned char *buffer, size_t buflen)
hex_print(lead, buffer, buflen);
}
+/**
+ * Validate hexadecimal ASCII input of a given length.
+ * - len is the byte len of the resulting value, not the len of the hexascii.
+ * - len = 0 means validate input of arbitrary length.
+*/
int isValidHex(char *input, int len) {
int r;
size_t maxlen = 512; // sane limit
@@ -88,9 +93,9 @@ int isValidHex(char *input, int len) {
die(EX_DATAERR, "input exceeded max length: %lu", maxlen);
if (len > 0)
- sprintf(multiplier, "{%d}", len * 2);
+ sprintf(multiplier, "{%d}", len * 2); // allow this (byte) len only
else
- sprintf(multiplier, "+");
+ sprintf(multiplier, "+"); // unlimited
sprintf(pattern, "^(0x|0X)?[a-fA-F0-9]%s$", multiplier);
@@ -103,3 +108,37 @@ int isValidHex(char *input, int len) {
regfree(&regexpr);
return result;
}
+
+/**
+ * Validate ASCII input up to a given length.
+ * - len is the expected len of the ascii input.
+ * - len = 0 means validate input of arbitrary length.
+ * - NOTE: not all ascii chars are allowed here.
+ */
+int isValidAscii(char *input, int len) {
+ int r;
+ size_t maxlen = 256; // sane limit
+ regex_t regexpr;
+ char pattern[48];
+ char multiplier[8];
+ bool result = false;
+
+ if (strnlen(input, maxlen) >= maxlen)
+ die(EX_DATAERR, "input exceeded max length: %lu", maxlen);
+
+ if (len > 0)
+ sprintf(multiplier, "{,%d}", len); // allow *up to* this len
+ else
+ sprintf(multiplier, "+"); // unlimited
+
+ sprintf(pattern, "^[a-zA-Z0-9_+-]%s$", multiplier);
+
+ if ((r = regcomp(&regexpr, pattern, REG_EXTENDED | REG_NOSUB)))
+ die(EX_SOFTWARE, "%s", "failure to compile regex");
+
+ if (!(r = regexec(&regexpr, input, 0, NULL, 0)))
+ result = true;
+
+ regfree(&regexpr);
+ return result;
+}
OpenPOWER on IntegriCloud