]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
fts: Fixed running attachment decoder scripts.
authorTimo Sirainen <tss@iki.fi>
Thu, 22 Sep 2011 20:59:48 +0000 (23:59 +0300)
committerTimo Sirainen <tss@iki.fi>
Thu, 22 Sep 2011 20:59:48 +0000 (23:59 +0300)
src/plugins/fts/fts-parser-script.c

index 32504b2d984333d198903b3fd47d9bc129b2d2ac..3781e566eabae6c9e7e57582c70b2750561bd0f1 100644 (file)
@@ -108,10 +108,11 @@ static int script_contents_read(struct mail_user *user)
 
 static bool script_support_content(struct mail_user *user,
                                   const char **content_type,
-                                  const char *extension)
+                                  const char *filename)
 {
        struct fts_parser_script_user *suser = SCRIPT_USER_CONTEXT(user);
        const struct content *content;
+       const char *extension;
 
        if (suser == NULL) {
                suser = p_new(user->pool, struct fts_parser_script_user, 1);
@@ -123,9 +124,13 @@ static bool script_support_content(struct mail_user *user,
                        return FALSE;
        }
 
-       if (strcmp(*content_type, "application/octet-stream") != 0) {
+       if (strcmp(*content_type, "application/octet-stream") == 0) {
+               if (filename == NULL)
+                       return FALSE;
+               extension = strrchr(filename, '.');
                if (extension == NULL)
                        return FALSE;
+               extension = filename + 1;
 
                array_foreach(&suser->content, content) {
                        if (content->extensions != NULL &&
@@ -144,13 +149,13 @@ static bool script_support_content(struct mail_user *user,
 }
 
 static void parse_content_disposition(const char *content_disposition,
-                                     const char **extension_r)
+                                     const char **filename_r)
 {
        struct rfc822_parser_context parser;
        const char *const *results;
        string_t *str;
 
-       *extension_r = NULL;
+       *filename_r = NULL;
 
        if (content_disposition == NULL)
                return;
@@ -167,7 +172,7 @@ static void parse_content_disposition(const char *content_disposition,
        (void)rfc2231_parse(&parser, &results);
        for (; *results != NULL; results += 2) {
                if (strcasecmp(results[0], "filename") == 0) {
-                       *extension_r = results[1];
+                       *filename_r = results[1];
                        break;
                }
        }
@@ -179,11 +184,11 @@ fts_parser_script_try_init(struct mail_user *user,
                           const char *content_disposition)
 {
        struct script_fts_parser *parser;
-       const char *extension, *path, *cmd;
+       const char *filename, *path, *cmd;
        int fd;
 
-       parse_content_disposition(content_disposition, &extension);
-       if (script_support_content(user, &content_type, extension) <= 0)
+       parse_content_disposition(content_disposition, &filename);
+       if (script_support_content(user, &content_type, filename) <= 0)
                return NULL;
 
        fd = script_connect(user, &path);