~james-page/ubuntu/raring/dovecot/autopkgtest

« back to all changes in this revision

Viewing changes to src/lib-mail/message-search.c

  • Committer: Package Import Robot
  • Author(s): James Page
  • Date: 2012-06-11 11:11:54 UTC
  • mfrom: (1.15.2) (4.1.27 sid)
  • Revision ID: package-import@ubuntu.com-20120611111154-678cwbdj6ktgsv1h
Tags: 1:2.1.7-1ubuntu1
* Merge from Debian unstable, remaining changes:
  + Add mail-stack-delivery package:
    - Update d/rules
    - d/control: convert existing dovecot-postfix package to a dummy
      package and add new mail-stack-delivery package.
    - Update maintainer scripts.
    - Rename d/dovecot-postfix.* to debian/mail-stack-delivery.*
    - d/mail-stack-delivery.preinst: Move previously installed backups and
      config files to a new package namespace.
    - d/mail-stack-delivery.prerm: Added to handle downgrades.
  + Use Snakeoil SSL certificates by default:
    - d/control: Depend on ssl-cert.
    - d/dovecot-core.postinst: Relax grep for SSL_* a bit.
  + Add autopkgtest to debian/tests/*.
  + Add ufw integration:
    - d/dovecot-core.ufw.profile: new ufw profile.
    - d/rules: install profile in dovecot-core.
    - d/control: dovecot-core - suggest ufw.
  + d/{control,rules}: enable PIE hardening.
  + d/dovecot-core.dirs: Added usr/share/doc/dovecot-core
  + Add apport hook:
    - d/rules, d/source_dovecot.py
  + Add upstart job:
    - d/rules, d/dovecot-core.dovecot.upstart, d/control,
      d/dovecot-core.dirs, dovecot-imapd.{postrm, postinst, prerm},
      d/dovecot-pop3d.{postinst, postrm, prerm}.
      d/mail-stack-deliver.postinst: Convert init script to upstart.
  + d/control: Added Pre-Depends: dpkg (>= 1.15.6) to dovecot-dbg to support
    xz compression in Ubuntu.
  + d/control: Demote dovecot-common Recommends: to Suggests: to prevent
    install of extra packages on upgrade.
  + d/patches/dovecot-drac.patch: Updated with version for dovecot >= 2.0.0.
  + d/control: Drop B-D on systemd.
* Dropped changes:
  + d/patches/fix-racey-restart.patch: part of 2.1.x, no longer required.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/* Copyright (c) 2002-2011 Dovecot authors, see the included COPYING file */
 
1
/* Copyright (c) 2002-2012 Dovecot authors, see the included COPYING file */
2
2
 
3
3
#include "lib.h"
4
4
#include "buffer.h"
5
5
#include "istream.h"
6
6
#include "str.h"
7
7
#include "str-find.h"
8
 
#include "charset-utf8.h"
9
8
#include "rfc822-parser.h"
10
9
#include "message-decoder.h"
11
10
#include "message-parser.h"
12
11
#include "message-search.h"
13
12
 
14
13
struct message_search_context {
15
 
        char *key;
16
 
        char *key_charset;
17
 
        unsigned int key_len;
18
 
 
19
14
        enum message_search_flags flags;
20
15
        struct str_find_context *str_find_ctx;
21
16
        struct message_part *prev_part;
24
19
        unsigned int content_type_text:1; /* text/any or message/any */
25
20
};
26
21
 
27
 
static int
28
 
message_search_init_real(const char *key, const char *charset,
29
 
                         enum message_search_flags flags,
30
 
                         struct message_search_context **ctx_r)
 
22
struct message_search_context *
 
23
message_search_init(const char *key_utf8,
 
24
                    enum message_search_flags flags)
31
25
{
 
26
        enum message_decoder_flags decoder_flags = 0;
32
27
        struct message_search_context *ctx;
33
 
        string_t *key_utf8;
34
 
        enum charset_result result;
35
 
        int ret;
36
 
 
37
 
        key_utf8 = t_str_new(128);
38
 
        if (charset_to_utf8_str(charset, CHARSET_FLAG_DECOMP_TITLECASE,
39
 
                                key, key_utf8, &result) < 0)
40
 
                ret = 0;
41
 
        else if (result != CHARSET_RET_OK)
42
 
                ret = -1;
43
 
        else {
44
 
                ctx = *ctx_r = i_new(struct message_search_context, 1);
45
 
                ctx->key = i_strdup(str_c(key_utf8));
46
 
                ctx->key_len = str_len(key_utf8);
47
 
                ctx->key_charset = i_strdup(charset);
48
 
                ctx->flags = flags;
49
 
                ctx->decoder = message_decoder_init(MESSAGE_DECODER_FLAG_DTCASE);
50
 
                ctx->str_find_ctx = str_find_init(default_pool, ctx->key);
51
 
                ret = 1;
52
 
        }
53
 
        return ret;
54
 
}
55
 
 
56
 
int message_search_init(const char *key, const char *charset,
57
 
                        enum message_search_flags flags,
58
 
                        struct message_search_context **ctx_r)
59
 
{
60
 
        int ret;
61
 
 
62
 
        T_BEGIN {
63
 
                ret = message_search_init_real(key, charset, flags, ctx_r);
64
 
        } T_END;
65
 
        return ret;
 
28
 
 
29
        i_assert(*key_utf8 != '\0');
 
30
 
 
31
        if ((flags & MESSAGE_SEARCH_FLAG_DTCASE) != 0)
 
32
                decoder_flags |= MESSAGE_DECODER_FLAG_DTCASE;
 
33
 
 
34
        ctx = i_new(struct message_search_context, 1);
 
35
        ctx->flags = flags;
 
36
        ctx->decoder = message_decoder_init(decoder_flags);
 
37
        ctx->str_find_ctx = str_find_init(default_pool, key_utf8);
 
38
        return ctx;
66
39
}
67
40
 
68
41
void message_search_deinit(struct message_search_context **_ctx)
72
45
        *_ctx = NULL;
73
46
        str_find_deinit(&ctx->str_find_ctx);
74
47
        message_decoder_deinit(&ctx->decoder);
75
 
        i_free(ctx->key);
76
 
        i_free(ctx->key_charset);
77
48
        i_free(ctx);
78
49
}
79
50