pop3c-storage.c revision bdb026e2dc8a7c77585ed5ba489f0056df8074d4
5f5870385cff47efd2f58e7892f251cf13761528Timo Sirainen/* Copyright (c) 2011-2012 Dovecot authors, see the included COPYING file */
01435c38e7d671d5a892c4b802cfb204881cd454Timo Sirainenstatic struct mail_storage *pop3c_storage_alloc(void)
01435c38e7d671d5a892c4b802cfb204881cd454Timo Sirainen pool = pool_alloconly_create("pop3c storage", 512+256);
01435c38e7d671d5a892c4b802cfb204881cd454Timo Sirainen storage = p_new(pool, struct pop3c_storage, 1);
01435c38e7d671d5a892c4b802cfb204881cd454Timo Sirainenpop3c_storage_create(struct mail_storage *_storage,
01435c38e7d671d5a892c4b802cfb204881cd454Timo Sirainen const char **error_r)
01435c38e7d671d5a892c4b802cfb204881cd454Timo Sirainen struct pop3c_storage *storage = (struct pop3c_storage *)_storage;
01435c38e7d671d5a892c4b802cfb204881cd454Timo Sirainen storage->set = mail_storage_get_driver_settings(_storage);
01435c38e7d671d5a892c4b802cfb204881cd454Timo Sirainenpop3c_client_create_from_set(struct mail_user *user,
0ca3b9cb0f2a322a25ce7f229dc3d3a0b46be17bTimo Sirainen client_set.master_user = set->pop3c_master_user;
01435c38e7d671d5a892c4b802cfb204881cd454Timo Sirainen mail_user_set_get_temp_prefix(str, user->set);
01435c38e7d671d5a892c4b802cfb204881cd454Timo Sirainen mail_user_home_expand(user, set->pop3c_rawlog_dir);
01435c38e7d671d5a892c4b802cfb204881cd454Timo Sirainen client_set.ssl_ca_dir = set->pop3c_ssl_ca_dir;
01435c38e7d671d5a892c4b802cfb204881cd454Timo Sirainen client_set.ssl_verify = set->pop3c_ssl_verify;
01435c38e7d671d5a892c4b802cfb204881cd454Timo Sirainen client_set.ssl_mode = POP3C_CLIENT_SSL_MODE_IMMEDIATE;
01435c38e7d671d5a892c4b802cfb204881cd454Timo Sirainen else if (strcmp(set->pop3c_ssl, "starttls") == 0)
01435c38e7d671d5a892c4b802cfb204881cd454Timo Sirainen client_set.ssl_mode = POP3C_CLIENT_SSL_MODE_STARTTLS;
01435c38e7d671d5a892c4b802cfb204881cd454Timo Sirainen client_set.ssl_mode = POP3C_CLIENT_SSL_MODE_NONE;
01435c38e7d671d5a892c4b802cfb204881cd454Timo Sirainen client_set.ssl_crypto_device = set->ssl_crypto_device;
01435c38e7d671d5a892c4b802cfb204881cd454Timo Sirainenpop3c_storage_get_list_settings(const struct mail_namespace *ns,
56aa97d74071f3a2987140c2ff1cfd5a59cb35aaTimo Sirainen if (set->root_dir != NULL && *set->root_dir != '\0' &&
01435c38e7d671d5a892c4b802cfb204881cd454Timo Sirainen /* we don't really care about root_dir, but we
01435c38e7d671d5a892c4b802cfb204881cd454Timo Sirainen just need to get index_dir autocreated.
01435c38e7d671d5a892c4b802cfb204881cd454Timo Sirainen it happens when index_dir differs from root_dir. */
01435c38e7d671d5a892c4b802cfb204881cd454Timo Sirainenstatic struct mailbox *
01435c38e7d671d5a892c4b802cfb204881cd454Timo Sirainenpop3c_mailbox_alloc(struct mail_storage *storage, struct mailbox_list *list,
01435c38e7d671d5a892c4b802cfb204881cd454Timo Sirainen pool = pool_alloconly_create("pop3c mailbox", 1024*3);
01435c38e7d671d5a892c4b802cfb204881cd454Timo Sirainen mbox->storage = (struct pop3c_storage *)storage;
01435c38e7d671d5a892c4b802cfb204881cd454Timo Sirainen index_storage_mailbox_alloc(&mbox->box, vname, flags,
01435c38e7d671d5a892c4b802cfb204881cd454Timo Sirainenpop3c_mailbox_exists(struct mailbox *box, bool auto_boxes ATTR_UNUSED,
01435c38e7d671d5a892c4b802cfb204881cd454Timo Sirainenstatic void pop3c_login_callback(enum pop3c_command_state state,
01435c38e7d671d5a892c4b802cfb204881cd454Timo Sirainen /* authentication failure probably */
01435c38e7d671d5a892c4b802cfb204881cd454Timo Sirainen "pop3c: Disconnected from remote server");
01435c38e7d671d5a892c4b802cfb204881cd454Timo Sirainenstatic int pop3c_mailbox_open(struct mailbox *box)
01435c38e7d671d5a892c4b802cfb204881cd454Timo Sirainen struct pop3c_mailbox *mbox = (struct pop3c_mailbox *)box;
01435c38e7d671d5a892c4b802cfb204881cd454Timo Sirainen mail_storage_set_error(box->storage, MAIL_ERROR_NOTFOUND,
01435c38e7d671d5a892c4b802cfb204881cd454Timo Sirainen if (index_storage_mailbox_open(box, FALSE) < 0)
01435c38e7d671d5a892c4b802cfb204881cd454Timo Sirainen mbox->client = pop3c_client_create_from_set(box->storage->user,
01435c38e7d671d5a892c4b802cfb204881cd454Timo Sirainen pop3c_client_login(mbox->client, pop3c_login_callback, mbox);
01435c38e7d671d5a892c4b802cfb204881cd454Timo Sirainenstatic void pop3c_mailbox_close(struct mailbox *box)
01435c38e7d671d5a892c4b802cfb204881cd454Timo Sirainen struct pop3c_mailbox *mbox = (struct pop3c_mailbox *)box;
01435c38e7d671d5a892c4b802cfb204881cd454Timo Sirainen const struct mailbox_update *update ATTR_UNUSED,
01435c38e7d671d5a892c4b802cfb204881cd454Timo Sirainen mail_storage_set_error(box->storage, MAIL_ERROR_NOTPOSSIBLE,
01435c38e7d671d5a892c4b802cfb204881cd454Timo Sirainen "POP3 mailbox creation isn't supported");
01435c38e7d671d5a892c4b802cfb204881cd454Timo Sirainen const struct mailbox_update *update ATTR_UNUSED)
01435c38e7d671d5a892c4b802cfb204881cd454Timo Sirainen mail_storage_set_error(box->storage, MAIL_ERROR_NOTPOSSIBLE,
01435c38e7d671d5a892c4b802cfb204881cd454Timo Sirainen "POP3 mailbox update isn't supported");
01435c38e7d671d5a892c4b802cfb204881cd454Timo Sirainenstatic void pop3c_notify_changes(struct mailbox *box ATTR_UNUSED)
01435c38e7d671d5a892c4b802cfb204881cd454Timo Sirainenstatic bool pop3c_storage_is_inconsistent(struct mailbox *box)
01435c38e7d671d5a892c4b802cfb204881cd454Timo Sirainen struct pop3c_mailbox *mbox = (struct pop3c_mailbox *)box;