annotate src/auth/userdb-vpopmail.c @ 9008:fc4f65a4ca60 HEAD

virtual: Don't show mailboxes as \Noselect.
author Timo Sirainen <tss@iki.fi>
date Fri, 01 May 2009 14:56:52 -0400
parents b9faf4db2a9f
children 597e18c0bc7e
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
8590
b9faf4db2a9f Updated copyright notices to include year 2009.
Timo Sirainen <tss@iki.fi>
parents: 8513
diff changeset
1 /* Copyright (c) 2002-2009 Dovecot authors, see the included COPYING file */
1035
fe49ece0f3ea We have now separate "userdb" and "passdb". They aren't tied to each others
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
2
fe49ece0f3ea We have now separate "userdb" and "passdb". They aren't tied to each others
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
3 /* Thanks to Courier-IMAP for showing how the vpopmail API should be used */
fe49ece0f3ea We have now separate "userdb" and "passdb". They aren't tied to each others
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
4
3474
9096b7957413 Removed direct config.h including. I'm not sure why it was done before,
Timo Sirainen <tss@iki.fi>
parents: 3166
diff changeset
5 #include "common.h"
8217
c47b78e843aa Separate "unknown passdb/userdb X" and "support for X not compiled in" error messages.
Timo Sirainen <tss@iki.fi>
parents: 7086
diff changeset
6 #include "userdb.h"
1035
fe49ece0f3ea We have now separate "userdb" and "passdb". They aren't tied to each others
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
7
fe49ece0f3ea We have now separate "userdb" and "passdb". They aren't tied to each others
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
8 #if defined(PASSDB_VPOPMAIL) || defined(USERDB_VPOPMAIL)
5705
4c62af215aca Added quota_template parameter to userdb vpopmail.
Timo Sirainen <tss@iki.fi>
parents: 5489
diff changeset
9 #include "str.h"
4c62af215aca Added quota_template parameter to userdb vpopmail.
Timo Sirainen <tss@iki.fi>
parents: 5489
diff changeset
10 #include "var-expand.h"
1035
fe49ece0f3ea We have now separate "userdb" and "passdb". They aren't tied to each others
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
11 #include "userdb-vpopmail.h"
fe49ece0f3ea We have now separate "userdb" and "passdb". They aren't tied to each others
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
12
5705
4c62af215aca Added quota_template parameter to userdb vpopmail.
Timo Sirainen <tss@iki.fi>
parents: 5489
diff changeset
13 struct vpopmail_userdb_module {
4c62af215aca Added quota_template parameter to userdb vpopmail.
Timo Sirainen <tss@iki.fi>
parents: 5489
diff changeset
14 struct userdb_module module;
4c62af215aca Added quota_template parameter to userdb vpopmail.
Timo Sirainen <tss@iki.fi>
parents: 5489
diff changeset
15
4c62af215aca Added quota_template parameter to userdb vpopmail.
Timo Sirainen <tss@iki.fi>
parents: 5489
diff changeset
16 const char *quota_template_key;
4c62af215aca Added quota_template parameter to userdb vpopmail.
Timo Sirainen <tss@iki.fi>
parents: 5489
diff changeset
17 const char *quota_template_value;
4c62af215aca Added quota_template parameter to userdb vpopmail.
Timo Sirainen <tss@iki.fi>
parents: 5489
diff changeset
18 };
4c62af215aca Added quota_template parameter to userdb vpopmail.
Timo Sirainen <tss@iki.fi>
parents: 5489
diff changeset
19
3069
131151e25e4b Added auth_request_log_*().
Timo Sirainen <tss@iki.fi>
parents: 2942
diff changeset
20 struct vqpasswd *vpopmail_lookup_vqp(struct auth_request *request,
1035
fe49ece0f3ea We have now separate "userdb" and "passdb". They aren't tied to each others
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
21 char vpop_user[VPOPMAIL_LIMIT],
fe49ece0f3ea We have now separate "userdb" and "passdb". They aren't tied to each others
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
22 char vpop_domain[VPOPMAIL_LIMIT])
fe49ece0f3ea We have now separate "userdb" and "passdb". They aren't tied to each others
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
23 {
fe49ece0f3ea We have now separate "userdb" and "passdb". They aren't tied to each others
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
24 struct vqpasswd *vpw;
fe49ece0f3ea We have now separate "userdb" and "passdb". They aren't tied to each others
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
25
1191
65e48854491d Added default_pass_scheme to LDAP. Support for more password schemes. Merged
Timo Sirainen <tss@iki.fi>
parents: 1149
diff changeset
26 /* vpop_user must be zero-filled or parse_email() leaves an
65e48854491d Added default_pass_scheme to LDAP. Support for more password schemes. Merged
Timo Sirainen <tss@iki.fi>
parents: 1149
diff changeset
27 extra character after the user name. we'll fill vpop_domain
65e48854491d Added default_pass_scheme to LDAP. Support for more password schemes. Merged
Timo Sirainen <tss@iki.fi>
parents: 1149
diff changeset
28 as well just to be sure... */
65e48854491d Added default_pass_scheme to LDAP. Support for more password schemes. Merged
Timo Sirainen <tss@iki.fi>
parents: 1149
diff changeset
29 memset(vpop_user, '\0', VPOPMAIL_LIMIT);
65e48854491d Added default_pass_scheme to LDAP. Support for more password schemes. Merged
Timo Sirainen <tss@iki.fi>
parents: 1149
diff changeset
30 memset(vpop_domain, '\0', VPOPMAIL_LIMIT);
1035
fe49ece0f3ea We have now separate "userdb" and "passdb". They aren't tied to each others
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
31
3152
a6e0776ac938 compile fixes
Timo Sirainen <tss@iki.fi>
parents: 3069
diff changeset
32 if (parse_email(request->user, vpop_user, vpop_domain,
1191
65e48854491d Added default_pass_scheme to LDAP. Support for more password schemes. Merged
Timo Sirainen <tss@iki.fi>
parents: 1149
diff changeset
33 VPOPMAIL_LIMIT-1) < 0) {
3069
131151e25e4b Added auth_request_log_*().
Timo Sirainen <tss@iki.fi>
parents: 2942
diff changeset
34 auth_request_log_info(request, "vpopmail",
131151e25e4b Added auth_request_log_*().
Timo Sirainen <tss@iki.fi>
parents: 2942
diff changeset
35 "parse_email() failed");
1191
65e48854491d Added default_pass_scheme to LDAP. Support for more password schemes. Merged
Timo Sirainen <tss@iki.fi>
parents: 1149
diff changeset
36 return NULL;
1035
fe49ece0f3ea We have now separate "userdb" and "passdb". They aren't tied to each others
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
37 }
fe49ece0f3ea We have now separate "userdb" and "passdb". They aren't tied to each others
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
38
5300
4df292d2404d Compile fix
Timo Sirainen <tss@iki.fi>
parents: 5259
diff changeset
39 auth_request_log_debug(request, "vpopmail",
5259
228eacfb2647 Added more debug logging.
Timo Sirainen <tss@iki.fi>
parents: 4955
diff changeset
40 "lookup user=%s domain=%s",
228eacfb2647 Added more debug logging.
Timo Sirainen <tss@iki.fi>
parents: 4955
diff changeset
41 vpop_user, vpop_domain);
228eacfb2647 Added more debug logging.
Timo Sirainen <tss@iki.fi>
parents: 4955
diff changeset
42
1035
fe49ece0f3ea We have now separate "userdb" and "passdb". They aren't tied to each others
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
43 vpw = vauth_getpw(vpop_user, vpop_domain);
fe49ece0f3ea We have now separate "userdb" and "passdb". They aren't tied to each others
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
44 if (vpw == NULL) {
3069
131151e25e4b Added auth_request_log_*().
Timo Sirainen <tss@iki.fi>
parents: 2942
diff changeset
45 auth_request_log_info(request, "vpopmail", "unknown user");
1035
fe49ece0f3ea We have now separate "userdb" and "passdb". They aren't tied to each others
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
46 return NULL;
fe49ece0f3ea We have now separate "userdb" and "passdb". They aren't tied to each others
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
47 }
fe49ece0f3ea We have now separate "userdb" and "passdb". They aren't tied to each others
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
48
fe49ece0f3ea We have now separate "userdb" and "passdb". They aren't tied to each others
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
49 return vpw;
fe49ece0f3ea We have now separate "userdb" and "passdb". They aren't tied to each others
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
50 }
8217
c47b78e843aa Separate "unknown passdb/userdb X" and "support for X not compiled in" error messages.
Timo Sirainen <tss@iki.fi>
parents: 7086
diff changeset
51 #endif
1035
fe49ece0f3ea We have now separate "userdb" and "passdb". They aren't tied to each others
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
52
fe49ece0f3ea We have now separate "userdb" and "passdb". They aren't tied to each others
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
53 #ifdef USERDB_VPOPMAIL
5705
4c62af215aca Added quota_template parameter to userdb vpopmail.
Timo Sirainen <tss@iki.fi>
parents: 5489
diff changeset
54 static const char *
4c62af215aca Added quota_template parameter to userdb vpopmail.
Timo Sirainen <tss@iki.fi>
parents: 5489
diff changeset
55 userdb_vpopmail_get_quota(const char *template, const char *vpop_str)
4c62af215aca Added quota_template parameter to userdb vpopmail.
Timo Sirainen <tss@iki.fi>
parents: 5489
diff changeset
56 {
4c62af215aca Added quota_template parameter to userdb vpopmail.
Timo Sirainen <tss@iki.fi>
parents: 5489
diff changeset
57 const struct var_expand_table *tab;
4c62af215aca Added quota_template parameter to userdb vpopmail.
Timo Sirainen <tss@iki.fi>
parents: 5489
diff changeset
58 string_t *quota;
4c62af215aca Added quota_template parameter to userdb vpopmail.
Timo Sirainen <tss@iki.fi>
parents: 5489
diff changeset
59
4c62af215aca Added quota_template parameter to userdb vpopmail.
Timo Sirainen <tss@iki.fi>
parents: 5489
diff changeset
60 if (template == NULL || *vpop_str == '\0' ||
4c62af215aca Added quota_template parameter to userdb vpopmail.
Timo Sirainen <tss@iki.fi>
parents: 5489
diff changeset
61 strcmp(vpop_str, "NOQUOTA") == 0)
4c62af215aca Added quota_template parameter to userdb vpopmail.
Timo Sirainen <tss@iki.fi>
parents: 5489
diff changeset
62 return "";
4c62af215aca Added quota_template parameter to userdb vpopmail.
Timo Sirainen <tss@iki.fi>
parents: 5489
diff changeset
63
4c62af215aca Added quota_template parameter to userdb vpopmail.
Timo Sirainen <tss@iki.fi>
parents: 5489
diff changeset
64 tab = var_expand_table_build('q', format_maildirquota(vpop_str), '\0');
4c62af215aca Added quota_template parameter to userdb vpopmail.
Timo Sirainen <tss@iki.fi>
parents: 5489
diff changeset
65 quota = t_str_new(128);
4c62af215aca Added quota_template parameter to userdb vpopmail.
Timo Sirainen <tss@iki.fi>
parents: 5489
diff changeset
66 var_expand(quota, template, tab);
4c62af215aca Added quota_template parameter to userdb vpopmail.
Timo Sirainen <tss@iki.fi>
parents: 5489
diff changeset
67 return str_c(quota);
4c62af215aca Added quota_template parameter to userdb vpopmail.
Timo Sirainen <tss@iki.fi>
parents: 5489
diff changeset
68 }
4c62af215aca Added quota_template parameter to userdb vpopmail.
Timo Sirainen <tss@iki.fi>
parents: 5489
diff changeset
69
2057
5e0167577399 Fixed var_expand() to take a table of variables rather than a few predefined
Timo Sirainen <tss@iki.fi>
parents: 2055
diff changeset
70 static void vpopmail_lookup(struct auth_request *auth_request,
3166
e6a487d80288 Restructuring of auth code. Balancer auth processes were a bad idea. Usually
Timo Sirainen <tss@iki.fi>
parents: 3158
diff changeset
71 userdb_callback_t *callback)
1035
fe49ece0f3ea We have now separate "userdb" and "passdb". They aren't tied to each others
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
72 {
5705
4c62af215aca Added quota_template parameter to userdb vpopmail.
Timo Sirainen <tss@iki.fi>
parents: 5489
diff changeset
73 struct userdb_module *_module = auth_request->userdb->userdb;
4c62af215aca Added quota_template parameter to userdb vpopmail.
Timo Sirainen <tss@iki.fi>
parents: 5489
diff changeset
74 struct vpopmail_userdb_module *module =
4c62af215aca Added quota_template parameter to userdb vpopmail.
Timo Sirainen <tss@iki.fi>
parents: 5489
diff changeset
75 (struct vpopmail_userdb_module *)_module;
1035
fe49ece0f3ea We have now separate "userdb" and "passdb". They aren't tied to each others
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
76 char vpop_user[VPOPMAIL_LIMIT], vpop_domain[VPOPMAIL_LIMIT];
fe49ece0f3ea We have now separate "userdb" and "passdb". They aren't tied to each others
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
77 struct vqpasswd *vpw;
5705
4c62af215aca Added quota_template parameter to userdb vpopmail.
Timo Sirainen <tss@iki.fi>
parents: 5489
diff changeset
78 const char *quota;
1035
fe49ece0f3ea We have now separate "userdb" and "passdb". They aren't tied to each others
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
79 uid_t uid;
fe49ece0f3ea We have now separate "userdb" and "passdb". They aren't tied to each others
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
80 gid_t gid;
fe49ece0f3ea We have now separate "userdb" and "passdb". They aren't tied to each others
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
81
3069
131151e25e4b Added auth_request_log_*().
Timo Sirainen <tss@iki.fi>
parents: 2942
diff changeset
82 vpw = vpopmail_lookup_vqp(auth_request, vpop_user, vpop_domain);
1046
561da07883b6 Async userdb and passdb interface.
Timo Sirainen <tss@iki.fi>
parents: 1035
diff changeset
83 if (vpw == NULL) {
5872
93bd157917ca Changed userdb callback API. Don't require uid/gid to be returned by userdb.
Timo Sirainen <tss@iki.fi>
parents: 5705
diff changeset
84 callback(USERDB_RESULT_USER_UNKNOWN, auth_request);
1046
561da07883b6 Async userdb and passdb interface.
Timo Sirainen <tss@iki.fi>
parents: 1035
diff changeset
85 return;
561da07883b6 Async userdb and passdb interface.
Timo Sirainen <tss@iki.fi>
parents: 1035
diff changeset
86 }
1035
fe49ece0f3ea We have now separate "userdb" and "passdb". They aren't tied to each others
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
87
fe49ece0f3ea We have now separate "userdb" and "passdb". They aren't tied to each others
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
88 /* we have to get uid/gid separately, because the gid field in
fe49ece0f3ea We have now separate "userdb" and "passdb". They aren't tied to each others
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
89 struct vqpasswd isn't really gid at all but just some flags... */
fe49ece0f3ea We have now separate "userdb" and "passdb". They aren't tied to each others
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
90 if (vget_assign(vpop_domain, NULL, 0, &uid, &gid) == NULL) {
3152
a6e0776ac938 compile fixes
Timo Sirainen <tss@iki.fi>
parents: 3069
diff changeset
91 auth_request_log_info(auth_request, "vpopmail",
3069
131151e25e4b Added auth_request_log_*().
Timo Sirainen <tss@iki.fi>
parents: 2942
diff changeset
92 "vget_assign(%s) failed", vpop_domain);
5872
93bd157917ca Changed userdb callback API. Don't require uid/gid to be returned by userdb.
Timo Sirainen <tss@iki.fi>
parents: 5705
diff changeset
93 callback(USERDB_RESULT_INTERNAL_FAILURE, auth_request);
1046
561da07883b6 Async userdb and passdb interface.
Timo Sirainen <tss@iki.fi>
parents: 1035
diff changeset
94 return;
1035
fe49ece0f3ea We have now separate "userdb" and "passdb". They aren't tied to each others
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
95 }
fe49ece0f3ea We have now separate "userdb" and "passdb". They aren't tied to each others
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
96
5489
c87340986664 Call vset_lastauth()
Timo Sirainen <tss@iki.fi>
parents: 5300
diff changeset
97 if (auth_request->successful) {
c87340986664 Call vset_lastauth()
Timo Sirainen <tss@iki.fi>
parents: 5300
diff changeset
98 /* update the last login only when we're really */
5705
4c62af215aca Added quota_template parameter to userdb vpopmail.
Timo Sirainen <tss@iki.fi>
parents: 5489
diff changeset
99 vset_lastauth(vpop_user, vpop_domain,
4c62af215aca Added quota_template parameter to userdb vpopmail.
Timo Sirainen <tss@iki.fi>
parents: 5489
diff changeset
100 t_strdup_noconst(auth_request->service));
5489
c87340986664 Call vset_lastauth()
Timo Sirainen <tss@iki.fi>
parents: 5300
diff changeset
101 }
c87340986664 Call vset_lastauth()
Timo Sirainen <tss@iki.fi>
parents: 5300
diff changeset
102
1035
fe49ece0f3ea We have now separate "userdb" and "passdb". They aren't tied to each others
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
103 if (vpw->pw_dir == NULL || vpw->pw_dir[0] == '\0') {
fe49ece0f3ea We have now separate "userdb" and "passdb". They aren't tied to each others
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
104 /* user's homedir doesn't exist yet, create it */
3152
a6e0776ac938 compile fixes
Timo Sirainen <tss@iki.fi>
parents: 3069
diff changeset
105 auth_request_log_info(auth_request, "vpopmail",
3069
131151e25e4b Added auth_request_log_*().
Timo Sirainen <tss@iki.fi>
parents: 2942
diff changeset
106 "pw_dir isn't set, creating");
1035
fe49ece0f3ea We have now separate "userdb" and "passdb". They aren't tied to each others
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
107
fe49ece0f3ea We have now separate "userdb" and "passdb". They aren't tied to each others
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
108 if (make_user_dir(vpop_user, vpop_domain, uid, gid) == NULL) {
3152
a6e0776ac938 compile fixes
Timo Sirainen <tss@iki.fi>
parents: 3069
diff changeset
109 auth_request_log_error(auth_request, "vpopmail",
3069
131151e25e4b Added auth_request_log_*().
Timo Sirainen <tss@iki.fi>
parents: 2942
diff changeset
110 "make_user_dir(%s, %s) failed",
131151e25e4b Added auth_request_log_*().
Timo Sirainen <tss@iki.fi>
parents: 2942
diff changeset
111 vpop_user, vpop_domain);
5872
93bd157917ca Changed userdb callback API. Don't require uid/gid to be returned by userdb.
Timo Sirainen <tss@iki.fi>
parents: 5705
diff changeset
112 callback(USERDB_RESULT_INTERNAL_FAILURE, auth_request);
1046
561da07883b6 Async userdb and passdb interface.
Timo Sirainen <tss@iki.fi>
parents: 1035
diff changeset
113 return;
1035
fe49ece0f3ea We have now separate "userdb" and "passdb". They aren't tied to each others
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
114 }
fe49ece0f3ea We have now separate "userdb" and "passdb". They aren't tied to each others
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
115
fe49ece0f3ea We have now separate "userdb" and "passdb". They aren't tied to each others
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
116 /* get the user again so pw_dir is visible */
fe49ece0f3ea We have now separate "userdb" and "passdb". They aren't tied to each others
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
117 vpw = vauth_getpw(vpop_user, vpop_domain);
1046
561da07883b6 Async userdb and passdb interface.
Timo Sirainen <tss@iki.fi>
parents: 1035
diff changeset
118 if (vpw == NULL) {
5872
93bd157917ca Changed userdb callback API. Don't require uid/gid to be returned by userdb.
Timo Sirainen <tss@iki.fi>
parents: 5705
diff changeset
119 callback(USERDB_RESULT_INTERNAL_FAILURE, auth_request);
1046
561da07883b6 Async userdb and passdb interface.
Timo Sirainen <tss@iki.fi>
parents: 1035
diff changeset
120 return;
561da07883b6 Async userdb and passdb interface.
Timo Sirainen <tss@iki.fi>
parents: 1035
diff changeset
121 }
1035
fe49ece0f3ea We have now separate "userdb" and "passdb". They aren't tied to each others
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
122 }
fe49ece0f3ea We have now separate "userdb" and "passdb". They aren't tied to each others
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
123
5872
93bd157917ca Changed userdb callback API. Don't require uid/gid to be returned by userdb.
Timo Sirainen <tss@iki.fi>
parents: 5705
diff changeset
124 auth_request_init_userdb_reply(auth_request);
93bd157917ca Changed userdb callback API. Don't require uid/gid to be returned by userdb.
Timo Sirainen <tss@iki.fi>
parents: 5705
diff changeset
125 auth_request_set_userdb_field(auth_request, "uid", dec2str(uid));
93bd157917ca Changed userdb callback API. Don't require uid/gid to be returned by userdb.
Timo Sirainen <tss@iki.fi>
parents: 5705
diff changeset
126 auth_request_set_userdb_field(auth_request, "gid", dec2str(gid));
93bd157917ca Changed userdb callback API. Don't require uid/gid to be returned by userdb.
Timo Sirainen <tss@iki.fi>
parents: 5705
diff changeset
127 auth_request_set_userdb_field(auth_request, "home", vpw->pw_dir);
1035
fe49ece0f3ea We have now separate "userdb" and "passdb". They aren't tied to each others
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
128
5705
4c62af215aca Added quota_template parameter to userdb vpopmail.
Timo Sirainen <tss@iki.fi>
parents: 5489
diff changeset
129 quota = userdb_vpopmail_get_quota(module->quota_template_value,
4c62af215aca Added quota_template parameter to userdb vpopmail.
Timo Sirainen <tss@iki.fi>
parents: 5489
diff changeset
130 vpw->pw_shell);
5872
93bd157917ca Changed userdb callback API. Don't require uid/gid to be returned by userdb.
Timo Sirainen <tss@iki.fi>
parents: 5705
diff changeset
131 if (*quota != '\0') {
93bd157917ca Changed userdb callback API. Don't require uid/gid to be returned by userdb.
Timo Sirainen <tss@iki.fi>
parents: 5705
diff changeset
132 auth_request_set_userdb_field(auth_request,
93bd157917ca Changed userdb callback API. Don't require uid/gid to be returned by userdb.
Timo Sirainen <tss@iki.fi>
parents: 5705
diff changeset
133 module->quota_template_key,
93bd157917ca Changed userdb callback API. Don't require uid/gid to be returned by userdb.
Timo Sirainen <tss@iki.fi>
parents: 5705
diff changeset
134 quota);
93bd157917ca Changed userdb callback API. Don't require uid/gid to be returned by userdb.
Timo Sirainen <tss@iki.fi>
parents: 5705
diff changeset
135 }
93bd157917ca Changed userdb callback API. Don't require uid/gid to be returned by userdb.
Timo Sirainen <tss@iki.fi>
parents: 5705
diff changeset
136 callback(USERDB_RESULT_OK, auth_request);
1035
fe49ece0f3ea We have now separate "userdb" and "passdb". They aren't tied to each others
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
137 }
fe49ece0f3ea We have now separate "userdb" and "passdb". They aren't tied to each others
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
138
4955
f0cc5486696e Authentication cache caches now also userdb data. Code by Tommi Saviranta.
Timo Sirainen <timo.sirainen@movial.fi>
parents: 4880
diff changeset
139 static struct userdb_module *
f0cc5486696e Authentication cache caches now also userdb data. Code by Tommi Saviranta.
Timo Sirainen <timo.sirainen@movial.fi>
parents: 4880
diff changeset
140 vpopmail_preinit(struct auth_userdb *auth_userdb, const char *args)
f0cc5486696e Authentication cache caches now also userdb data. Code by Tommi Saviranta.
Timo Sirainen <timo.sirainen@movial.fi>
parents: 4880
diff changeset
141 {
5705
4c62af215aca Added quota_template parameter to userdb vpopmail.
Timo Sirainen <tss@iki.fi>
parents: 5489
diff changeset
142 struct vpopmail_userdb_module *module;
4c62af215aca Added quota_template parameter to userdb vpopmail.
Timo Sirainen <tss@iki.fi>
parents: 5489
diff changeset
143 const char *const *tmp, *p;
4c62af215aca Added quota_template parameter to userdb vpopmail.
Timo Sirainen <tss@iki.fi>
parents: 5489
diff changeset
144 pool_t pool = auth_userdb->auth->pool;
4955
f0cc5486696e Authentication cache caches now also userdb data. Code by Tommi Saviranta.
Timo Sirainen <timo.sirainen@movial.fi>
parents: 4880
diff changeset
145
5705
4c62af215aca Added quota_template parameter to userdb vpopmail.
Timo Sirainen <tss@iki.fi>
parents: 5489
diff changeset
146 module = p_new(pool, struct vpopmail_userdb_module, 1);
4955
f0cc5486696e Authentication cache caches now also userdb data. Code by Tommi Saviranta.
Timo Sirainen <timo.sirainen@movial.fi>
parents: 4880
diff changeset
147
5705
4c62af215aca Added quota_template parameter to userdb vpopmail.
Timo Sirainen <tss@iki.fi>
parents: 5489
diff changeset
148 for (tmp = t_strsplit(args, " "); *tmp != NULL; tmp++) {
4c62af215aca Added quota_template parameter to userdb vpopmail.
Timo Sirainen <tss@iki.fi>
parents: 5489
diff changeset
149 if (strncmp(*tmp, "cache_key=", 10) == 0)
4c62af215aca Added quota_template parameter to userdb vpopmail.
Timo Sirainen <tss@iki.fi>
parents: 5489
diff changeset
150 module->module.cache_key = p_strdup(pool, *tmp + 10);
4c62af215aca Added quota_template parameter to userdb vpopmail.
Timo Sirainen <tss@iki.fi>
parents: 5489
diff changeset
151 else if (strncmp(*tmp, "quota_template=", 15) == 0) {
4c62af215aca Added quota_template parameter to userdb vpopmail.
Timo Sirainen <tss@iki.fi>
parents: 5489
diff changeset
152 p = strchr(*tmp + 15, '=');
4c62af215aca Added quota_template parameter to userdb vpopmail.
Timo Sirainen <tss@iki.fi>
parents: 5489
diff changeset
153 if (p == NULL) {
4c62af215aca Added quota_template parameter to userdb vpopmail.
Timo Sirainen <tss@iki.fi>
parents: 5489
diff changeset
154 i_fatal("vpopmail userdb: "
4c62af215aca Added quota_template parameter to userdb vpopmail.
Timo Sirainen <tss@iki.fi>
parents: 5489
diff changeset
155 "quota_template missing '='");
4c62af215aca Added quota_template parameter to userdb vpopmail.
Timo Sirainen <tss@iki.fi>
parents: 5489
diff changeset
156 }
4c62af215aca Added quota_template parameter to userdb vpopmail.
Timo Sirainen <tss@iki.fi>
parents: 5489
diff changeset
157 module->quota_template_key =
4c62af215aca Added quota_template parameter to userdb vpopmail.
Timo Sirainen <tss@iki.fi>
parents: 5489
diff changeset
158 p_strdup_until(pool, *tmp + 15, p);
4c62af215aca Added quota_template parameter to userdb vpopmail.
Timo Sirainen <tss@iki.fi>
parents: 5489
diff changeset
159 module->quota_template_value = p_strdup(pool, p + 1);
4c62af215aca Added quota_template parameter to userdb vpopmail.
Timo Sirainen <tss@iki.fi>
parents: 5489
diff changeset
160 } else
8513
0691f5294bb9 Fail if trying to give unknown parameters to passdb/userdb.
Timo Sirainen <tss@iki.fi>
parents: 8217
diff changeset
161 i_fatal("userdb vpopmail: Unknown setting: %s", *tmp);
4955
f0cc5486696e Authentication cache caches now also userdb data. Code by Tommi Saviranta.
Timo Sirainen <timo.sirainen@movial.fi>
parents: 4880
diff changeset
162 }
5705
4c62af215aca Added quota_template parameter to userdb vpopmail.
Timo Sirainen <tss@iki.fi>
parents: 5489
diff changeset
163 return &module->module;
4955
f0cc5486696e Authentication cache caches now also userdb data. Code by Tommi Saviranta.
Timo Sirainen <timo.sirainen@movial.fi>
parents: 4880
diff changeset
164 }
f0cc5486696e Authentication cache caches now also userdb data. Code by Tommi Saviranta.
Timo Sirainen <timo.sirainen@movial.fi>
parents: 4880
diff changeset
165
3658
fc4622b1c1ef Separated userdb_module's interface and the actual data struct.
Timo Sirainen <tss@iki.fi>
parents: 3569
diff changeset
166 struct userdb_module_interface userdb_vpopmail = {
2942
c7d426f8cb58 Added name variable for userdb_module and passdb_module and changed their
Timo Sirainen <tss@iki.fi>
parents: 2648
diff changeset
167 "vpopmail",
c7d426f8cb58 Added name variable for userdb_module and passdb_module and changed their
Timo Sirainen <tss@iki.fi>
parents: 2648
diff changeset
168
4955
f0cc5486696e Authentication cache caches now also userdb data. Code by Tommi Saviranta.
Timo Sirainen <timo.sirainen@movial.fi>
parents: 4880
diff changeset
169 vpopmail_preinit,
f0cc5486696e Authentication cache caches now also userdb data. Code by Tommi Saviranta.
Timo Sirainen <timo.sirainen@movial.fi>
parents: 4880
diff changeset
170 NULL,
f0cc5486696e Authentication cache caches now also userdb data. Code by Tommi Saviranta.
Timo Sirainen <timo.sirainen@movial.fi>
parents: 4880
diff changeset
171 NULL,
f0cc5486696e Authentication cache caches now also userdb data. Code by Tommi Saviranta.
Timo Sirainen <timo.sirainen@movial.fi>
parents: 4880
diff changeset
172
1035
fe49ece0f3ea We have now separate "userdb" and "passdb". They aren't tied to each others
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
173 vpopmail_lookup
fe49ece0f3ea We have now separate "userdb" and "passdb". They aren't tied to each others
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
174 };
8217
c47b78e843aa Separate "unknown passdb/userdb X" and "support for X not compiled in" error messages.
Timo Sirainen <tss@iki.fi>
parents: 7086
diff changeset
175 #else
c47b78e843aa Separate "unknown passdb/userdb X" and "support for X not compiled in" error messages.
Timo Sirainen <tss@iki.fi>
parents: 7086
diff changeset
176 struct userdb_module_interface userdb_vpopmail = {
c47b78e843aa Separate "unknown passdb/userdb X" and "support for X not compiled in" error messages.
Timo Sirainen <tss@iki.fi>
parents: 7086
diff changeset
177 MEMBER(name) "vpopmail"
c47b78e843aa Separate "unknown passdb/userdb X" and "support for X not compiled in" error messages.
Timo Sirainen <tss@iki.fi>
parents: 7086
diff changeset
178 };
1035
fe49ece0f3ea We have now separate "userdb" and "passdb". They aren't tied to each others
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
179 #endif