annotate src/auth/userdb-nss.c @ 22656:1789bf2a1e01

director: Make sure HOST-RESET-USERS isn't used with max_moving_users=0 The reset command would just hang in that case. doveadm would never have sent this, so this is just an extra sanity check.
author Timo Sirainen <timo.sirainen@dovecot.fi>
date Sun, 05 Nov 2017 23:51:56 +0200
parents 2e2563132d5f
children cb108f786fb4
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
21390
2e2563132d5f Updated copyright notices to include the year 2017.
Stephan Bosch <stephan.bosch@dovecot.fi>
parents: 19754
diff changeset
1 /* Copyright (c) 2007-2017 Dovecot authors, see the included COPYING file */
5870
c9b49ed99d28 Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
2
c9b49ed99d28 Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
3 /* Currently supports only GLIBC-compatible NSS modules */
c9b49ed99d28 Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
4
9219
97cdfeb57129 Renamed headers to prevent collision if they were flattened on an install.
Mark Washenberger
parents: 8768
diff changeset
5 #include "auth-common.h"
8217
c47b78e843aa Separate "unknown passdb/userdb X" and "support for X not compiled in" error messages.
Timo Sirainen <tss@iki.fi>
parents: 7561
diff changeset
6 #include "userdb.h"
5870
c9b49ed99d28 Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
7
c9b49ed99d28 Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
8 #ifdef USERDB_NSS
c9b49ed99d28 Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
9
c9b49ed99d28 Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
10 #include "module-dir.h"
c9b49ed99d28 Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
11
c9b49ed99d28 Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
12 #include <pwd.h>
c9b49ed99d28 Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
13 #include <unistd.h>
c9b49ed99d28 Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
14 #include <dlfcn.h>
c9b49ed99d28 Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
15 #include <nss.h>
c9b49ed99d28 Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
16
c9b49ed99d28 Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
17 #define USER_CACHE_KEY "%u"
c9b49ed99d28 Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
18
c9b49ed99d28 Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
19 struct nss_userdb_module {
c9b49ed99d28 Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
20 struct userdb_module module;
c9b49ed99d28 Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
21
c9b49ed99d28 Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
22 char *buf;
c9b49ed99d28 Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
23 size_t bufsize;
c9b49ed99d28 Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
24
c9b49ed99d28 Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
25 struct module nss_module;
c9b49ed99d28 Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
26 enum nss_status (*getpwnam_r)(const char *name, struct passwd *pwd,
c9b49ed99d28 Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
27 char *buffer, size_t buflen, int *errnop);
c9b49ed99d28 Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
28 };
c9b49ed99d28 Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
29
c9b49ed99d28 Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
30 static void
c9b49ed99d28 Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
31 userdb_nss_lookup(struct auth_request *auth_request,
c9b49ed99d28 Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
32 userdb_callback_t *callback)
c9b49ed99d28 Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
33 {
c9b49ed99d28 Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
34 struct userdb_module *_module = auth_request->userdb->userdb;
c9b49ed99d28 Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
35 struct nss_userdb_module *module = (struct nss_userdb_module *)_module;
c9b49ed99d28 Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
36 struct passwd pw;
c9b49ed99d28 Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
37 enum nss_status status;
c9b49ed99d28 Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
38 enum userdb_result result = USERDB_RESULT_INTERNAL_FAILURE;
c9b49ed99d28 Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
39 int err;
c9b49ed99d28 Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
40
17235
9b095cec9332 auth: Use special AUTH_SUBSYS_DB/MECH parameters as auth_request_log*() subsystem.
Timo Sirainen <tss@iki.fi>
parents: 17130
diff changeset
41 auth_request_log_debug(auth_request, AUTH_SUBSYS_DB, "lookup");
5870
c9b49ed99d28 Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
42
c9b49ed99d28 Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
43 status = module->getpwnam_r(auth_request->user, &pw,
c9b49ed99d28 Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
44 module->buf, module->bufsize, &err);
c9b49ed99d28 Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
45 switch (status) {
c9b49ed99d28 Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
46 case NSS_STATUS_TRYAGAIN:
17235
9b095cec9332 auth: Use special AUTH_SUBSYS_DB/MECH parameters as auth_request_log*() subsystem.
Timo Sirainen <tss@iki.fi>
parents: 17130
diff changeset
47 auth_request_log_error(auth_request, AUTH_SUBSYS_DB,
5870
c9b49ed99d28 Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
48 "returned tryagain (err=%d)", err);
c9b49ed99d28 Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
49 break;
c9b49ed99d28 Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
50 case NSS_STATUS_UNAVAIL:
17235
9b095cec9332 auth: Use special AUTH_SUBSYS_DB/MECH parameters as auth_request_log*() subsystem.
Timo Sirainen <tss@iki.fi>
parents: 17130
diff changeset
51 auth_request_log_error(auth_request, AUTH_SUBSYS_DB,
5870
c9b49ed99d28 Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
52 "unavailable (err=%d)", err);
c9b49ed99d28 Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
53 break;
c9b49ed99d28 Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
54 case NSS_STATUS_NOTFOUND:
17235
9b095cec9332 auth: Use special AUTH_SUBSYS_DB/MECH parameters as auth_request_log*() subsystem.
Timo Sirainen <tss@iki.fi>
parents: 17130
diff changeset
55 auth_request_log_unknown_user(auth_request, AUTH_SUBSYS_DB);
5870
c9b49ed99d28 Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
56 result = USERDB_RESULT_USER_UNKNOWN;
c9b49ed99d28 Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
57 break;
c9b49ed99d28 Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
58 case NSS_STATUS_SUCCESS:
c9b49ed99d28 Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
59 result = USERDB_RESULT_OK;
c9b49ed99d28 Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
60 break;
c9b49ed99d28 Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
61 default:
17235
9b095cec9332 auth: Use special AUTH_SUBSYS_DB/MECH parameters as auth_request_log*() subsystem.
Timo Sirainen <tss@iki.fi>
parents: 17130
diff changeset
62 auth_request_log_info(auth_request, AUTH_SUBSYS_DB,
5870
c9b49ed99d28 Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
63 "returned %d (err=%d)", status, err);
c9b49ed99d28 Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
64 break;
c9b49ed99d28 Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
65 }
c9b49ed99d28 Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
66
c9b49ed99d28 Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
67 if (result != USERDB_RESULT_OK) {
5872
93bd157917ca Changed userdb callback API. Don't require uid/gid to be returned by userdb.
Timo Sirainen <tss@iki.fi>
parents: 5870
diff changeset
68 callback(result, auth_request);
5870
c9b49ed99d28 Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
69 return;
c9b49ed99d28 Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
70 }
c9b49ed99d28 Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
71
5872
93bd157917ca Changed userdb callback API. Don't require uid/gid to be returned by userdb.
Timo Sirainen <tss@iki.fi>
parents: 5870
diff changeset
72 auth_request_set_field(auth_request, "user", pw.pw_name, NULL);
5870
c9b49ed99d28 Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
73
8768
91e880ae387a Authentication: system_user userdb extra field renamed to system_groups_user.
Timo Sirainen <tss@iki.fi>
parents: 8590
diff changeset
74 auth_request_set_userdb_field(auth_request, "system_groups_user",
91e880ae387a Authentication: system_user userdb extra field renamed to system_groups_user.
Timo Sirainen <tss@iki.fi>
parents: 8590
diff changeset
75 pw.pw_name);
5872
93bd157917ca Changed userdb callback API. Don't require uid/gid to be returned by userdb.
Timo Sirainen <tss@iki.fi>
parents: 5870
diff changeset
76 auth_request_set_userdb_field(auth_request, "uid", dec2str(pw.pw_uid));
93bd157917ca Changed userdb callback API. Don't require uid/gid to be returned by userdb.
Timo Sirainen <tss@iki.fi>
parents: 5870
diff changeset
77 auth_request_set_userdb_field(auth_request, "gid", dec2str(pw.pw_gid));
93bd157917ca Changed userdb callback API. Don't require uid/gid to be returned by userdb.
Timo Sirainen <tss@iki.fi>
parents: 5870
diff changeset
78 auth_request_set_userdb_field(auth_request, "home", pw.pw_dir);
93bd157917ca Changed userdb callback API. Don't require uid/gid to be returned by userdb.
Timo Sirainen <tss@iki.fi>
parents: 5870
diff changeset
79
93bd157917ca Changed userdb callback API. Don't require uid/gid to be returned by userdb.
Timo Sirainen <tss@iki.fi>
parents: 5870
diff changeset
80 callback(USERDB_RESULT_OK, auth_request);
5870
c9b49ed99d28 Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
81 }
c9b49ed99d28 Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
82
c9b49ed99d28 Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
83 static void
c9b49ed99d28 Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
84 userdb_nss_load_module(struct nss_userdb_module *module, pool_t pool)
c9b49ed99d28 Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
85 {
c9b49ed99d28 Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
86 const char *name = module->nss_module.name;
c9b49ed99d28 Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
87 char *path;
c9b49ed99d28 Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
88
c9b49ed99d28 Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
89 path = p_strdup_printf(pool, "/usr/lib/libnss_%s.so", name);
c9b49ed99d28 Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
90 module->nss_module.handle = dlopen(path, RTLD_GLOBAL | RTLD_NOW);
c9b49ed99d28 Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
91 if (module->nss_module.handle == NULL)
c9b49ed99d28 Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
92 i_fatal("dlopen(%s) failed: %s", path, dlerror());
c9b49ed99d28 Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
93 module->nss_module.path = path;
c9b49ed99d28 Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
94
c9b49ed99d28 Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
95 module->getpwnam_r =
c9b49ed99d28 Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
96 module_get_symbol(&module->nss_module,
c9b49ed99d28 Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
97 t_strdup_printf("_nss_%s_getpwnam_r", name));
c9b49ed99d28 Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
98 if (module->getpwnam_r == NULL)
c9b49ed99d28 Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
99 i_fatal("userdb nss: Module %s missing getpwnam_r()", path);
c9b49ed99d28 Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
100 }
c9b49ed99d28 Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
101
c9b49ed99d28 Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
102 static struct userdb_module *
10898
3d085b851db8 auth: passdb/userdb backends no longer know about struct auth_passdb/auth_userdb.
Timo Sirainen <tss@iki.fi>
parents: 10893
diff changeset
103 userdb_nss_preinit(pool_t pool, const char *args)
5870
c9b49ed99d28 Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
104 {
c9b49ed99d28 Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
105 struct nss_userdb_module *module;
c9b49ed99d28 Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
106 const char *const *tmp;
17536
1abf8621981a auth: Added assert to make sure sysconf() returns what we expect.
Timo Sirainen <tss@iki.fi>
parents: 17235
diff changeset
107 long bufsize;
1abf8621981a auth: Added assert to make sure sysconf() returns what we expect.
Timo Sirainen <tss@iki.fi>
parents: 17235
diff changeset
108
1abf8621981a auth: Added assert to make sure sysconf() returns what we expect.
Timo Sirainen <tss@iki.fi>
parents: 17235
diff changeset
109 bufsize = sysconf(_SC_GETPW_R_SIZE_MAX);
1abf8621981a auth: Added assert to make sure sysconf() returns what we expect.
Timo Sirainen <tss@iki.fi>
parents: 17235
diff changeset
110 i_assert(bufsize > 0);
5870
c9b49ed99d28 Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
111
c9b49ed99d28 Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
112 module = p_new(pool, struct nss_userdb_module, 1);
17536
1abf8621981a auth: Added assert to make sure sysconf() returns what we expect.
Timo Sirainen <tss@iki.fi>
parents: 17235
diff changeset
113 module->bufsize = bufsize;
5870
c9b49ed99d28 Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
114 module->buf = p_malloc(pool, module->bufsize);
11549
7b497f801178 userdb nss: Default to blocking=yes.
Timo Sirainen <tss@iki.fi>
parents: 10898
diff changeset
115 module->module.blocking = TRUE;
5870
c9b49ed99d28 Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
116
c9b49ed99d28 Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
117 for (tmp = t_strsplit(args, " "); *tmp != NULL; tmp++) {
11549
7b497f801178 userdb nss: Default to blocking=yes.
Timo Sirainen <tss@iki.fi>
parents: 10898
diff changeset
118 if (strcmp(*tmp, "blocking=no") == 0)
7b497f801178 userdb nss: Default to blocking=yes.
Timo Sirainen <tss@iki.fi>
parents: 10898
diff changeset
119 module->module.blocking = FALSE;
5870
c9b49ed99d28 Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
120 else if (strncmp(*tmp, "service=", 8) == 0)
c9b49ed99d28 Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
121 module->nss_module.name = p_strdup(pool, *tmp + 8);
c9b49ed99d28 Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
122 else
8513
0691f5294bb9 Fail if trying to give unknown parameters to passdb/userdb.
Timo Sirainen <tss@iki.fi>
parents: 8217
diff changeset
123 i_fatal("userdb nss: Unknown setting: %s", *tmp);
5870
c9b49ed99d28 Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
124 }
c9b49ed99d28 Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
125
c9b49ed99d28 Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
126 if (module->nss_module.name == NULL)
c9b49ed99d28 Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
127 i_fatal("userdb nss: Missing service");
c9b49ed99d28 Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
128 userdb_nss_load_module(module, pool);
c9b49ed99d28 Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
129
19754
2fb8d127acf4 auth: Moved cache_key from passdb_module to auth_passdb.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 19552
diff changeset
130 module->module.default_cache_key = USER_CACHE_KEY;
5870
c9b49ed99d28 Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
131 return &module->module;
c9b49ed99d28 Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
132 }
c9b49ed99d28 Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
133
c9b49ed99d28 Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
134 static void userdb_nss_deinit(struct userdb_module *_module)
c9b49ed99d28 Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
135 {
c9b49ed99d28 Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
136 struct nss_userdb_module *module = (struct nss_userdb_module *)_module;
7561
1a58b18652a6 Avoid using shadow variables. Unfortunately -Wshadow also complains about
Timo Sirainen <tss@iki.fi>
parents: 7086
diff changeset
137 void (*mod_endpwent)(void);
1a58b18652a6 Avoid using shadow variables. Unfortunately -Wshadow also complains about
Timo Sirainen <tss@iki.fi>
parents: 7086
diff changeset
138 const char *symbol;
5870
c9b49ed99d28 Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
139
7561
1a58b18652a6 Avoid using shadow variables. Unfortunately -Wshadow also complains about
Timo Sirainen <tss@iki.fi>
parents: 7086
diff changeset
140 symbol = t_strdup_printf("_nss_%s_endpwent", module->nss_module.name);
1a58b18652a6 Avoid using shadow variables. Unfortunately -Wshadow also complains about
Timo Sirainen <tss@iki.fi>
parents: 7086
diff changeset
141 mod_endpwent = module_get_symbol(&module->nss_module, symbol);
1a58b18652a6 Avoid using shadow variables. Unfortunately -Wshadow also complains about
Timo Sirainen <tss@iki.fi>
parents: 7086
diff changeset
142 if (mod_endpwent != NULL)
1a58b18652a6 Avoid using shadow variables. Unfortunately -Wshadow also complains about
Timo Sirainen <tss@iki.fi>
parents: 7086
diff changeset
143 mod_endpwent();
5870
c9b49ed99d28 Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
144 }
c9b49ed99d28 Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
145
c9b49ed99d28 Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
146 struct userdb_module_interface userdb_nss = {
c9b49ed99d28 Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
147 "nss",
c9b49ed99d28 Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
148
c9b49ed99d28 Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
149 userdb_nss_preinit,
c9b49ed99d28 Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
150 NULL,
c9b49ed99d28 Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
151 userdb_nss_deinit,
c9b49ed99d28 Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
152
9273
1d7965092e0e Implemented support for listing all users in userdb.
Timo Sirainen <tss@iki.fi>
parents: 9219
diff changeset
153 userdb_nss_lookup,
1d7965092e0e Implemented support for listing all users in userdb.
Timo Sirainen <tss@iki.fi>
parents: 9219
diff changeset
154
1d7965092e0e Implemented support for listing all users in userdb.
Timo Sirainen <tss@iki.fi>
parents: 9219
diff changeset
155 NULL,
1d7965092e0e Implemented support for listing all users in userdb.
Timo Sirainen <tss@iki.fi>
parents: 9219
diff changeset
156 NULL,
1d7965092e0e Implemented support for listing all users in userdb.
Timo Sirainen <tss@iki.fi>
parents: 9219
diff changeset
157 NULL
5870
c9b49ed99d28 Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
158 };
8217
c47b78e843aa Separate "unknown passdb/userdb X" and "support for X not compiled in" error messages.
Timo Sirainen <tss@iki.fi>
parents: 7561
diff changeset
159 #else
c47b78e843aa Separate "unknown passdb/userdb X" and "support for X not compiled in" error messages.
Timo Sirainen <tss@iki.fi>
parents: 7561
diff changeset
160 struct userdb_module_interface userdb_nss = {
10410
b757dab45756 Removed MEMBER() macro. Require C99 style struct initializer.
Timo Sirainen <tss@iki.fi>
parents: 9273
diff changeset
161 .name = "nss"
8217
c47b78e843aa Separate "unknown passdb/userdb X" and "support for X not compiled in" error messages.
Timo Sirainen <tss@iki.fi>
parents: 7561
diff changeset
162 };
5870
c9b49ed99d28 Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
163 #endif