summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStef Walter <stef@thewalter.net>2013-07-03 10:38:19 +0200
committerStef Walter <stef@thewalter.net>2013-07-03 11:49:26 +0200
commit81431ffd8cbf55175b1b9a9ed130fc67d0d4000b (patch)
treeb6715f32115c537dd71a488048a9241a037024ad
parent1c4522e5df79bd197feab8448008fc2bf6b4ea2e (diff)
path: Add p11_path_canon() function
Cleans up a filename with readable characters.
-rw-r--r--common/path.c15
-rw-r--r--common/path.h2
-rw-r--r--common/tests/test-path.c17
-rw-r--r--trust/extract-info.c11
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;
}