static struct mail_search_arg * arg_new_body(struct mail_search_build_context *ctx, enum mail_search_arg_type type) { struct mail_search_arg *sarg; sarg = mail_search_build_str(ctx, type); if (sarg == NULL) return NULL; if (mail_search_build_get_utf8(ctx, sarg->value.str, &sarg->value.str) < 0) return NULL; return sarg; }
static struct mail_search_arg * imap_search_x_real_uid(struct mail_search_build_context *ctx) { struct mail_search_arg *sarg; /* <message set> */ sarg = mail_search_build_str(ctx, SEARCH_REAL_UID); if (sarg == NULL) return NULL; p_array_init(&sarg->value.seqset, ctx->pool, 16); if (imap_seq_set_parse(sarg->value.str, &sarg->value.seqset) < 0) { ctx->_error = "Invalid X-REAL-UID messageset"; return NULL; } return sarg; }
static struct mail_search_arg * imap_search_x_mailbox(struct mail_search_build_context *ctx) { struct mail_search_arg *sarg; string_t *utf8_name; sarg = mail_search_build_str(ctx, SEARCH_MAILBOX_GLOB); if (sarg == NULL) return NULL; utf8_name = t_str_new(strlen(sarg->value.str)); if (imap_utf7_to_utf8(sarg->value.str, utf8_name) < 0) { ctx->_error = "X-MAILBOX name not mUTF-7"; return NULL; } sarg->value.str = p_strdup(ctx->pool, str_c(utf8_name)); return sarg; }
static struct mail_search_arg * human_search_mailbox(struct mail_search_build_context *ctx) { struct mail_search_arg *sarg; sarg = mail_search_build_str(ctx, SEARCH_MAILBOX); if (sarg == NULL) return NULL; if (strchr(sarg->value.str, '*') != NULL || strchr(sarg->value.str, '%') != NULL) sarg->type = SEARCH_MAILBOX_GLOB; if (!uni_utf8_str_is_valid(sarg->value.str)) { ctx->_error = p_strconcat(ctx->pool, "Mailbox name not valid UTF-8: ", sarg->value.str, NULL); return NULL; } return sarg; }
static struct mail_search_arg * arg_new_body(struct mail_search_build_context *ctx, enum mail_search_arg_type type) { struct mail_search_arg *sarg; sarg = mail_search_build_str(ctx, type); if (sarg == NULL) return NULL; if (mail_search_build_get_utf8(ctx, sarg->value.str, &sarg->value.str) < 0) return NULL; if (mail_search_parse_skip_next(ctx->parser, "")) { /* optimization: BODY "" matches everything (but do this only after checking charset and key are ok) */ return mail_search_build_new(ctx, SEARCH_ALL); } return sarg; }
static struct mail_search_arg * imap_search_uid(struct mail_search_build_context *ctx) { struct mail_search_arg *sarg; /* <message set> */ sarg = mail_search_build_str(ctx, SEARCH_UIDSET); if (sarg == NULL) return NULL; p_array_init(&sarg->value.seqset, ctx->pool, 16); if (strcmp(sarg->value.str, "$") == 0) { /* SEARCHRES: delay initialization */ } else { if (imap_seq_set_parse(sarg->value.str, &sarg->value.seqset) < 0) { ctx->_error = "Invalid UID messageset"; return NULL; } } return sarg; }
static struct mail_search_arg * human_search_mailbox_guid(struct mail_search_build_context *ctx) { return mail_search_build_str(ctx, SEARCH_MAILBOX_GUID); }