Bug Summary

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')

Annotated Source Code

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
33static 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
59static struct tevent_req *
60ipa_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
64static int ipa_id_get_account_info_recv(struct tevent_req *req, int *dp_error);
65
66static 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);
70static int ipa_id_get_netgroup_recv(struct tevent_req *req, int *dp_error);
71
72static void ipa_account_info_done(struct tevent_req *req);
73
74void 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
122static 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
147struct 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
158static errno_t ipa_resolve_user_list_get_user_step(struct tevent_req *req);
159static void ipa_resolve_user_list_get_user_done(struct tevent_req *subreq);
160
161static struct tevent_req *
162ipa_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
206static 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
242static 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
268done:
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
281static 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
295struct 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
312static void ipa_id_get_account_info_connected(struct tevent_req *subreq);
313static void ipa_id_get_account_info_got_override(struct tevent_req *subreq);
314static errno_t ipa_id_get_account_info_get_original_step(struct tevent_req *req,
315 struct be_acct_req *ar);
316static void ipa_id_get_account_info_orig_done(struct tevent_req *subreq);
317static void ipa_id_get_account_info_done(struct tevent_req *subreq);
318static void ipa_id_get_user_list_done(struct tevent_req *subreq);
319
320static struct tevent_req *
321ipa_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
397fail:
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
403static 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
432fail:
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
438static 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
502fail:
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
508static 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
528static 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) {
1
Assuming 'ret' is equal to 0
2
Taking false branch
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,
3
Value assigned to field 'obj_msg'
548 &state->obj_msg);
549 if (ret == ENOENT2) {
4
Assuming 'ret' is not equal to 2
5
Taking false branch
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) {
6
Assuming 'ret' is equal to 0
7
Taking false branch
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)
8
Assuming pointer value is null
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)) {
9
Taking false branch
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)) {
10
Assuming 'class' is not equal to null
11
Taking false branch
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) {
12
Taking true branch
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);
13
Access to field 'dn' results in a dereference of a null pointer (loaded from field 'obj_msg')
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
640fail:
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
646static 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
706fail:
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
712static 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
732fail:
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
738static 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 */
755struct 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
774static void ipa_id_get_netgroup_connected(struct tevent_req *subreq);
775static void ipa_id_get_netgroup_done(struct tevent_req *subreq);
776
777static 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
839fail:
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
845static 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
879static 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
931static 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
946void 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}