s3-proto: remove some prototypes of non-existing functions.
[samba.git] / source3 / winbindd / idmap_adex / idmap_adex.h
1 /*
2  * idmap_centeris: Support for Local IDs and Centeris Cell Structure
3  *
4  * Copyright (C) Gerald (Jerry) Carter 2006-2008
5  *
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.
10  *
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.
15  *
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.
19  */
20
21 #ifndef _IDMAP_ADEX_H
22 #define _IDMAP_ADEX_H
23
24 #include "winbindd/winbindd.h"
25
26 #define ADEX_CELL_RDN             "$LikewiseIdentityCell"
27
28 #define ADEX_OC_USER              "centerisLikewiseUser"
29 #define ADEX_OC_GROUP             "centerisLikewiseGroup"
30
31 #define AD_USER                 "User"
32 #define AD_GROUP                "Group"
33
34 #define ADEX_OC_POSIX_USER        "posixAccount"
35 #define ADEX_OC_POSIX_GROUP       "posixGroup"
36
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"
46
47 #define MIN_ID_VALUE            100
48
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);                         \
57
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);                         \
65
66 #define BAIL_ON_ADS_ERROR(x)               \
67         do {                               \
68                 if (!ADS_ERR_OK(x)) {      \
69                         goto done;         \
70                 }                          \
71         }                                  \
72         while (0);
73
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);
82
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);
89 /*
90  * Cell Provider API
91  */
92
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);
109 };
110
111 /* registered providers */
112
113 extern struct cell_provider_api ccp_unified;
114 extern struct cell_provider_api ccp_local;
115
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
120
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;
133 };
134
135 /* Search flags used for Global Catalog API */
136
137 #define ADEX_GC_SEARCH_CHECK_UNIQUE        0x00000001
138
139 struct gc_info {
140         struct gc_info *prev, *next;
141         char *forest_name;
142         char *search_base;
143         struct likewise_cell *forest_cell;
144 };
145
146 /* Available functions outside of idmap_lwidentity.c */
147
148 /* cell_util.c */
149
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);
157
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);
162
163 /* likewise_cell.c */
164
165 struct likewise_cell *cell_new(void);
166 struct likewise_cell *cell_list_head(void);
167
168 bool cell_list_add(struct likewise_cell *cell);
169 bool cell_list_remove(struct likewise_cell * cell);
170
171 void cell_list_destroy(void);
172 void cell_destroy(struct likewise_cell *c);
173 void cell_set_dns_domain(struct likewise_cell *c,
174                            const char *dns_domain);
175 void cell_set_connection(struct likewise_cell *c,
176                            ADS_STRUCT *ads);
177 void cell_set_dn(struct likewise_cell *c,
178                    const char *dn);
179 void cell_set_domain_sid(struct likewise_cell *c,
180                            struct dom_sid *sid);
181 void cell_set_flags(struct likewise_cell *c, uint32_t flags);
182 void cell_clear_flags(struct likewise_cell *c, uint32_t flags);
183
184 const char* cell_search_base(struct likewise_cell *c);
185 const char *cell_dns_domain(struct likewise_cell *c);
186 ADS_STRUCT *cell_connection(struct likewise_cell *c);
187 bool cell_search_forest(struct likewise_cell *c);
188 ADS_STATUS cell_do_search(struct likewise_cell *c,
189                           const char *search_base,
190                           int scope,
191                           const char *expr,
192                           const char **attrs,
193                           LDAPMessage ** msg);
194 uint32_t cell_flags(struct likewise_cell *c);
195
196 NTSTATUS cell_connect_dn(struct likewise_cell **c,
197                          const char *dn);
198 NTSTATUS cell_connect(struct likewise_cell *c);
199
200
201 /* gc_util.c */
202
203 NTSTATUS gc_init_list(void);
204
205 NTSTATUS gc_find_forest_root(struct gc_info *gc,
206                              const char *domain);
207
208 struct gc_info *gc_search_start(void);
209
210 NTSTATUS gc_search_forest(struct gc_info *gc,
211                           LDAPMessage **msg,
212                           const char *filter);
213
214 NTSTATUS gc_search_all_forests(const char *filter,
215                                ADS_STRUCT ***ads_list,
216                                LDAPMessage ***msg_list,
217                                int *num_resp, uint32_t flags);
218
219 NTSTATUS gc_search_all_forests_unique(const char *filter,
220                                       ADS_STRUCT **ads,
221                                       LDAPMessage **msg);
222
223 NTSTATUS gc_name_to_sid(const char *domain,
224                         const char *name,
225                         struct dom_sid *sid,
226                         enum lsa_SidType *sid_type);
227
228 NTSTATUS gc_sid_to_name(const struct dom_sid *sid,
229                         char **name,
230                         enum lsa_SidType *sid_type);
231
232 NTSTATUS add_ads_result_to_array(ADS_STRUCT *ads,
233                                  LDAPMessage *msg,
234                                  ADS_STRUCT ***ads_list,
235                                  LDAPMessage ***msg_list,
236                                  int *size);
237
238 void free_result_array(ADS_STRUCT **ads_list,
239                        LDAPMessage **msg_list,
240                        int num_resp);
241
242 NTSTATUS check_result_unique(ADS_STRUCT *ads,
243                              LDAPMessage *msg);
244
245
246 /* domain_util.c */
247
248 NTSTATUS domain_init_list(void);
249
250 NTSTATUS dc_search_domains(struct likewise_cell **cell,
251                            LDAPMessage **msg,
252                            const char *dn,
253                            const struct dom_sid *user_sid);
254
255
256 #endif  /* _IDMAP_ADEX_H */