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
,
101 char **shell
, char **gecos
, gid_t
* p_gid
);
102 NTSTATUS(*map_to_alias
) (TALLOC_CTX
* mem_ctx
,
104 const char *name
, char **alias
);
105 NTSTATUS(*map_from_alias
) (TALLOC_CTX
* mem_ctx
,
107 const char *alias
, char **name
);
110 /* registered providers */
112 extern struct cell_provider_api ccp_unified
;
113 extern struct cell_provider_api ccp_local
;
115 #define LWCELL_FLAG_USE_RFC2307_ATTRS 0x00000001
116 #define LWCELL_FLAG_SEARCH_FOREST 0x00000002
117 #define LWCELL_FLAG_GC_CELL 0x00000004
118 #define LWCELL_FLAG_LOCAL_MODE 0x00000008
120 struct likewise_cell
{
121 struct likewise_cell
*prev
, *next
;
123 struct likewise_cell
*gc_search_cell
;
128 struct GUID
*links
; /* only held by owning cell */
131 struct cell_provider_api
*provider
;
134 /* Search flags used for Global Catalog API */
136 #define ADEX_GC_SEARCH_CHECK_UNIQUE 0x00000001
139 struct gc_info
*prev
, *next
;
142 struct likewise_cell
*forest_cell
;
145 /* Available functions outside of idmap_lwidentity.c */
149 char *find_attr_string(char **list
, size_t num_lines
, const char *substr
);
150 bool is_object_class(char **list
, size_t num_lines
, const char *substr
);
151 int min_id_value(void);
152 char *cell_dn_to_dns(const char *dn
);
153 NTSTATUS
get_sid_type(ADS_STRUCT
*ads
,
155 enum lsa_SidType
*type
);
157 NTSTATUS
cell_locate_membership(ADS_STRUCT
* ads
);
158 NTSTATUS
cell_lookup_settings(struct likewise_cell
* cell
);
159 NTSTATUS
cell_follow_links(struct likewise_cell
*cell
);
160 NTSTATUS
cell_set_local_provider(void);
162 /* likewise_cell.c */
164 struct likewise_cell
*cell_new(void);
165 struct likewise_cell
*cell_list_head(void);
167 bool cell_list_add(struct likewise_cell
*cell
);
168 bool cell_list_remove(struct likewise_cell
* cell
);
170 void cell_list_destroy(void);
171 void cell_destroy(struct likewise_cell
*c
);
172 void cell_set_forest_searches(struct likewise_cell
*c
,
174 void cell_set_dns_domain(struct likewise_cell
*c
,
175 const char *dns_domain
);
176 void cell_set_connection(struct likewise_cell
*c
,
178 void cell_set_dn(struct likewise_cell
*c
,
180 void cell_set_domain_sid(struct likewise_cell
*c
,
182 void cell_set_flags(struct likewise_cell
*c
, uint32_t flags
);
183 void cell_clear_flags(struct likewise_cell
*c
, uint32_t flags
);
185 const char* cell_search_base(struct likewise_cell
*c
);
186 const char *cell_dns_domain(struct likewise_cell
*c
);
187 ADS_STRUCT
*cell_connection(struct likewise_cell
*c
);
188 bool cell_search_forest(struct likewise_cell
*c
);
189 ADS_STATUS
cell_do_search(struct likewise_cell
*c
,
190 const char *search_base
,
195 uint32_t cell_flags(struct likewise_cell
*c
);
197 NTSTATUS
cell_connect_dn(struct likewise_cell
**c
,
199 NTSTATUS
cell_connect(struct likewise_cell
*c
);
204 NTSTATUS
gc_init_list(void);
206 NTSTATUS
gc_find_forest_root(struct gc_info
*gc
,
209 struct gc_info
*gc_search_start(void);
211 NTSTATUS
gc_search_forest(struct gc_info
*gc
,
215 NTSTATUS
gc_search_all_forests(const char *filter
,
216 ADS_STRUCT
***ads_list
,
217 LDAPMessage
***msg_list
,
218 int *num_resp
, uint32_t flags
);
220 NTSTATUS
gc_search_all_forests_unique(const char *filter
,
224 NTSTATUS
gc_name_to_sid(const char *domain
,
227 enum lsa_SidType
*sid_type
);
229 NTSTATUS
gc_sid_to_name(const DOM_SID
*sid
,
231 enum lsa_SidType
*sid_type
);
233 NTSTATUS
add_ads_result_to_array(ADS_STRUCT
*ads
,
235 ADS_STRUCT
***ads_list
,
236 LDAPMessage
***msg_list
,
239 void free_result_array(ADS_STRUCT
**ads_list
,
240 LDAPMessage
**msg_list
,
243 NTSTATUS
check_result_unique(ADS_STRUCT
*ads
,
249 NTSTATUS
domain_init_list(void);
251 NTSTATUS
dc_search_domains(struct likewise_cell
**cell
,
254 const DOM_SID
*user_sid
);
257 #endif /* _IDMAP_ADEX_H */