From 81431ffd8cbf55175b1b9a9ed130fc67d0d4000b Mon Sep 17 00:00:00 2001 From: Stef Walter Date: Wed, 3 Jul 2013 10:38:19 +0200 Subject: path: Add p11_path_canon() function Cleans up a filename with readable characters. --- common/path.c | 15 +++++++++++++++ common/path.h | 2 ++ common/tests/test-path.c | 17 +++++++++++++++++ trust/extract-info.c | 11 ++--------- 4 files changed, 36 insertions(+), 9 deletions(-) diff --git a/common/path.c b/common/path.c index 8362765..89d9a67 100644 --- a/common/path.c +++ b/common/path.c @@ -315,3 +315,18 @@ p11_path_prefix (const char *string, strncmp (string, prefix, b) == 0 && is_path_component_or_null (string[b]); } + +void +p11_path_canon (char *name) +{ + static const char *VALID = + "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.-_"; + int i; + + return_if_fail (name != NULL); + + for (i = 0; name[i] != '\0'; i++) { + if (strchr (VALID, name[i]) == NULL) + name[i] = '_'; + } +} diff --git a/common/path.h b/common/path.h index cd135cb..0b19a5d 100644 --- a/common/path.h +++ b/common/path.h @@ -64,4 +64,6 @@ char * p11_path_parent (const char *path); bool p11_path_prefix (const char *string, const char *prefix); +void p11_path_canon (char *name); + #endif /* P11_PATH_H__ */ diff --git a/common/tests/test-path.c b/common/tests/test-path.c index 1671381..1f85dbb 100644 --- a/common/tests/test-path.c +++ b/common/tests/test-path.c @@ -201,6 +201,22 @@ test_prefix (void) assert (p11_path_prefix ("/test//other//second", "/test")); } +static void +test_canon (void) +{ + char *test; + + test = strdup ("2309haonutb;AOE@#$O "); + p11_path_canon (test); + assert_str_eq (test, "2309haonutb_AOE___O_"); + free (test); + + test = strdup ("22@# %ATI@#$onot"); + p11_path_canon (test); + assert_str_eq (test, "22____ATI___onot"); + free (test); +} + int main (int argc, char *argv[]) @@ -211,6 +227,7 @@ main (int argc, p11_test (test_absolute, "/path/absolute"); p11_test (test_parent, "/path/parent"); p11_test (test_prefix, "/path/prefix"); + p11_test (test_canon, "/path/canon"); return p11_test_run (argc, argv); } diff --git a/trust/extract-info.c b/trust/extract-info.c index ec25bc1..f125b8a 100644 --- a/trust/extract-info.c +++ b/trust/extract-info.c @@ -42,6 +42,7 @@ #include "dict.h" #include "extract.h" #include "message.h" +#include "path.h" #include "pkcs11.h" #include "pkcs11x.h" #include "x509.h" @@ -442,23 +443,15 @@ extract_label (p11_extract_info *extract) return strdup ("unknown"); } -#define FILENAME_CHARS \ - "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.-_" - char * p11_extract_info_filename (p11_extract_info *extract) { char *label; - int i; label = extract_label (extract); return_val_if_fail (label != NULL, NULL); - for (i = 0; label[i] != '\0'; i++) { - if (strchr (FILENAME_CHARS, label[i]) == NULL) - label[i] = '_'; - } - + p11_path_canon (label); return label; } -- cgit v1.1