aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoseph Hunkeler <jhunkeler@gmail.com>2024-06-14 19:47:34 -0400
committerJoseph Hunkeler <jhunkeler@gmail.com>2024-06-14 19:47:34 -0400
commit91d7f4f70583e3aab13ae503bdeda97073cedb07 (patch)
tree8572a8fa782b9601f5ecf3b464fac6211c7dc394
parent77b3517c8d6d01526a1c5be9109981ca269dd21f (diff)
downloadstasis-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.h2
-rw-r--r--src/artifactory.c15
-rw-r--r--src/utils.c6
-rw-r--r--tests/test_utils.c2
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");
}
}