imap-commands-util.c revision 1c885b304f060e3ac4fe04195a2f53457d0ac99e
/* Copyright (c) 2002-2009 Dovecot authors, see the included COPYING file */
#include "imap-common.h"
#include "array.h"
#include "buffer.h"
#include "str.h"
#include "str-sanitize.h"
#include "imap-resp-code.h"
#include "imap-parser.h"
#include "imap-sync.h"
#include "imap-util.h"
#include "mail-storage.h"
#include "mail-namespace.h"
#include "imap-commands-util.h"
/* Maximum length for mailbox name, including it's path. This isn't fully
exact since the user can create folder hierarchy with small names, then
rename them to larger names. Mail storages should set more strict limits
#define MAILBOX_MAX_NAME_LEN 512
struct mail_namespace *
{
struct mail_namespace *ns;
orig_mailbox = *mailboxp;
return NULL;
}
if (mode == CLIENT_VERIFY_MAILBOX_NONE)
return ns;
/* make sure it even looks valid */
return NULL;
}
/* make sure there are no real separators used in the mailbox
name. */
for (p = orig_mailbox; *p != '\0'; p++) {
"NO Character not allowed "
"in mailbox name: '%c'",
return NULL;
}
}
}
/* make sure two hierarchy separators aren't next to each others */
return NULL;
}
}
return NULL;
}
/* check what our storage thinks of it */
&mailbox_status) < 0) {
return NULL;
}
switch (mailbox_status) {
case MAILBOX_NAME_EXISTS:
switch (mode) {
return ns;
break;
}
if (mode == CLIENT_VERIFY_MAILBOX_NAME ||
return ns;
"NO [", IMAP_RESP_CODE_ALREADYEXISTS,
"] Mailbox exists.", NULL));
break;
case MAILBOX_NAME_VALID:
switch (mode) {
return ns;
break;
resp_code = "TRYCREATE";
break;
default:
i_unreached();
}
NULL));
break;
case MAILBOX_NAME_INVALID:
"NO Invalid mailbox name: ",
NULL));
break;
case MAILBOX_NAME_NOINFERIORS:
"NO Mailbox parent doesn't allow inferior mailboxes.");
break;
default:
i_unreached();
}
return NULL;
}
{
return TRUE;
else {
return FALSE;
}
}
const char *
{
switch (error) {
case MAIL_ERROR_NONE:
break;
case MAIL_ERROR_TEMP:
break;
case MAIL_ERROR_NOTPOSSIBLE:
case MAIL_ERROR_PARAMS:
break;
case MAIL_ERROR_PERM:
break;
case MAIL_ERROR_NOSPACE:
break;
case MAIL_ERROR_NOTFOUND:
break;
case MAIL_ERROR_EXISTS:
break;
case MAIL_ERROR_EXPUNGED:
break;
case MAIL_ERROR_INUSE:
break;
}
else
}
struct mailbox_list *list)
{
const char *error_string;
enum mail_error error;
}
struct mail_storage *storage)
{
const char *error_string;
enum mail_error error;
/* we can't do forced CLOSE, so have to disconnect */
"IMAP session state is inconsistent, please relogin.");
return;
}
}
struct mail_storage *storage)
{
const char *error_string;
enum mail_error error;
/* we can't do forced CLOSE, so have to disconnect */
"IMAP session state is inconsistent, please relogin.");
return;
}
}
enum mail_flags *flags_r,
const char *const **keywords_r)
{
const char *atom;
enum mail_flags flag;
ARRAY_DEFINE(keywords, const char *);
*flags_r = 0;
*keywords_r = NULL;
"Flags list contains non-atoms.");
return FALSE;
}
if (*atom == '\\') {
/* system flag */
else {
"BAD Invalid system flag ",
return FALSE;
}
} else {
/* keyword validity checks are done by lib-storage */
}
args++;
}
if (array_count(&keywords) == 0)
*keywords_r = NULL;
else {
}
return TRUE;
}
{
const char *const *names;
unsigned int i, count;
for (i = 0; i < count; i++) {
}
}
#define SYSTEM_FLAGS "\\Answered \\Flagged \\Deleted \\Seen \\Draft"
{
const char *str;
/* no changes to keywords and we're not selecting a mailbox */
return;
}
"Read-only mailbox.");
} else {
")] Flags permitted.", NULL));
}
}
{
}
const char *const *
{
const unsigned int *kw_indexes;
const char *const *all_names;
/* convert indexes to names */
for (i = 0; i < kw_count; i++) {
}
(void)array_append_space(dest);
}
{
const char *name1;
return FALSE;
return TRUE;
}
{
}
{
;
else {
}
}
}
{
else
}