ctx->cmd->func = cmd_select_continue;
ctx->cmd->context = ctx;
- return FALSE;
+ return 0;
}
}
- return imap_fetch_deinit(fetch_ctx);
+ return imap_fetch_deinit(fetch_ctx) < 0 ? -1 : 1;
}
static int
struct client *client = ctx->cmd->client;
struct mailbox_status status;
enum mailbox_flags flags = 0;
+ int ret;
if (readonly)
flags |= MAILBOX_FLAG_READONLY | MAILBOX_FLAG_KEEP_RECENT;
}
if (ctx->qresync_uid_validity == status.uidvalidity) {
- if (select_qresync(ctx) < 0) {
+ if ((ret = select_qresync(ctx)) < 0) {
client_send_storage_error(ctx->cmd,
mailbox_get_storage(ctx->box));
return -1;
}
+ } else {
+ ret = 1;
}
- return 0;
+ return ret;
}
static void close_selected_mailbox(struct client *client)
}
ret = select_open(ctx, storage_name, readonly);
+ if (ret == 0)
+ return FALSE;
cmd_select_finish(ctx, ret);
return TRUE;
}
cmd = new_cmd->client->command_queue;
for (; cmd != NULL; cmd = cmd->next) {
+ i_warning("cmd=%s state=%d<=%d flags=%x & %x",
+ cmd->name, cmd->state, max_state, cmd->cmd_flags, flags);
if (cmd->state <= max_state &&
cmd != new_cmd && (cmd->cmd_flags & flags) != 0)
return cmd;
login_client_connected(const struct master_login_client *client,
const char *username, const char *const *extra_fields)
{
+#define MSG_BYE_INTERNAL_ERROR "* BYE "MAIL_ERRSTR_CRITICAL_MSG"\r\n"
struct mail_storage_service_input input;
const char *error;
buffer_t input_buf;
client->auth_req.data_size);
if (client_create_from_input(&input, client, client->fd, client->fd,
&input_buf, &error) < 0) {
+ if (write(client->fd, MSG_BYE_INTERNAL_ERROR,
+ strlen(MSG_BYE_INTERNAL_ERROR)) < 0) {
+ if (errno != EAGAIN && errno != EPIPE)
+ i_error("write(client) failed: %m");
+ }
i_error("%s", error);
(void)close(client->fd);
master_service_client_connection_destroyed(master_service);