Mercurial > dovecot > original-hg > dovecot-1.2
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 |
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 | 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 | 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 | 34 auth_request_log_info(request, "vpopmail", |
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 | 39 auth_request_log_debug(request, "vpopmail", |
5259 | 40 "lookup user=%s domain=%s", |
41 vpop_user, vpop_domain); | |
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 | 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 | 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 | 91 auth_request_log_info(auth_request, "vpopmail", |
3069 | 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 | 97 if (auth_request->successful) { |
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 | 101 } |
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 | 105 auth_request_log_info(auth_request, "vpopmail", |
3069 | 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 | 109 auth_request_log_error(auth_request, "vpopmail", |
3069 | 110 "make_user_dir(%s, %s) failed", |
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 |