imap-urlauth-backend.c revision 7b9197b917d6f546bfea70ba8a443e61de90242a
a6ab8f00351265e35b79f3a22b1f5a4978ae5c35Timo Sirainen/* Copyright (c) 2013 Dovecot authors, see the included COPYING file */
5fbccc935e3f7b916aa7c6e302a212821072e83aTimo Sirainen#define IMAP_URLAUTH_KEY MAILBOX_ATTRIBUTE_PREFIX_DOVECOT"imap-urlauth"
cf63dc8723b971cc80638fccbf494d961cbafc7fTimo Sirainenint imap_urlauth_backend_get_mailbox_key(struct mailbox *box, bool create,
a6ab8f00351265e35b79f3a22b1f5a4978ae5c35Timo Sirainen unsigned char mailbox_key_r[IMAP_URLAUTH_KEY_LEN],
1db62753d9e3b5d71018889c8ef0a3722a307455Timo Sirainen const char **error_r,
42681892b206d13cb87a5f526d2bf4ff3f2f4af7Timo Sirainen struct mail_user *user = mail_storage_get_user(mailbox_get_storage(box));
42681892b206d13cb87a5f526d2bf4ff3f2f4af7Timo Sirainen ret = mailbox_attribute_get(box, MAIL_ATTRIBUTE_TYPE_PRIVATE,
42681892b206d13cb87a5f526d2bf4ff3f2f4af7Timo Sirainen i_debug("imap-urlauth: %skey found for mailbox %s",
1db62753d9e3b5d71018889c8ef0a3722a307455Timo Sirainen (ret > 0 ? "" : "no "), mailbox_get_vname(box));
62d0db14d2c5008758983c28d242ec158baabf9eTimo Sirainen /* create new key */
42681892b206d13cb87a5f526d2bf4ff3f2f4af7Timo Sirainen random_fill(mailbox_key_r, IMAP_URLAUTH_KEY_LEN);
42681892b206d13cb87a5f526d2bf4ff3f2f4af7Timo Sirainen mailbox_key_hex = binary_to_hex(mailbox_key_r,
5fbccc935e3f7b916aa7c6e302a212821072e83aTimo Sirainen ret = mailbox_attribute_set(box, MAIL_ATTRIBUTE_TYPE_PRIVATE,
a6ab8f00351265e35b79f3a22b1f5a4978ae5c35Timo Sirainen i_debug("imap-urlauth: created key for mailbox %s",
1db62753d9e3b5d71018889c8ef0a3722a307455Timo Sirainen /* read existing key */
1db62753d9e3b5d71018889c8ef0a3722a307455Timo Sirainen buffer_create_from_data(&key_buf, mailbox_key_r,
1db62753d9e3b5d71018889c8ef0a3722a307455Timo Sirainen if (strlen(mailbox_key_hex) != 2*IMAP_URLAUTH_KEY_LEN ||
1db62753d9e3b5d71018889c8ef0a3722a307455Timo Sirainen hex_to_binary(mailbox_key_hex, &key_buf) < 0 ||
1db62753d9e3b5d71018889c8ef0a3722a307455Timo Sirainen i_error("imap-urlauth: key found for mailbox %s is invalid",
10b8040903b1d1591f1d44552ff466c8789b8814Timo Sirainen memcpy(mailbox_key_r, key_buf.data, IMAP_URLAUTH_KEY_LEN);
72bc08129fb0aaec8144cc183a998ccc426fef9eTimo Sirainenint imap_urlauth_backend_reset_mailbox_key(struct mailbox *box)
1db62753d9e3b5d71018889c8ef0a3722a307455Timo Sirainen return mailbox_attribute_unset(box, MAIL_ATTRIBUTE_TYPE_PRIVATE,
f7141101e27d766b695ef27726f755117332a58eTimo Sirainenint imap_urlauth_backend_reset_all_keys(struct mail_user *user)
32c779d5d0b3dabc697408e6b5d9d2e652180b33Timo Sirainen iter = mailbox_list_iter_init_namespaces(user->namespaces, patterns,
885a3c2287ae3e5827aa580ea06b231de38abb47Timo Sirainen while ((info = mailbox_list_iter_next(iter)) != NULL) {
885a3c2287ae3e5827aa580ea06b231de38abb47Timo Sirainen box = mailbox_alloc(info->ns->list, info->vname, 0);