File: | /dev/shm/scanbuild/../sssd/src/providers/ipa/ipa_id.c |
Location: | line 614, column 59 |
Description: | Access to field 'dn' results in a dereference of a null pointer (loaded from field 'obj_msg') |
1 | /* | |||
2 | SSSD | |||
3 | ||||
4 | IPA Identity Backend Module | |||
5 | ||||
6 | Authors: | |||
7 | Jan Zeleny <jzeleny@redhat.com> | |||
8 | ||||
9 | Copyright (C) 2011 Red Hat | |||
10 | ||||
11 | This program is free software; you can redistribute it and/or modify | |||
12 | it under the terms of the GNU General Public License as published by | |||
13 | the Free Software Foundation; either version 3 of the License, or | |||
14 | (at your option) any later version. | |||
15 | ||||
16 | This program is distributed in the hope that it will be useful, | |||
17 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
18 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||
19 | GNU General Public License for more details. | |||
20 | ||||
21 | You should have received a copy of the GNU General Public License | |||
22 | along with this program. If not, see <http://www.gnu.org/licenses/>. | |||
23 | */ | |||
24 | ||||
25 | #include <errno(*__errno_location ()).h> | |||
26 | ||||
27 | #include "util/util.h" | |||
28 | #include "db/sysdb.h" | |||
29 | #include "providers/ldap/ldap_common.h" | |||
30 | #include "providers/ldap/sdap_async.h" | |||
31 | #include "providers/ipa/ipa_id.h" | |||
32 | ||||
33 | static const char *ipa_account_info_error_text(int ret, int *dp_error, | |||
34 | const char *default_text) | |||
35 | { | |||
36 | switch (*dp_error) { | |||
37 | case DP_ERR_OK0: | |||
38 | if (ret == EOK0) { | |||
39 | return NULL((void*)0); | |||
40 | } | |||
41 | DEBUG(SSSDBG_CRIT_FAILURE,do { int __debug_macro_level = 0x0020; if ((debug_level & (__debug_macro_level) || (debug_level == 0 && (__debug_macro_level & (0x0010 | 0x0020))))) { debug_fn("../sssd/src/providers/ipa/ipa_id.c" , 42, __FUNCTION__, __debug_macro_level, "Bug: dp_error is OK on failed request\n" ); } } while (0) | |||
42 | "Bug: dp_error is OK on failed request\n")do { int __debug_macro_level = 0x0020; if ((debug_level & (__debug_macro_level) || (debug_level == 0 && (__debug_macro_level & (0x0010 | 0x0020))))) { debug_fn("../sssd/src/providers/ipa/ipa_id.c" , 42, __FUNCTION__, __debug_macro_level, "Bug: dp_error is OK on failed request\n" ); } } while (0); | |||
43 | *dp_error = DP_ERR_FATAL3; | |||
44 | break; | |||
45 | case DP_ERR_OFFLINE1: | |||
46 | return "Offline"; | |||
47 | case DP_ERR_FATAL3: | |||
48 | if (ret == ENOMEM12) { | |||
49 | return "Out of memory"; | |||
50 | } | |||
51 | break; | |||
52 | default: | |||
53 | break; | |||
54 | } | |||
55 | ||||
56 | return default_text; | |||
57 | } | |||
58 | ||||
59 | static struct tevent_req * | |||
60 | ipa_id_get_account_info_send(TALLOC_CTX *memctx, struct tevent_context *ev, | |||
61 | struct ipa_id_ctx *ipa_ctx, struct be_req *be_req, | |||
62 | struct be_acct_req *ar); | |||
63 | ||||
64 | static int ipa_id_get_account_info_recv(struct tevent_req *req, int *dp_error); | |||
65 | ||||
66 | static struct tevent_req *ipa_id_get_netgroup_send(TALLOC_CTX *memctx, | |||
67 | struct tevent_context *ev, | |||
68 | struct ipa_id_ctx *ipa_ctx, | |||
69 | const char *name); | |||
70 | static int ipa_id_get_netgroup_recv(struct tevent_req *req, int *dp_error); | |||
71 | ||||
72 | static void ipa_account_info_done(struct tevent_req *req); | |||
73 | ||||
74 | void ipa_account_info_handler(struct be_req *breq) | |||
75 | { | |||
76 | struct be_ctx *be_ctx = be_req_get_be_ctx(breq); | |||
77 | struct ipa_id_ctx *ipa_ctx; | |||
78 | struct sdap_id_ctx *ctx; | |||
79 | struct be_acct_req *ar; | |||
80 | struct tevent_req *req = NULL((void*)0); | |||
81 | ||||
82 | ipa_ctx = talloc_get_type(be_ctx->bet_info[BET_ID].pvt_bet_data,(struct ipa_id_ctx *)talloc_check_name(be_ctx->bet_info[BET_ID ].pvt_bet_data, "struct ipa_id_ctx") | |||
83 | struct ipa_id_ctx)(struct ipa_id_ctx *)talloc_check_name(be_ctx->bet_info[BET_ID ].pvt_bet_data, "struct ipa_id_ctx"); | |||
84 | ctx = ipa_ctx->sdap_id_ctx; | |||
85 | ||||
86 | if (be_is_offline(ctx->be)) { | |||
87 | return sdap_handler_done(breq, DP_ERR_OFFLINE1, EAGAIN11, "Offline"); | |||
88 | } | |||
89 | ||||
90 | ar = talloc_get_type(be_req_get_data(breq), struct be_acct_req)(struct be_acct_req *)talloc_check_name(be_req_get_data(breq) , "struct be_acct_req"); | |||
91 | ||||
92 | if (strcasecmp(ar->domain, be_ctx->domain->name) != 0) { | |||
93 | /* if domain names do not match, this is a subdomain case | |||
94 | * subdomain lookups are handled differently on the server | |||
95 | * and the client | |||
96 | */ | |||
97 | req = ipa_subdomain_account_send(breq, be_ctx->ev, ipa_ctx, breq, ar); | |||
98 | ||||
99 | } else if ((ar->entry_type & BE_REQ_TYPE_MASK0x00FF) == BE_REQ_NETGROUP0x0004) { | |||
100 | /* netgroups are handled by a separate request function */ | |||
101 | if (ar->filter_type != BE_FILTER_NAME1) { | |||
102 | return sdap_handler_done(breq, DP_ERR_FATAL3, | |||
103 | EINVAL22, "Invalid filter type"); | |||
104 | } | |||
105 | req = ipa_id_get_netgroup_send(breq, be_ctx->ev, | |||
106 | ipa_ctx, ar->filter_value); | |||
107 | } else { | |||
108 | /* any account request is handled by sdap, | |||
109 | * any invalid request is caught there. */ | |||
110 | ||||
111 | req = ipa_id_get_account_info_send(breq, be_ctx->ev, ipa_ctx, breq, | |||
112 | ar); | |||
113 | } | |||
114 | ||||
115 | if (!req) { | |||
116 | return sdap_handler_done(breq, DP_ERR_FATAL3, | |||
117 | ENOMEM12, "Out of memory"); | |||
118 | } | |||
119 | tevent_req_set_callback(req, ipa_account_info_done, breq); | |||
120 | } | |||
121 | ||||
122 | static void ipa_account_info_done(struct tevent_req *req) | |||
123 | { | |||
124 | struct be_req *breq = tevent_req_callback_data(req, struct be_req)(struct be_req *)_talloc_get_type_abort(_tevent_req_callback_data (req), "struct be_req", "../sssd/src/providers/ipa/ipa_id.c" ":" "124"); | |||
125 | struct be_acct_req *ar = talloc_get_type(be_req_get_data(breq),(struct be_acct_req *)talloc_check_name(be_req_get_data(breq) , "struct be_acct_req") | |||
126 | struct be_acct_req)(struct be_acct_req *)talloc_check_name(be_req_get_data(breq) , "struct be_acct_req"); | |||
127 | struct be_ctx *be_ctx = be_req_get_be_ctx(breq); | |||
128 | const char *error_text; | |||
129 | int ret, dp_error; | |||
130 | ||||
131 | if ((ar->entry_type & BE_REQ_TYPE_MASK0x00FF) == BE_REQ_NETGROUP0x0004) { | |||
132 | ret = ipa_id_get_netgroup_recv(req, &dp_error); | |||
133 | } else { | |||
134 | if (strcasecmp(ar->domain, be_ctx->domain->name) != 0) { | |||
135 | ret = ipa_subdomain_account_recv(req, &dp_error); | |||
136 | } else { | |||
137 | ret = ipa_id_get_account_info_recv(req, &dp_error); | |||
138 | } | |||
139 | } | |||
140 | talloc_zfree(req)do { _talloc_free(((void *)((uintptr_t)(req))), "../sssd/src/providers/ipa/ipa_id.c" ":" "140"); req = ((void*)0); } while(0); | |||
141 | ||||
142 | error_text = ipa_account_info_error_text(ret, &dp_error, | |||
143 | "Account info lookup failed"); | |||
144 | sdap_handler_done(breq, dp_error, ret, error_text); | |||
145 | } | |||
146 | ||||
147 | struct ipa_resolve_user_list_state { | |||
148 | struct tevent_context *ev; | |||
149 | struct sdap_id_ctx *sdap_id_ctx; | |||
150 | struct be_req *be_req; | |||
151 | struct ldb_message_element *users; | |||
152 | const char *domain_name; | |||
153 | size_t user_idx; | |||
154 | ||||
155 | int dp_error; | |||
156 | }; | |||
157 | ||||
158 | static errno_t ipa_resolve_user_list_get_user_step(struct tevent_req *req); | |||
159 | static void ipa_resolve_user_list_get_user_done(struct tevent_req *subreq); | |||
160 | ||||
161 | static struct tevent_req * | |||
162 | ipa_resolve_user_list_send(TALLOC_CTX *memctx, struct tevent_context *ev, | |||
163 | struct be_req *be_req, | |||
164 | struct sdap_id_ctx *sdap_id_ctx, | |||
165 | const char *domain_name, | |||
166 | struct ldb_message_element *users) | |||
167 | { | |||
168 | int ret; | |||
169 | struct tevent_req *req; | |||
170 | struct ipa_resolve_user_list_state *state; | |||
171 | ||||
172 | req = tevent_req_create(memctx, &state,_tevent_req_create((memctx), (&state), sizeof(struct ipa_resolve_user_list_state ), "struct ipa_resolve_user_list_state", "../sssd/src/providers/ipa/ipa_id.c" ":" "173") | |||
173 | struct ipa_resolve_user_list_state)_tevent_req_create((memctx), (&state), sizeof(struct ipa_resolve_user_list_state ), "struct ipa_resolve_user_list_state", "../sssd/src/providers/ipa/ipa_id.c" ":" "173"); | |||
174 | if (req == NULL((void*)0)) { | |||
175 | DEBUG(SSSDBG_OP_FAILURE, "tevent_req_create failed.\n")do { int __debug_macro_level = 0x0040; if ((debug_level & (__debug_macro_level) || (debug_level == 0 && (__debug_macro_level & (0x0010 | 0x0020))))) { debug_fn("../sssd/src/providers/ipa/ipa_id.c" , 175, __FUNCTION__, __debug_macro_level, "tevent_req_create failed.\n" ); } } while (0); | |||
176 | return NULL((void*)0); | |||
177 | } | |||
178 | ||||
179 | state->ev = ev; | |||
180 | state->sdap_id_ctx = sdap_id_ctx; | |||
181 | state->be_req = be_req; | |||
182 | state->domain_name = domain_name; | |||
183 | state->users = users; | |||
184 | state->user_idx = 0; | |||
185 | state->dp_error = DP_ERR_FATAL3; | |||
186 | ||||
187 | ret = ipa_resolve_user_list_get_user_step(req); | |||
188 | if (ret == EAGAIN11) { | |||
189 | return req; | |||
190 | } | |||
191 | if (ret != EOK0) { | |||
192 | DEBUG(SSSDBG_OP_FAILURE,do { int __debug_macro_level = 0x0040; if ((debug_level & (__debug_macro_level) || (debug_level == 0 && (__debug_macro_level & (0x0010 | 0x0020))))) { debug_fn("../sssd/src/providers/ipa/ipa_id.c" , 193, __FUNCTION__, __debug_macro_level, "ipa_resolve_user_list_get_user_step failed.\n" ); } } while (0) | |||
193 | "ipa_resolve_user_list_get_user_step failed.\n")do { int __debug_macro_level = 0x0040; if ((debug_level & (__debug_macro_level) || (debug_level == 0 && (__debug_macro_level & (0x0010 | 0x0020))))) { debug_fn("../sssd/src/providers/ipa/ipa_id.c" , 193, __FUNCTION__, __debug_macro_level, "ipa_resolve_user_list_get_user_step failed.\n" ); } } while (0); | |||
194 | } | |||
195 | ||||
196 | if (ret == EOK0) { | |||
197 | state->dp_error = DP_ERR_OK0; | |||
198 | tevent_req_done(req)_tevent_req_done(req, "../sssd/src/providers/ipa/ipa_id.c" ":" "198"); | |||
199 | } else { | |||
200 | tevent_req_error(req, ret)_tevent_req_error(req, ret, "../sssd/src/providers/ipa/ipa_id.c" ":" "200"); | |||
201 | } | |||
202 | tevent_req_post(req, ev); | |||
203 | return req; | |||
204 | } | |||
205 | ||||
206 | static errno_t ipa_resolve_user_list_get_user_step(struct tevent_req *req) | |||
207 | { | |||
208 | int ret; | |||
209 | struct tevent_req *subreq; | |||
210 | struct be_acct_req *ar; | |||
211 | struct ipa_resolve_user_list_state *state = tevent_req_data(req,(struct ipa_resolve_user_list_state *)_talloc_get_type_abort( _tevent_req_data(req), "struct ipa_resolve_user_list_state", "../sssd/src/providers/ipa/ipa_id.c" ":" "212") | |||
212 | struct ipa_resolve_user_list_state)(struct ipa_resolve_user_list_state *)_talloc_get_type_abort( _tevent_req_data(req), "struct ipa_resolve_user_list_state", "../sssd/src/providers/ipa/ipa_id.c" ":" "212"); | |||
213 | ||||
214 | if (state->user_idx >= state->users->num_values) { | |||
215 | return EOK0; | |||
216 | } | |||
217 | ||||
218 | ret = get_be_acct_req_for_user_name(state, | |||
219 | (const char *)state->users->values[state->user_idx].data, | |||
220 | state->domain_name, &ar); | |||
221 | if (ret != EOK0) { | |||
222 | DEBUG(SSSDBG_OP_FAILURE, "get_be_acct_req_for_user_name failed.\n")do { int __debug_macro_level = 0x0040; if ((debug_level & (__debug_macro_level) || (debug_level == 0 && (__debug_macro_level & (0x0010 | 0x0020))))) { debug_fn("../sssd/src/providers/ipa/ipa_id.c" , 222, __FUNCTION__, __debug_macro_level, "get_be_acct_req_for_user_name failed.\n" ); } } while (0); | |||
223 | return ret; | |||
224 | } | |||
225 | ||||
226 | DEBUG(SSSDBG_TRACE_ALL, "Trying to resolve user [%s].\n", ar->filter_value)do { int __debug_macro_level = 0x4000; if ((debug_level & (__debug_macro_level) || (debug_level == 0 && (__debug_macro_level & (0x0010 | 0x0020))))) { debug_fn("../sssd/src/providers/ipa/ipa_id.c" , 226, __FUNCTION__, __debug_macro_level, "Trying to resolve user [%s].\n" , ar->filter_value); } } while (0); | |||
227 | ||||
228 | subreq = sdap_handle_acct_req_send(state, state->be_req, ar, | |||
229 | state->sdap_id_ctx, | |||
230 | state->sdap_id_ctx->opts->sdom, | |||
231 | state->sdap_id_ctx->conn, true1); | |||
232 | if (subreq == NULL((void*)0)) { | |||
233 | DEBUG(SSSDBG_OP_FAILURE, "sdap_handle_acct_req_send failed.\n")do { int __debug_macro_level = 0x0040; if ((debug_level & (__debug_macro_level) || (debug_level == 0 && (__debug_macro_level & (0x0010 | 0x0020))))) { debug_fn("../sssd/src/providers/ipa/ipa_id.c" , 233, __FUNCTION__, __debug_macro_level, "sdap_handle_acct_req_send failed.\n" ); } } while (0); | |||
234 | return ENOMEM12; | |||
235 | } | |||
236 | ||||
237 | tevent_req_set_callback(subreq, ipa_resolve_user_list_get_user_done, req); | |||
238 | ||||
239 | return EAGAIN11; | |||
240 | } | |||
241 | ||||
242 | static void ipa_resolve_user_list_get_user_done(struct tevent_req *subreq) | |||
243 | { | |||
244 | struct tevent_req *req = tevent_req_callback_data(subreq,(struct tevent_req *)_talloc_get_type_abort(_tevent_req_callback_data (subreq), "struct tevent_req", "../sssd/src/providers/ipa/ipa_id.c" ":" "245") | |||
245 | struct tevent_req)(struct tevent_req *)_talloc_get_type_abort(_tevent_req_callback_data (subreq), "struct tevent_req", "../sssd/src/providers/ipa/ipa_id.c" ":" "245"); | |||
246 | struct ipa_resolve_user_list_state *state = tevent_req_data(req,(struct ipa_resolve_user_list_state *)_talloc_get_type_abort( _tevent_req_data(req), "struct ipa_resolve_user_list_state", "../sssd/src/providers/ipa/ipa_id.c" ":" "247") | |||
247 | struct ipa_resolve_user_list_state)(struct ipa_resolve_user_list_state *)_talloc_get_type_abort( _tevent_req_data(req), "struct ipa_resolve_user_list_state", "../sssd/src/providers/ipa/ipa_id.c" ":" "247"); | |||
248 | int ret; | |||
249 | ||||
250 | ret = sdap_handle_acct_req_recv(subreq, &state->dp_error, NULL((void*)0), NULL((void*)0)); | |||
251 | talloc_zfree(subreq)do { _talloc_free(((void *)((uintptr_t)(subreq))), "../sssd/src/providers/ipa/ipa_id.c" ":" "251"); subreq = ((void*)0); } while(0); | |||
252 | if (ret != EOK0) { | |||
253 | DEBUG(SSSDBG_OP_FAILURE, "sdap_handle_acct request failed: %d\n", ret)do { int __debug_macro_level = 0x0040; if ((debug_level & (__debug_macro_level) || (debug_level == 0 && (__debug_macro_level & (0x0010 | 0x0020))))) { debug_fn("../sssd/src/providers/ipa/ipa_id.c" , 253, __FUNCTION__, __debug_macro_level, "sdap_handle_acct request failed: %d\n" , ret); } } while (0); | |||
254 | goto done; | |||
255 | } | |||
256 | ||||
257 | state->user_idx++; | |||
258 | ||||
259 | ret = ipa_resolve_user_list_get_user_step(req); | |||
260 | if (ret == EAGAIN11) { | |||
261 | return; | |||
262 | } | |||
263 | if (ret != EOK0) { | |||
264 | DEBUG(SSSDBG_OP_FAILURE,do { int __debug_macro_level = 0x0040; if ((debug_level & (__debug_macro_level) || (debug_level == 0 && (__debug_macro_level & (0x0010 | 0x0020))))) { debug_fn("../sssd/src/providers/ipa/ipa_id.c" , 265, __FUNCTION__, __debug_macro_level, "ipa_resolve_user_list_get_user_step failed.\n" ); } } while (0) | |||
265 | "ipa_resolve_user_list_get_user_step failed.\n")do { int __debug_macro_level = 0x0040; if ((debug_level & (__debug_macro_level) || (debug_level == 0 && (__debug_macro_level & (0x0010 | 0x0020))))) { debug_fn("../sssd/src/providers/ipa/ipa_id.c" , 265, __FUNCTION__, __debug_macro_level, "ipa_resolve_user_list_get_user_step failed.\n" ); } } while (0); | |||
266 | } | |||
267 | ||||
268 | done: | |||
269 | if (ret == EOK0) { | |||
270 | state->dp_error = DP_ERR_OK0; | |||
271 | tevent_req_done(req)_tevent_req_done(req, "../sssd/src/providers/ipa/ipa_id.c" ":" "271"); | |||
272 | } else { | |||
273 | if (state->dp_error == DP_ERR_OK0) { | |||
274 | state->dp_error = DP_ERR_FATAL3; | |||
275 | } | |||
276 | tevent_req_error(req, ret)_tevent_req_error(req, ret, "../sssd/src/providers/ipa/ipa_id.c" ":" "276"); | |||
277 | } | |||
278 | return; | |||
279 | } | |||
280 | ||||
281 | static int ipa_resolve_user_list_recv(struct tevent_req *req, int *dp_error) | |||
282 | { | |||
283 | struct ipa_resolve_user_list_state *state = tevent_req_data(req,(struct ipa_resolve_user_list_state *)_talloc_get_type_abort( _tevent_req_data(req), "struct ipa_resolve_user_list_state", "../sssd/src/providers/ipa/ipa_id.c" ":" "284") | |||
284 | struct ipa_resolve_user_list_state)(struct ipa_resolve_user_list_state *)_talloc_get_type_abort( _tevent_req_data(req), "struct ipa_resolve_user_list_state", "../sssd/src/providers/ipa/ipa_id.c" ":" "284"); | |||
285 | ||||
286 | if (dp_error) { | |||
287 | *dp_error = state->dp_error; | |||
288 | } | |||
289 | ||||
290 | TEVENT_REQ_RETURN_ON_ERROR(req)do { enum tevent_req_state TRROEstate; uint64_t TRROEerr; if ( tevent_req_is_error(req, &TRROEstate, &TRROEerr)) { if (TRROEstate == TEVENT_REQ_USER_ERROR && TRROEerr != 0 ) { return TRROEerr; } return ERR_INTERNAL; } } while (0); | |||
291 | ||||
292 | return EOK0; | |||
293 | } | |||
294 | ||||
295 | struct ipa_id_get_account_info_state { | |||
296 | struct tevent_context *ev; | |||
297 | struct ipa_id_ctx *ipa_ctx; | |||
298 | struct sdap_id_ctx *ctx; | |||
299 | struct sdap_id_op *op; | |||
300 | struct sysdb_ctx *sysdb; | |||
301 | struct sss_domain_info *domain; | |||
302 | struct be_req *be_req; | |||
303 | struct be_acct_req *ar; | |||
304 | const char *realm; | |||
305 | ||||
306 | struct sysdb_attrs *override_attrs; | |||
307 | struct ldb_message *obj_msg; | |||
308 | struct ldb_message_element *ghosts; | |||
309 | int dp_error; | |||
310 | }; | |||
311 | ||||
312 | static void ipa_id_get_account_info_connected(struct tevent_req *subreq); | |||
313 | static void ipa_id_get_account_info_got_override(struct tevent_req *subreq); | |||
314 | static errno_t ipa_id_get_account_info_get_original_step(struct tevent_req *req, | |||
315 | struct be_acct_req *ar); | |||
316 | static void ipa_id_get_account_info_orig_done(struct tevent_req *subreq); | |||
317 | static void ipa_id_get_account_info_done(struct tevent_req *subreq); | |||
318 | static void ipa_id_get_user_list_done(struct tevent_req *subreq); | |||
319 | ||||
320 | static struct tevent_req * | |||
321 | ipa_id_get_account_info_send(TALLOC_CTX *memctx, struct tevent_context *ev, | |||
322 | struct ipa_id_ctx *ipa_ctx, struct be_req *be_req, | |||
323 | struct be_acct_req *ar) | |||
324 | { | |||
325 | int ret; | |||
326 | struct tevent_req *req; | |||
327 | struct tevent_req *subreq; | |||
328 | struct ipa_id_get_account_info_state *state; | |||
329 | ||||
330 | req = tevent_req_create(memctx, &state,_tevent_req_create((memctx), (&state), sizeof(struct ipa_id_get_account_info_state ), "struct ipa_id_get_account_info_state", "../sssd/src/providers/ipa/ipa_id.c" ":" "331") | |||
331 | struct ipa_id_get_account_info_state)_tevent_req_create((memctx), (&state), sizeof(struct ipa_id_get_account_info_state ), "struct ipa_id_get_account_info_state", "../sssd/src/providers/ipa/ipa_id.c" ":" "331"); | |||
332 | if (req == NULL((void*)0)) { | |||
333 | DEBUG(SSSDBG_OP_FAILURE, "tevent_req_create failed.\n")do { int __debug_macro_level = 0x0040; if ((debug_level & (__debug_macro_level) || (debug_level == 0 && (__debug_macro_level & (0x0010 | 0x0020))))) { debug_fn("../sssd/src/providers/ipa/ipa_id.c" , 333, __FUNCTION__, __debug_macro_level, "tevent_req_create failed.\n" ); } } while (0); | |||
334 | return NULL((void*)0); | |||
335 | } | |||
336 | ||||
337 | state->ev = ev; | |||
338 | state->ipa_ctx = ipa_ctx; | |||
339 | state->ctx = ipa_ctx->sdap_id_ctx; | |||
340 | state->dp_error = DP_ERR_FATAL3; | |||
341 | ||||
342 | state->op = sdap_id_op_create(state, state->ctx->conn->conn_cache); | |||
343 | if (state->op == NULL((void*)0)) { | |||
344 | DEBUG(SSSDBG_OP_FAILURE, "sdap_id_op_create failed.\n")do { int __debug_macro_level = 0x0040; if ((debug_level & (__debug_macro_level) || (debug_level == 0 && (__debug_macro_level & (0x0010 | 0x0020))))) { debug_fn("../sssd/src/providers/ipa/ipa_id.c" , 344, __FUNCTION__, __debug_macro_level, "sdap_id_op_create failed.\n" ); } } while (0); | |||
345 | ret = ENOMEM12; | |||
346 | goto fail; | |||
347 | } | |||
348 | ||||
349 | state->domain = find_domain_by_name(state->ctx->be->domain, | |||
350 | ar->domain, true1); | |||
351 | if (state->domain == NULL((void*)0)) { | |||
352 | DEBUG(SSSDBG_OP_FAILURE, "find_domain_by_name failed.\n")do { int __debug_macro_level = 0x0040; if ((debug_level & (__debug_macro_level) || (debug_level == 0 && (__debug_macro_level & (0x0010 | 0x0020))))) { debug_fn("../sssd/src/providers/ipa/ipa_id.c" , 352, __FUNCTION__, __debug_macro_level, "find_domain_by_name failed.\n" ); } } while (0); | |||
353 | ret = ENOMEM12; | |||
354 | goto fail; | |||
355 | } | |||
356 | state->sysdb = state->domain->sysdb; | |||
357 | state->be_req = be_req; | |||
358 | state->ar = ar; | |||
359 | state->realm = dp_opt_get_string(state->ipa_ctx->ipa_options->basic,_dp_opt_get_string(state->ipa_ctx->ipa_options->basic , IPA_KRB5_REALM, __FUNCTION__) | |||
360 | IPA_KRB5_REALM)_dp_opt_get_string(state->ipa_ctx->ipa_options->basic , IPA_KRB5_REALM, __FUNCTION__); | |||
361 | if (state->realm == NULL((void*)0)) { | |||
362 | DEBUG(SSSDBG_CRIT_FAILURE, "No Kerberos realm for IPA?\n")do { int __debug_macro_level = 0x0020; if ((debug_level & (__debug_macro_level) || (debug_level == 0 && (__debug_macro_level & (0x0010 | 0x0020))))) { debug_fn("../sssd/src/providers/ipa/ipa_id.c" , 362, __FUNCTION__, __debug_macro_level, "No Kerberos realm for IPA?\n" ); } } while (0); | |||
363 | ret = EINVAL22; | |||
364 | goto fail; | |||
365 | } | |||
366 | ||||
367 | /* We can skip the override lookup and go directly to the original object | |||
368 | * if | |||
369 | * - the lookup is by SID | |||
370 | * - there is no view set of it is the default view | |||
371 | * - if the EXTRA_INPUT_MAYBE_WITH_VIEW flag is not set | |||
372 | */ | |||
373 | if (state->ipa_ctx->view_name == NULL((void*)0) | |||
374 | || state->ar->filter_type == BE_FILTER_SECID4 | |||
375 | || strcmp(state->ipa_ctx->view_name,__extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p (state->ipa_ctx->view_name) && __builtin_constant_p ("default") && (__s1_len = strlen (state->ipa_ctx ->view_name), __s2_len = strlen ("default"), (!((size_t)(const void *)((state->ipa_ctx->view_name) + 1) - (size_t)(const void *)(state->ipa_ctx->view_name) == 1) || __s1_len >= 4) && (!((size_t)(const void *)(("default") + 1) - ( size_t)(const void *)("default") == 1) || __s2_len >= 4)) ? __builtin_strcmp (state->ipa_ctx->view_name, "default" ) : (__builtin_constant_p (state->ipa_ctx->view_name) && ((size_t)(const void *)((state->ipa_ctx->view_name) + 1 ) - (size_t)(const void *)(state->ipa_ctx->view_name) == 1) && (__s1_len = strlen (state->ipa_ctx->view_name ), __s1_len < 4) ? (__builtin_constant_p ("default") && ((size_t)(const void *)(("default") + 1) - (size_t)(const void *)("default") == 1) ? __builtin_strcmp (state->ipa_ctx-> view_name, "default") : (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) ("default"); int __result = (((const unsigned char *) (const char *) (state-> ipa_ctx->view_name))[0] - __s2[0]); if (__s1_len > 0 && __result == 0) { __result = (((const unsigned char *) (const char *) (state->ipa_ctx->view_name))[1] - __s2[1]); if (__s1_len > 1 && __result == 0) { __result = (((const unsigned char *) (const char *) (state->ipa_ctx->view_name ))[2] - __s2[2]); if (__s1_len > 2 && __result == 0 ) __result = (((const unsigned char *) (const char *) (state-> ipa_ctx->view_name))[3] - __s2[3]); } } __result; }))) : ( __builtin_constant_p ("default") && ((size_t)(const void *)(("default") + 1) - (size_t)(const void *)("default") == 1 ) && (__s2_len = strlen ("default"), __s2_len < 4) ? (__builtin_constant_p (state->ipa_ctx->view_name) && ((size_t)(const void *)((state->ipa_ctx->view_name) + 1 ) - (size_t)(const void *)(state->ipa_ctx->view_name) == 1) ? __builtin_strcmp (state->ipa_ctx->view_name, "default" ) : (- (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (state->ipa_ctx->view_name); int __result = (((const unsigned char *) (const char *) ("default" ))[0] - __s2[0]); if (__s2_len > 0 && __result == 0 ) { __result = (((const unsigned char *) (const char *) ("default" ))[1] - __s2[1]); if (__s2_len > 1 && __result == 0 ) { __result = (((const unsigned char *) (const char *) ("default" ))[2] - __s2[2]); if (__s2_len > 2 && __result == 0 ) __result = (((const unsigned char *) (const char *) ("default" ))[3] - __s2[3]); } } __result; })))) : __builtin_strcmp (state ->ipa_ctx->view_name, "default")))); }) | |||
376 | SYSDB_DEFAULT_VIEW_NAME)__extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p (state->ipa_ctx->view_name) && __builtin_constant_p ("default") && (__s1_len = strlen (state->ipa_ctx ->view_name), __s2_len = strlen ("default"), (!((size_t)(const void *)((state->ipa_ctx->view_name) + 1) - (size_t)(const void *)(state->ipa_ctx->view_name) == 1) || __s1_len >= 4) && (!((size_t)(const void *)(("default") + 1) - ( size_t)(const void *)("default") == 1) || __s2_len >= 4)) ? __builtin_strcmp (state->ipa_ctx->view_name, "default" ) : (__builtin_constant_p (state->ipa_ctx->view_name) && ((size_t)(const void *)((state->ipa_ctx->view_name) + 1 ) - (size_t)(const void *)(state->ipa_ctx->view_name) == 1) && (__s1_len = strlen (state->ipa_ctx->view_name ), __s1_len < 4) ? (__builtin_constant_p ("default") && ((size_t)(const void *)(("default") + 1) - (size_t)(const void *)("default") == 1) ? __builtin_strcmp (state->ipa_ctx-> view_name, "default") : (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) ("default"); int __result = (((const unsigned char *) (const char *) (state-> ipa_ctx->view_name))[0] - __s2[0]); if (__s1_len > 0 && __result == 0) { __result = (((const unsigned char *) (const char *) (state->ipa_ctx->view_name))[1] - __s2[1]); if (__s1_len > 1 && __result == 0) { __result = (((const unsigned char *) (const char *) (state->ipa_ctx->view_name ))[2] - __s2[2]); if (__s1_len > 2 && __result == 0 ) __result = (((const unsigned char *) (const char *) (state-> ipa_ctx->view_name))[3] - __s2[3]); } } __result; }))) : ( __builtin_constant_p ("default") && ((size_t)(const void *)(("default") + 1) - (size_t)(const void *)("default") == 1 ) && (__s2_len = strlen ("default"), __s2_len < 4) ? (__builtin_constant_p (state->ipa_ctx->view_name) && ((size_t)(const void *)((state->ipa_ctx->view_name) + 1 ) - (size_t)(const void *)(state->ipa_ctx->view_name) == 1) ? __builtin_strcmp (state->ipa_ctx->view_name, "default" ) : (- (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (state->ipa_ctx->view_name); int __result = (((const unsigned char *) (const char *) ("default" ))[0] - __s2[0]); if (__s2_len > 0 && __result == 0 ) { __result = (((const unsigned char *) (const char *) ("default" ))[1] - __s2[1]); if (__s2_len > 1 && __result == 0 ) { __result = (((const unsigned char *) (const char *) ("default" ))[2] - __s2[2]); if (__s2_len > 2 && __result == 0 ) __result = (((const unsigned char *) (const char *) ("default" ))[3] - __s2[3]); } } __result; })))) : __builtin_strcmp (state ->ipa_ctx->view_name, "default")))); }) == 0 | |||
377 | || state->ar->extra_value == NULL((void*)0) | |||
378 | || strcmp(state->ar->extra_value,__extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p (state->ar->extra_value) && __builtin_constant_p ("V") && (__s1_len = strlen (state->ar->extra_value ), __s2_len = strlen ("V"), (!((size_t)(const void *)((state-> ar->extra_value) + 1) - (size_t)(const void *)(state->ar ->extra_value) == 1) || __s1_len >= 4) && (!((size_t )(const void *)(("V") + 1) - (size_t)(const void *)("V") == 1 ) || __s2_len >= 4)) ? __builtin_strcmp (state->ar-> extra_value, "V") : (__builtin_constant_p (state->ar->extra_value ) && ((size_t)(const void *)((state->ar->extra_value ) + 1) - (size_t)(const void *)(state->ar->extra_value) == 1) && (__s1_len = strlen (state->ar->extra_value ), __s1_len < 4) ? (__builtin_constant_p ("V") && ( (size_t)(const void *)(("V") + 1) - (size_t)(const void *)("V" ) == 1) ? __builtin_strcmp (state->ar->extra_value, "V" ) : (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) ("V"); int __result = (((const unsigned char *) (const char *) (state->ar->extra_value))[0] - __s2 [0]); if (__s1_len > 0 && __result == 0) { __result = (((const unsigned char *) (const char *) (state->ar-> extra_value))[1] - __s2[1]); if (__s1_len > 1 && __result == 0) { __result = (((const unsigned char *) (const char *) ( state->ar->extra_value))[2] - __s2[2]); if (__s1_len > 2 && __result == 0) __result = (((const unsigned char *) (const char *) (state->ar->extra_value))[3] - __s2[ 3]); } } __result; }))) : (__builtin_constant_p ("V") && ((size_t)(const void *)(("V") + 1) - (size_t)(const void *)( "V") == 1) && (__s2_len = strlen ("V"), __s2_len < 4) ? (__builtin_constant_p (state->ar->extra_value) && ((size_t)(const void *)((state->ar->extra_value) + 1) - (size_t)(const void *)(state->ar->extra_value) == 1) ? __builtin_strcmp (state->ar->extra_value, "V") : (- (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (state->ar->extra_value); int __result = (((const unsigned char *) (const char *) ("V"))[0] - __s2[0]); if (__s2_len > 0 && __result == 0) { __result = (((const unsigned char *) (const char *) ("V"))[1] - __s2[1]); if (__s2_len > 1 && __result == 0) { __result = (((const unsigned char *) (const char *) ("V"))[2] - __s2[2]); if (__s2_len > 2 && __result == 0) __result = (((const unsigned char *) (const char *) ("V"))[3] - __s2[3]); } } __result; })))) : __builtin_strcmp (state->ar->extra_value, "V")))); }) | |||
379 | EXTRA_INPUT_MAYBE_WITH_VIEW)__extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p (state->ar->extra_value) && __builtin_constant_p ("V") && (__s1_len = strlen (state->ar->extra_value ), __s2_len = strlen ("V"), (!((size_t)(const void *)((state-> ar->extra_value) + 1) - (size_t)(const void *)(state->ar ->extra_value) == 1) || __s1_len >= 4) && (!((size_t )(const void *)(("V") + 1) - (size_t)(const void *)("V") == 1 ) || __s2_len >= 4)) ? __builtin_strcmp (state->ar-> extra_value, "V") : (__builtin_constant_p (state->ar->extra_value ) && ((size_t)(const void *)((state->ar->extra_value ) + 1) - (size_t)(const void *)(state->ar->extra_value) == 1) && (__s1_len = strlen (state->ar->extra_value ), __s1_len < 4) ? (__builtin_constant_p ("V") && ( (size_t)(const void *)(("V") + 1) - (size_t)(const void *)("V" ) == 1) ? __builtin_strcmp (state->ar->extra_value, "V" ) : (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) ("V"); int __result = (((const unsigned char *) (const char *) (state->ar->extra_value))[0] - __s2 [0]); if (__s1_len > 0 && __result == 0) { __result = (((const unsigned char *) (const char *) (state->ar-> extra_value))[1] - __s2[1]); if (__s1_len > 1 && __result == 0) { __result = (((const unsigned char *) (const char *) ( state->ar->extra_value))[2] - __s2[2]); if (__s1_len > 2 && __result == 0) __result = (((const unsigned char *) (const char *) (state->ar->extra_value))[3] - __s2[ 3]); } } __result; }))) : (__builtin_constant_p ("V") && ((size_t)(const void *)(("V") + 1) - (size_t)(const void *)( "V") == 1) && (__s2_len = strlen ("V"), __s2_len < 4) ? (__builtin_constant_p (state->ar->extra_value) && ((size_t)(const void *)((state->ar->extra_value) + 1) - (size_t)(const void *)(state->ar->extra_value) == 1) ? __builtin_strcmp (state->ar->extra_value, "V") : (- (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (state->ar->extra_value); int __result = (((const unsigned char *) (const char *) ("V"))[0] - __s2[0]); if (__s2_len > 0 && __result == 0) { __result = (((const unsigned char *) (const char *) ("V"))[1] - __s2[1]); if (__s2_len > 1 && __result == 0) { __result = (((const unsigned char *) (const char *) ("V"))[2] - __s2[2]); if (__s2_len > 2 && __result == 0) __result = (((const unsigned char *) (const char *) ("V"))[3] - __s2[3]); } } __result; })))) : __builtin_strcmp (state->ar->extra_value, "V")))); }) != 0 ) { | |||
380 | ret = ipa_id_get_account_info_get_original_step(req, ar); | |||
381 | if (ret != EOK0) { | |||
382 | DEBUG(SSSDBG_OP_FAILURE,do { int __debug_macro_level = 0x0040; if ((debug_level & (__debug_macro_level) || (debug_level == 0 && (__debug_macro_level & (0x0010 | 0x0020))))) { debug_fn("../sssd/src/providers/ipa/ipa_id.c" , 383, __FUNCTION__, __debug_macro_level, "ipa_subdomain_account_get_original_step failed.\n" ); } } while (0) | |||
383 | "ipa_subdomain_account_get_original_step failed.\n")do { int __debug_macro_level = 0x0040; if ((debug_level & (__debug_macro_level) || (debug_level == 0 && (__debug_macro_level & (0x0010 | 0x0020))))) { debug_fn("../sssd/src/providers/ipa/ipa_id.c" , 383, __FUNCTION__, __debug_macro_level, "ipa_subdomain_account_get_original_step failed.\n" ); } } while (0); | |||
384 | goto fail; | |||
385 | } | |||
386 | } else { | |||
387 | subreq = sdap_id_op_connect_send(state->op, state, &ret); | |||
388 | if (subreq == NULL((void*)0)) { | |||
389 | DEBUG(SSSDBG_OP_FAILURE, "sdap_id_op_connect_send failed.\n")do { int __debug_macro_level = 0x0040; if ((debug_level & (__debug_macro_level) || (debug_level == 0 && (__debug_macro_level & (0x0010 | 0x0020))))) { debug_fn("../sssd/src/providers/ipa/ipa_id.c" , 389, __FUNCTION__, __debug_macro_level, "sdap_id_op_connect_send failed.\n" ); } } while (0); | |||
390 | goto fail; | |||
391 | } | |||
392 | tevent_req_set_callback(subreq, ipa_id_get_account_info_connected, req); | |||
393 | } | |||
394 | ||||
395 | return req; | |||
396 | ||||
397 | fail: | |||
398 | tevent_req_error(req, ret)_tevent_req_error(req, ret, "../sssd/src/providers/ipa/ipa_id.c" ":" "398"); | |||
399 | tevent_req_post(req, ev); | |||
400 | return req; | |||
401 | } | |||
402 | ||||
403 | static void ipa_id_get_account_info_connected(struct tevent_req *subreq) | |||
404 | { | |||
405 | struct tevent_req *req = tevent_req_callback_data(subreq,(struct tevent_req *)_talloc_get_type_abort(_tevent_req_callback_data (subreq), "struct tevent_req", "../sssd/src/providers/ipa/ipa_id.c" ":" "406") | |||
406 | struct tevent_req)(struct tevent_req *)_talloc_get_type_abort(_tevent_req_callback_data (subreq), "struct tevent_req", "../sssd/src/providers/ipa/ipa_id.c" ":" "406"); | |||
407 | struct ipa_id_get_account_info_state *state = tevent_req_data(req,(struct ipa_id_get_account_info_state *)_talloc_get_type_abort (_tevent_req_data(req), "struct ipa_id_get_account_info_state" , "../sssd/src/providers/ipa/ipa_id.c" ":" "408") | |||
408 | struct ipa_id_get_account_info_state)(struct ipa_id_get_account_info_state *)_talloc_get_type_abort (_tevent_req_data(req), "struct ipa_id_get_account_info_state" , "../sssd/src/providers/ipa/ipa_id.c" ":" "408"); | |||
409 | int dp_error = DP_ERR_FATAL3; | |||
410 | int ret; | |||
411 | ||||
412 | ret = sdap_id_op_connect_recv(subreq, &dp_error); | |||
413 | talloc_zfree(subreq)do { _talloc_free(((void *)((uintptr_t)(subreq))), "../sssd/src/providers/ipa/ipa_id.c" ":" "413"); subreq = ((void*)0); } while(0); | |||
414 | if (ret != EOK0) { | |||
415 | DEBUG(SSSDBG_OP_FAILURE, "sdap_id_op_connect request failed.\n")do { int __debug_macro_level = 0x0040; if ((debug_level & (__debug_macro_level) || (debug_level == 0 && (__debug_macro_level & (0x0010 | 0x0020))))) { debug_fn("../sssd/src/providers/ipa/ipa_id.c" , 415, __FUNCTION__, __debug_macro_level, "sdap_id_op_connect request failed.\n" ); } } while (0); | |||
416 | goto fail; | |||
417 | } | |||
418 | ||||
419 | subreq = ipa_get_ad_override_send(state, state->ev, state->ctx, | |||
420 | state->ipa_ctx->ipa_options, state->realm, | |||
421 | state->ipa_ctx->view_name, state->ar); | |||
422 | if (subreq == NULL((void*)0)) { | |||
423 | DEBUG(SSSDBG_OP_FAILURE, "ipa_get_ad_override_send failed.\n")do { int __debug_macro_level = 0x0040; if ((debug_level & (__debug_macro_level) || (debug_level == 0 && (__debug_macro_level & (0x0010 | 0x0020))))) { debug_fn("../sssd/src/providers/ipa/ipa_id.c" , 423, __FUNCTION__, __debug_macro_level, "ipa_get_ad_override_send failed.\n" ); } } while (0); | |||
424 | ret = ENOMEM12; | |||
425 | goto fail; | |||
426 | } | |||
427 | ||||
428 | tevent_req_set_callback(subreq, ipa_id_get_account_info_got_override, req); | |||
429 | ||||
430 | return; | |||
431 | ||||
432 | fail: | |||
433 | state->dp_error = dp_error; | |||
434 | tevent_req_error(req, ret)_tevent_req_error(req, ret, "../sssd/src/providers/ipa/ipa_id.c" ":" "434"); | |||
435 | return; | |||
436 | } | |||
437 | ||||
438 | static void ipa_id_get_account_info_got_override(struct tevent_req *subreq) | |||
439 | { | |||
440 | struct tevent_req *req = tevent_req_callback_data(subreq,(struct tevent_req *)_talloc_get_type_abort(_tevent_req_callback_data (subreq), "struct tevent_req", "../sssd/src/providers/ipa/ipa_id.c" ":" "441") | |||
441 | struct tevent_req)(struct tevent_req *)_talloc_get_type_abort(_tevent_req_callback_data (subreq), "struct tevent_req", "../sssd/src/providers/ipa/ipa_id.c" ":" "441"); | |||
442 | struct ipa_id_get_account_info_state *state = tevent_req_data(req,(struct ipa_id_get_account_info_state *)_talloc_get_type_abort (_tevent_req_data(req), "struct ipa_id_get_account_info_state" , "../sssd/src/providers/ipa/ipa_id.c" ":" "443") | |||
443 | struct ipa_id_get_account_info_state)(struct ipa_id_get_account_info_state *)_talloc_get_type_abort (_tevent_req_data(req), "struct ipa_id_get_account_info_state" , "../sssd/src/providers/ipa/ipa_id.c" ":" "443"); | |||
444 | int dp_error = DP_ERR_FATAL3; | |||
445 | int ret; | |||
446 | const char *anchor = NULL((void*)0); | |||
447 | char *anchor_domain; | |||
448 | char *ipa_uuid; | |||
449 | ||||
450 | ret = ipa_get_ad_override_recv(subreq, &dp_error, state, | |||
451 | &state->override_attrs); | |||
452 | talloc_zfree(subreq)do { _talloc_free(((void *)((uintptr_t)(subreq))), "../sssd/src/providers/ipa/ipa_id.c" ":" "452"); subreq = ((void*)0); } while(0); | |||
453 | if (ret != EOK0) { | |||
454 | DEBUG(SSSDBG_OP_FAILURE, "IPA override lookup failed: %d\n", ret)do { int __debug_macro_level = 0x0040; if ((debug_level & (__debug_macro_level) || (debug_level == 0 && (__debug_macro_level & (0x0010 | 0x0020))))) { debug_fn("../sssd/src/providers/ipa/ipa_id.c" , 454, __FUNCTION__, __debug_macro_level, "IPA override lookup failed: %d\n" , ret); } } while (0); | |||
455 | goto fail; | |||
456 | } | |||
457 | ||||
458 | if (state->override_attrs != NULL((void*)0)) { | |||
459 | ret = sysdb_attrs_get_string(state->override_attrs, | |||
460 | SYSDB_OVERRIDE_ANCHOR_UUID"overrideAnchorUUID", | |||
461 | &anchor); | |||
462 | if (ret != EOK0) { | |||
463 | DEBUG(SSSDBG_OP_FAILURE, "sysdb_attrs_get_string failed.\n")do { int __debug_macro_level = 0x0040; if ((debug_level & (__debug_macro_level) || (debug_level == 0 && (__debug_macro_level & (0x0010 | 0x0020))))) { debug_fn("../sssd/src/providers/ipa/ipa_id.c" , 463, __FUNCTION__, __debug_macro_level, "sysdb_attrs_get_string failed.\n" ); } } while (0); | |||
464 | goto fail; | |||
465 | } | |||
466 | ||||
467 | ret = split_ipa_anchor(state, anchor, &anchor_domain, &ipa_uuid); | |||
468 | if (ret != EOK0) { | |||
469 | DEBUG(SSSDBG_CRIT_FAILURE,do { int __debug_macro_level = 0x0020; if ((debug_level & (__debug_macro_level) || (debug_level == 0 && (__debug_macro_level & (0x0010 | 0x0020))))) { debug_fn("../sssd/src/providers/ipa/ipa_id.c" , 470, __FUNCTION__, __debug_macro_level, "Unsupported override anchor [%s].\n" , anchor); } } while (0) | |||
470 | "Unsupported override anchor [%s].\n", anchor)do { int __debug_macro_level = 0x0020; if ((debug_level & (__debug_macro_level) || (debug_level == 0 && (__debug_macro_level & (0x0010 | 0x0020))))) { debug_fn("../sssd/src/providers/ipa/ipa_id.c" , 470, __FUNCTION__, __debug_macro_level, "Unsupported override anchor [%s].\n" , anchor); } } while (0); | |||
471 | ret = EINVAL22; | |||
472 | goto fail; | |||
473 | } | |||
474 | ||||
475 | if (strcmp(state->ar->domain, anchor_domain)__extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p (state->ar->domain) && __builtin_constant_p (anchor_domain ) && (__s1_len = strlen (state->ar->domain), __s2_len = strlen (anchor_domain), (!((size_t)(const void *)((state-> ar->domain) + 1) - (size_t)(const void *)(state->ar-> domain) == 1) || __s1_len >= 4) && (!((size_t)(const void *)((anchor_domain) + 1) - (size_t)(const void *)(anchor_domain ) == 1) || __s2_len >= 4)) ? __builtin_strcmp (state->ar ->domain, anchor_domain) : (__builtin_constant_p (state-> ar->domain) && ((size_t)(const void *)((state-> ar->domain) + 1) - (size_t)(const void *)(state->ar-> domain) == 1) && (__s1_len = strlen (state->ar-> domain), __s1_len < 4) ? (__builtin_constant_p (anchor_domain ) && ((size_t)(const void *)((anchor_domain) + 1) - ( size_t)(const void *)(anchor_domain) == 1) ? __builtin_strcmp (state->ar->domain, anchor_domain) : (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (anchor_domain); int __result = (((const unsigned char *) (const char *) (state->ar->domain))[0] - __s2[0]); if ( __s1_len > 0 && __result == 0) { __result = (((const unsigned char *) (const char *) (state->ar->domain))[1 ] - __s2[1]); if (__s1_len > 1 && __result == 0) { __result = (((const unsigned char *) (const char *) (state-> ar->domain))[2] - __s2[2]); if (__s1_len > 2 && __result == 0) __result = (((const unsigned char *) (const char *) (state->ar->domain))[3] - __s2[3]); } } __result; } ))) : (__builtin_constant_p (anchor_domain) && ((size_t )(const void *)((anchor_domain) + 1) - (size_t)(const void *) (anchor_domain) == 1) && (__s2_len = strlen (anchor_domain ), __s2_len < 4) ? (__builtin_constant_p (state->ar-> domain) && ((size_t)(const void *)((state->ar-> domain) + 1) - (size_t)(const void *)(state->ar->domain ) == 1) ? __builtin_strcmp (state->ar->domain, anchor_domain ) : (- (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (state->ar->domain); int __result = (((const unsigned char *) (const char *) (anchor_domain))[ 0] - __s2[0]); if (__s2_len > 0 && __result == 0) { __result = (((const unsigned char *) (const char *) (anchor_domain ))[1] - __s2[1]); if (__s2_len > 1 && __result == 0 ) { __result = (((const unsigned char *) (const char *) (anchor_domain ))[2] - __s2[2]); if (__s2_len > 2 && __result == 0 ) __result = (((const unsigned char *) (const char *) (anchor_domain ))[3] - __s2[3]); } } __result; })))) : __builtin_strcmp (state ->ar->domain, anchor_domain)))); }) == 0) { | |||
476 | ||||
477 | ret = get_be_acct_req_for_uuid(state, ipa_uuid, | |||
478 | state->ar->domain, | |||
479 | &state->ar); | |||
480 | if (ret != EOK0) { | |||
481 | DEBUG(SSSDBG_OP_FAILURE, "get_be_acct_req_for_sid failed.\n")do { int __debug_macro_level = 0x0040; if ((debug_level & (__debug_macro_level) || (debug_level == 0 && (__debug_macro_level & (0x0010 | 0x0020))))) { debug_fn("../sssd/src/providers/ipa/ipa_id.c" , 481, __FUNCTION__, __debug_macro_level, "get_be_acct_req_for_sid failed.\n" ); } } while (0); | |||
482 | goto fail; | |||
483 | } | |||
484 | } else { | |||
485 | DEBUG(SSSDBG_MINOR_FAILURE,do { int __debug_macro_level = 0x0080; if ((debug_level & (__debug_macro_level) || (debug_level == 0 && (__debug_macro_level & (0x0010 | 0x0020))))) { debug_fn("../sssd/src/providers/ipa/ipa_id.c" , 489, __FUNCTION__, __debug_macro_level, "Anchor from a different domain [%s], expected [%s]. " "This is currently not supported, continue lookup in " "local IPA domain.\n" , anchor_domain, state->ar->domain); } } while (0) | |||
486 | "Anchor from a different domain [%s], expected [%s]. " \do { int __debug_macro_level = 0x0080; if ((debug_level & (__debug_macro_level) || (debug_level == 0 && (__debug_macro_level & (0x0010 | 0x0020))))) { debug_fn("../sssd/src/providers/ipa/ipa_id.c" , 489, __FUNCTION__, __debug_macro_level, "Anchor from a different domain [%s], expected [%s]. " "This is currently not supported, continue lookup in " "local IPA domain.\n" , anchor_domain, state->ar->domain); } } while (0) | |||
487 | "This is currently not supported, continue lookup in " \do { int __debug_macro_level = 0x0080; if ((debug_level & (__debug_macro_level) || (debug_level == 0 && (__debug_macro_level & (0x0010 | 0x0020))))) { debug_fn("../sssd/src/providers/ipa/ipa_id.c" , 489, __FUNCTION__, __debug_macro_level, "Anchor from a different domain [%s], expected [%s]. " "This is currently not supported, continue lookup in " "local IPA domain.\n" , anchor_domain, state->ar->domain); } } while (0) | |||
488 | "local IPA domain.\n",do { int __debug_macro_level = 0x0080; if ((debug_level & (__debug_macro_level) || (debug_level == 0 && (__debug_macro_level & (0x0010 | 0x0020))))) { debug_fn("../sssd/src/providers/ipa/ipa_id.c" , 489, __FUNCTION__, __debug_macro_level, "Anchor from a different domain [%s], expected [%s]. " "This is currently not supported, continue lookup in " "local IPA domain.\n" , anchor_domain, state->ar->domain); } } while (0) | |||
489 | anchor_domain, state->ar->domain)do { int __debug_macro_level = 0x0080; if ((debug_level & (__debug_macro_level) || (debug_level == 0 && (__debug_macro_level & (0x0010 | 0x0020))))) { debug_fn("../sssd/src/providers/ipa/ipa_id.c" , 489, __FUNCTION__, __debug_macro_level, "Anchor from a different domain [%s], expected [%s]. " "This is currently not supported, continue lookup in " "local IPA domain.\n" , anchor_domain, state->ar->domain); } } while (0); | |||
490 | } | |||
491 | } | |||
492 | ||||
493 | ret = ipa_id_get_account_info_get_original_step(req, state->ar); | |||
494 | if (ret != EOK0) { | |||
495 | DEBUG(SSSDBG_OP_FAILURE,do { int __debug_macro_level = 0x0040; if ((debug_level & (__debug_macro_level) || (debug_level == 0 && (__debug_macro_level & (0x0010 | 0x0020))))) { debug_fn("../sssd/src/providers/ipa/ipa_id.c" , 496, __FUNCTION__, __debug_macro_level, "ipa_subdomain_account_get_original_step failed.\n" ); } } while (0) | |||
496 | "ipa_subdomain_account_get_original_step failed.\n")do { int __debug_macro_level = 0x0040; if ((debug_level & (__debug_macro_level) || (debug_level == 0 && (__debug_macro_level & (0x0010 | 0x0020))))) { debug_fn("../sssd/src/providers/ipa/ipa_id.c" , 496, __FUNCTION__, __debug_macro_level, "ipa_subdomain_account_get_original_step failed.\n" ); } } while (0); | |||
497 | goto fail; | |||
498 | } | |||
499 | ||||
500 | return; | |||
501 | ||||
502 | fail: | |||
503 | state->dp_error = dp_error; | |||
504 | tevent_req_error(req, ret)_tevent_req_error(req, ret, "../sssd/src/providers/ipa/ipa_id.c" ":" "504"); | |||
505 | return; | |||
506 | } | |||
507 | ||||
508 | static errno_t ipa_id_get_account_info_get_original_step(struct tevent_req *req, | |||
509 | struct be_acct_req *ar) | |||
510 | { | |||
511 | struct ipa_id_get_account_info_state *state = tevent_req_data(req,(struct ipa_id_get_account_info_state *)_talloc_get_type_abort (_tevent_req_data(req), "struct ipa_id_get_account_info_state" , "../sssd/src/providers/ipa/ipa_id.c" ":" "512") | |||
512 | struct ipa_id_get_account_info_state)(struct ipa_id_get_account_info_state *)_talloc_get_type_abort (_tevent_req_data(req), "struct ipa_id_get_account_info_state" , "../sssd/src/providers/ipa/ipa_id.c" ":" "512"); | |||
513 | struct tevent_req *subreq; | |||
514 | ||||
515 | subreq = sdap_handle_acct_req_send(state, state->be_req, ar, | |||
516 | state->ipa_ctx->sdap_id_ctx, | |||
517 | state->ipa_ctx->sdap_id_ctx->opts->sdom, | |||
518 | state->ipa_ctx->sdap_id_ctx->conn, true1); | |||
519 | if (subreq == NULL((void*)0)) { | |||
520 | DEBUG(SSSDBG_OP_FAILURE, "sdap_handle_acct_req_send failed.\n")do { int __debug_macro_level = 0x0040; if ((debug_level & (__debug_macro_level) || (debug_level == 0 && (__debug_macro_level & (0x0010 | 0x0020))))) { debug_fn("../sssd/src/providers/ipa/ipa_id.c" , 520, __FUNCTION__, __debug_macro_level, "sdap_handle_acct_req_send failed.\n" ); } } while (0); | |||
521 | return ENOMEM12; | |||
522 | } | |||
523 | tevent_req_set_callback(subreq, ipa_id_get_account_info_orig_done, req); | |||
524 | ||||
525 | return EOK0; | |||
526 | } | |||
527 | ||||
528 | static void ipa_id_get_account_info_orig_done(struct tevent_req *subreq) | |||
529 | { | |||
530 | struct tevent_req *req = tevent_req_callback_data(subreq,(struct tevent_req *)_talloc_get_type_abort(_tevent_req_callback_data (subreq), "struct tevent_req", "../sssd/src/providers/ipa/ipa_id.c" ":" "531") | |||
531 | struct tevent_req)(struct tevent_req *)_talloc_get_type_abort(_tevent_req_callback_data (subreq), "struct tevent_req", "../sssd/src/providers/ipa/ipa_id.c" ":" "531"); | |||
532 | struct ipa_id_get_account_info_state *state = tevent_req_data(req,(struct ipa_id_get_account_info_state *)_talloc_get_type_abort (_tevent_req_data(req), "struct ipa_id_get_account_info_state" , "../sssd/src/providers/ipa/ipa_id.c" ":" "533") | |||
533 | struct ipa_id_get_account_info_state)(struct ipa_id_get_account_info_state *)_talloc_get_type_abort (_tevent_req_data(req), "struct ipa_id_get_account_info_state" , "../sssd/src/providers/ipa/ipa_id.c" ":" "533"); | |||
534 | int dp_error = DP_ERR_FATAL3; | |||
535 | int ret; | |||
536 | const char *uuid; | |||
537 | const char *class; | |||
538 | enum sysdb_member_type type; | |||
539 | ||||
540 | ret = sdap_handle_acct_req_recv(subreq, &dp_error, NULL((void*)0), NULL((void*)0)); | |||
541 | talloc_zfree(subreq)do { _talloc_free(((void *)((uintptr_t)(subreq))), "../sssd/src/providers/ipa/ipa_id.c" ":" "541"); subreq = ((void*)0); } while(0); | |||
542 | if (ret != EOK0) { | |||
| ||||
543 | DEBUG(SSSDBG_OP_FAILURE, "sdap_handle_acct request failed: %d\n", ret)do { int __debug_macro_level = 0x0040; if ((debug_level & (__debug_macro_level) || (debug_level == 0 && (__debug_macro_level & (0x0010 | 0x0020))))) { debug_fn("../sssd/src/providers/ipa/ipa_id.c" , 543, __FUNCTION__, __debug_macro_level, "sdap_handle_acct request failed: %d\n" , ret); } } while (0); | |||
544 | goto fail; | |||
545 | } | |||
546 | ||||
547 | ret = get_object_from_cache(state, state->domain, state->ar, | |||
548 | &state->obj_msg); | |||
549 | if (ret == ENOENT2) { | |||
550 | DEBUG(SSSDBG_MINOR_FAILURE, "Object not found, ending request\n")do { int __debug_macro_level = 0x0080; if ((debug_level & (__debug_macro_level) || (debug_level == 0 && (__debug_macro_level & (0x0010 | 0x0020))))) { debug_fn("../sssd/src/providers/ipa/ipa_id.c" , 550, __FUNCTION__, __debug_macro_level, "Object not found, ending request\n" ); } } while (0); | |||
551 | tevent_req_done(req)_tevent_req_done(req, "../sssd/src/providers/ipa/ipa_id.c" ":" "551"); | |||
552 | return; | |||
553 | } else if (ret != EOK0) { | |||
554 | DEBUG(SSSDBG_OP_FAILURE, "get_object_from_cache failed.\n")do { int __debug_macro_level = 0x0040; if ((debug_level & (__debug_macro_level) || (debug_level == 0 && (__debug_macro_level & (0x0010 | 0x0020))))) { debug_fn("../sssd/src/providers/ipa/ipa_id.c" , 554, __FUNCTION__, __debug_macro_level, "get_object_from_cache failed.\n" ); } } while (0); | |||
555 | goto fail; | |||
556 | } | |||
557 | ||||
558 | if ((state->ar->entry_type & BE_REQ_TYPE_MASK0x00FF) == BE_REQ_GROUP0x0002 | |||
559 | && state->obj_msg != NULL((void*)0) | |||
560 | && state->ipa_ctx->view_name != NULL((void*)0) | |||
561 | && strcmp(state->ipa_ctx->view_name,__extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p (state->ipa_ctx->view_name) && __builtin_constant_p ("default") && (__s1_len = strlen (state->ipa_ctx ->view_name), __s2_len = strlen ("default"), (!((size_t)(const void *)((state->ipa_ctx->view_name) + 1) - (size_t)(const void *)(state->ipa_ctx->view_name) == 1) || __s1_len >= 4) && (!((size_t)(const void *)(("default") + 1) - ( size_t)(const void *)("default") == 1) || __s2_len >= 4)) ? __builtin_strcmp (state->ipa_ctx->view_name, "default" ) : (__builtin_constant_p (state->ipa_ctx->view_name) && ((size_t)(const void *)((state->ipa_ctx->view_name) + 1 ) - (size_t)(const void *)(state->ipa_ctx->view_name) == 1) && (__s1_len = strlen (state->ipa_ctx->view_name ), __s1_len < 4) ? (__builtin_constant_p ("default") && ((size_t)(const void *)(("default") + 1) - (size_t)(const void *)("default") == 1) ? __builtin_strcmp (state->ipa_ctx-> view_name, "default") : (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) ("default"); int __result = (((const unsigned char *) (const char *) (state-> ipa_ctx->view_name))[0] - __s2[0]); if (__s1_len > 0 && __result == 0) { __result = (((const unsigned char *) (const char *) (state->ipa_ctx->view_name))[1] - __s2[1]); if (__s1_len > 1 && __result == 0) { __result = (((const unsigned char *) (const char *) (state->ipa_ctx->view_name ))[2] - __s2[2]); if (__s1_len > 2 && __result == 0 ) __result = (((const unsigned char *) (const char *) (state-> ipa_ctx->view_name))[3] - __s2[3]); } } __result; }))) : ( __builtin_constant_p ("default") && ((size_t)(const void *)(("default") + 1) - (size_t)(const void *)("default") == 1 ) && (__s2_len = strlen ("default"), __s2_len < 4) ? (__builtin_constant_p (state->ipa_ctx->view_name) && ((size_t)(const void *)((state->ipa_ctx->view_name) + 1 ) - (size_t)(const void *)(state->ipa_ctx->view_name) == 1) ? __builtin_strcmp (state->ipa_ctx->view_name, "default" ) : (- (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (state->ipa_ctx->view_name); int __result = (((const unsigned char *) (const char *) ("default" ))[0] - __s2[0]); if (__s2_len > 0 && __result == 0 ) { __result = (((const unsigned char *) (const char *) ("default" ))[1] - __s2[1]); if (__s2_len > 1 && __result == 0 ) { __result = (((const unsigned char *) (const char *) ("default" ))[2] - __s2[2]); if (__s2_len > 2 && __result == 0 ) __result = (((const unsigned char *) (const char *) ("default" ))[3] - __s2[3]); } } __result; })))) : __builtin_strcmp (state ->ipa_ctx->view_name, "default")))); }) | |||
562 | SYSDB_DEFAULT_VIEW_NAME)__extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p (state->ipa_ctx->view_name) && __builtin_constant_p ("default") && (__s1_len = strlen (state->ipa_ctx ->view_name), __s2_len = strlen ("default"), (!((size_t)(const void *)((state->ipa_ctx->view_name) + 1) - (size_t)(const void *)(state->ipa_ctx->view_name) == 1) || __s1_len >= 4) && (!((size_t)(const void *)(("default") + 1) - ( size_t)(const void *)("default") == 1) || __s2_len >= 4)) ? __builtin_strcmp (state->ipa_ctx->view_name, "default" ) : (__builtin_constant_p (state->ipa_ctx->view_name) && ((size_t)(const void *)((state->ipa_ctx->view_name) + 1 ) - (size_t)(const void *)(state->ipa_ctx->view_name) == 1) && (__s1_len = strlen (state->ipa_ctx->view_name ), __s1_len < 4) ? (__builtin_constant_p ("default") && ((size_t)(const void *)(("default") + 1) - (size_t)(const void *)("default") == 1) ? __builtin_strcmp (state->ipa_ctx-> view_name, "default") : (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) ("default"); int __result = (((const unsigned char *) (const char *) (state-> ipa_ctx->view_name))[0] - __s2[0]); if (__s1_len > 0 && __result == 0) { __result = (((const unsigned char *) (const char *) (state->ipa_ctx->view_name))[1] - __s2[1]); if (__s1_len > 1 && __result == 0) { __result = (((const unsigned char *) (const char *) (state->ipa_ctx->view_name ))[2] - __s2[2]); if (__s1_len > 2 && __result == 0 ) __result = (((const unsigned char *) (const char *) (state-> ipa_ctx->view_name))[3] - __s2[3]); } } __result; }))) : ( __builtin_constant_p ("default") && ((size_t)(const void *)(("default") + 1) - (size_t)(const void *)("default") == 1 ) && (__s2_len = strlen ("default"), __s2_len < 4) ? (__builtin_constant_p (state->ipa_ctx->view_name) && ((size_t)(const void *)((state->ipa_ctx->view_name) + 1 ) - (size_t)(const void *)(state->ipa_ctx->view_name) == 1) ? __builtin_strcmp (state->ipa_ctx->view_name, "default" ) : (- (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (state->ipa_ctx->view_name); int __result = (((const unsigned char *) (const char *) ("default" ))[0] - __s2[0]); if (__s2_len > 0 && __result == 0 ) { __result = (((const unsigned char *) (const char *) ("default" ))[1] - __s2[1]); if (__s2_len > 1 && __result == 0 ) { __result = (((const unsigned char *) (const char *) ("default" ))[2] - __s2[2]); if (__s2_len > 2 && __result == 0 ) __result = (((const unsigned char *) (const char *) ("default" ))[3] - __s2[3]); } } __result; })))) : __builtin_strcmp (state ->ipa_ctx->view_name, "default")))); }) != 0) { | |||
563 | /* check for ghost members because shost members are not allowed if a | |||
564 | * view other than the default view is applied.*/ | |||
565 | ||||
566 | state->ghosts = ldb_msg_find_element(state->obj_msg, SYSDB_GHOST"ghost"); | |||
567 | } | |||
568 | ||||
569 | if (state->override_attrs == NULL((void*)0)) { | |||
570 | uuid = ldb_msg_find_attr_as_string(state->obj_msg, SYSDB_UUID"uniqueID", NULL((void*)0)); | |||
571 | if (uuid == NULL((void*)0)) { | |||
572 | DEBUG(SSSDBG_CRIT_FAILURE, "Cannot find a UUID.\n")do { int __debug_macro_level = 0x0020; if ((debug_level & (__debug_macro_level) || (debug_level == 0 && (__debug_macro_level & (0x0010 | 0x0020))))) { debug_fn("../sssd/src/providers/ipa/ipa_id.c" , 572, __FUNCTION__, __debug_macro_level, "Cannot find a UUID.\n" ); } } while (0); | |||
573 | ret = EINVAL22; | |||
574 | goto fail; | |||
575 | } | |||
576 | ||||
577 | ret = get_be_acct_req_for_uuid(state, uuid, state->domain->name, | |||
578 | &state->ar); | |||
579 | if (ret != EOK0) { | |||
580 | DEBUG(SSSDBG_OP_FAILURE, "get_be_acct_req_for_sid failed.\n")do { int __debug_macro_level = 0x0040; if ((debug_level & (__debug_macro_level) || (debug_level == 0 && (__debug_macro_level & (0x0010 | 0x0020))))) { debug_fn("../sssd/src/providers/ipa/ipa_id.c" , 580, __FUNCTION__, __debug_macro_level, "get_be_acct_req_for_sid failed.\n" ); } } while (0); | |||
581 | goto fail; | |||
582 | } | |||
583 | ||||
584 | subreq = ipa_get_ad_override_send(state, state->ev, | |||
585 | state->ipa_ctx->sdap_id_ctx, | |||
586 | state->ipa_ctx->ipa_options, | |||
587 | state->realm, | |||
588 | state->ipa_ctx->view_name, | |||
589 | state->ar); | |||
590 | if (subreq == NULL((void*)0)) { | |||
591 | DEBUG(SSSDBG_OP_FAILURE, "ipa_get_ad_override_send failed.\n")do { int __debug_macro_level = 0x0040; if ((debug_level & (__debug_macro_level) || (debug_level == 0 && (__debug_macro_level & (0x0010 | 0x0020))))) { debug_fn("../sssd/src/providers/ipa/ipa_id.c" , 591, __FUNCTION__, __debug_macro_level, "ipa_get_ad_override_send failed.\n" ); } } while (0); | |||
592 | ret = ENOMEM12; | |||
593 | goto fail; | |||
594 | } | |||
595 | tevent_req_set_callback(subreq, ipa_id_get_account_info_done, req); | |||
596 | return; | |||
597 | } else { | |||
598 | class = ldb_msg_find_attr_as_string(state->obj_msg, SYSDB_OBJECTCLASS"objectClass", | |||
599 | NULL((void*)0)); | |||
600 | if (class == NULL((void*)0)) { | |||
601 | DEBUG(SSSDBG_CRIT_FAILURE, "Cannot find an objectclass.\n")do { int __debug_macro_level = 0x0020; if ((debug_level & (__debug_macro_level) || (debug_level == 0 && (__debug_macro_level & (0x0010 | 0x0020))))) { debug_fn("../sssd/src/providers/ipa/ipa_id.c" , 601, __FUNCTION__, __debug_macro_level, "Cannot find an objectclass.\n" ); } } while (0); | |||
602 | ret = EINVAL22; | |||
603 | goto fail; | |||
604 | } | |||
605 | ||||
606 | if (strcmp(class, SYSDB_USER_CLASS)__extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p (class) && __builtin_constant_p ("user") && ( __s1_len = strlen (class), __s2_len = strlen ("user"), (!((size_t )(const void *)((class) + 1) - (size_t)(const void *)(class) == 1) || __s1_len >= 4) && (!((size_t)(const void *) (("user") + 1) - (size_t)(const void *)("user") == 1) || __s2_len >= 4)) ? __builtin_strcmp (class, "user") : (__builtin_constant_p (class) && ((size_t)(const void *)((class) + 1) - (size_t )(const void *)(class) == 1) && (__s1_len = strlen (class ), __s1_len < 4) ? (__builtin_constant_p ("user") && ((size_t)(const void *)(("user") + 1) - (size_t)(const void * )("user") == 1) ? __builtin_strcmp (class, "user") : (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) ("user"); int __result = (((const unsigned char *) ( const char *) (class))[0] - __s2[0]); if (__s1_len > 0 && __result == 0) { __result = (((const unsigned char *) (const char *) (class))[1] - __s2[1]); if (__s1_len > 1 && __result == 0) { __result = (((const unsigned char *) (const char *) (class))[2] - __s2[2]); if (__s1_len > 2 && __result == 0) __result = (((const unsigned char *) (const char *) (class))[3] - __s2[3]); } } __result; }))) : (__builtin_constant_p ("user") && ((size_t)(const void *)(("user") + 1) - ( size_t)(const void *)("user") == 1) && (__s2_len = strlen ("user"), __s2_len < 4) ? (__builtin_constant_p (class) && ((size_t)(const void *)((class) + 1) - (size_t)(const void * )(class) == 1) ? __builtin_strcmp (class, "user") : (- (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (class); int __result = (((const unsigned char *) (const char *) ("user"))[0] - __s2[0]); if (__s2_len > 0 && __result == 0) { __result = (((const unsigned char *) (const char *) ("user"))[1] - __s2[1]); if (__s2_len > 1 && __result == 0) { __result = (((const unsigned char *) (const char *) ("user"))[2] - __s2[2]); if (__s2_len > 2 && __result == 0) __result = (((const unsigned char *) (const char *) ("user"))[3] - __s2[3]); } } __result; })))) : __builtin_strcmp (class, "user")))); }) == 0) { | |||
607 | type = SYSDB_MEMBER_USER; | |||
608 | } else { | |||
609 | type = SYSDB_MEMBER_GROUP; | |||
610 | } | |||
611 | ||||
612 | ret = sysdb_store_override(state->domain, state->ipa_ctx->view_name, | |||
613 | type, | |||
614 | state->override_attrs, state->obj_msg->dn); | |||
| ||||
615 | if (ret != EOK0) { | |||
616 | DEBUG(SSSDBG_OP_FAILURE, "sysdb_store_override failed.\n")do { int __debug_macro_level = 0x0040; if ((debug_level & (__debug_macro_level) || (debug_level == 0 && (__debug_macro_level & (0x0010 | 0x0020))))) { debug_fn("../sssd/src/providers/ipa/ipa_id.c" , 616, __FUNCTION__, __debug_macro_level, "sysdb_store_override failed.\n" ); } } while (0); | |||
617 | goto fail; | |||
618 | } | |||
619 | } | |||
620 | ||||
621 | if (state->ghosts != NULL((void*)0)) { | |||
622 | /* Resolve ghost members */ | |||
623 | subreq = ipa_resolve_user_list_send(state, state->ev, state->be_req, | |||
624 | state->ipa_ctx->sdap_id_ctx, | |||
625 | state->domain->name, | |||
626 | state->ghosts); | |||
627 | if (subreq == NULL((void*)0)) { | |||
628 | DEBUG(SSSDBG_OP_FAILURE, "ipa_resolve_user_list_send failed.\n")do { int __debug_macro_level = 0x0040; if ((debug_level & (__debug_macro_level) || (debug_level == 0 && (__debug_macro_level & (0x0010 | 0x0020))))) { debug_fn("../sssd/src/providers/ipa/ipa_id.c" , 628, __FUNCTION__, __debug_macro_level, "ipa_resolve_user_list_send failed.\n" ); } } while (0); | |||
629 | ret = ENOMEM12; | |||
630 | goto fail; | |||
631 | } | |||
632 | tevent_req_set_callback(subreq, ipa_id_get_user_list_done, req); | |||
633 | return; | |||
634 | } | |||
635 | ||||
636 | state->dp_error = DP_ERR_OK0; | |||
637 | tevent_req_done(req)_tevent_req_done(req, "../sssd/src/providers/ipa/ipa_id.c" ":" "637"); | |||
638 | return; | |||
639 | ||||
640 | fail: | |||
641 | state->dp_error = dp_error; | |||
642 | tevent_req_error(req, ret)_tevent_req_error(req, ret, "../sssd/src/providers/ipa/ipa_id.c" ":" "642"); | |||
643 | return; | |||
644 | } | |||
645 | ||||
646 | static void ipa_id_get_account_info_done(struct tevent_req *subreq) | |||
647 | { | |||
648 | struct tevent_req *req = tevent_req_callback_data(subreq,(struct tevent_req *)_talloc_get_type_abort(_tevent_req_callback_data (subreq), "struct tevent_req", "../sssd/src/providers/ipa/ipa_id.c" ":" "649") | |||
649 | struct tevent_req)(struct tevent_req *)_talloc_get_type_abort(_tevent_req_callback_data (subreq), "struct tevent_req", "../sssd/src/providers/ipa/ipa_id.c" ":" "649"); | |||
650 | struct ipa_id_get_account_info_state *state = tevent_req_data(req,(struct ipa_id_get_account_info_state *)_talloc_get_type_abort (_tevent_req_data(req), "struct ipa_id_get_account_info_state" , "../sssd/src/providers/ipa/ipa_id.c" ":" "651") | |||
651 | struct ipa_id_get_account_info_state)(struct ipa_id_get_account_info_state *)_talloc_get_type_abort (_tevent_req_data(req), "struct ipa_id_get_account_info_state" , "../sssd/src/providers/ipa/ipa_id.c" ":" "651"); | |||
652 | int dp_error = DP_ERR_FATAL3; | |||
653 | int ret; | |||
654 | const char *class; | |||
655 | enum sysdb_member_type type; | |||
656 | ||||
657 | ret = ipa_get_ad_override_recv(subreq, &dp_error, state, | |||
658 | &state->override_attrs); | |||
659 | talloc_zfree(subreq)do { _talloc_free(((void *)((uintptr_t)(subreq))), "../sssd/src/providers/ipa/ipa_id.c" ":" "659"); subreq = ((void*)0); } while(0); | |||
660 | if (ret != EOK0) { | |||
661 | DEBUG(SSSDBG_OP_FAILURE, "IPA override lookup failed: %d\n", ret)do { int __debug_macro_level = 0x0040; if ((debug_level & (__debug_macro_level) || (debug_level == 0 && (__debug_macro_level & (0x0010 | 0x0020))))) { debug_fn("../sssd/src/providers/ipa/ipa_id.c" , 661, __FUNCTION__, __debug_macro_level, "IPA override lookup failed: %d\n" , ret); } } while (0); | |||
662 | goto fail; | |||
663 | } | |||
664 | ||||
665 | class = ldb_msg_find_attr_as_string(state->obj_msg, SYSDB_OBJECTCLASS"objectClass", | |||
666 | NULL((void*)0)); | |||
667 | if (class == NULL((void*)0)) { | |||
668 | DEBUG(SSSDBG_CRIT_FAILURE, "Cannot find an objectclass.\n")do { int __debug_macro_level = 0x0020; if ((debug_level & (__debug_macro_level) || (debug_level == 0 && (__debug_macro_level & (0x0010 | 0x0020))))) { debug_fn("../sssd/src/providers/ipa/ipa_id.c" , 668, __FUNCTION__, __debug_macro_level, "Cannot find an objectclass.\n" ); } } while (0); | |||
669 | ret = EINVAL22; | |||
670 | goto fail; | |||
671 | } | |||
672 | ||||
673 | if (strcmp(class, SYSDB_USER_CLASS)__extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p (class) && __builtin_constant_p ("user") && ( __s1_len = strlen (class), __s2_len = strlen ("user"), (!((size_t )(const void *)((class) + 1) - (size_t)(const void *)(class) == 1) || __s1_len >= 4) && (!((size_t)(const void *) (("user") + 1) - (size_t)(const void *)("user") == 1) || __s2_len >= 4)) ? __builtin_strcmp (class, "user") : (__builtin_constant_p (class) && ((size_t)(const void *)((class) + 1) - (size_t )(const void *)(class) == 1) && (__s1_len = strlen (class ), __s1_len < 4) ? (__builtin_constant_p ("user") && ((size_t)(const void *)(("user") + 1) - (size_t)(const void * )("user") == 1) ? __builtin_strcmp (class, "user") : (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) ("user"); int __result = (((const unsigned char *) ( const char *) (class))[0] - __s2[0]); if (__s1_len > 0 && __result == 0) { __result = (((const unsigned char *) (const char *) (class))[1] - __s2[1]); if (__s1_len > 1 && __result == 0) { __result = (((const unsigned char *) (const char *) (class))[2] - __s2[2]); if (__s1_len > 2 && __result == 0) __result = (((const unsigned char *) (const char *) (class))[3] - __s2[3]); } } __result; }))) : (__builtin_constant_p ("user") && ((size_t)(const void *)(("user") + 1) - ( size_t)(const void *)("user") == 1) && (__s2_len = strlen ("user"), __s2_len < 4) ? (__builtin_constant_p (class) && ((size_t)(const void *)((class) + 1) - (size_t)(const void * )(class) == 1) ? __builtin_strcmp (class, "user") : (- (__extension__ ({ const unsigned char *__s2 = (const unsigned char *) (const char *) (class); int __result = (((const unsigned char *) (const char *) ("user"))[0] - __s2[0]); if (__s2_len > 0 && __result == 0) { __result = (((const unsigned char *) (const char *) ("user"))[1] - __s2[1]); if (__s2_len > 1 && __result == 0) { __result = (((const unsigned char *) (const char *) ("user"))[2] - __s2[2]); if (__s2_len > 2 && __result == 0) __result = (((const unsigned char *) (const char *) ("user"))[3] - __s2[3]); } } __result; })))) : __builtin_strcmp (class, "user")))); }) == 0) { | |||
674 | type = SYSDB_MEMBER_USER; | |||
675 | } else { | |||
676 | type = SYSDB_MEMBER_GROUP; | |||
677 | } | |||
678 | ||||
679 | ret = sysdb_store_override(state->domain, state->ipa_ctx->view_name, | |||
680 | type, | |||
681 | state->override_attrs, state->obj_msg->dn); | |||
682 | if (ret != EOK0) { | |||
683 | DEBUG(SSSDBG_OP_FAILURE, "sysdb_store_override failed.\n")do { int __debug_macro_level = 0x0040; if ((debug_level & (__debug_macro_level) || (debug_level == 0 && (__debug_macro_level & (0x0010 | 0x0020))))) { debug_fn("../sssd/src/providers/ipa/ipa_id.c" , 683, __FUNCTION__, __debug_macro_level, "sysdb_store_override failed.\n" ); } } while (0); | |||
684 | goto fail; | |||
685 | } | |||
686 | ||||
687 | if (state->ghosts != NULL((void*)0)) { | |||
688 | /* Resolve ghost members */ | |||
689 | subreq = ipa_resolve_user_list_send(state, state->ev, state->be_req, | |||
690 | state->ipa_ctx->sdap_id_ctx, | |||
691 | state->domain->name, | |||
692 | state->ghosts); | |||
693 | if (subreq == NULL((void*)0)) { | |||
694 | DEBUG(SSSDBG_OP_FAILURE, "ipa_resolve_user_list_send failed.\n")do { int __debug_macro_level = 0x0040; if ((debug_level & (__debug_macro_level) || (debug_level == 0 && (__debug_macro_level & (0x0010 | 0x0020))))) { debug_fn("../sssd/src/providers/ipa/ipa_id.c" , 694, __FUNCTION__, __debug_macro_level, "ipa_resolve_user_list_send failed.\n" ); } } while (0); | |||
695 | ret = ENOMEM12; | |||
696 | goto fail; | |||
697 | } | |||
698 | tevent_req_set_callback(subreq, ipa_id_get_user_list_done, req); | |||
699 | return; | |||
700 | } | |||
701 | ||||
702 | state->dp_error = DP_ERR_OK0; | |||
703 | tevent_req_done(req)_tevent_req_done(req, "../sssd/src/providers/ipa/ipa_id.c" ":" "703"); | |||
704 | return; | |||
705 | ||||
706 | fail: | |||
707 | state->dp_error = dp_error; | |||
708 | tevent_req_error(req, ret)_tevent_req_error(req, ret, "../sssd/src/providers/ipa/ipa_id.c" ":" "708"); | |||
709 | return; | |||
710 | } | |||
711 | ||||
712 | static void ipa_id_get_user_list_done(struct tevent_req *subreq) | |||
713 | { | |||
714 | struct tevent_req *req = tevent_req_callback_data(subreq,(struct tevent_req *)_talloc_get_type_abort(_tevent_req_callback_data (subreq), "struct tevent_req", "../sssd/src/providers/ipa/ipa_id.c" ":" "715") | |||
715 | struct tevent_req)(struct tevent_req *)_talloc_get_type_abort(_tevent_req_callback_data (subreq), "struct tevent_req", "../sssd/src/providers/ipa/ipa_id.c" ":" "715"); | |||
716 | struct ipa_id_get_account_info_state *state = tevent_req_data(req,(struct ipa_id_get_account_info_state *)_talloc_get_type_abort (_tevent_req_data(req), "struct ipa_id_get_account_info_state" , "../sssd/src/providers/ipa/ipa_id.c" ":" "717") | |||
717 | struct ipa_id_get_account_info_state)(struct ipa_id_get_account_info_state *)_talloc_get_type_abort (_tevent_req_data(req), "struct ipa_id_get_account_info_state" , "../sssd/src/providers/ipa/ipa_id.c" ":" "717"); | |||
718 | int dp_error = DP_ERR_FATAL3; | |||
719 | int ret; | |||
720 | ||||
721 | ret = ipa_resolve_user_list_recv(subreq, &dp_error); | |||
722 | talloc_zfree(subreq)do { _talloc_free(((void *)((uintptr_t)(subreq))), "../sssd/src/providers/ipa/ipa_id.c" ":" "722"); subreq = ((void*)0); } while(0); | |||
723 | if (ret != EOK0) { | |||
724 | DEBUG(SSSDBG_OP_FAILURE, "IPA resolve user list %d\n", ret)do { int __debug_macro_level = 0x0040; if ((debug_level & (__debug_macro_level) || (debug_level == 0 && (__debug_macro_level & (0x0010 | 0x0020))))) { debug_fn("../sssd/src/providers/ipa/ipa_id.c" , 724, __FUNCTION__, __debug_macro_level, "IPA resolve user list %d\n" , ret); } } while (0); | |||
725 | goto fail; | |||
726 | } | |||
727 | ||||
728 | state->dp_error = DP_ERR_OK0; | |||
729 | tevent_req_done(req)_tevent_req_done(req, "../sssd/src/providers/ipa/ipa_id.c" ":" "729"); | |||
730 | return; | |||
731 | ||||
732 | fail: | |||
733 | state->dp_error = dp_error; | |||
734 | tevent_req_error(req, ret)_tevent_req_error(req, ret, "../sssd/src/providers/ipa/ipa_id.c" ":" "734"); | |||
735 | return; | |||
736 | } | |||
737 | ||||
738 | static int ipa_id_get_account_info_recv(struct tevent_req *req, int *dp_error) | |||
739 | { | |||
740 | struct ipa_id_get_account_info_state *state = tevent_req_data(req,(struct ipa_id_get_account_info_state *)_talloc_get_type_abort (_tevent_req_data(req), "struct ipa_id_get_account_info_state" , "../sssd/src/providers/ipa/ipa_id.c" ":" "741") | |||
741 | struct ipa_id_get_account_info_state)(struct ipa_id_get_account_info_state *)_talloc_get_type_abort (_tevent_req_data(req), "struct ipa_id_get_account_info_state" , "../sssd/src/providers/ipa/ipa_id.c" ":" "741"); | |||
742 | ||||
743 | if (dp_error) { | |||
744 | *dp_error = state->dp_error; | |||
745 | } | |||
746 | ||||
747 | TEVENT_REQ_RETURN_ON_ERROR(req)do { enum tevent_req_state TRROEstate; uint64_t TRROEerr; if ( tevent_req_is_error(req, &TRROEstate, &TRROEerr)) { if (TRROEstate == TEVENT_REQ_USER_ERROR && TRROEerr != 0 ) { return TRROEerr; } return ERR_INTERNAL; } } while (0); | |||
748 | ||||
749 | return EOK0; | |||
750 | } | |||
751 | ||||
752 | /* Request for netgroups | |||
753 | * - first start here and then go to ipa_netgroups.c | |||
754 | */ | |||
755 | struct ipa_id_get_netgroup_state { | |||
756 | struct tevent_context *ev; | |||
757 | struct ipa_id_ctx *ctx; | |||
758 | struct sdap_id_op *op; | |||
759 | struct sysdb_ctx *sysdb; | |||
760 | struct sss_domain_info *domain; | |||
761 | ||||
762 | const char *name; | |||
763 | int timeout; | |||
764 | ||||
765 | char *filter; | |||
766 | const char **attrs; | |||
767 | ||||
768 | size_t count; | |||
769 | struct sysdb_attrs **netgroups; | |||
770 | ||||
771 | int dp_error; | |||
772 | }; | |||
773 | ||||
774 | static void ipa_id_get_netgroup_connected(struct tevent_req *subreq); | |||
775 | static void ipa_id_get_netgroup_done(struct tevent_req *subreq); | |||
776 | ||||
777 | static struct tevent_req *ipa_id_get_netgroup_send(TALLOC_CTX *memctx, | |||
778 | struct tevent_context *ev, | |||
779 | struct ipa_id_ctx *ipa_ctx, | |||
780 | const char *name) | |||
781 | { | |||
782 | struct tevent_req *req; | |||
783 | struct ipa_id_get_netgroup_state *state; | |||
784 | struct tevent_req *subreq; | |||
785 | struct sdap_id_ctx *ctx; | |||
786 | char *clean_name; | |||
787 | int ret; | |||
788 | ||||
789 | ctx = ipa_ctx->sdap_id_ctx; | |||
790 | ||||
791 | req = tevent_req_create(memctx, &state, struct ipa_id_get_netgroup_state)_tevent_req_create((memctx), (&state), sizeof(struct ipa_id_get_netgroup_state ), "struct ipa_id_get_netgroup_state", "../sssd/src/providers/ipa/ipa_id.c" ":" "791"); | |||
792 | if (!req) return NULL((void*)0); | |||
793 | ||||
794 | state->ev = ev; | |||
795 | state->ctx = ipa_ctx; | |||
796 | state->dp_error = DP_ERR_FATAL3; | |||
797 | ||||
798 | state->op = sdap_id_op_create(state, ctx->conn->conn_cache); | |||
799 | if (!state->op) { | |||
800 | DEBUG(SSSDBG_OP_FAILURE, "sdap_id_op_create failed\n")do { int __debug_macro_level = 0x0040; if ((debug_level & (__debug_macro_level) || (debug_level == 0 && (__debug_macro_level & (0x0010 | 0x0020))))) { debug_fn("../sssd/src/providers/ipa/ipa_id.c" , 800, __FUNCTION__, __debug_macro_level, "sdap_id_op_create failed\n" ); } } while (0); | |||
801 | ret = ENOMEM12; | |||
802 | goto fail; | |||
803 | } | |||
804 | ||||
805 | state->sysdb = ctx->be->domain->sysdb; | |||
806 | state->domain = ctx->be->domain; | |||
807 | state->name = name; | |||
808 | state->timeout = dp_opt_get_int(ctx->opts->basic, SDAP_SEARCH_TIMEOUT)_dp_opt_get_int(ctx->opts->basic, SDAP_SEARCH_TIMEOUT, __FUNCTION__ ); | |||
809 | ||||
810 | ret = sss_filter_sanitize(state, name, &clean_name); | |||
811 | if (ret != EOK0) { | |||
812 | goto fail; | |||
813 | } | |||
814 | ||||
815 | state->filter = talloc_asprintf(state, "(&(%s=%s)(objectclass=%s))", | |||
816 | ctx->opts->netgroup_map[IPA_AT_NETGROUP_NAME].name, | |||
817 | clean_name, | |||
818 | ctx->opts->netgroup_map[IPA_OC_NETGROUP].name); | |||
819 | if (!state->filter) { | |||
820 | DEBUG(SSSDBG_OP_FAILURE, "Failed to build filter\n")do { int __debug_macro_level = 0x0040; if ((debug_level & (__debug_macro_level) || (debug_level == 0 && (__debug_macro_level & (0x0010 | 0x0020))))) { debug_fn("../sssd/src/providers/ipa/ipa_id.c" , 820, __FUNCTION__, __debug_macro_level, "Failed to build filter\n" ); } } while (0); | |||
821 | ret = ENOMEM12; | |||
822 | goto fail; | |||
823 | } | |||
824 | talloc_zfree(clean_name)do { _talloc_free(((void *)((uintptr_t)(clean_name))), "../sssd/src/providers/ipa/ipa_id.c" ":" "824"); clean_name = ((void*)0); } while(0); | |||
825 | ||||
826 | ret = build_attrs_from_map(state, ctx->opts->netgroup_map, | |||
827 | IPA_OPTS_NETGROUP, NULL((void*)0), | |||
828 | &state->attrs, NULL((void*)0)); | |||
829 | if (ret != EOK0) goto fail; | |||
830 | ||||
831 | subreq = sdap_id_op_connect_send(state->op, state, &ret); | |||
832 | if (!subreq) { | |||
833 | goto fail; | |||
834 | } | |||
835 | tevent_req_set_callback(subreq, ipa_id_get_netgroup_connected, req); | |||
836 | ||||
837 | return req; | |||
838 | ||||
839 | fail: | |||
840 | tevent_req_error(req, ret)_tevent_req_error(req, ret, "../sssd/src/providers/ipa/ipa_id.c" ":" "840"); | |||
841 | tevent_req_post(req, ev); | |||
842 | return req; | |||
843 | } | |||
844 | ||||
845 | static void ipa_id_get_netgroup_connected(struct tevent_req *subreq) | |||
846 | { | |||
847 | struct tevent_req *req = | |||
848 | tevent_req_callback_data(subreq, struct tevent_req)(struct tevent_req *)_talloc_get_type_abort(_tevent_req_callback_data (subreq), "struct tevent_req", "../sssd/src/providers/ipa/ipa_id.c" ":" "848"); | |||
849 | struct ipa_id_get_netgroup_state *state = | |||
850 | tevent_req_data(req, struct ipa_id_get_netgroup_state)(struct ipa_id_get_netgroup_state *)_talloc_get_type_abort(_tevent_req_data (req), "struct ipa_id_get_netgroup_state", "../sssd/src/providers/ipa/ipa_id.c" ":" "850"); | |||
851 | int dp_error = DP_ERR_FATAL3; | |||
852 | int ret; | |||
853 | struct sdap_id_ctx *sdap_ctx = state->ctx->sdap_id_ctx; | |||
854 | ||||
855 | ret = sdap_id_op_connect_recv(subreq, &dp_error); | |||
856 | talloc_zfree(subreq)do { _talloc_free(((void *)((uintptr_t)(subreq))), "../sssd/src/providers/ipa/ipa_id.c" ":" "856"); subreq = ((void*)0); } while(0); | |||
857 | ||||
858 | if (ret != EOK0) { | |||
859 | state->dp_error = dp_error; | |||
860 | tevent_req_error(req, ret)_tevent_req_error(req, ret, "../sssd/src/providers/ipa/ipa_id.c" ":" "860"); | |||
861 | return; | |||
862 | } | |||
863 | ||||
864 | subreq = ipa_get_netgroups_send(state, state->ev, state->sysdb, | |||
865 | state->domain, sdap_ctx->opts, | |||
866 | state->ctx->ipa_options, | |||
867 | sdap_id_op_handle(state->op), | |||
868 | state->attrs, state->filter, | |||
869 | state->timeout); | |||
870 | if (!subreq) { | |||
871 | tevent_req_error(req, ENOMEM)_tevent_req_error(req, 12, "../sssd/src/providers/ipa/ipa_id.c" ":" "871"); | |||
872 | return; | |||
873 | } | |||
874 | tevent_req_set_callback(subreq, ipa_id_get_netgroup_done, req); | |||
875 | ||||
876 | return; | |||
877 | } | |||
878 | ||||
879 | static void ipa_id_get_netgroup_done(struct tevent_req *subreq) | |||
880 | { | |||
881 | struct tevent_req *req = | |||
882 | tevent_req_callback_data(subreq, struct tevent_req)(struct tevent_req *)_talloc_get_type_abort(_tevent_req_callback_data (subreq), "struct tevent_req", "../sssd/src/providers/ipa/ipa_id.c" ":" "882"); | |||
883 | struct ipa_id_get_netgroup_state *state = | |||
884 | tevent_req_data(req, struct ipa_id_get_netgroup_state)(struct ipa_id_get_netgroup_state *)_talloc_get_type_abort(_tevent_req_data (req), "struct ipa_id_get_netgroup_state", "../sssd/src/providers/ipa/ipa_id.c" ":" "884"); | |||
885 | int dp_error = DP_ERR_FATAL3; | |||
886 | int ret; | |||
887 | ||||
888 | ret = ipa_get_netgroups_recv(subreq, state, | |||
889 | &state->count, &state->netgroups); | |||
890 | talloc_zfree(subreq)do { _talloc_free(((void *)((uintptr_t)(subreq))), "../sssd/src/providers/ipa/ipa_id.c" ":" "890"); subreq = ((void*)0); } while(0); | |||
891 | ret = sdap_id_op_done(state->op, ret, &dp_error); | |||
892 | ||||
893 | if (dp_error == DP_ERR_OK0 && ret != EOK0) { | |||
894 | /* retry */ | |||
895 | subreq = sdap_id_op_connect_send(state->op, state, &ret); | |||
896 | if (!subreq) { | |||
897 | tevent_req_error(req, ret)_tevent_req_error(req, ret, "../sssd/src/providers/ipa/ipa_id.c" ":" "897"); | |||
898 | return; | |||
899 | } | |||
900 | tevent_req_set_callback(subreq, ipa_id_get_netgroup_connected, req); | |||
901 | return; | |||
902 | } | |||
903 | ||||
904 | if (ret && ret != ENOENT2) { | |||
905 | state->dp_error = dp_error; | |||
906 | tevent_req_error(req, ret)_tevent_req_error(req, ret, "../sssd/src/providers/ipa/ipa_id.c" ":" "906"); | |||
907 | return; | |||
908 | } | |||
909 | ||||
910 | if (ret == EOK0 && state->count > 1) { | |||
911 | DEBUG(SSSDBG_CRIT_FAILURE,do { int __debug_macro_level = 0x0020; if ((debug_level & (__debug_macro_level) || (debug_level == 0 && (__debug_macro_level & (0x0010 | 0x0020))))) { debug_fn("../sssd/src/providers/ipa/ipa_id.c" , 913, __FUNCTION__, __debug_macro_level, "Found more than one netgroup with the name [%s].\n" , state->name); } } while (0) | |||
912 | "Found more than one netgroup with the name [%s].\n",do { int __debug_macro_level = 0x0020; if ((debug_level & (__debug_macro_level) || (debug_level == 0 && (__debug_macro_level & (0x0010 | 0x0020))))) { debug_fn("../sssd/src/providers/ipa/ipa_id.c" , 913, __FUNCTION__, __debug_macro_level, "Found more than one netgroup with the name [%s].\n" , state->name); } } while (0) | |||
913 | state->name)do { int __debug_macro_level = 0x0020; if ((debug_level & (__debug_macro_level) || (debug_level == 0 && (__debug_macro_level & (0x0010 | 0x0020))))) { debug_fn("../sssd/src/providers/ipa/ipa_id.c" , 913, __FUNCTION__, __debug_macro_level, "Found more than one netgroup with the name [%s].\n" , state->name); } } while (0); | |||
914 | tevent_req_error(req, EINVAL)_tevent_req_error(req, 22, "../sssd/src/providers/ipa/ipa_id.c" ":" "914"); | |||
915 | return; | |||
916 | } | |||
917 | ||||
918 | if (ret == ENOENT2) { | |||
919 | ret = sysdb_delete_netgroup(state->domain, state->name); | |||
920 | if (ret != EOK0 && ret != ENOENT2) { | |||
921 | tevent_req_error(req, ret)_tevent_req_error(req, ret, "../sssd/src/providers/ipa/ipa_id.c" ":" "921"); | |||
922 | return; | |||
923 | } | |||
924 | } | |||
925 | ||||
926 | state->dp_error = DP_ERR_OK0; | |||
927 | tevent_req_done(req)_tevent_req_done(req, "../sssd/src/providers/ipa/ipa_id.c" ":" "927"); | |||
928 | return; | |||
929 | } | |||
930 | ||||
931 | static int ipa_id_get_netgroup_recv(struct tevent_req *req, int *dp_error) | |||
932 | { | |||
933 | struct ipa_id_get_netgroup_state *state = | |||
934 | tevent_req_data(req, struct ipa_id_get_netgroup_state)(struct ipa_id_get_netgroup_state *)_talloc_get_type_abort(_tevent_req_data (req), "struct ipa_id_get_netgroup_state", "../sssd/src/providers/ipa/ipa_id.c" ":" "934"); | |||
935 | ||||
936 | if (dp_error) { | |||
937 | *dp_error = state->dp_error; | |||
938 | } | |||
939 | ||||
940 | TEVENT_REQ_RETURN_ON_ERROR(req)do { enum tevent_req_state TRROEstate; uint64_t TRROEerr; if ( tevent_req_is_error(req, &TRROEstate, &TRROEerr)) { if (TRROEstate == TEVENT_REQ_USER_ERROR && TRROEerr != 0 ) { return TRROEerr; } return ERR_INTERNAL; } } while (0); | |||
941 | ||||
942 | return EOK0; | |||
943 | } | |||
944 | ||||
945 | ||||
946 | void ipa_check_online(struct be_req *be_req) | |||
947 | { | |||
948 | struct be_ctx *be_ctx = be_req_get_be_ctx(be_req); | |||
949 | struct ipa_id_ctx *ipa_ctx; | |||
950 | ||||
951 | ipa_ctx = talloc_get_type(be_ctx->bet_info[BET_ID].pvt_bet_data,(struct ipa_id_ctx *)talloc_check_name(be_ctx->bet_info[BET_ID ].pvt_bet_data, "struct ipa_id_ctx") | |||
952 | struct ipa_id_ctx)(struct ipa_id_ctx *)talloc_check_name(be_ctx->bet_info[BET_ID ].pvt_bet_data, "struct ipa_id_ctx"); | |||
953 | ||||
954 | return sdap_do_online_check(be_req, ipa_ctx->sdap_id_ctx); | |||
955 | } |