From 24e8b3ea43d2c9cdd130863133bf2266ebf27639 Mon Sep 17 00:00:00 2001 From: "C. McEnroe" Date: Sun, 12 Apr 2020 17:03:11 -0400 Subject: Mangle message IDs in paths / is allowed in addr-spec but ; is not. --- archive.h | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) (limited to 'archive.h') diff --git a/archive.h b/archive.h index e9d4648..addd94d 100644 --- a/archive.h +++ b/archive.h @@ -19,6 +19,7 @@ #include #include #include +#include #include #include "imap.h" @@ -148,17 +149,27 @@ pathUID(char path[static PATH_MAX], uint32_t uid, const char *type) { return path; } +static inline const char *pathMangle(const char *messageID) { + if (!strchr(messageID, '/')) return messageID; + static char buf[PATH_MAX]; + strlcpy(buf, messageID, sizeof(buf)); + for (char *ptr = buf; (ptr = strchr(ptr, '/')); ++ptr) { + *ptr = ';'; + } + return buf; +} + static inline char *pathMessage( char path[static PATH_MAX], const char *messageID, const char *type ) { - snprintf(path, PATH_MAX, "message/%s.%s", messageID, type); + snprintf(path, PATH_MAX, "message/%s.%s", pathMangle(messageID), type); return path; } static inline char *pathThread( char path[static PATH_MAX], const char *messageID, const char *type ) { - snprintf(path, PATH_MAX, "thread/%s.%s", messageID, type); + snprintf(path, PATH_MAX, "thread/%s.%s", pathMangle(messageID), type); return path; } -- cgit 1.4.1 tion='/src/log/bin/dash/.gitignore'>
Commit message (Expand)Author
2021-01-18Allow matching lexers using first input lineJune McEnroe