Mercurial > dovecot > core-2.2
annotate src/auth/userdb-nss.c @ 17130:add8c00fb3cc
Updated copyright notices to include year 2014.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Tue, 04 Feb 2014 16:23:22 -0500 |
parents | eeadb7b5045b |
children | 9b095cec9332 |
rev | line source |
---|---|
17130
add8c00fb3cc
Updated copyright notices to include year 2014.
Timo Sirainen <tss@iki.fi>
parents:
17042
diff
changeset
|
1 /* Copyright (c) 2007-2014 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 |
c9b49ed99d28
Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
41 auth_request_log_debug(auth_request, "nss", "lookup"); |
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: |
c9b49ed99d28
Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
47 auth_request_log_error(auth_request, "nss", |
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: |
c9b49ed99d28
Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
51 auth_request_log_error(auth_request, "nss", |
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: |
16807
4ce8f47d20af
auth: Use a common auth_request_log_unknown_user() for logging "unknown user" entries.
Timo Sirainen <tss@iki.fi>
parents:
15715
diff
changeset
|
55 auth_request_log_unknown_user(auth_request, "nss"); |
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: |
c9b49ed99d28
Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
62 auth_request_log_info(auth_request, "nss", |
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; |
c9b49ed99d28
Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
107 |
c9b49ed99d28
Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
108 module = p_new(pool, struct nss_userdb_module, 1); |
c9b49ed99d28
Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
109 module->bufsize = sysconf(_SC_GETPW_R_SIZE_MAX); |
c9b49ed99d28
Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
110 module->buf = p_malloc(pool, module->bufsize); |
11549
7b497f801178
userdb nss: Default to blocking=yes.
Timo Sirainen <tss@iki.fi>
parents:
10898
diff
changeset
|
111 module->module.blocking = TRUE; |
5870
c9b49ed99d28
Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
112 |
c9b49ed99d28
Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
113 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
|
114 if (strcmp(*tmp, "blocking=no") == 0) |
7b497f801178
userdb nss: Default to blocking=yes.
Timo Sirainen <tss@iki.fi>
parents:
10898
diff
changeset
|
115 module->module.blocking = FALSE; |
5870
c9b49ed99d28
Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
116 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
|
117 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
|
118 else |
8513
0691f5294bb9
Fail if trying to give unknown parameters to passdb/userdb.
Timo Sirainen <tss@iki.fi>
parents:
8217
diff
changeset
|
119 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
|
120 } |
c9b49ed99d28
Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
121 |
c9b49ed99d28
Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
122 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
|
123 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
|
124 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
|
125 |
c9b49ed99d28
Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
126 module->module.cache_key = USER_CACHE_KEY; |
c9b49ed99d28
Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
127 return &module->module; |
c9b49ed99d28
Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
128 } |
c9b49ed99d28
Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
129 |
c9b49ed99d28
Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
130 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
|
131 { |
c9b49ed99d28
Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
132 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
|
133 void (*mod_endpwent)(void); |
1a58b18652a6
Avoid using shadow variables. Unfortunately -Wshadow also complains about
Timo Sirainen <tss@iki.fi>
parents:
7086
diff
changeset
|
134 const char *symbol; |
5870
c9b49ed99d28
Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
135 |
7561
1a58b18652a6
Avoid using shadow variables. Unfortunately -Wshadow also complains about
Timo Sirainen <tss@iki.fi>
parents:
7086
diff
changeset
|
136 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
|
137 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
|
138 if (mod_endpwent != NULL) |
1a58b18652a6
Avoid using shadow variables. Unfortunately -Wshadow also complains about
Timo Sirainen <tss@iki.fi>
parents:
7086
diff
changeset
|
139 mod_endpwent(); |
5870
c9b49ed99d28
Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
140 } |
c9b49ed99d28
Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
141 |
c9b49ed99d28
Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
142 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
|
143 "nss", |
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 userdb_nss_preinit, |
c9b49ed99d28
Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
146 NULL, |
c9b49ed99d28
Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
147 userdb_nss_deinit, |
c9b49ed99d28
Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
148 |
9273
1d7965092e0e
Implemented support for listing all users in userdb.
Timo Sirainen <tss@iki.fi>
parents:
9219
diff
changeset
|
149 userdb_nss_lookup, |
1d7965092e0e
Implemented support for listing all users in userdb.
Timo Sirainen <tss@iki.fi>
parents:
9219
diff
changeset
|
150 |
1d7965092e0e
Implemented support for listing all users in userdb.
Timo Sirainen <tss@iki.fi>
parents:
9219
diff
changeset
|
151 NULL, |
1d7965092e0e
Implemented support for listing all users in userdb.
Timo Sirainen <tss@iki.fi>
parents:
9219
diff
changeset
|
152 NULL, |
1d7965092e0e
Implemented support for listing all users in userdb.
Timo Sirainen <tss@iki.fi>
parents:
9219
diff
changeset
|
153 NULL |
5870
c9b49ed99d28
Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
154 }; |
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
|
155 #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
|
156 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
|
157 .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
|
158 }; |
5870
c9b49ed99d28
Added userdb nss which currently supports glibc-compatible NSS modules.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
159 #endif |