0.30.1
by Christian Perrier
Import upstream version 3.4.0~pre1 |
1 |
/*
|
2 |
Unix SMB/CIFS implementation.
|
|
3 |
Winbind Utility functions
|
|
4 |
||
5 |
Copyright (C) Gerald (Jerry) Carter 2007
|
|
0.30.2
by Christian Perrier
Import upstream version 3.5.0~pre2 |
6 |
|
0.30.1
by Christian Perrier
Import upstream version 3.4.0~pre1 |
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 3 of the License, or
|
|
10 |
(at your option) any later version.
|
|
0.30.2
by Christian Perrier
Import upstream version 3.5.0~pre2 |
11 |
|
0.30.1
by Christian Perrier
Import upstream version 3.4.0~pre1 |
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.
|
|
0.30.2
by Christian Perrier
Import upstream version 3.5.0~pre2 |
16 |
|
0.30.1
by Christian Perrier
Import upstream version 3.4.0~pre1 |
17 |
You should have received a copy of the GNU General Public License
|
18 |
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
19 |
*/
|
|
20 |
||
21 |
#include "includes.h" |
|
0.37.7
by Christian Perrier
Import upstream version 3.6.0~pre3 |
22 |
#include "../libcli/security/security.h" |
23 |
#include "../lib/util/util_pw.h" |
|
24 |
#include "nsswitch/libwbclient/wbclient.h" |
|
0.30.1
by Christian Perrier
Import upstream version 3.4.0~pre1 |
25 |
|
26 |
#if defined(WITH_WINBIND)
|
|
27 |
||
0.37.7
by Christian Perrier
Import upstream version 3.6.0~pre3 |
28 |
#include "lib/winbind_util.h" |
0.30.1
by Christian Perrier
Import upstream version 3.4.0~pre1 |
29 |
|
30 |
struct passwd * winbind_getpwnam(const char * name) |
|
31 |
{
|
|
32 |
wbcErr result; |
|
33 |
struct passwd * tmp_pwd = NULL; |
|
34 |
struct passwd * pwd = NULL; |
|
35 |
||
36 |
result = wbcGetpwnam(name, &tmp_pwd); |
|
37 |
if (result != WBC_ERR_SUCCESS) |
|
38 |
return pwd; |
|
39 |
||
40 |
pwd = tcopy_passwd(talloc_tos(), tmp_pwd); |
|
41 |
||
42 |
wbcFreeMemory(tmp_pwd); |
|
43 |
||
44 |
return pwd; |
|
45 |
}
|
|
46 |
||
0.37.7
by Christian Perrier
Import upstream version 3.6.0~pre3 |
47 |
struct passwd * winbind_getpwsid(const struct dom_sid *sid) |
0.30.1
by Christian Perrier
Import upstream version 3.4.0~pre1 |
48 |
{
|
49 |
wbcErr result; |
|
50 |
struct passwd * tmp_pwd = NULL; |
|
51 |
struct passwd * pwd = NULL; |
|
52 |
struct wbcDomainSid dom_sid; |
|
53 |
||
54 |
memcpy(&dom_sid, sid, sizeof(dom_sid)); |
|
55 |
||
56 |
result = wbcGetpwsid(&dom_sid, &tmp_pwd); |
|
57 |
if (result != WBC_ERR_SUCCESS) |
|
58 |
return pwd; |
|
59 |
||
60 |
pwd = tcopy_passwd(talloc_tos(), tmp_pwd); |
|
61 |
||
62 |
wbcFreeMemory(tmp_pwd); |
|
63 |
||
64 |
return pwd; |
|
65 |
}
|
|
66 |
||
67 |
/* Call winbindd to convert a name to a sid */
|
|
68 |
||
0.37.7
by Christian Perrier
Import upstream version 3.6.0~pre3 |
69 |
bool winbind_lookup_name(const char *dom_name, const char *name, struct dom_sid *sid, |
0.30.1
by Christian Perrier
Import upstream version 3.4.0~pre1 |
70 |
enum lsa_SidType *name_type) |
71 |
{
|
|
72 |
struct wbcDomainSid dom_sid; |
|
73 |
wbcErr result; |
|
74 |
enum wbcSidType type; |
|
75 |
||
76 |
result = wbcLookupName(dom_name, name, &dom_sid, &type); |
|
77 |
if (result != WBC_ERR_SUCCESS) |
|
78 |
return false; |
|
79 |
||
0.37.7
by Christian Perrier
Import upstream version 3.6.0~pre3 |
80 |
memcpy(sid, &dom_sid, sizeof(struct dom_sid)); |
0.30.1
by Christian Perrier
Import upstream version 3.4.0~pre1 |
81 |
*name_type = (enum lsa_SidType)type; |
82 |
||
83 |
return true; |
|
84 |
}
|
|
85 |
||
86 |
/* Call winbindd to convert sid to name */
|
|
87 |
||
0.37.7
by Christian Perrier
Import upstream version 3.6.0~pre3 |
88 |
bool winbind_lookup_sid(TALLOC_CTX *mem_ctx, const struct dom_sid *sid, |
0.30.1
by Christian Perrier
Import upstream version 3.4.0~pre1 |
89 |
const char **domain, const char **name, |
90 |
enum lsa_SidType *name_type) |
|
91 |
{
|
|
92 |
struct wbcDomainSid dom_sid; |
|
93 |
wbcErr result; |
|
94 |
enum wbcSidType type; |
|
95 |
char *domain_name = NULL; |
|
96 |
char *account_name = NULL; |
|
97 |
||
98 |
memcpy(&dom_sid, sid, sizeof(dom_sid)); |
|
99 |
||
100 |
result = wbcLookupSid(&dom_sid, &domain_name, &account_name, &type); |
|
101 |
if (result != WBC_ERR_SUCCESS) |
|
102 |
return false; |
|
103 |
||
104 |
/* Copy out result */
|
|
105 |
||
106 |
if (domain) { |
|
107 |
*domain = talloc_strdup(mem_ctx, domain_name); |
|
108 |
}
|
|
109 |
if (name) { |
|
110 |
*name = talloc_strdup(mem_ctx, account_name); |
|
111 |
}
|
|
112 |
*name_type = (enum lsa_SidType)type; |
|
113 |
||
114 |
DEBUG(10, ("winbind_lookup_sid: SUCCESS: SID %s -> %s %s\n", |
|
115 |
sid_string_dbg(sid), domain_name, account_name)); |
|
116 |
||
117 |
wbcFreeMemory(domain_name); |
|
118 |
wbcFreeMemory(account_name); |
|
0.30.2
by Christian Perrier
Import upstream version 3.5.0~pre2 |
119 |
|
0.30.1
by Christian Perrier
Import upstream version 3.4.0~pre1 |
120 |
if ((domain && !*domain) || (name && !*name)) { |
121 |
DEBUG(0,("winbind_lookup_sid: talloc() failed!\n")); |
|
122 |
return false; |
|
123 |
}
|
|
124 |
||
125 |
||
126 |
return true; |
|
127 |
}
|
|
128 |
||
129 |
/* Ping winbindd to see it is alive */
|
|
130 |
||
131 |
bool winbind_ping(void) |
|
132 |
{
|
|
133 |
wbcErr result = wbcPing(); |
|
134 |
||
135 |
return (result == WBC_ERR_SUCCESS); |
|
136 |
}
|
|
137 |
||
138 |
/* Call winbindd to convert SID to uid */
|
|
139 |
||
0.37.7
by Christian Perrier
Import upstream version 3.6.0~pre3 |
140 |
bool winbind_sid_to_uid(uid_t *puid, const struct dom_sid *sid) |
0.30.1
by Christian Perrier
Import upstream version 3.4.0~pre1 |
141 |
{
|
142 |
struct wbcDomainSid dom_sid; |
|
143 |
wbcErr result; |
|
144 |
||
145 |
memcpy(&dom_sid, sid, sizeof(dom_sid)); |
|
146 |
||
147 |
result = wbcSidToUid(&dom_sid, puid); |
|
148 |
||
149 |
return (result == WBC_ERR_SUCCESS); |
|
150 |
}
|
|
151 |
||
152 |
/* Call winbindd to convert uid to sid */
|
|
153 |
||
0.37.7
by Christian Perrier
Import upstream version 3.6.0~pre3 |
154 |
bool winbind_uid_to_sid(struct dom_sid *sid, uid_t uid) |
0.30.1
by Christian Perrier
Import upstream version 3.4.0~pre1 |
155 |
{
|
156 |
struct wbcDomainSid dom_sid; |
|
157 |
wbcErr result; |
|
158 |
||
159 |
result = wbcUidToSid(uid, &dom_sid); |
|
160 |
if (result == WBC_ERR_SUCCESS) { |
|
0.37.7
by Christian Perrier
Import upstream version 3.6.0~pre3 |
161 |
memcpy(sid, &dom_sid, sizeof(struct dom_sid)); |
0.30.1
by Christian Perrier
Import upstream version 3.4.0~pre1 |
162 |
} else { |
163 |
sid_copy(sid, &global_sid_NULL); |
|
164 |
}
|
|
165 |
||
166 |
return (result == WBC_ERR_SUCCESS); |
|
167 |
}
|
|
168 |
||
169 |
/* Call winbindd to convert SID to gid */
|
|
170 |
||
0.37.7
by Christian Perrier
Import upstream version 3.6.0~pre3 |
171 |
bool winbind_sid_to_gid(gid_t *pgid, const struct dom_sid *sid) |
0.30.1
by Christian Perrier
Import upstream version 3.4.0~pre1 |
172 |
{
|
173 |
struct wbcDomainSid dom_sid; |
|
174 |
wbcErr result; |
|
175 |
||
176 |
memcpy(&dom_sid, sid, sizeof(dom_sid)); |
|
177 |
||
178 |
result = wbcSidToGid(&dom_sid, pgid); |
|
179 |
||
180 |
return (result == WBC_ERR_SUCCESS); |
|
181 |
}
|
|
182 |
||
183 |
/* Call winbindd to convert gid to sid */
|
|
184 |
||
0.37.7
by Christian Perrier
Import upstream version 3.6.0~pre3 |
185 |
bool winbind_gid_to_sid(struct dom_sid *sid, gid_t gid) |
0.30.1
by Christian Perrier
Import upstream version 3.4.0~pre1 |
186 |
{
|
187 |
struct wbcDomainSid dom_sid; |
|
188 |
wbcErr result; |
|
189 |
||
190 |
result = wbcGidToSid(gid, &dom_sid); |
|
191 |
if (result == WBC_ERR_SUCCESS) { |
|
0.37.7
by Christian Perrier
Import upstream version 3.6.0~pre3 |
192 |
memcpy(sid, &dom_sid, sizeof(struct dom_sid)); |
0.30.1
by Christian Perrier
Import upstream version 3.4.0~pre1 |
193 |
} else { |
194 |
sid_copy(sid, &global_sid_NULL); |
|
195 |
}
|
|
196 |
||
197 |
return (result == WBC_ERR_SUCCESS); |
|
198 |
}
|
|
199 |
||
200 |
/* Check for a trusted domain */
|
|
201 |
||
202 |
wbcErr wb_is_trusted_domain(const char *domain) |
|
203 |
{
|
|
204 |
wbcErr result; |
|
205 |
struct wbcDomainInfo *info = NULL; |
|
0.30.2
by Christian Perrier
Import upstream version 3.5.0~pre2 |
206 |
|
0.30.1
by Christian Perrier
Import upstream version 3.4.0~pre1 |
207 |
result = wbcDomainInfo(domain, &info); |
208 |
||
209 |
if (WBC_ERROR_IS_OK(result)) { |
|
210 |
wbcFreeMemory(info); |
|
211 |
}
|
|
212 |
||
213 |
return result; |
|
214 |
}
|
|
215 |
||
216 |
/* Lookup a set of rids in a given domain */
|
|
217 |
||
218 |
bool winbind_lookup_rids(TALLOC_CTX *mem_ctx, |
|
0.37.7
by Christian Perrier
Import upstream version 3.6.0~pre3 |
219 |
const struct dom_sid *domain_sid, |
0.30.1
by Christian Perrier
Import upstream version 3.4.0~pre1 |
220 |
int num_rids, uint32 *rids, |
221 |
const char **domain_name, |
|
222 |
const char ***names, enum lsa_SidType **types) |
|
223 |
{
|
|
224 |
const char *dom_name = NULL; |
|
225 |
const char **namelist = NULL; |
|
226 |
enum wbcSidType *name_types = NULL; |
|
227 |
struct wbcDomainSid dom_sid; |
|
228 |
wbcErr ret; |
|
229 |
int i; |
|
0.30.2
by Christian Perrier
Import upstream version 3.5.0~pre2 |
230 |
|
0.30.1
by Christian Perrier
Import upstream version 3.4.0~pre1 |
231 |
memcpy(&dom_sid, domain_sid, sizeof(struct wbcDomainSid)); |
0.30.2
by Christian Perrier
Import upstream version 3.5.0~pre2 |
232 |
|
0.30.1
by Christian Perrier
Import upstream version 3.4.0~pre1 |
233 |
ret = wbcLookupRids(&dom_sid, num_rids, rids, |
234 |
&dom_name, &namelist, &name_types); |
|
235 |
if (ret != WBC_ERR_SUCCESS) { |
|
236 |
return false; |
|
237 |
}
|
|
0.30.2
by Christian Perrier
Import upstream version 3.5.0~pre2 |
238 |
|
0.30.1
by Christian Perrier
Import upstream version 3.4.0~pre1 |
239 |
*domain_name = talloc_strdup(mem_ctx, dom_name); |
240 |
*names = TALLOC_ARRAY(mem_ctx, const char*, num_rids); |
|
241 |
*types = TALLOC_ARRAY(mem_ctx, enum lsa_SidType, num_rids); |
|
242 |
||
243 |
for(i=0; i<num_rids; i++) { |
|
244 |
(*names)[i] = talloc_strdup(*names, namelist[i]); |
|
245 |
(*types)[i] = (enum lsa_SidType)name_types[i]; |
|
246 |
}
|
|
247 |
||
248 |
wbcFreeMemory(CONST_DISCARD(char*, dom_name)); |
|
249 |
wbcFreeMemory(namelist); |
|
250 |
wbcFreeMemory(name_types); |
|
0.30.2
by Christian Perrier
Import upstream version 3.5.0~pre2 |
251 |
|
0.30.1
by Christian Perrier
Import upstream version 3.4.0~pre1 |
252 |
return true; |
253 |
}
|
|
254 |
||
255 |
/* Ask Winbind to allocate a new uid for us */
|
|
256 |
||
257 |
bool winbind_allocate_uid(uid_t *uid) |
|
258 |
{
|
|
259 |
wbcErr ret; |
|
0.30.2
by Christian Perrier
Import upstream version 3.5.0~pre2 |
260 |
|
0.30.1
by Christian Perrier
Import upstream version 3.4.0~pre1 |
261 |
ret = wbcAllocateUid(uid); |
0.30.2
by Christian Perrier
Import upstream version 3.5.0~pre2 |
262 |
|
0.30.1
by Christian Perrier
Import upstream version 3.4.0~pre1 |
263 |
return (ret == WBC_ERR_SUCCESS); |
264 |
}
|
|
265 |
||
266 |
/* Ask Winbind to allocate a new gid for us */
|
|
267 |
||
268 |
bool winbind_allocate_gid(gid_t *gid) |
|
269 |
{
|
|
270 |
wbcErr ret; |
|
0.30.2
by Christian Perrier
Import upstream version 3.5.0~pre2 |
271 |
|
0.30.1
by Christian Perrier
Import upstream version 3.4.0~pre1 |
272 |
ret = wbcAllocateGid(gid); |
0.30.2
by Christian Perrier
Import upstream version 3.5.0~pre2 |
273 |
|
0.30.1
by Christian Perrier
Import upstream version 3.4.0~pre1 |
274 |
return (ret == WBC_ERR_SUCCESS); |
275 |
}
|
|
276 |
||
277 |
bool winbind_get_groups(TALLOC_CTX * mem_ctx, const char *account, uint32_t *num_groups, gid_t **_groups) |
|
278 |
{
|
|
279 |
wbcErr ret; |
|
280 |
uint32_t ngroups; |
|
281 |
gid_t *group_list = NULL; |
|
282 |
||
283 |
ret = wbcGetGroups(account, &ngroups, &group_list); |
|
284 |
if (ret != WBC_ERR_SUCCESS) |
|
285 |
return false; |
|
286 |
||
287 |
*_groups = TALLOC_ARRAY(mem_ctx, gid_t, ngroups); |
|
288 |
if (*_groups == NULL) { |
|
289 |
wbcFreeMemory(group_list); |
|
290 |
return false; |
|
291 |
}
|
|
292 |
||
293 |
memcpy(*_groups, group_list, ngroups* sizeof(gid_t)); |
|
294 |
*num_groups = ngroups; |
|
295 |
||
296 |
wbcFreeMemory(group_list); |
|
297 |
return true; |
|
298 |
}
|
|
299 |
||
300 |
bool winbind_get_sid_aliases(TALLOC_CTX *mem_ctx, |
|
0.37.7
by Christian Perrier
Import upstream version 3.6.0~pre3 |
301 |
const struct dom_sid *dom_sid, |
302 |
const struct dom_sid *members, |
|
0.30.1
by Christian Perrier
Import upstream version 3.4.0~pre1 |
303 |
size_t num_members, |
304 |
uint32_t **pp_alias_rids, |
|
305 |
size_t *p_num_alias_rids) |
|
306 |
{
|
|
307 |
wbcErr ret; |
|
308 |
struct wbcDomainSid domain_sid; |
|
309 |
struct wbcDomainSid *sid_list = NULL; |
|
310 |
size_t i; |
|
311 |
uint32_t * rids; |
|
312 |
uint32_t num_rids; |
|
313 |
||
314 |
memcpy(&domain_sid, dom_sid, sizeof(*dom_sid)); |
|
315 |
||
316 |
sid_list = TALLOC_ARRAY(mem_ctx, struct wbcDomainSid, num_members); |
|
317 |
||
318 |
for (i=0; i < num_members; i++) { |
|
319 |
memcpy(&sid_list[i], &members[i], sizeof(sid_list[i])); |
|
320 |
}
|
|
321 |
||
322 |
ret = wbcGetSidAliases(&domain_sid, |
|
323 |
sid_list, |
|
324 |
num_members, |
|
325 |
&rids, |
|
326 |
&num_rids); |
|
327 |
if (ret != WBC_ERR_SUCCESS) { |
|
328 |
return false; |
|
329 |
}
|
|
330 |
||
331 |
*pp_alias_rids = TALLOC_ARRAY(mem_ctx, uint32_t, num_rids); |
|
332 |
if (*pp_alias_rids == NULL) { |
|
333 |
wbcFreeMemory(rids); |
|
334 |
return false; |
|
335 |
}
|
|
336 |
||
337 |
memcpy(*pp_alias_rids, rids, sizeof(uint32_t) * num_rids); |
|
338 |
||
339 |
*p_num_alias_rids = num_rids; |
|
340 |
wbcFreeMemory(rids); |
|
341 |
||
342 |
return true; |
|
343 |
}
|
|
344 |
||
345 |
#else /* WITH_WINBIND */ |
|
346 |
||
347 |
struct passwd * winbind_getpwnam(const char * name) |
|
348 |
{
|
|
349 |
return NULL; |
|
350 |
}
|
|
351 |
||
0.37.7
by Christian Perrier
Import upstream version 3.6.0~pre3 |
352 |
struct passwd * winbind_getpwsid(const struct dom_sid *sid) |
0.30.1
by Christian Perrier
Import upstream version 3.4.0~pre1 |
353 |
{
|
354 |
return NULL; |
|
355 |
}
|
|
356 |
||
0.37.7
by Christian Perrier
Import upstream version 3.6.0~pre3 |
357 |
bool winbind_lookup_name(const char *dom_name, const char *name, struct dom_sid *sid, |
0.30.1
by Christian Perrier
Import upstream version 3.4.0~pre1 |
358 |
enum lsa_SidType *name_type) |
359 |
{
|
|
360 |
return false; |
|
361 |
}
|
|
362 |
||
363 |
/* Call winbindd to convert sid to name */
|
|
364 |
||
0.37.7
by Christian Perrier
Import upstream version 3.6.0~pre3 |
365 |
bool winbind_lookup_sid(TALLOC_CTX *mem_ctx, const struct dom_sid *sid, |
0.30.1
by Christian Perrier
Import upstream version 3.4.0~pre1 |
366 |
const char **domain, const char **name, |
367 |
enum lsa_SidType *name_type) |
|
368 |
{
|
|
369 |
return false; |
|
370 |
}
|
|
371 |
||
372 |
/* Ping winbindd to see it is alive */
|
|
373 |
||
374 |
bool winbind_ping(void) |
|
375 |
{
|
|
376 |
return false; |
|
377 |
}
|
|
378 |
||
379 |
/* Call winbindd to convert SID to uid */
|
|
380 |
||
0.37.7
by Christian Perrier
Import upstream version 3.6.0~pre3 |
381 |
bool winbind_sid_to_uid(uid_t *puid, const struct dom_sid *sid) |
0.30.1
by Christian Perrier
Import upstream version 3.4.0~pre1 |
382 |
{
|
383 |
return false; |
|
384 |
}
|
|
385 |
||
386 |
/* Call winbindd to convert uid to sid */
|
|
387 |
||
0.37.7
by Christian Perrier
Import upstream version 3.6.0~pre3 |
388 |
bool winbind_uid_to_sid(struct dom_sid *sid, uid_t uid) |
0.30.1
by Christian Perrier
Import upstream version 3.4.0~pre1 |
389 |
{
|
390 |
return false; |
|
391 |
}
|
|
392 |
||
393 |
/* Call winbindd to convert SID to gid */
|
|
394 |
||
0.37.7
by Christian Perrier
Import upstream version 3.6.0~pre3 |
395 |
bool winbind_sid_to_gid(gid_t *pgid, const struct dom_sid *sid) |
0.30.1
by Christian Perrier
Import upstream version 3.4.0~pre1 |
396 |
{
|
397 |
return false; |
|
398 |
}
|
|
399 |
||
400 |
/* Call winbindd to convert gid to sid */
|
|
401 |
||
0.37.7
by Christian Perrier
Import upstream version 3.6.0~pre3 |
402 |
bool winbind_gid_to_sid(struct dom_sid *sid, gid_t gid) |
0.30.1
by Christian Perrier
Import upstream version 3.4.0~pre1 |
403 |
{
|
404 |
return false; |
|
405 |
}
|
|
406 |
||
407 |
/* Check for a trusted domain */
|
|
408 |
||
409 |
wbcErr wb_is_trusted_domain(const char *domain) |
|
410 |
{
|
|
411 |
return WBC_ERR_UNKNOWN_FAILURE; |
|
412 |
}
|
|
413 |
||
414 |
/* Lookup a set of rids in a given domain */
|
|
415 |
||
416 |
bool winbind_lookup_rids(TALLOC_CTX *mem_ctx, |
|
0.37.7
by Christian Perrier
Import upstream version 3.6.0~pre3 |
417 |
const struct dom_sid *domain_sid, |
0.30.1
by Christian Perrier
Import upstream version 3.4.0~pre1 |
418 |
int num_rids, uint32 *rids, |
419 |
const char **domain_name, |
|
420 |
const char ***names, enum lsa_SidType **types) |
|
421 |
{
|
|
422 |
return false; |
|
423 |
}
|
|
424 |
||
425 |
/* Ask Winbind to allocate a new uid for us */
|
|
426 |
||
427 |
bool winbind_allocate_uid(uid_t *uid) |
|
428 |
{
|
|
429 |
return false; |
|
430 |
}
|
|
431 |
||
432 |
/* Ask Winbind to allocate a new gid for us */
|
|
433 |
||
434 |
bool winbind_allocate_gid(gid_t *gid) |
|
435 |
{
|
|
436 |
return false; |
|
437 |
}
|
|
438 |
||
439 |
bool winbind_get_groups(TALLOC_CTX *mem_ctx, const char *account, uint32_t *num_groups, gid_t **_groups) |
|
440 |
{
|
|
441 |
return false; |
|
442 |
}
|
|
443 |
||
444 |
bool winbind_get_sid_aliases(TALLOC_CTX *mem_ctx, |
|
0.37.7
by Christian Perrier
Import upstream version 3.6.0~pre3 |
445 |
const struct dom_sid *dom_sid, |
446 |
const struct dom_sid *members, |
|
0.30.1
by Christian Perrier
Import upstream version 3.4.0~pre1 |
447 |
size_t num_members, |
448 |
uint32_t **pp_alias_rids, |
|
449 |
size_t *p_num_alias_rids) |
|
450 |
{
|
|
451 |
return false; |
|
452 |
}
|
|
453 |
||
454 |
#endif /* WITH_WINBIND */ |