annotate src/auth/checkpassword-reply.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 4497c58eaca8
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2162
95b2a6abc01e Added checkpassword passdb. userdb has only beginnings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
1 /* simple checkpassword wrapper to send userdb data back to dovecot-auth */
95b2a6abc01e Added checkpassword passdb. userdb has only beginnings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
2
95b2a6abc01e Added checkpassword passdb. userdb has only beginnings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
3 #include "lib.h"
95b2a6abc01e Added checkpassword passdb. userdb has only beginnings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
4 #include "str.h"
95b2a6abc01e Added checkpassword passdb. userdb has only beginnings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
5 #include "write-full.h"
95b2a6abc01e Added checkpassword passdb. userdb has only beginnings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
6
95b2a6abc01e Added checkpassword passdb. userdb has only beginnings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
7 #include <stdlib.h>
95b2a6abc01e Added checkpassword passdb. userdb has only beginnings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
8 #include <unistd.h>
95b2a6abc01e Added checkpassword passdb. userdb has only beginnings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
9
95b2a6abc01e Added checkpassword passdb. userdb has only beginnings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
10 int main(void)
95b2a6abc01e Added checkpassword passdb. userdb has only beginnings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
11 {
95b2a6abc01e Added checkpassword passdb. userdb has only beginnings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
12 string_t *str;
8314
4497c58eaca8 Added missing changes to userdb checkpassword.
Timo Sirainen <tss@iki.fi>
parents: 8255
diff changeset
13 const char *user, *home, *authorized;
8255
a38778911fa9 checkpassword: Allow setting uid/gid in userdb_uid and userdb_gid environment.
Timo Sirainen <tss@iki.fi>
parents: 5155
diff changeset
14 const char *extra_env, *key, *value, *const *tmp;
a38778911fa9 checkpassword: Allow setting uid/gid in userdb_uid and userdb_gid environment.
Timo Sirainen <tss@iki.fi>
parents: 5155
diff changeset
15 bool uid_found = FALSE, gid_found = FALSE;
2162
95b2a6abc01e Added checkpassword passdb. userdb has only beginnings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
16
95b2a6abc01e Added checkpassword passdb. userdb has only beginnings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
17 lib_init();
95b2a6abc01e Added checkpassword passdb. userdb has only beginnings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
18 str = t_str_new(1024);
95b2a6abc01e Added checkpassword passdb. userdb has only beginnings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
19
5152
3dc493d152ac Don't crash if USER or HOME environment is missing. Allow HOME environment
Timo Sirainen <tss@iki.fi>
parents: 4032
diff changeset
20 user = getenv("USER");
5155
facdf5823359 If USER environment is set, return it in "user" field and not "userdb_user".
Timo Sirainen <tss@iki.fi>
parents: 5152
diff changeset
21 if (user != NULL) {
facdf5823359 If USER environment is set, return it in "user" field and not "userdb_user".
Timo Sirainen <tss@iki.fi>
parents: 5152
diff changeset
22 if (strchr(user, '\t') != NULL) {
facdf5823359 If USER environment is set, return it in "user" field and not "userdb_user".
Timo Sirainen <tss@iki.fi>
parents: 5152
diff changeset
23 i_error("checkpassword: USER contains TAB");
facdf5823359 If USER environment is set, return it in "user" field and not "userdb_user".
Timo Sirainen <tss@iki.fi>
parents: 5152
diff changeset
24 return 1;
facdf5823359 If USER environment is set, return it in "user" field and not "userdb_user".
Timo Sirainen <tss@iki.fi>
parents: 5152
diff changeset
25 }
facdf5823359 If USER environment is set, return it in "user" field and not "userdb_user".
Timo Sirainen <tss@iki.fi>
parents: 5152
diff changeset
26 str_printfa(str, "user=%s\t", user);
3063
a0fbf92b41c3 userdb = passdb works now with checkpassword passdb.
Timo Sirainen <tss@iki.fi>
parents: 2162
diff changeset
27 }
a0fbf92b41c3 userdb = passdb works now with checkpassword passdb.
Timo Sirainen <tss@iki.fi>
parents: 2162
diff changeset
28
5152
3dc493d152ac Don't crash if USER or HOME environment is missing. Allow HOME environment
Timo Sirainen <tss@iki.fi>
parents: 4032
diff changeset
29 home = getenv("HOME");
3dc493d152ac Don't crash if USER or HOME environment is missing. Allow HOME environment
Timo Sirainen <tss@iki.fi>
parents: 4032
diff changeset
30 if (home != NULL) {
3dc493d152ac Don't crash if USER or HOME environment is missing. Allow HOME environment
Timo Sirainen <tss@iki.fi>
parents: 4032
diff changeset
31 if (strchr(home, '\t') != NULL) {
3dc493d152ac Don't crash if USER or HOME environment is missing. Allow HOME environment
Timo Sirainen <tss@iki.fi>
parents: 4032
diff changeset
32 i_error("checkpassword: HOME contains TAB");
3dc493d152ac Don't crash if USER or HOME environment is missing. Allow HOME environment
Timo Sirainen <tss@iki.fi>
parents: 4032
diff changeset
33 return 1;
3dc493d152ac Don't crash if USER or HOME environment is missing. Allow HOME environment
Timo Sirainen <tss@iki.fi>
parents: 4032
diff changeset
34 }
3dc493d152ac Don't crash if USER or HOME environment is missing. Allow HOME environment
Timo Sirainen <tss@iki.fi>
parents: 4032
diff changeset
35 str_printfa(str, "userdb_home=%s\t", home);
3dc493d152ac Don't crash if USER or HOME environment is missing. Allow HOME environment
Timo Sirainen <tss@iki.fi>
parents: 4032
diff changeset
36 }
2162
95b2a6abc01e Added checkpassword passdb. userdb has only beginnings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
37
4032
7140f09b464f Allow checkpassword program to send extra parameters to Dovecot. EXTRA environment contains a list of environment variables that are passed to Dovecot.
Timo Sirainen <timo.sirainen@movial.fi>
parents: 3063
diff changeset
38 extra_env = getenv("EXTRA");
7140f09b464f Allow checkpassword program to send extra parameters to Dovecot. EXTRA environment contains a list of environment variables that are passed to Dovecot.
Timo Sirainen <timo.sirainen@movial.fi>
parents: 3063
diff changeset
39 if (extra_env != NULL) {
7140f09b464f Allow checkpassword program to send extra parameters to Dovecot. EXTRA environment contains a list of environment variables that are passed to Dovecot.
Timo Sirainen <timo.sirainen@movial.fi>
parents: 3063
diff changeset
40 for (tmp = t_strsplit(extra_env, " "); *tmp != NULL; tmp++) {
7140f09b464f Allow checkpassword program to send extra parameters to Dovecot. EXTRA environment contains a list of environment variables that are passed to Dovecot.
Timo Sirainen <timo.sirainen@movial.fi>
parents: 3063
diff changeset
41 value = getenv(*tmp);
7140f09b464f Allow checkpassword program to send extra parameters to Dovecot. EXTRA environment contains a list of environment variables that are passed to Dovecot.
Timo Sirainen <timo.sirainen@movial.fi>
parents: 3063
diff changeset
42 if (value != NULL) {
8255
a38778911fa9 checkpassword: Allow setting uid/gid in userdb_uid and userdb_gid environment.
Timo Sirainen <tss@iki.fi>
parents: 5155
diff changeset
43 key = t_str_lcase(*tmp);
a38778911fa9 checkpassword: Allow setting uid/gid in userdb_uid and userdb_gid environment.
Timo Sirainen <tss@iki.fi>
parents: 5155
diff changeset
44 if (strcmp(key, "userdb_uid") == 0)
a38778911fa9 checkpassword: Allow setting uid/gid in userdb_uid and userdb_gid environment.
Timo Sirainen <tss@iki.fi>
parents: 5155
diff changeset
45 uid_found = TRUE;
a38778911fa9 checkpassword: Allow setting uid/gid in userdb_uid and userdb_gid environment.
Timo Sirainen <tss@iki.fi>
parents: 5155
diff changeset
46 else if (strcmp(key, "userdb_gid") == 0)
a38778911fa9 checkpassword: Allow setting uid/gid in userdb_uid and userdb_gid environment.
Timo Sirainen <tss@iki.fi>
parents: 5155
diff changeset
47 gid_found = TRUE;
a38778911fa9 checkpassword: Allow setting uid/gid in userdb_uid and userdb_gid environment.
Timo Sirainen <tss@iki.fi>
parents: 5155
diff changeset
48 str_printfa(str, "%s=%s\t", key, value);
4032
7140f09b464f Allow checkpassword program to send extra parameters to Dovecot. EXTRA environment contains a list of environment variables that are passed to Dovecot.
Timo Sirainen <timo.sirainen@movial.fi>
parents: 3063
diff changeset
49 }
7140f09b464f Allow checkpassword program to send extra parameters to Dovecot. EXTRA environment contains a list of environment variables that are passed to Dovecot.
Timo Sirainen <timo.sirainen@movial.fi>
parents: 3063
diff changeset
50 }
7140f09b464f Allow checkpassword program to send extra parameters to Dovecot. EXTRA environment contains a list of environment variables that are passed to Dovecot.
Timo Sirainen <timo.sirainen@movial.fi>
parents: 3063
diff changeset
51 }
8255
a38778911fa9 checkpassword: Allow setting uid/gid in userdb_uid and userdb_gid environment.
Timo Sirainen <tss@iki.fi>
parents: 5155
diff changeset
52 if (!uid_found)
a38778911fa9 checkpassword: Allow setting uid/gid in userdb_uid and userdb_gid environment.
Timo Sirainen <tss@iki.fi>
parents: 5155
diff changeset
53 str_printfa(str, "userdb_uid=%s\t", dec2str(getuid()));
a38778911fa9 checkpassword: Allow setting uid/gid in userdb_uid and userdb_gid environment.
Timo Sirainen <tss@iki.fi>
parents: 5155
diff changeset
54 if (!gid_found)
a38778911fa9 checkpassword: Allow setting uid/gid in userdb_uid and userdb_gid environment.
Timo Sirainen <tss@iki.fi>
parents: 5155
diff changeset
55 str_printfa(str, "userdb_gid=%s\t", dec2str(getgid()));
4032
7140f09b464f Allow checkpassword program to send extra parameters to Dovecot. EXTRA environment contains a list of environment variables that are passed to Dovecot.
Timo Sirainen <timo.sirainen@movial.fi>
parents: 3063
diff changeset
56
2162
95b2a6abc01e Added checkpassword passdb. userdb has only beginnings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
57 if (write_full(4, str_data(str), str_len(str)) < 0) {
5152
3dc493d152ac Don't crash if USER or HOME environment is missing. Allow HOME environment
Timo Sirainen <tss@iki.fi>
parents: 4032
diff changeset
58 i_error("checkpassword: write_full() failed: %m");
2162
95b2a6abc01e Added checkpassword passdb. userdb has only beginnings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
59 exit(111);
95b2a6abc01e Added checkpassword passdb. userdb has only beginnings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
60 }
8314
4497c58eaca8 Added missing changes to userdb checkpassword.
Timo Sirainen <tss@iki.fi>
parents: 8255
diff changeset
61 authorized = getenv("AUTHORIZED");
4497c58eaca8 Added missing changes to userdb checkpassword.
Timo Sirainen <tss@iki.fi>
parents: 8255
diff changeset
62 return authorized != NULL && strcmp(authorized, "2") == 0 ? 2 : 0;
2162
95b2a6abc01e Added checkpassword passdb. userdb has only beginnings.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
63 }