Mercurial > dovecot > core-2.2
changeset 21958:61665dc536ad
auth: Check var_expand error in vpopmail
author | Aki Tuomi <aki.tuomi@dovecot.fi> |
---|---|
date | Tue, 11 Apr 2017 20:39:55 +0300 |
parents | 23ea7cc3b559 |
children | a060d8f6eb32 |
files | src/auth/userdb-vpopmail.c |
diffstat | 1 files changed, 23 insertions(+), 9 deletions(-) [+] |
line wrap: on
line diff
--- a/src/auth/userdb-vpopmail.c Tue Apr 11 15:50:14 2017 +0300 +++ b/src/auth/userdb-vpopmail.c Tue Apr 11 20:39:55 2017 +0300 @@ -51,23 +51,29 @@ #endif #ifdef USERDB_VPOPMAIL -static const char * -userdb_vpopmail_get_quota(const char *template, const char *vpop_str) +static int +userdb_vpopmail_get_quota(const char *template, const char *vpop_str, + const char **quota_r, const char **error_r) { struct var_expand_table *tab; string_t *quota; if (template == NULL || *vpop_str == '\0' || - strcmp(vpop_str, "NOQUOTA") == 0) - return ""; + strcmp(vpop_str, "NOQUOTA") == 0) { + *quota_r = ""; + return 0; + } tab = t_new(struct var_expand_table, 2); tab[0].key = 'q'; tab[0].value = format_maildirquota(vpop_str); quota = t_str_new(128); - var_expand(quota, template, tab); - return str_c(quota); + if (var_expand(quota, template, tab, error_r) < 0) + return -1; + + *quota_r = str_c(quota); + return 0; } static void vpopmail_lookup(struct auth_request *auth_request, @@ -78,7 +84,7 @@ (struct vpopmail_userdb_module *)_module; char vpop_user[VPOPMAIL_LIMIT], vpop_domain[VPOPMAIL_LIMIT]; struct vqpasswd *vpw; - const char *quota; + const char *quota, *error; uid_t uid; gid_t gid; @@ -124,12 +130,20 @@ } } + if (userdb_vpopmail_get_quota(module->quota_template_value, + vpw->pw_shell, "a, &error) < 0) { + auth_request_log_error(auth_request, AUTH_SUBSYS_DB, + "userdb_vpopmail_get_quota(%s, %s) failed: %s", + module->quota_template_value, + vpw->pw_shell, error); + callback(USERDB_RESULT_INTERNAL_FAILURE, auth_request); + return; + } + auth_request_set_userdb_field(auth_request, "uid", dec2str(uid)); auth_request_set_userdb_field(auth_request, "gid", dec2str(gid)); auth_request_set_userdb_field(auth_request, "home", vpw->pw_dir); - quota = userdb_vpopmail_get_quota(module->quota_template_value, - vpw->pw_shell); if (*quota != '\0') { auth_request_set_userdb_field(auth_request, module->quota_template_key,