imap-commands-util.c revision e0512d13ca0cd97a306a9a96073868bb158e314a
6c2c5f20760b06bfb4a40b0ee2ef5ab016bc41f0Timo Sirainen/* Copyright (c) 2002-2009 Dovecot authors, see the included COPYING file */
6c2c5f20760b06bfb4a40b0ee2ef5ab016bc41f0Timo Sirainen/* Maximum length for mailbox name, including it's path. This isn't fully
6c2c5f20760b06bfb4a40b0ee2ef5ab016bc41f0Timo Sirainen exact since the user can create folder hierarchy with small names, then
6c2c5f20760b06bfb4a40b0ee2ef5ab016bc41f0Timo Sirainen rename them to larger names. Mail storages should set more strict limits
6c2c5f20760b06bfb4a40b0ee2ef5ab016bc41f0Timo Sirainen to them, mbox/maildir currently allow paths only up to PATH_MAX. */
6c2c5f20760b06bfb4a40b0ee2ef5ab016bc41f0Timo Sirainenclient_find_namespace(struct client_command_context *cmd, const char **mailbox)
6c2c5f20760b06bfb4a40b0ee2ef5ab016bc41f0Timo Sirainen ns = mail_namespace_find(cmd->client->user->namespaces, mailbox);
6c2c5f20760b06bfb4a40b0ee2ef5ab016bc41f0Timo Sirainen client_send_tagline(cmd, "NO Unknown namespace.");
6c2c5f20760b06bfb4a40b0ee2ef5ab016bc41f0Timo Sirainenbool client_verify_mailbox_name(struct client_command_context *cmd,
6c2c5f20760b06bfb4a40b0ee2ef5ab016bc41f0Timo Sirainen const char *orig_mailbox, *p, *resp_code = NULL;
6c2c5f20760b06bfb4a40b0ee2ef5ab016bc41f0Timo Sirainen /* make sure it even looks valid */
6c2c5f20760b06bfb4a40b0ee2ef5ab016bc41f0Timo Sirainen client_send_tagline(cmd, "NO Empty mailbox name.");
6c2c5f20760b06bfb4a40b0ee2ef5ab016bc41f0Timo Sirainen if (ns->real_sep != ns->sep && ns->prefix_len < strlen(orig_mailbox)) {
6c2c5f20760b06bfb4a40b0ee2ef5ab016bc41f0Timo Sirainen /* make sure there are no real separators used in the mailbox
6c2c5f20760b06bfb4a40b0ee2ef5ab016bc41f0Timo Sirainen "NO Character not allowed "
6c2c5f20760b06bfb4a40b0ee2ef5ab016bc41f0Timo Sirainen "in mailbox name: '%c'",
2e1e493b248dec0127b1eabeea5a8bc330378fcdTimo Sirainen /* make sure two hierarchy separators aren't next to each others */
6c2c5f20760b06bfb4a40b0ee2ef5ab016bc41f0Timo Sirainen if (p[0] == ns->real_sep && p[-1] == ns->real_sep) {
6c2c5f20760b06bfb4a40b0ee2ef5ab016bc41f0Timo Sirainen client_send_tagline(cmd, "NO Invalid mailbox name.");
6c2c5f20760b06bfb4a40b0ee2ef5ab016bc41f0Timo Sirainen client_send_tagline(cmd, "NO Mailbox name too long.");
6c2c5f20760b06bfb4a40b0ee2ef5ab016bc41f0Timo Sirainen /* check what our storage thinks of it */
6c2c5f20760b06bfb4a40b0ee2ef5ab016bc41f0Timo Sirainen if (mailbox_list_get_mailbox_name_status(ns->list, mailbox,
6c2c5f20760b06bfb4a40b0ee2ef5ab016bc41f0Timo Sirainen case CLIENT_VERIFY_MAILBOX_SHOULD_EXIST_TRYCREATE:
case MAILBOX_NAME_VALID:
switch (mode) {
return TRUE;
NULL));
case MAILBOX_NAME_INVALID:
NULL));
case MAILBOX_NAME_NOINFERIORS:
i_unreached();
return FALSE;
return TRUE;
return FALSE;
switch (error) {
case MAIL_ERROR_NONE:
case MAIL_ERROR_TEMP:
case MAIL_ERROR_NOTPOSSIBLE:
case MAIL_ERROR_PARAMS:
case MAIL_ERROR_PERM:
case MAIL_ERROR_NOSPACE:
case MAIL_ERROR_NOTFOUND:
case MAIL_ERROR_EXISTS:
case MAIL_ERROR_EXPUNGED:
case MAIL_ERROR_INUSE:
const char *error_string;
const char *error_string;
const char *error_string;
const char *const **keywords_r)
const char *atom;
*flags_r = 0;
return FALSE;
return FALSE;
args++;
return TRUE;
const char *const *names;
unsigned int i, count;
for (i = 0; i < count; i++) {
const char *str;
const unsigned int *kw_indexes;
const char *const *all_names;
for (i = 0; i < kw_count; i++) {
const char *name1;
return FALSE;
return TRUE;