const char *key, const char *value)
{
const char *p;
+ unsigned int len;
- if (strcmp(key, "base_dir") == 0)
+ if (strcmp(key, "base_dir") == 0) {
+ len = strlen(value);
+ if (len > 0 && value[len-1] == '/')
+ value = t_strndup(value, len-1);
ctx->old->base_dir = p_strdup(ctx->pool, value);
+ }
if (strcmp(key, "protocols") == 0) {
char **protos, **s;
bool have_imap = FALSE, have_imaps = FALSE;
struct service_settings *const *services;
const char *const *strings;
ARRAY_TYPE(const_string) all_listeners;
- unsigned int i, j, count, process_limit;
+ unsigned int i, j, count, len, process_limit;
unsigned int auth_client_limit, max_auth_client_processes;
+ len = strlen(set->base_dir);
+ if (len > 0 && set->base_dir[len-1] == '/') {
+ /* drop trailing '/' */
+ set->base_dir = p_strndup(pool, set->base_dir, len - 1);
+ }
+
if (set->last_valid_uid != 0 &&
set->first_valid_uid > set->last_valid_uid) {
*error_r = "first_valid_uid can't be larger than last_valid_uid";