ldb: bump version due to header and internal implementation changes
[Samba.git] / source3 / winbindd / idmap_adex / idmap_adex.h
blob18edf2fad93a18fcadc76d8cdfab6e49d43453d0
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) (struct 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 struct dom_sid * sid);
98 NTSTATUS(*get_nss_info) (const struct 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 struct 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);
161 /* likewise_cell.c */
163 struct likewise_cell *cell_new(void);
164 struct likewise_cell *cell_list_head(void);
166 bool cell_list_add(struct likewise_cell *cell);
167 bool cell_list_remove(struct likewise_cell * cell);
169 void cell_list_destroy(void);
170 void cell_destroy(struct likewise_cell *c);
171 void cell_set_dns_domain(struct likewise_cell *c,
172 const char *dns_domain);
173 void cell_set_connection(struct likewise_cell *c,
174 ADS_STRUCT *ads);
175 void cell_set_dn(struct likewise_cell *c,
176 const char *dn);
177 void cell_set_domain_sid(struct likewise_cell *c,
178 struct dom_sid *sid);
179 void cell_set_flags(struct likewise_cell *c, uint32_t flags);
180 void cell_clear_flags(struct likewise_cell *c, uint32_t flags);
182 const char* cell_search_base(struct likewise_cell *c);
183 const char *cell_dns_domain(struct likewise_cell *c);
184 ADS_STRUCT *cell_connection(struct likewise_cell *c);
185 bool cell_search_forest(struct likewise_cell *c);
186 ADS_STATUS cell_do_search(struct likewise_cell *c,
187 const char *search_base,
188 int scope,
189 const char *expr,
190 const char **attrs,
191 LDAPMessage ** msg);
192 uint32_t cell_flags(struct likewise_cell *c);
194 NTSTATUS cell_connect_dn(struct likewise_cell **c,
195 const char *dn);
196 NTSTATUS cell_connect(struct likewise_cell *c);
199 /* gc_util.c */
201 NTSTATUS gc_init_list(void);
203 NTSTATUS gc_find_forest_root(struct gc_info *gc,
204 const char *domain);
206 struct gc_info *gc_search_start(void);
208 NTSTATUS gc_search_forest(struct gc_info *gc,
209 LDAPMessage **msg,
210 const char *filter);
212 NTSTATUS gc_search_all_forests(const char *filter,
213 ADS_STRUCT ***ads_list,
214 LDAPMessage ***msg_list,
215 int *num_resp, uint32_t flags);
217 NTSTATUS gc_search_all_forests_unique(const char *filter,
218 ADS_STRUCT **ads,
219 LDAPMessage **msg);
221 NTSTATUS gc_name_to_sid(const char *domain,
222 const char *name,
223 struct dom_sid *sid,
224 enum lsa_SidType *sid_type);
226 NTSTATUS gc_sid_to_name(const struct dom_sid *sid,
227 char **name,
228 enum lsa_SidType *sid_type);
230 NTSTATUS add_ads_result_to_array(ADS_STRUCT *ads,
231 LDAPMessage *msg,
232 ADS_STRUCT ***ads_list,
233 LDAPMessage ***msg_list,
234 int *size);
236 void free_result_array(ADS_STRUCT **ads_list,
237 LDAPMessage **msg_list,
238 int num_resp);
240 NTSTATUS check_result_unique(ADS_STRUCT *ads,
241 LDAPMessage *msg);
244 /* domain_util.c */
246 NTSTATUS domain_init_list(void);
248 NTSTATUS dc_search_domains(struct likewise_cell **cell,
249 LDAPMessage **msg,
250 const char *dn,
251 const struct dom_sid *user_sid);
254 #endif /* _IDMAP_ADEX_H */