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.
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) \
51 if (!NT_STATUS_IS_OK(x)) { \
52 DEBUG(10,("Failed! (%s)\n", nt_errstr(x))); \
58 #define WARN_ON_NTSTATUS_ERROR(x) \
60 if (!NT_STATUS_IS_OK(x)) { \
61 DEBUG(10,("Failure ignored! (%s)\n", nt_errstr(x))); \
66 #define BAIL_ON_ADS_ERROR(x) \
68 if (!ADS_ERR_OK(x)) { \
74 #define BAIL_ON_PTR_ERROR(p, x) \
77 DEBUG(10,("NULL pointer!\n")); \
78 x = NT_STATUS_NO_MEMORY; \
83 #define PRINT_NTSTATUS_ERROR(x, hdr, level) \
85 if (!NT_STATUS_IS_OK(x)) { \
86 DEBUG(level,("LWI ("hdr"): %s\n", nt_errstr(x))); \
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
,
100 const char **homedir
,
102 const char **gecos
, gid_t
* p_gid
);
103 NTSTATUS(*map_to_alias
) (TALLOC_CTX
* mem_ctx
,
105 const char *name
, char **alias
);
106 NTSTATUS(*map_from_alias
) (TALLOC_CTX
* mem_ctx
,
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
;
124 struct likewise_cell
*gc_search_cell
;
129 struct GUID
*links
; /* only held by owning cell */
132 struct cell_provider_api
*provider
;
135 /* Search flags used for Global Catalog API */
137 #define ADEX_GC_SEARCH_CHECK_UNIQUE 0x00000001
140 struct gc_info
*prev
, *next
;
143 struct likewise_cell
*forest_cell
;
146 /* Available functions outside of idmap_lwidentity.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
,
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
,
175 void cell_set_dns_domain(struct likewise_cell
*c
,
176 const char *dns_domain
);
177 void cell_set_connection(struct likewise_cell
*c
,
179 void cell_set_dn(struct likewise_cell
*c
,
181 void cell_set_domain_sid(struct likewise_cell
*c
,
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
,
196 uint32_t cell_flags(struct likewise_cell
*c
);
198 NTSTATUS
cell_connect_dn(struct likewise_cell
**c
,
200 NTSTATUS
cell_connect(struct likewise_cell
*c
);
205 NTSTATUS
gc_init_list(void);
207 NTSTATUS
gc_find_forest_root(struct gc_info
*gc
,
210 struct gc_info
*gc_search_start(void);
212 NTSTATUS
gc_search_forest(struct gc_info
*gc
,
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
,
225 NTSTATUS
gc_name_to_sid(const char *domain
,
228 enum lsa_SidType
*sid_type
);
230 NTSTATUS
gc_sid_to_name(const DOM_SID
*sid
,
232 enum lsa_SidType
*sid_type
);
234 NTSTATUS
add_ads_result_to_array(ADS_STRUCT
*ads
,
236 ADS_STRUCT
***ads_list
,
237 LDAPMessage
***msg_list
,
240 void free_result_array(ADS_STRUCT
**ads_list
,
241 LDAPMessage
**msg_list
,
244 NTSTATUS
check_result_unique(ADS_STRUCT
*ads
,
250 NTSTATUS
domain_init_list(void);
252 NTSTATUS
dc_search_domains(struct likewise_cell
**cell
,
255 const DOM_SID
*user_sid
);
258 #endif /* _IDMAP_ADEX_H */