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 winbindd_idmap_methods **methods);
28 struct winbindd_idmap_methods *methods;
29 } builtin_winbindd_idmap_functions[] = {
30 { "tdb", winbind_idmap_reg_tdb, NULL },
34 /* singleton pattern: uberlazy evaluation */
35 static struct winbindd_idmap_methods *impl;
37 static struct winbindd_idmap_methods *get_impl(const char *name)
40 struct winbindd_idmap_methods *ret = NULL;
42 while (builtin_winbindd_idmap_functions[i].name &&
43 strcmp(builtin_winbindd_idmap_functions[i].name, name)) {
47 if (builtin_winbindd_idmap_functions[i].name) {
48 if (!builtin_winbindd_idmap_functions[i].methods) {
49 builtin_winbindd_idmap_functions[i].reg_meth(&builtin_winbindd_idmap_functions[i].methods);
52 ret = builtin_winbindd_idmap_functions[i].methods;
58 /* Initialize backend */
59 BOOL winbindd_idmap_init(void)
63 DEBUG(3, ("winbindd_idmap_init: using '%s' as backend\n",
64 lp_winbind_backend()));
67 impl = get_impl(lp_winbind_backend());
69 DEBUG(0, ("winbindd_idmap_init: could not load backend '%s'\n",
70 lp_winbind_backend()));
78 DEBUG(3, ("winbind_idmap_init: returning %s\n", ret ? "true" : "false"));
83 /* Get UID from SID */
84 BOOL winbindd_idmap_get_uid_from_sid(DOM_SID *sid, uid_t *uid)
89 impl = get_impl(lp_winbind_backend());
91 DEBUG(0, ("winbindd_idmap_init: could not load backend '%s'\n",
92 lp_winbind_backend()));
97 ret = impl->get_uid_from_sid(sid, uid);
103 /* Get GID from SID */
104 BOOL winbindd_idmap_get_gid_from_sid(DOM_SID *sid, gid_t *gid)
109 impl = get_impl(lp_winbind_backend());
111 DEBUG(0, ("winbindd_idmap_init: could not load backend '%s'\n",
112 lp_winbind_backend()));
117 ret = impl->get_gid_from_sid(sid, gid);
123 /* Get SID from UID */
124 BOOL winbindd_idmap_get_sid_from_uid(uid_t uid, DOM_SID *sid)
129 impl = get_impl(lp_winbind_backend());
131 DEBUG(0, ("winbindd_idmap_init: could not load backend '%s'\n",
132 lp_winbind_backend()));
137 ret = impl->get_sid_from_uid(uid, sid);
143 /* Get SID from GID */
144 BOOL winbindd_idmap_get_sid_from_gid(gid_t gid, DOM_SID *sid)
149 impl = get_impl(lp_winbind_backend());
153 ret = impl->get_sid_from_gid(gid, sid);
155 DEBUG(0, ("winbindd_idmap_init: could not load backend '%s'\n",
156 lp_winbind_backend()));
163 BOOL winbindd_idmap_close(void)
168 impl = get_impl(lp_winbind_backend());
174 DEBUG(0, ("winbindd_idmap_init: could not load backend '%s'\n",
175 lp_winbind_backend()));
181 /* Dump backend status */
182 void winbindd_idmap_status(void)
185 impl = get_impl(lp_winbind_backend());
191 DEBUG(0, ("winbindd_idmap_init: could not load backend '%s'\n",
192 lp_winbind_backend()));