2 Unix SMB/CIFS implementation.
4 Copyright (C) Tim Potter 2000
5 Copyright (C) Anthony Liguori <aliguor@us.ibm.com> 2003
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2 of the License, or
10 (at your option) any later version.
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with this program; if not, write to the Free Software
19 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
26 /* Function to create a member of the idmap_methods list */
27 BOOL (*reg_meth)(struct idmap_methods **methods);
28 struct idmap_methods *methods;
29 } builtin_idmap_functions[] = {
30 { "tdb", winbind_idmap_reg_tdb, NULL },
31 /* { "ldap", winbind_idmap_reg_ldap, NULL },*/
35 /* singleton pattern: uberlazy evaluation */
36 static struct idmap_methods *impl;
38 static struct idmap_methods *get_impl(const char *name)
41 struct idmap_methods *ret = NULL;
43 while (builtin_idmap_functions[i].name &&
44 strcmp(builtin_idmap_functions[i].name, name)) {
48 if (builtin_idmap_functions[i].name) {
49 if (!builtin_idmap_functions[i].methods) {
50 builtin_idmap_functions[i].reg_meth(&builtin_idmap_functions[i].methods);
53 ret = builtin_idmap_functions[i].methods;
59 /* Initialize backend */
60 BOOL winbindd_idmap_init(void)
64 DEBUG(3, ("winbindd_idmap_init: using '%s' as backend\n",
68 impl = get_impl(lp_idmap_backend());
70 DEBUG(0, ("winbindd_idmap_init: could not load backend '%s'\n",
79 DEBUG(3, ("winbind_idmap_init: returning %s\n", ret ? "true" : "false"));
84 /* Get UID from SID */
85 BOOL winbindd_idmap_get_uid_from_sid(DOM_SID *sid, uid_t *uid)
90 impl = get_impl(lp_idmap_backend());
92 DEBUG(0, ("winbindd_idmap_init: could not load backend '%s'\n",
98 ret = impl->get_uid_from_sid(sid, uid);
104 /* Get GID from SID */
105 BOOL winbindd_idmap_get_gid_from_sid(DOM_SID *sid, gid_t *gid)
110 impl = get_impl(lp_idmap_backend());
112 DEBUG(0, ("winbindd_idmap_init: could not load backend '%s'\n",
113 lp_idmap_backend()));
118 ret = impl->get_gid_from_sid(sid, gid);
124 /* Get SID from UID */
125 BOOL winbindd_idmap_get_sid_from_uid(uid_t uid, DOM_SID *sid)
130 impl = get_impl(lp_idmap_backend());
132 DEBUG(0, ("winbindd_idmap_init: could not load backend '%s'\n",
133 lp_idmap_backend()));
138 ret = impl->get_sid_from_uid(uid, sid);
144 /* Get SID from GID */
145 BOOL winbindd_idmap_get_sid_from_gid(gid_t gid, DOM_SID *sid)
150 impl = get_impl(lp_idmap_backend());
154 ret = impl->get_sid_from_gid(gid, sid);
156 DEBUG(0, ("winbindd_idmap_init: could not load backend '%s'\n",
157 lp_idmap_backend()));
164 BOOL winbindd_idmap_close(void)
169 impl = get_impl(lp_idmap_backend());
175 DEBUG(0, ("winbindd_idmap_init: could not load backend '%s'\n",
176 lp_idmap_backend()));
182 /* Dump backend status */
183 void winbindd_idmap_status(void)
186 impl = get_impl(lp_idmap_backend());
192 DEBUG(0, ("winbindd_idmap_init: could not load backend '%s'\n",
193 lp_idmap_backend()));