diff options
author | Joseph Hunkeler <jhunkeler@gmail.com> | 2024-06-14 19:47:34 -0400 |
---|---|---|
committer | Joseph Hunkeler <jhunkeler@gmail.com> | 2024-06-14 19:47:34 -0400 |
commit | 91d7f4f70583e3aab13ae503bdeda97073cedb07 (patch) | |
tree | 8572a8fa782b9601f5ecf3b464fac6211c7dc394 | |
parent | 77b3517c8d6d01526a1c5be9109981ca269dd21f (diff) | |
download | stasis-91d7f4f70583e3aab13ae503bdeda97073cedb07.tar.gz |
Fix redaction code to accept NULL pointers in array
* And let the caller specify the length of the array of strings to redact.
* Redactions now occur directly on authentication strings rather than their command line arguments
-rw-r--r-- | include/utils.h | 2 | ||||
-rw-r--r-- | src/artifactory.c | 15 | ||||
-rw-r--r-- | src/utils.c | 6 | ||||
-rw-r--r-- | tests/test_utils.c | 2 |
4 files changed, 12 insertions, 13 deletions
diff --git a/include/utils.h b/include/utils.h index a340cd7..8840a0d 100644 --- a/include/utils.h +++ b/include/utils.h @@ -329,7 +329,7 @@ char *collapse_whitespace(char **s); * @param maxlen maximum length of dest byte array * @return 0 on success, -1 on error */ -int redact_sensitive(const char **to_redact, char *src, char *dest, size_t maxlen); +int redact_sensitive(const char **to_redact, size_t to_redact_size, char *src, char *dest, size_t maxlen); /** * Given a directory path, return a list of files diff --git a/src/artifactory.c b/src/artifactory.c index 4772602..5678d64 100644 --- a/src/artifactory.c +++ b/src/artifactory.c @@ -229,16 +229,15 @@ int jfrog_cli(struct JFRT_Auth *auth, char *args) { } const char *redactable[] = { - "--access-token=", - "--ssh-key-path=", - "--ssh-passphrase=", - "--client-cert-key-path=", - "--client-cert-path=", - "--password=", - NULL, + auth->access_token, + auth->ssh_key_path, + auth->ssh_passphrase, + auth->client_cert_key_path, + auth->client_cert_path, + auth->password, }; snprintf(cmd, sizeof(cmd) - 1, "jf %s %s", args, auth_args); - redact_sensitive(redactable, cmd, cmd_redacted, sizeof(cmd_redacted) - 1); + redact_sensitive(redactable, sizeof(redactable) / sizeof (*redactable), cmd, cmd_redacted, sizeof(cmd_redacted) - 1); guard_free(auth_args); guard_strlist_free(&arg_map); diff --git a/src/utils.c b/src/utils.c index 7b77020..86622ad 100644 --- a/src/utils.c +++ b/src/utils.c @@ -707,7 +707,7 @@ char *collapse_whitespace(char **s) { * @param maxlen maximum length of dest string * @return 0 on success, -1 on error */ -int redact_sensitive(const char **to_redact, char *src, char *dest, size_t maxlen) { +int redact_sensitive(const char **to_redact, size_t to_redact_size, char *src, char *dest, size_t maxlen) { const char *redacted = "***REDACTED***"; char *tmp = calloc(strlen(redacted) + strlen(src) + 1, sizeof(*tmp)); @@ -716,8 +716,8 @@ int redact_sensitive(const char **to_redact, char *src, char *dest, size_t maxle } strcpy(tmp, src); - for (size_t i = 0; to_redact[i] != NULL; i++) { - if (strstr(tmp, to_redact[i])) { + for (size_t i = 0; i < to_redact_size; i++) { + if (to_redact[i] && strstr(tmp, to_redact[i])) { replace_text(tmp, to_redact[i], redacted, 0); break; } diff --git a/tests/test_utils.c b/tests/test_utils.c index 94b4585..a2fa8c6 100644 --- a/tests/test_utils.c +++ b/tests/test_utils.c @@ -44,7 +44,7 @@ void test_redact_sensitive() { for (size_t i = 0; i < sizeof(data) / sizeof(*data); i++) { char *input = strdup(data[i]); char output[100] = {0}; - redact_sensitive(to_redact, input, output, sizeof(output) - 1); + redact_sensitive(to_redact, sizeof(to_redact) / sizeof(*to_redact), input, output, sizeof(output) - 1); OMC_ASSERT(strcmp(output, expected[i]) == 0, "incorrect redaction"); } } |