diff --git a/src/lib-sieve-tool/sieve-tool.c b/src/lib-sieve-tool/sieve-tool.c index 435f973805d5d271f58801bb11a35fbebed53f91..b034b1657bba5ca3091e3e65df8d7c4bbb1ddaa8 100644 --- a/src/lib-sieve-tool/sieve-tool.c +++ b/src/lib-sieve-tool/sieve-tool.c @@ -644,9 +644,9 @@ void sieve_tool_dump_binary_to(struct sieve_binary *sbin, void sieve_tool_parse_trace_option(struct sieve_trace_config *tr_config, const char *tr_option) { - if (str_begins(tr_option, "level=")) { - const char *lvl = &tr_option[6]; + const char *lvl; + if (str_begins(tr_option, "level=", &lvl)) { if (strcmp(lvl, "none") == 0) { tr_config->level = SIEVE_TRLVL_NONE; } else if (strcmp(lvl, "actions") == 0) { diff --git a/src/lib-sieve/plugins/environment/ext-environment-common.c b/src/lib-sieve/plugins/environment/ext-environment-common.c index d145b0e607feefd2e4e2e944e93d5719c079c33c..663fabddbe4a6ea18d3d3737675c8bb8691a7e9c 100644 --- a/src/lib-sieve/plugins/environment/ext-environment-common.c +++ b/src/lib-sieve/plugins/environment/ext-environment-common.c @@ -158,26 +158,21 @@ ext_environment_item_lookup(struct ext_environment_interpreter_context *ctx, const char **_name) { const struct sieve_environment_item *item; - const char *name = *_name; + const char *suffix, *name = *_name; item = hash_table_lookup(ctx->name_items, name); if (item != NULL) return item; array_foreach_elem(&ctx->prefix_items, item) { - size_t prefix_len; - i_assert(item->prefix); - prefix_len = strlen(item->name); - - if (str_begins(name, item->name)) { - if (name[prefix_len] == '.') { - *_name = &name[prefix_len+1]; - return item; - } else if (name[prefix_len] == '\0') { - *_name = &name[prefix_len]; - return item; - } + + if (str_begins(name, item->name, &suffix)) { + if (*suffix == '.') + ++suffix; + + *_name = suffix; + return item; } } return NULL; diff --git a/src/lib-sieve/plugins/notify/ext-notify-common.c b/src/lib-sieve/plugins/notify/ext-notify-common.c index 589b21bfdbf9f08ca99ced56e6ccf48184bdb61e..cda0ff9d8a8e6b0be2b7afedd3cf71af2646f59d 100644 --- a/src/lib-sieve/plugins/notify/ext-notify-common.c +++ b/src/lib-sieve/plugins/notify/ext-notify-common.c @@ -145,7 +145,7 @@ static bool _is_text_content(const struct message_header_line *hdr) /* Success */ data = str_c(content_type); - if (str_begins(data, "text/")) + if (str_begins_with(data, "text/")) return TRUE; return FALSE; } diff --git a/src/lib-sieve/plugins/vacation/cmd-vacation.c b/src/lib-sieve/plugins/vacation/cmd-vacation.c index ddc14be3b036ae9eb3f07dbe74ec0de341b8d347..b8999ab7c25513e3293c5906e0963c12c91107de 100644 --- a/src/lib-sieve/plugins/vacation/cmd-vacation.c +++ b/src/lib-sieve/plugins/vacation/cmd-vacation.c @@ -877,7 +877,7 @@ static inline bool _is_system_address(const struct smtp_address *address) return TRUE; if (strstr(address->localpart, "-request") != NULL) return TRUE; - if (str_begins(address->localpart, "owner-")) + if (str_begins_with(address->localpart, "owner-")) return TRUE; return FALSE; } diff --git a/src/lib-sieve/storage/file/sieve-file-storage-save.c b/src/lib-sieve/storage/file/sieve-file-storage-save.c index dd23066966f2c279cce6528fa7ce41d427476f73..3c0f6e55aab1a20860933341bae52b01a73c4c78 100644 --- a/src/lib-sieve/storage/file/sieve-file-storage-save.c +++ b/src/lib-sieve/storage/file/sieve-file-storage-save.c @@ -222,9 +222,9 @@ int sieve_file_storage_save_init(struct sieve_storage_save_context *sctx, svext = strrchr(fstorage->active_fname, '.'); namelen = svext - fstorage->active_fname; - if ( svext != NULL && str_begins(svext+1, "sieve") && + if ( svext != NULL && str_begins_with(svext+1, "sieve") && strlen(scriptname) == namelen && - str_begins(fstorage->active_fname, scriptname) ) + str_begins_with(fstorage->active_fname, scriptname) ) { sieve_storage_set_error(storage, SIEVE_ERROR_BAD_PARAMS, diff --git a/src/lib-sieve/storage/ldap/sieve-ldap-db.c b/src/lib-sieve/storage/ldap/sieve-ldap-db.c index 8da710f2ec52db001de2933e8a30816803620b66..2fb16d674347972418e7623c7354b0b3f52c8ccf 100644 --- a/src/lib-sieve/storage/ldap/sieve-ldap-db.c +++ b/src/lib-sieve/storage/ldap/sieve-ldap-db.c @@ -836,7 +836,7 @@ int sieve_ldap_db_connect(struct ldap_connection *conn) if (ret != LDAP_SUCCESS) { if (ret == LDAP_OPERATIONS_ERROR && set->uris != NULL && - str_begins(set->uris, "ldaps:")) { + str_begins_with(set->uris, "ldaps:")) { e_error(storage->event, "db: " "Don't use both tls=yes and ldaps URI"); } diff --git a/src/plugins/doveadm-sieve/doveadm-sieve-sync.c b/src/plugins/doveadm-sieve/doveadm-sieve-sync.c index 236638239766ed53d16f762bccc4eca294f6bb01..86a706ef6c374a86015eb9190f34c783f5d57f2d 100644 --- a/src/plugins/doveadm-sieve/doveadm-sieve-sync.c +++ b/src/plugins/doveadm-sieve/doveadm-sieve-sync.c @@ -292,12 +292,11 @@ sieve_attribute_set_sieve(struct mail_storage *storage, if (strcmp(key, MAILBOX_ATTRIBUTE_SIEVE_DEFAULT) == 0) return sieve_attribute_set_default(storage, svstorage, value); - if (!str_begins(key, MAILBOX_ATTRIBUTE_PREFIX_SIEVE_FILES)) { + if (!str_begins(key, MAILBOX_ATTRIBUTE_PREFIX_SIEVE_FILES, &scriptname)) { mail_storage_set_error(storage, MAIL_ERROR_NOTFOUND, "Nonexistent sieve attribute"); return -1; } - scriptname = key + strlen(MAILBOX_ATTRIBUTE_PREFIX_SIEVE_FILES); if (value->value != NULL) { input = i_stream_create_from_data(value->value, @@ -370,7 +369,7 @@ sieve_attribute_set(struct mailbox_transaction_context *t, if (t->box->storage->user->dsyncing && type == MAIL_ATTRIBUTE_TYPE_PRIVATE && - str_begins(key, MAILBOX_ATTRIBUTE_PREFIX_SIEVE)) { + str_begins_with(key, MAILBOX_ATTRIBUTE_PREFIX_SIEVE)) { time_t ts = (value->last_change != 0 ? value->last_change : ioloop_time); @@ -516,14 +515,13 @@ sieve_attribute_get_sieve(struct mail_storage *storage, const char *key, if (strcmp(key, MAILBOX_ATTRIBUTE_SIEVE_DEFAULT) == 0) return sieve_attribute_get_default(storage, svstorage, value_r); - if (!str_begins(key, MAILBOX_ATTRIBUTE_PREFIX_SIEVE_FILES)) + if (!str_begins(key, MAILBOX_ATTRIBUTE_PREFIX_SIEVE_FILES, &scriptname)) return 0; if ((value_r->flags & MAIL_ATTRIBUTE_VALUE_FLAG_INT_STREAMS) == 0) { mail_storage_set_error(storage, MAIL_ERROR_PARAMS, "Sieve attributes are available only as streams"); return -1; } - scriptname = key + strlen(MAILBOX_ATTRIBUTE_PREFIX_SIEVE_FILES); script = sieve_storage_open_script(svstorage, scriptname, NULL); if ((ret=sieve_attribute_retrieve_script (storage, svstorage, script, FALSE, value_r, &errstr)) < 0) { @@ -545,7 +543,7 @@ sieve_attribute_get(struct mailbox *box, if (box->storage->user->dsyncing && type == MAIL_ATTRIBUTE_TYPE_PRIVATE && - str_begins(key, MAILBOX_ATTRIBUTE_PREFIX_SIEVE)) { + str_begins_with(key, MAILBOX_ATTRIBUTE_PREFIX_SIEVE)) { ret = sieve_attribute_get_sieve(box->storage, key, value_r); if (ret >= 0 && user->mail_debug) {