# HG changeset patch # User Aki Tuomi # Date 1499759116 -10800 # Node ID 2c36911456543108ba864f96ac120f84ede4b778 # Parent 0ec61a44ed7bb41ea52e60c6089f816c98fed743 lib-storage: Remove user namespaces on hook error If there is a hook error during namespaces added remove the namespaces from user. This avoids attempts to use the namespaces later on without proper initialization. diff -r 0ec61a44ed7b -r 2c3691145654 src/lib-storage/mail-namespace.c --- a/src/lib-storage/mail-namespace.c Tue Jul 11 10:26:38 2017 +0300 +++ b/src/lib-storage/mail-namespace.c Tue Jul 11 10:45:16 2017 +0300 @@ -370,8 +370,22 @@ if (namespaces->user->autocreated) { /* e.g. raw user - don't check namespaces' validity */ } else if (!namespaces_check(namespaces, error_r)) { - *error_r = t_strconcat("namespace configuration error: ", - *error_r, NULL); + namespaces->user->error = + t_strconcat("namespace configuration error: ", + *error_r, NULL); + } + + if (namespaces->user->error == NULL) { + mail_user_add_namespace(namespaces->user, &namespaces); + T_BEGIN { + hook_mail_namespaces_created(namespaces); + } T_END; + } + + /* allow namespace hooks to return failure via the user error */ + if (namespaces->user->error != NULL) { + namespaces->user->namespaces = NULL; + *error_r = t_strdup(namespaces->user->error); while (namespaces != NULL) { ns = namespaces; namespaces = ns->next; @@ -379,17 +393,7 @@ } return -1; } - mail_user_add_namespace(namespaces->user, &namespaces); - T_BEGIN { - hook_mail_namespaces_created(namespaces); - } T_END; - - /* allow namespace hooks to return failure via the user error */ - if (namespaces->user->error != NULL) { - *error_r = t_strdup(namespaces->user->error); - return -1; - } namespaces->user->namespaces_created = TRUE; return 0; }