samba-3.5.8 for ARM
[tomato.git] / release / src-rt-6.x.4708 / router / samba-3.5.8 / source3 / winbindd / idmap_adex / idmap_adex.h
blob6d6881e01d6a2c9c2b8e2d45776e9656959fa90f
1 /*
2 * idmap_centeris: Support for Local IDs and Centeris Cell Structure
4 * Copyright (C) Gerald (Jerry) Carter 2006-2008
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
21 #ifndef _IDMAP_ADEX_H
22 #define _IDMAP_ADEX_H
24 #include "winbindd/winbindd.h"
26 #define ADEX_CELL_RDN "$LikewiseIdentityCell"
28 #define ADEX_OC_USER "centerisLikewiseUser"
29 #define ADEX_OC_GROUP "centerisLikewiseGroup"
31 #define AD_USER "User"
32 #define AD_GROUP "Group"
34 #define ADEX_OC_POSIX_USER "posixAccount"
35 #define ADEX_OC_POSIX_GROUP "posixGroup"
37 #define ADEX_ATTR_UIDNUM "uidNumber"
38 #define ADEX_ATTR_GIDNUM "gidNUmber"
39 #define ADEX_ATTR_HOMEDIR "unixHomeDirectory"
40 #define ADEX_ATTR_USERPW "unixUserPassword"
41 #define ADEX_ATTR_GROUPALIAS "groupAlias" /* Not part of RFC2307 */
42 #define ADEX_ATTR_SHELL "loginShell"
43 #define ADEX_ATTR_GECOS "gecos"
44 #define ADEX_ATTR_UID "uid"
45 #define ADEX_ATTR_DISPLAYNAME "displayName"
47 #define MIN_ID_VALUE 100
49 #define BAIL_ON_NTSTATUS_ERROR(x) \
50 do { \
51 if (!NT_STATUS_IS_OK(x)) { \
52 DEBUG(10,("Failed! (%s)\n", nt_errstr(x))); \
53 goto done; \
54 } \
55 } \
56 while (0); \
58 #define WARN_ON_NTSTATUS_ERROR(x) \
59 do { \
60 if (!NT_STATUS_IS_OK(x)) { \
61 DEBUG(10,("Failure ignored! (%s)\n", nt_errstr(x))); \
62 } \
63 } \
64 while (0); \
66 #define BAIL_ON_ADS_ERROR(x) \
67 do { \
68 if (!ADS_ERR_OK(x)) { \
69 goto done; \
70 } \
71 } \
72 while (0);
74 #define BAIL_ON_PTR_ERROR(p, x) \
75 do { \
76 if ((p) == NULL ) { \
77 DEBUG(10,("NULL pointer!\n")); \
78 x = NT_STATUS_NO_MEMORY; \
79 goto done; \
80 } \
81 } while (0);
83 #define PRINT_NTSTATUS_ERROR(x, hdr, level) \
84 do { \
85 if (!NT_STATUS_IS_OK(x)) { \
86 DEBUG(level,("LWI ("hdr"): %s\n", nt_errstr(x))); \
87 } \
88 } while(0);
90 * Cell Provider API
93 struct cell_provider_api {
94 NTSTATUS(*get_sid_from_id) (DOM_SID * sid,
95 uint32_t id, enum id_type type);
96 NTSTATUS(*get_id_from_sid) (uint32_t * id,
97 enum id_type * type, const DOM_SID * sid);
98 NTSTATUS(*get_nss_info) (const DOM_SID * sid,
99 TALLOC_CTX * ctx,
100 const char **homedir,
101 const char **shell,
102 const char **gecos, gid_t * p_gid);
103 NTSTATUS(*map_to_alias) (TALLOC_CTX * mem_ctx,
104 const char *domain,
105 const char *name, char **alias);
106 NTSTATUS(*map_from_alias) (TALLOC_CTX * mem_ctx,
107 const char *domain,
108 const char *alias, char **name);
111 /* registered providers */
113 extern struct cell_provider_api ccp_unified;
114 extern struct cell_provider_api ccp_local;
116 #define LWCELL_FLAG_USE_RFC2307_ATTRS 0x00000001
117 #define LWCELL_FLAG_SEARCH_FOREST 0x00000002
118 #define LWCELL_FLAG_GC_CELL 0x00000004
119 #define LWCELL_FLAG_LOCAL_MODE 0x00000008
121 struct likewise_cell {
122 struct likewise_cell *prev, *next;
123 ADS_STRUCT *conn;
124 struct likewise_cell *gc_search_cell;
125 DOM_SID domain_sid;
126 char *dns_domain;
127 char *forest_name;
128 char *dn;
129 struct GUID *links; /* only held by owning cell */
130 size_t num_links;
131 uint32_t flags;
132 struct cell_provider_api *provider;
135 /* Search flags used for Global Catalog API */
137 #define ADEX_GC_SEARCH_CHECK_UNIQUE 0x00000001
139 struct gc_info {
140 struct gc_info *prev, *next;
141 char *forest_name;
142 char *search_base;
143 struct likewise_cell *forest_cell;
146 /* Available functions outside of idmap_lwidentity.c */
148 /* cell_util.c */
150 char *find_attr_string(char **list, size_t num_lines, const char *substr);
151 bool is_object_class(char **list, size_t num_lines, const char *substr);
152 int min_id_value(void);
153 char *cell_dn_to_dns(const char *dn);
154 NTSTATUS get_sid_type(ADS_STRUCT *ads,
155 LDAPMessage *msg,
156 enum lsa_SidType *type);
158 NTSTATUS cell_locate_membership(ADS_STRUCT * ads);
159 NTSTATUS cell_lookup_settings(struct likewise_cell * cell);
160 NTSTATUS cell_follow_links(struct likewise_cell *cell);
161 NTSTATUS cell_set_local_provider(void);
163 /* likewise_cell.c */
165 struct likewise_cell *cell_new(void);
166 struct likewise_cell *cell_list_head(void);
168 bool cell_list_add(struct likewise_cell *cell);
169 bool cell_list_remove(struct likewise_cell * cell);
171 void cell_list_destroy(void);
172 void cell_destroy(struct likewise_cell *c);
173 void cell_set_forest_searches(struct likewise_cell *c,
174 bool search);
175 void cell_set_dns_domain(struct likewise_cell *c,
176 const char *dns_domain);
177 void cell_set_connection(struct likewise_cell *c,
178 ADS_STRUCT *ads);
179 void cell_set_dn(struct likewise_cell *c,
180 const char *dn);
181 void cell_set_domain_sid(struct likewise_cell *c,
182 DOM_SID *sid);
183 void cell_set_flags(struct likewise_cell *c, uint32_t flags);
184 void cell_clear_flags(struct likewise_cell *c, uint32_t flags);
186 const char* cell_search_base(struct likewise_cell *c);
187 const char *cell_dns_domain(struct likewise_cell *c);
188 ADS_STRUCT *cell_connection(struct likewise_cell *c);
189 bool cell_search_forest(struct likewise_cell *c);
190 ADS_STATUS cell_do_search(struct likewise_cell *c,
191 const char *search_base,
192 int scope,
193 const char *expr,
194 const char **attrs,
195 LDAPMessage ** msg);
196 uint32_t cell_flags(struct likewise_cell *c);
198 NTSTATUS cell_connect_dn(struct likewise_cell **c,
199 const char *dn);
200 NTSTATUS cell_connect(struct likewise_cell *c);
203 /* gc_util.c */
205 NTSTATUS gc_init_list(void);
207 NTSTATUS gc_find_forest_root(struct gc_info *gc,
208 const char *domain);
210 struct gc_info *gc_search_start(void);
212 NTSTATUS gc_search_forest(struct gc_info *gc,
213 LDAPMessage **msg,
214 const char *filter);
216 NTSTATUS gc_search_all_forests(const char *filter,
217 ADS_STRUCT ***ads_list,
218 LDAPMessage ***msg_list,
219 int *num_resp, uint32_t flags);
221 NTSTATUS gc_search_all_forests_unique(const char *filter,
222 ADS_STRUCT **ads,
223 LDAPMessage **msg);
225 NTSTATUS gc_name_to_sid(const char *domain,
226 const char *name,
227 DOM_SID *sid,
228 enum lsa_SidType *sid_type);
230 NTSTATUS gc_sid_to_name(const DOM_SID *sid,
231 char **name,
232 enum lsa_SidType *sid_type);
234 NTSTATUS add_ads_result_to_array(ADS_STRUCT *ads,
235 LDAPMessage *msg,
236 ADS_STRUCT ***ads_list,
237 LDAPMessage ***msg_list,
238 int *size);
240 void free_result_array(ADS_STRUCT **ads_list,
241 LDAPMessage **msg_list,
242 int num_resp);
244 NTSTATUS check_result_unique(ADS_STRUCT *ads,
245 LDAPMessage *msg);
248 /* domain_util.c */
250 NTSTATUS domain_init_list(void);
252 NTSTATUS dc_search_domains(struct likewise_cell **cell,
253 LDAPMessage **msg,
254 const char *dn,
255 const DOM_SID *user_sid);
258 #endif /* _IDMAP_ADEX_H */