Bug Summary

File:/dev/shm/scanbuild/../sssd/src/providers/ipa/ipa_s2n_exop.c
Location:line 1328, column 24
Description:The left operand of '==' is a garbage value

Annotated Source Code

1/*
2 SSSD
3
4 IPA Helper routines - external users and groups with s2n plugin
5
6 Copyright (C) Sumit Bose <sbose@redhat.com> - 2011
7
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 3 of the License, or
11 (at your option) any later version.
12
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with this program. If not, see <http://www.gnu.org/licenses/>.
20*/
21
22#include "util/util.h"
23#include "util/sss_nss.h"
24#include "db/sysdb.h"
25#include "providers/ldap/sdap_async_private.h"
26#include "providers/ldap/ldap_common.h"
27#include "providers/ipa/ipa_id.h"
28#include "providers/ipa/ipa_subdomains.h"
29
30enum input_types {
31 INP_SID = 1,
32 INP_NAME,
33 INP_POSIX_UID,
34 INP_POSIX_GID
35};
36
37enum request_types {
38 REQ_SIMPLE = 1,
39 REQ_FULL,
40 REQ_FULL_WITH_MEMBERS
41};
42
43enum response_types {
44 RESP_SID = 1,
45 RESP_NAME,
46 RESP_USER,
47 RESP_GROUP,
48 RESP_USER_GROUPLIST,
49 RESP_GROUP_MEMBERS
50};
51
52/* ==Sid2Name Extended Operation============================================= */
53#define EXOP_SID2NAME_OID"2.16.840.1.113730.3.8.10.4" "2.16.840.1.113730.3.8.10.4"
54#define EXOP_SID2NAME_V1_OID"2.16.840.1.113730.3.8.10.4.1" "2.16.840.1.113730.3.8.10.4.1"
55
56struct ipa_s2n_exop_state {
57 struct sdap_handle *sh;
58
59 struct sdap_op *op;
60
61 char *retoid;
62 struct berval *retdata;
63};
64
65static void ipa_s2n_exop_done(struct sdap_op *op,
66 struct sdap_msg *reply,
67 int error, void *pvt);
68
69static struct tevent_req *ipa_s2n_exop_send(TALLOC_CTX *mem_ctx,
70 struct tevent_context *ev,
71 struct sdap_handle *sh,
72 bool_Bool is_v1,
73 int timeout,
74 struct berval *bv)
75{
76 struct tevent_req *req = NULL((void*)0);
77 struct ipa_s2n_exop_state *state;
78 int ret;
79 int msgid;
80
81 req = tevent_req_create(mem_ctx, &state, struct ipa_s2n_exop_state)_tevent_req_create((mem_ctx), (&state), sizeof(struct ipa_s2n_exop_state
), "struct ipa_s2n_exop_state", "../sssd/src/providers/ipa/ipa_s2n_exop.c"
":" "81")
;
82 if (!req) return NULL((void*)0);
83
84 state->sh = sh;
85 state->retoid = NULL((void*)0);
86 state->retdata = NULL((void*)0);
87
88 DEBUG(SSSDBG_TRACE_FUNC, "Executing extended operation\n")do { int __debug_macro_level = 0x0400; if ((debug_level &
(__debug_macro_level) || (debug_level == 0 && (__debug_macro_level
& (0x0010 | 0x0020))))) { debug_fn("../sssd/src/providers/ipa/ipa_s2n_exop.c"
, 88, __FUNCTION__, __debug_macro_level, "Executing extended operation\n"
); } } while (0)
;
89
90 ret = ldap_extended_operation(state->sh->ldap,
91 is_v1 ? EXOP_SID2NAME_V1_OID"2.16.840.1.113730.3.8.10.4.1" : EXOP_SID2NAME_OID"2.16.840.1.113730.3.8.10.4",
92 bv, NULL((void*)0), NULL((void*)0), &msgid);
93 if (ret == -1 || msgid == -1) {
94 DEBUG(SSSDBG_CRIT_FAILURE, "ldap_extended_operation failed\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_s2n_exop.c"
, 94, __FUNCTION__, __debug_macro_level, "ldap_extended_operation failed\n"
); } } while (0)
;
95 ret = ERR_NETWORK_IO;
96 goto fail;
97 }
98 DEBUG(SSSDBG_TRACE_INTERNAL, "ldap_extended_operation sent, msgid = %d\n",do { int __debug_macro_level = 0x2000; if ((debug_level &
(__debug_macro_level) || (debug_level == 0 && (__debug_macro_level
& (0x0010 | 0x0020))))) { debug_fn("../sssd/src/providers/ipa/ipa_s2n_exop.c"
, 99, __FUNCTION__, __debug_macro_level, "ldap_extended_operation sent, msgid = %d\n"
, msgid); } } while (0)
99 msgid)do { int __debug_macro_level = 0x2000; if ((debug_level &
(__debug_macro_level) || (debug_level == 0 && (__debug_macro_level
& (0x0010 | 0x0020))))) { debug_fn("../sssd/src/providers/ipa/ipa_s2n_exop.c"
, 99, __FUNCTION__, __debug_macro_level, "ldap_extended_operation sent, msgid = %d\n"
, msgid); } } while (0)
;
100
101 ret = sdap_op_add(state, ev, state->sh, msgid, ipa_s2n_exop_done, req,
102 timeout, &state->op);
103 if (ret) {
104 DEBUG(SSSDBG_CRIT_FAILURE, "Failed to set up operation!\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_s2n_exop.c"
, 104, __FUNCTION__, __debug_macro_level, "Failed to set up operation!\n"
); } } while (0)
;
105 ret = ERR_INTERNAL;
106 goto fail;
107 }
108
109 return req;
110
111fail:
112 tevent_req_error(req, ret)_tevent_req_error(req, ret, "../sssd/src/providers/ipa/ipa_s2n_exop.c"
":" "112")
;
113 tevent_req_post(req, ev);
114 return req;
115}
116
117static void ipa_s2n_exop_done(struct sdap_op *op,
118 struct sdap_msg *reply,
119 int error, void *pvt)
120{
121 struct tevent_req *req = talloc_get_type(pvt, struct tevent_req)(struct tevent_req *)talloc_check_name(pvt, "struct tevent_req"
)
;
122 struct ipa_s2n_exop_state *state = tevent_req_data(req,(struct ipa_s2n_exop_state *)_talloc_get_type_abort(_tevent_req_data
(req), "struct ipa_s2n_exop_state", "../sssd/src/providers/ipa/ipa_s2n_exop.c"
":" "123")
123 struct ipa_s2n_exop_state)(struct ipa_s2n_exop_state *)_talloc_get_type_abort(_tevent_req_data
(req), "struct ipa_s2n_exop_state", "../sssd/src/providers/ipa/ipa_s2n_exop.c"
":" "123")
;
124 int ret;
125 char *errmsg = NULL((void*)0);
126 char *retoid = NULL((void*)0);
127 struct berval *retdata = NULL((void*)0);
128 int result;
129
130 if (error) {
131 tevent_req_error(req, error)_tevent_req_error(req, error, "../sssd/src/providers/ipa/ipa_s2n_exop.c"
":" "131")
;
132 return;
133 }
134
135 ret = ldap_parse_result(state->sh->ldap, reply->msg,
136 &result, NULL((void*)0), &errmsg, NULL((void*)0),
137 NULL((void*)0), 0);
138 if (ret != LDAP_SUCCESS0x00) {
139 DEBUG(SSSDBG_OP_FAILURE, "ldap_parse_result failed (%d)\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_s2n_exop.c"
, 140, __FUNCTION__, __debug_macro_level, "ldap_parse_result failed (%d)\n"
, state->op->msgid); } } while (0)
140 state->op->msgid)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_s2n_exop.c"
, 140, __FUNCTION__, __debug_macro_level, "ldap_parse_result failed (%d)\n"
, state->op->msgid); } } while (0)
;
141 ret = ERR_NETWORK_IO;
142 goto done;
143 }
144
145 DEBUG(result == LDAP_SUCCESS ? SSSDBG_TRACE_FUNC : SSSDBG_OP_FAILURE,do { int __debug_macro_level = result == 0x00 ? 0x0400 : 0x0040
; if ((debug_level & (__debug_macro_level) || (debug_level
== 0 && (__debug_macro_level & (0x0010 | 0x0020)
)))) { debug_fn("../sssd/src/providers/ipa/ipa_s2n_exop.c", 147
, __FUNCTION__, __debug_macro_level, "ldap_extended_operation result: %s(%d), %s.\n"
, sss_ldap_err2string(result), result, errmsg); } } while (0)
146 "ldap_extended_operation result: %s(%d), %s.\n",do { int __debug_macro_level = result == 0x00 ? 0x0400 : 0x0040
; if ((debug_level & (__debug_macro_level) || (debug_level
== 0 && (__debug_macro_level & (0x0010 | 0x0020)
)))) { debug_fn("../sssd/src/providers/ipa/ipa_s2n_exop.c", 147
, __FUNCTION__, __debug_macro_level, "ldap_extended_operation result: %s(%d), %s.\n"
, sss_ldap_err2string(result), result, errmsg); } } while (0)
147 sss_ldap_err2string(result), result, errmsg)do { int __debug_macro_level = result == 0x00 ? 0x0400 : 0x0040
; if ((debug_level & (__debug_macro_level) || (debug_level
== 0 && (__debug_macro_level & (0x0010 | 0x0020)
)))) { debug_fn("../sssd/src/providers/ipa/ipa_s2n_exop.c", 147
, __FUNCTION__, __debug_macro_level, "ldap_extended_operation result: %s(%d), %s.\n"
, sss_ldap_err2string(result), result, errmsg); } } while (0)
;
148
149 if (result != LDAP_SUCCESS0x00) {
150 DEBUG(SSSDBG_OP_FAILURE, "ldap_extended_operation failed, " \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_s2n_exop.c"
, 151, __FUNCTION__, __debug_macro_level, "ldap_extended_operation failed, "
"server logs might contain more details.\n"); } } while (0)
151 "server logs might contain more details.\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_s2n_exop.c"
, 151, __FUNCTION__, __debug_macro_level, "ldap_extended_operation failed, "
"server logs might contain more details.\n"); } } while (0)
;
152 ret = ERR_NETWORK_IO;
153 goto done;
154 }
155
156 ret = ldap_parse_extended_result(state->sh->ldap, reply->msg,
157 &retoid, &retdata, 0);
158 if (ret != LDAP_SUCCESS0x00) {
159 DEBUG(SSSDBG_OP_FAILURE, "ldap_parse_extendend_result failed (%d)\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_s2n_exop.c"
, 160, __FUNCTION__, __debug_macro_level, "ldap_parse_extendend_result failed (%d)\n"
, ret); } } while (0)
160 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_s2n_exop.c"
, 160, __FUNCTION__, __debug_macro_level, "ldap_parse_extendend_result failed (%d)\n"
, ret); } } while (0)
;
161 ret = ERR_NETWORK_IO;
162 goto done;
163 }
164
165 state->retoid = talloc_strdup(state, retoid);
166 if (state->retoid == NULL((void*)0)) {
167 DEBUG(SSSDBG_OP_FAILURE, "talloc_strdup 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_s2n_exop.c"
, 167, __FUNCTION__, __debug_macro_level, "talloc_strdup failed.\n"
); } } while (0)
;
168 ret = ENOMEM12;
169 goto done;
170 }
171
172 state->retdata = talloc(state, struct berval)(struct berval *)talloc_named_const(state, sizeof(struct berval
), "struct berval")
;
173 if (state->retdata == NULL((void*)0)) {
174 DEBUG(SSSDBG_OP_FAILURE, "talloc 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_s2n_exop.c"
, 174, __FUNCTION__, __debug_macro_level, "talloc failed.\n")
; } } while (0)
;
175 ret = ENOMEM12;
176 goto done;
177 }
178 state->retdata->bv_len = retdata->bv_len;
179 state->retdata->bv_val = talloc_memdup(state->retdata, retdata->bv_val,_talloc_memdup(state->retdata, retdata->bv_val, retdata
->bv_len, "../sssd/src/providers/ipa/ipa_s2n_exop.c" ":" "180"
)
180 retdata->bv_len)_talloc_memdup(state->retdata, retdata->bv_val, retdata
->bv_len, "../sssd/src/providers/ipa/ipa_s2n_exop.c" ":" "180"
)
;
181 if (state->retdata->bv_val == NULL((void*)0)) {
182 DEBUG(SSSDBG_OP_FAILURE, "talloc_memdup 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_s2n_exop.c"
, 182, __FUNCTION__, __debug_macro_level, "talloc_memdup failed.\n"
); } } while (0)
;
183 ret = ENOMEM12;
184 goto done;
185 }
186
187 ret = EOK0;
188
189done:
190 ldap_memfree(errmsg);
191 ldap_memfree(retoid);
192 ber_bvfree(retdata);
193 if (ret == EOK0) {
194 tevent_req_done(req)_tevent_req_done(req, "../sssd/src/providers/ipa/ipa_s2n_exop.c"
":" "194")
;
195 } else {
196 tevent_req_error(req, ret)_tevent_req_error(req, ret, "../sssd/src/providers/ipa/ipa_s2n_exop.c"
":" "196")
;
197 }
198}
199
200static int ipa_s2n_exop_recv(struct tevent_req *req, TALLOC_CTX *mem_ctx,
201 char **retoid, struct berval **retdata)
202{
203 struct ipa_s2n_exop_state *state = tevent_req_data(req,(struct ipa_s2n_exop_state *)_talloc_get_type_abort(_tevent_req_data
(req), "struct ipa_s2n_exop_state", "../sssd/src/providers/ipa/ipa_s2n_exop.c"
":" "204")
204 struct ipa_s2n_exop_state)(struct ipa_s2n_exop_state *)_talloc_get_type_abort(_tevent_req_data
(req), "struct ipa_s2n_exop_state", "../sssd/src/providers/ipa/ipa_s2n_exop.c"
":" "204")
;
205
206 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)
;
207
208 *retoid = talloc_steal(mem_ctx, state->retoid)({ __typeof__(state->retoid) __talloc_steal_ret = (__typeof__
(state->retoid))_talloc_steal_loc((mem_ctx),(state->retoid
), "../sssd/src/providers/ipa/ipa_s2n_exop.c" ":" "208"); __talloc_steal_ret
; })
;
209 *retdata = talloc_steal(mem_ctx, state->retdata)({ __typeof__(state->retdata) __talloc_steal_ret = (__typeof__
(state->retdata))_talloc_steal_loc((mem_ctx),(state->retdata
), "../sssd/src/providers/ipa/ipa_s2n_exop.c" ":" "209"); __talloc_steal_ret
; })
;
210
211 return EOK0;
212}
213
214static errno_t talloc_ber_flatten(TALLOC_CTX *mem_ctx, BerElement *ber,
215 struct berval **_bv)
216{
217 int ret;
218 struct berval *bv = NULL((void*)0);
219 struct berval *tbv = NULL((void*)0);
220
221 ret = ber_flatten(ber, &bv);
222 if (ret == -1) {
223 ret = EFAULT14;
224 goto done;
225 }
226
227 tbv = talloc_zero(mem_ctx, struct berval)(struct berval *)_talloc_zero(mem_ctx, sizeof(struct berval),
"struct berval")
;
228 if (tbv == NULL((void*)0)) {
229 ret = ENOMEM12;
230 goto done;
231 }
232
233 tbv->bv_len = bv->bv_len;
234 tbv->bv_val = talloc_memdup(tbv, bv->bv_val, bv->bv_len)_talloc_memdup(tbv, bv->bv_val, bv->bv_len, "../sssd/src/providers/ipa/ipa_s2n_exop.c"
":" "234")
;
235 if (tbv->bv_val == NULL((void*)0)) {
236 ret = ENOMEM12;
237 goto done;
238 }
239
240 ret = EOK0;
241
242done:
243 ber_bvfree(bv);
244 if (ret == EOK0) {
245 *_bv = tbv;
246 } else {
247 talloc_free(tbv)_talloc_free(tbv, "../sssd/src/providers/ipa/ipa_s2n_exop.c" ":"
"247")
;
248 }
249
250 return ret;
251}
252
253/* The extended operation expect the following ASN.1 encoded request data:
254 *
255 * ExtdomRequestValue ::= SEQUENCE {
256 * inputType ENUMERATED {
257 * sid (1),
258 * name (2),
259 * posix uid (3),
260 * posix gid (3)
261 * },
262 * requestType ENUMERATED {
263 * simple (1),
264 * full (2)
265 * full_with_members (3)
266 * },
267 * data InputData
268 * }
269 *
270 * InputData ::= CHOICE {
271 * sid OCTET STRING,
272 * name NameDomainData
273 * uid PosixUid,
274 * gid PosixGid
275 * }
276 *
277 * NameDomainData ::= SEQUENCE {
278 * domain_name OCTET STRING,
279 * object_name OCTET STRING
280 * }
281 *
282 * PosixUid ::= SEQUENCE {
283 * domain_name OCTET STRING,
284 * uid INTEGER
285 * }
286 *
287 * PosixGid ::= SEQUENCE {
288 * domain_name OCTET STRING,
289 * gid INTEGER
290 * }
291 *
292 */
293
294static errno_t s2n_encode_request(TALLOC_CTX *mem_ctx,
295 const char *domain_name,
296 int entry_type,
297 enum request_types request_type,
298 struct req_input *req_input,
299 struct berval **_bv)
300{
301 BerElement *ber = NULL((void*)0);
302 int ret;
303
304 ber = ber_alloc_t( LBER_USE_DER0x01 );
305 if (ber == NULL((void*)0)) {
306 return ENOMEM12;
307 }
308
309 switch (entry_type) {
310 case BE_REQ_USER0x0001:
311 case BE_REQ_USER_AND_GROUP0x0012: /* the extdom exop does not care if the
312 ID belongs to a user or a group */
313 if (req_input->type == REQ_INP_NAME) {
314 ret = ber_printf(ber, "{ee{ss}}", INP_NAME, request_type,
315 domain_name,
316 req_input->inp.name);
317 } else if (req_input->type == REQ_INP_ID) {
318 ret = ber_printf(ber, "{ee{si}}", INP_POSIX_UID, request_type,
319 domain_name,
320 req_input->inp.id);
321 } else {
322 DEBUG(SSSDBG_OP_FAILURE, "Unexpected input type [%d].\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_s2n_exop.c"
, 323, __FUNCTION__, __debug_macro_level, "Unexpected input type [%d].\n"
, req_input->type == REQ_INP_ID); } } while (0)
323 req_input->type == REQ_INP_ID)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_s2n_exop.c"
, 323, __FUNCTION__, __debug_macro_level, "Unexpected input type [%d].\n"
, req_input->type == REQ_INP_ID); } } while (0)
;
324 ret = EINVAL22;
325 goto done;
326 }
327 break;
328 case BE_REQ_GROUP0x0002:
329 if (req_input->type == REQ_INP_NAME) {
330 ret = ber_printf(ber, "{ee{ss}}", INP_NAME, request_type,
331 domain_name,
332 req_input->inp.name);
333 } else if (req_input->type == REQ_INP_ID) {
334 ret = ber_printf(ber, "{ee{si}}", INP_POSIX_GID, request_type,
335 domain_name,
336 req_input->inp.id);
337 } else {
338 DEBUG(SSSDBG_OP_FAILURE, "Unexpected input type [%d].\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_s2n_exop.c"
, 339, __FUNCTION__, __debug_macro_level, "Unexpected input type [%d].\n"
, req_input->type == REQ_INP_ID); } } while (0)
339 req_input->type == REQ_INP_ID)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_s2n_exop.c"
, 339, __FUNCTION__, __debug_macro_level, "Unexpected input type [%d].\n"
, req_input->type == REQ_INP_ID); } } while (0)
;
340 ret = EINVAL22;
341 goto done;
342 }
343 break;
344 case BE_REQ_BY_SECID0x0011:
345 if (req_input->type == REQ_INP_SECID) {
346 ret = ber_printf(ber, "{ees}", INP_SID, request_type,
347 req_input->inp.secid);
348 } else {
349 DEBUG(SSSDBG_OP_FAILURE, "Unexpected input type [%d].\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_s2n_exop.c"
, 350, __FUNCTION__, __debug_macro_level, "Unexpected input type [%d].\n"
, req_input->type == REQ_INP_ID); } } while (0)
350 req_input->type == REQ_INP_ID)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_s2n_exop.c"
, 350, __FUNCTION__, __debug_macro_level, "Unexpected input type [%d].\n"
, req_input->type == REQ_INP_ID); } } while (0)
;
351 ret = EINVAL22;
352 goto done;
353 }
354 break;
355 default:
356 ret = EINVAL22;
357 goto done;
358 }
359 if (ret == -1) {
360 ret = EFAULT14;
361 goto done;
362 }
363
364 ret = talloc_ber_flatten(mem_ctx, ber, _bv);
365 if (ret != EOK0) {
366 goto done;
367 }
368
369 ret = EOK0;
370
371done:
372 ber_free(ber, 1);
373
374 return ret;
375}
376
377/* If the extendend operation is successful it returns the following ASN.1
378 * encoded response:
379 *
380 * ExtdomResponseValue ::= SEQUENCE {
381 * responseType ENUMERATED {
382 * sid (1),
383 * name (2),
384 * posix_user (3),
385 * posix_group (4),
386 * posix_user_grouplist (5),
387 * posix_group_members (6)
388 * },
389 * data OutputData
390 * }
391 *
392 * OutputData ::= CHOICE {
393 * sid OCTET STRING,
394 * name NameDomainData,
395 * user PosixUser,
396 * group PosixGroup,
397 * usergrouplist PosixUserGrouplist,
398 * groupmembers PosixGroupMembers
399 *
400 * }
401 *
402 * NameDomainData ::= SEQUENCE {
403 * domain_name OCTET STRING,
404 * object_name OCTET STRING
405 * }
406 *
407 * PosixUser ::= SEQUENCE {
408 * domain_name OCTET STRING,
409 * user_name OCTET STRING,
410 * uid INTEGER
411 * gid INTEGER
412 * }
413 *
414 * PosixGroup ::= SEQUENCE {
415 * domain_name OCTET STRING,
416 * group_name OCTET STRING,
417 * gid INTEGER
418 * }
419 *
420 * PosixUserGrouplist ::= SEQUENCE {
421 * domain_name OCTET STRING,
422 * user_name OCTET STRING,
423 * uid INTEGER,
424 * gid INTEGER,
425 * gecos OCTET STRING,
426 * home_directory OCTET STRING,
427 * shell OCTET STRING,
428 * grouplist GroupNameList
429 * }
430 *
431 * GroupNameList ::= SEQUENCE OF OCTET STRING
432 *
433 * PosixGroupMembers ::= SEQUENCE {
434 * domain_name OCTET STRING,
435 * group_name OCTET STRING,
436 * gid INTEGER,
437 * members GroupMemberList
438 * }
439 *
440 * GroupMemberList ::= SEQUENCE OF OCTET STRING
441 */
442
443struct resp_attrs {
444 enum response_types response_type;
445 char *domain_name;
446 union {
447 struct passwd user;
448 struct group group;
449 char *sid_str;
450 char *name;
451 } a;
452 size_t ngroups;
453 char **groups;
454 struct sysdb_attrs *sysdb_attrs;
455};
456
457static errno_t get_extra_attrs(BerElement *ber, struct resp_attrs *resp_attrs)
458{
459 ber_tag_t tag;
460 ber_len_t ber_len;
461 char *ber_cookie;
462 char *name;
463 struct berval **values;
464 struct ldb_val v;
465 int ret;
466 size_t c;
467
468 if (resp_attrs->sysdb_attrs == NULL((void*)0)) {
469 resp_attrs->sysdb_attrs = sysdb_new_attrs(resp_attrs);
470 if (resp_attrs->sysdb_attrs == NULL((void*)0)) {
471 DEBUG(SSSDBG_OP_FAILURE, "sysdb_new_attrs 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_s2n_exop.c"
, 471, __FUNCTION__, __debug_macro_level, "sysdb_new_attrs failed.\n"
); } } while (0)
;
472 return ENOMEM12;
473 }
474 }
475
476 DEBUG(SSSDBG_TRACE_ALL, "Found new sequence.\n")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_s2n_exop.c"
, 476, __FUNCTION__, __debug_macro_level, "Found new sequence.\n"
); } } while (0)
;
477 for (tag = ber_first_element(ber, &ber_len, &ber_cookie);
478 tag != LBER_DEFAULT((ber_tag_t) -1);
479 tag = ber_next_element(ber, &ber_len, ber_cookie)) {
480
481 tag = ber_scanf(ber, "{a{V}}", &name, &values);
482 if (tag == LBER_ERROR((ber_tag_t) -1)) {
483 DEBUG(SSSDBG_OP_FAILURE, "ber_scanf 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_s2n_exop.c"
, 483, __FUNCTION__, __debug_macro_level, "ber_scanf failed.\n"
); } } while (0)
;
484 return EINVAL22;
485 }
486 DEBUG(SSSDBG_TRACE_ALL, "Extra attribute [%s].\n", name)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_s2n_exop.c"
, 486, __FUNCTION__, __debug_macro_level, "Extra attribute [%s].\n"
, name); } } while (0)
;
487
488 for (c = 0; values[c] != NULL((void*)0); c++) {
489
490 v.data = (uint8_t *) values[c]->bv_val;
491 v.length = values[c]->bv_len;
492
493 ret = sysdb_attrs_add_val(resp_attrs->sysdb_attrs, name, &v);
494 if (ret != EOK0) {
495 DEBUG(SSSDBG_OP_FAILURE, "sysdb_attrs_add_val 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_s2n_exop.c"
, 495, __FUNCTION__, __debug_macro_level, "sysdb_attrs_add_val failed.\n"
); } } while (0)
;
496 ldap_memfree(name);
497 ber_bvecfree(values);
498 return ret;
499 }
500 }
501
502 ldap_memfree(name);
503 ber_bvecfree(values);
504 }
505
506 return EOK0;
507}
508
509static errno_t add_v1_user_data(BerElement *ber, struct resp_attrs *attrs)
510{
511 ber_tag_t tag;
512 ber_len_t ber_len;
513 int ret;
514 char *gecos = NULL((void*)0);
515 char *homedir = NULL((void*)0);
516 char *shell = NULL((void*)0);
517 char **list = NULL((void*)0);
518 size_t c;
519
520 tag = ber_scanf(ber, "aaa", &gecos, &homedir, &shell);
521 if (tag == LBER_ERROR((ber_tag_t) -1)) {
522 DEBUG(SSSDBG_OP_FAILURE, "ber_scanf 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_s2n_exop.c"
, 522, __FUNCTION__, __debug_macro_level, "ber_scanf failed.\n"
); } } while (0)
;
523 ret = EINVAL22;
524 goto done;
525 }
526
527 if (gecos == NULL((void*)0) || *gecos == '\0') {
528 attrs->a.user.pw_gecos = NULL((void*)0);
529 } else {
530 attrs->a.user.pw_gecos = talloc_strdup(attrs, gecos);
531 if (attrs->a.user.pw_gecos == NULL((void*)0)) {
532 DEBUG(SSSDBG_OP_FAILURE, "talloc_strdup 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_s2n_exop.c"
, 532, __FUNCTION__, __debug_macro_level, "talloc_strdup failed.\n"
); } } while (0)
;
533 ret = ENOMEM12;
534 goto done;
535 }
536 }
537
538 if (homedir == NULL((void*)0) || *homedir == '\0') {
539 attrs->a.user.pw_dir = NULL((void*)0);
540 } else {
541 attrs->a.user.pw_dir = talloc_strdup(attrs, homedir);
542 if (attrs->a.user.pw_dir == NULL((void*)0)) {
543 DEBUG(SSSDBG_OP_FAILURE, "talloc_strdup 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_s2n_exop.c"
, 543, __FUNCTION__, __debug_macro_level, "talloc_strdup failed.\n"
); } } while (0)
;
544 ret = ENOMEM12;
545 goto done;
546 }
547 }
548
549 if (shell == NULL((void*)0) || *shell == '\0') {
550 attrs->a.user.pw_shell = NULL((void*)0);
551 } else {
552 attrs->a.user.pw_shell = talloc_strdup(attrs, shell);
553 if (attrs->a.user.pw_shell == NULL((void*)0)) {
554 DEBUG(SSSDBG_OP_FAILURE, "talloc_strdup 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_s2n_exop.c"
, 554, __FUNCTION__, __debug_macro_level, "talloc_strdup failed.\n"
); } } while (0)
;
555 ret = ENOMEM12;
556 goto done;
557 }
558 }
559
560 tag = ber_scanf(ber, "{v}", &list);
561 if (tag == LBER_ERROR((ber_tag_t) -1)) {
562 DEBUG(SSSDBG_OP_FAILURE, "ber_scanf 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_s2n_exop.c"
, 562, __FUNCTION__, __debug_macro_level, "ber_scanf failed.\n"
); } } while (0)
;
563 ret = EINVAL22;
564 goto done;
565 }
566
567 for (attrs->ngroups = 0; list[attrs->ngroups] != NULL((void*)0);
568 attrs->ngroups++);
569
570 if (attrs->ngroups > 0) {
571 attrs->groups = talloc_zero_array(attrs, char *, attrs->ngroups + 1)(char * *)_talloc_zero_array(attrs, sizeof(char *), attrs->
ngroups + 1, "char *")
;
572 if (attrs->groups == NULL((void*)0)) {
573 DEBUG(SSSDBG_OP_FAILURE, "talloc_array 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_s2n_exop.c"
, 573, __FUNCTION__, __debug_macro_level, "talloc_array failed.\n"
); } } while (0)
;
574 ret = ENOMEM12;
575 goto done;
576 }
577
578 for (c = 0; c < attrs->ngroups; c++) {
579 attrs->groups[c] = talloc_strdup(attrs->groups,
580 list[c]);
581 if (attrs->groups[c] == NULL((void*)0)) {
582 DEBUG(SSSDBG_OP_FAILURE, "talloc_strdup 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_s2n_exop.c"
, 582, __FUNCTION__, __debug_macro_level, "talloc_strdup failed.\n"
); } } while (0)
;
583 ret = ENOMEM12;
584 goto done;
585 }
586 }
587 }
588
589 tag = ber_peek_tag(ber, &ber_len);
590 DEBUG(SSSDBG_TRACE_ALL, "BER tag is [%d]\n", (int) tag)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_s2n_exop.c"
, 590, __FUNCTION__, __debug_macro_level, "BER tag is [%d]\n"
, (int) tag); } } while (0)
;
591 if (tag == LBER_SEQUENCE((ber_tag_t) 0x30UL)) {
592 ret = get_extra_attrs(ber, attrs);
593 if (ret != EOK0) {
594 DEBUG(SSSDBG_OP_FAILURE, "get_extra_attrs 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_s2n_exop.c"
, 594, __FUNCTION__, __debug_macro_level, "get_extra_attrs failed.\n"
); } } while (0)
;
595 goto done;
596 }
597 }
598
599
600 ret = EOK0;
601
602done:
603 ber_memfree(gecos);
604 ber_memfree(homedir);
605 ber_memfree(shell);
606 ber_memvfree((void **) list);
607
608 return ret;
609}
610
611static errno_t add_v1_group_data(BerElement *ber, struct resp_attrs *attrs)
612{
613 ber_tag_t tag;
614 ber_len_t ber_len;
615 int ret;
616 char **list = NULL((void*)0);
617 size_t c;
618
619 tag = ber_scanf(ber, "{v}", &list);
620 if (tag == LBER_ERROR((ber_tag_t) -1)) {
621 DEBUG(SSSDBG_OP_FAILURE, "ber_scanf 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_s2n_exop.c"
, 621, __FUNCTION__, __debug_macro_level, "ber_scanf failed.\n"
); } } while (0)
;
622 ret = EINVAL22;
623 goto done;
624 }
625
626 if (list != NULL((void*)0)) {
627 for (attrs->ngroups = 0; list[attrs->ngroups] != NULL((void*)0);
628 attrs->ngroups++);
629
630 if (attrs->ngroups > 0) {
631 attrs->a.group.gr_mem = talloc_zero_array(attrs, char *,(char * *)_talloc_zero_array(attrs, sizeof(char *), attrs->
ngroups + 1, "char *")
632 attrs->ngroups + 1)(char * *)_talloc_zero_array(attrs, sizeof(char *), attrs->
ngroups + 1, "char *")
;
633 if (attrs->a.group.gr_mem == NULL((void*)0)) {
634 DEBUG(SSSDBG_OP_FAILURE, "talloc_array 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_s2n_exop.c"
, 634, __FUNCTION__, __debug_macro_level, "talloc_array failed.\n"
); } } while (0)
;
635 ret = ENOMEM12;
636 goto done;
637 }
638
639 for (c = 0; c < attrs->ngroups; c++) {
640 attrs->a.group.gr_mem[c] =
641 talloc_strdup(attrs->a.group.gr_mem,
642 list[c]);
643 if (attrs->a.group.gr_mem[c] == NULL((void*)0)) {
644 DEBUG(SSSDBG_OP_FAILURE, "talloc_strdup 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_s2n_exop.c"
, 644, __FUNCTION__, __debug_macro_level, "talloc_strdup failed.\n"
); } } while (0)
;
645 ret = ENOMEM12;
646 goto done;
647 }
648 }
649 }
650 } else {
651 attrs->a.group.gr_mem = talloc_zero_array(attrs, char *, 1)(char * *)_talloc_zero_array(attrs, sizeof(char *), 1, "char *"
)
;
652 if (attrs->a.group.gr_mem == NULL((void*)0)) {
653 DEBUG(SSSDBG_OP_FAILURE, "talloc_array 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_s2n_exop.c"
, 653, __FUNCTION__, __debug_macro_level, "talloc_array failed.\n"
); } } while (0)
;
654 ret = ENOMEM12;
655 goto done;
656 }
657 }
658
659 tag = ber_peek_tag(ber, &ber_len);
660 DEBUG(SSSDBG_TRACE_ALL, "BER tag is [%d]\n", (int) tag)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_s2n_exop.c"
, 660, __FUNCTION__, __debug_macro_level, "BER tag is [%d]\n"
, (int) tag); } } while (0)
;
661 if (tag == LBER_SEQUENCE((ber_tag_t) 0x30UL)) {
662 ret = get_extra_attrs(ber, attrs);
663 if (ret != EOK0) {
664 DEBUG(SSSDBG_OP_FAILURE, "get_extra_attrs 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_s2n_exop.c"
, 664, __FUNCTION__, __debug_macro_level, "get_extra_attrs failed.\n"
); } } while (0)
;
665 goto done;
666 }
667 }
668
669 ret = EOK0;
670
671done:
672 ber_memvfree((void **) list);
673
674 return ret;
675}
676
677static errno_t ipa_s2n_save_objects(struct sss_domain_info *dom,
678 struct req_input *req_input,
679 struct resp_attrs *attrs,
680 struct resp_attrs *simple_attrs,
681 const char *view_name,
682 struct sysdb_attrs *override_attrs);
683
684static errno_t s2n_response_to_attrs(TALLOC_CTX *mem_ctx,
685 char *retoid,
686 struct berval *retdata,
687 struct resp_attrs **resp_attrs)
688{
689 BerElement *ber = NULL((void*)0);
690 ber_tag_t tag;
691 int ret;
692 enum response_types type;
693 char *domain_name = NULL((void*)0);
694 char *name = NULL((void*)0);
695 uid_t uid;
696 gid_t gid;
697 struct resp_attrs *attrs = NULL((void*)0);
698 char *sid_str;
699 bool_Bool is_v1 = false0;
700
701 if (retoid == NULL((void*)0) || retdata == NULL((void*)0)) {
702 DEBUG(SSSDBG_OP_FAILURE, "Missing OID or data.\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_s2n_exop.c"
, 702, __FUNCTION__, __debug_macro_level, "Missing OID or data.\n"
); } } while (0)
;
703 return EINVAL22;
704 }
705
706 if (strcmp(retoid, EXOP_SID2NAME_V1_OID)__extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p
(retoid) && __builtin_constant_p ("2.16.840.1.113730.3.8.10.4.1"
) && (__s1_len = strlen (retoid), __s2_len = strlen (
"2.16.840.1.113730.3.8.10.4.1"), (!((size_t)(const void *)((retoid
) + 1) - (size_t)(const void *)(retoid) == 1) || __s1_len >=
4) && (!((size_t)(const void *)(("2.16.840.1.113730.3.8.10.4.1"
) + 1) - (size_t)(const void *)("2.16.840.1.113730.3.8.10.4.1"
) == 1) || __s2_len >= 4)) ? __builtin_strcmp (retoid, "2.16.840.1.113730.3.8.10.4.1"
) : (__builtin_constant_p (retoid) && ((size_t)(const
void *)((retoid) + 1) - (size_t)(const void *)(retoid) == 1)
&& (__s1_len = strlen (retoid), __s1_len < 4) ? (
__builtin_constant_p ("2.16.840.1.113730.3.8.10.4.1") &&
((size_t)(const void *)(("2.16.840.1.113730.3.8.10.4.1") + 1
) - (size_t)(const void *)("2.16.840.1.113730.3.8.10.4.1") ==
1) ? __builtin_strcmp (retoid, "2.16.840.1.113730.3.8.10.4.1"
) : (__extension__ ({ const unsigned char *__s2 = (const unsigned
char *) (const char *) ("2.16.840.1.113730.3.8.10.4.1"); int
__result = (((const unsigned char *) (const char *) (retoid)
)[0] - __s2[0]); if (__s1_len > 0 && __result == 0
) { __result = (((const unsigned char *) (const char *) (retoid
))[1] - __s2[1]); if (__s1_len > 1 && __result == 0
) { __result = (((const unsigned char *) (const char *) (retoid
))[2] - __s2[2]); if (__s1_len > 2 && __result == 0
) __result = (((const unsigned char *) (const char *) (retoid
))[3] - __s2[3]); } } __result; }))) : (__builtin_constant_p (
"2.16.840.1.113730.3.8.10.4.1") && ((size_t)(const void
*)(("2.16.840.1.113730.3.8.10.4.1") + 1) - (size_t)(const void
*)("2.16.840.1.113730.3.8.10.4.1") == 1) && (__s2_len
= strlen ("2.16.840.1.113730.3.8.10.4.1"), __s2_len < 4) ?
(__builtin_constant_p (retoid) && ((size_t)(const void
*)((retoid) + 1) - (size_t)(const void *)(retoid) == 1) ? __builtin_strcmp
(retoid, "2.16.840.1.113730.3.8.10.4.1") : (- (__extension__
({ const unsigned char *__s2 = (const unsigned char *) (const
char *) (retoid); int __result = (((const unsigned char *) (
const char *) ("2.16.840.1.113730.3.8.10.4.1"))[0] - __s2[0])
; if (__s2_len > 0 && __result == 0) { __result = (
((const unsigned char *) (const char *) ("2.16.840.1.113730.3.8.10.4.1"
))[1] - __s2[1]); if (__s2_len > 1 && __result == 0
) { __result = (((const unsigned char *) (const char *) ("2.16.840.1.113730.3.8.10.4.1"
))[2] - __s2[2]); if (__s2_len > 2 && __result == 0
) __result = (((const unsigned char *) (const char *) ("2.16.840.1.113730.3.8.10.4.1"
))[3] - __s2[3]); } } __result; })))) : __builtin_strcmp (retoid
, "2.16.840.1.113730.3.8.10.4.1")))); })
== 0) {
707 is_v1 = true1;
708 } else if (strcmp(retoid, EXOP_SID2NAME_OID)__extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p
(retoid) && __builtin_constant_p ("2.16.840.1.113730.3.8.10.4"
) && (__s1_len = strlen (retoid), __s2_len = strlen (
"2.16.840.1.113730.3.8.10.4"), (!((size_t)(const void *)((retoid
) + 1) - (size_t)(const void *)(retoid) == 1) || __s1_len >=
4) && (!((size_t)(const void *)(("2.16.840.1.113730.3.8.10.4"
) + 1) - (size_t)(const void *)("2.16.840.1.113730.3.8.10.4")
== 1) || __s2_len >= 4)) ? __builtin_strcmp (retoid, "2.16.840.1.113730.3.8.10.4"
) : (__builtin_constant_p (retoid) && ((size_t)(const
void *)((retoid) + 1) - (size_t)(const void *)(retoid) == 1)
&& (__s1_len = strlen (retoid), __s1_len < 4) ? (
__builtin_constant_p ("2.16.840.1.113730.3.8.10.4") &&
((size_t)(const void *)(("2.16.840.1.113730.3.8.10.4") + 1) -
(size_t)(const void *)("2.16.840.1.113730.3.8.10.4") == 1) ?
__builtin_strcmp (retoid, "2.16.840.1.113730.3.8.10.4") : (__extension__
({ const unsigned char *__s2 = (const unsigned char *) (const
char *) ("2.16.840.1.113730.3.8.10.4"); int __result = (((const
unsigned char *) (const char *) (retoid))[0] - __s2[0]); if (
__s1_len > 0 && __result == 0) { __result = (((const
unsigned char *) (const char *) (retoid))[1] - __s2[1]); if (
__s1_len > 1 && __result == 0) { __result = (((const
unsigned char *) (const char *) (retoid))[2] - __s2[2]); if (
__s1_len > 2 && __result == 0) __result = (((const
unsigned char *) (const char *) (retoid))[3] - __s2[3]); } }
__result; }))) : (__builtin_constant_p ("2.16.840.1.113730.3.8.10.4"
) && ((size_t)(const void *)(("2.16.840.1.113730.3.8.10.4"
) + 1) - (size_t)(const void *)("2.16.840.1.113730.3.8.10.4")
== 1) && (__s2_len = strlen ("2.16.840.1.113730.3.8.10.4"
), __s2_len < 4) ? (__builtin_constant_p (retoid) &&
((size_t)(const void *)((retoid) + 1) - (size_t)(const void *
)(retoid) == 1) ? __builtin_strcmp (retoid, "2.16.840.1.113730.3.8.10.4"
) : (- (__extension__ ({ const unsigned char *__s2 = (const unsigned
char *) (const char *) (retoid); int __result = (((const unsigned
char *) (const char *) ("2.16.840.1.113730.3.8.10.4"))[0] - __s2
[0]); if (__s2_len > 0 && __result == 0) { __result
= (((const unsigned char *) (const char *) ("2.16.840.1.113730.3.8.10.4"
))[1] - __s2[1]); if (__s2_len > 1 && __result == 0
) { __result = (((const unsigned char *) (const char *) ("2.16.840.1.113730.3.8.10.4"
))[2] - __s2[2]); if (__s2_len > 2 && __result == 0
) __result = (((const unsigned char *) (const char *) ("2.16.840.1.113730.3.8.10.4"
))[3] - __s2[3]); } } __result; })))) : __builtin_strcmp (retoid
, "2.16.840.1.113730.3.8.10.4")))); })
== 0) {
709 is_v1 = false0;
710 } else {
711 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_s2n_exop.c"
, 713, __FUNCTION__, __debug_macro_level, "Result has wrong OID, expected [%s] or [%s], got [%s].\n"
, "2.16.840.1.113730.3.8.10.4", "2.16.840.1.113730.3.8.10.4.1"
, retoid); } } while (0)
712 "Result has wrong OID, expected [%s] or [%s], got [%s].\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_s2n_exop.c"
, 713, __FUNCTION__, __debug_macro_level, "Result has wrong OID, expected [%s] or [%s], got [%s].\n"
, "2.16.840.1.113730.3.8.10.4", "2.16.840.1.113730.3.8.10.4.1"
, retoid); } } while (0)
713 EXOP_SID2NAME_OID, EXOP_SID2NAME_V1_OID, retoid)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_s2n_exop.c"
, 713, __FUNCTION__, __debug_macro_level, "Result has wrong OID, expected [%s] or [%s], got [%s].\n"
, "2.16.840.1.113730.3.8.10.4", "2.16.840.1.113730.3.8.10.4.1"
, retoid); } } while (0)
;
714 return EINVAL22;
715 }
716
717 ber = ber_init(retdata);
718 if (ber == NULL((void*)0)) {
719 DEBUG(SSSDBG_OP_FAILURE, "ber_init 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_s2n_exop.c"
, 719, __FUNCTION__, __debug_macro_level, "ber_init failed.\n"
); } } while (0)
;
720 return EINVAL22;
721 }
722
723 tag = ber_scanf(ber, "{e", &type);
724 if (tag == LBER_ERROR((ber_tag_t) -1)) {
725 DEBUG(SSSDBG_OP_FAILURE, "ber_scanf 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_s2n_exop.c"
, 725, __FUNCTION__, __debug_macro_level, "ber_scanf failed.\n"
); } } while (0)
;
726 ret = EINVAL22;
727 goto done;
728 }
729
730 attrs = talloc_zero(mem_ctx, struct resp_attrs)(struct resp_attrs *)_talloc_zero(mem_ctx, sizeof(struct resp_attrs
), "struct resp_attrs")
;
731 if (attrs == NULL((void*)0)) {
732 DEBUG(SSSDBG_OP_FAILURE, "talloc_zero 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_s2n_exop.c"
, 732, __FUNCTION__, __debug_macro_level, "talloc_zero failed.\n"
); } } while (0)
;
733 ret = ENOMEM12;
734 goto done;
735 }
736
737 switch (type) {
738 case RESP_USER:
739 case RESP_USER_GROUPLIST:
740 tag = ber_scanf(ber, "{aaii", &domain_name, &name, &uid, &gid);
741 if (tag == LBER_ERROR((ber_tag_t) -1)) {
742 DEBUG(SSSDBG_OP_FAILURE, "ber_scanf 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_s2n_exop.c"
, 742, __FUNCTION__, __debug_macro_level, "ber_scanf failed.\n"
); } } while (0)
;
743 ret = EINVAL22;
744 goto done;
745 }
746
747 /* Winbind is not consistent with the case of the returned user
748 * name. In general all names should be lower case but there are
749 * bug in some version of winbind which might lead to upper case
750 * letters in the name. To be on the safe side we explicitly
751 * lowercase the name. */
752 attrs->a.user.pw_name = sss_tc_utf8_str_tolower(attrs, name);
753 if (attrs->a.user.pw_name == NULL((void*)0)) {
754 DEBUG(SSSDBG_OP_FAILURE, "talloc_strdup 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_s2n_exop.c"
, 754, __FUNCTION__, __debug_macro_level, "talloc_strdup failed.\n"
); } } while (0)
;
755 ret = ENOMEM12;
756 goto done;
757 }
758
759 attrs->a.user.pw_uid = uid;
760 attrs->a.user.pw_gid = gid;
761
762 if (is_v1 && type == RESP_USER_GROUPLIST) {
763 ret = add_v1_user_data(ber, attrs);
764 if (ret != EOK0) {
765 DEBUG(SSSDBG_OP_FAILURE, "add_v1_user_data 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_s2n_exop.c"
, 765, __FUNCTION__, __debug_macro_level, "add_v1_user_data failed.\n"
); } } while (0)
;
766 goto done;
767 }
768 }
769
770 tag = ber_scanf(ber, "}}");
771 if (tag == LBER_ERROR((ber_tag_t) -1)) {
772 DEBUG(SSSDBG_OP_FAILURE, "ber_scanf 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_s2n_exop.c"
, 772, __FUNCTION__, __debug_macro_level, "ber_scanf failed.\n"
); } } while (0)
;
773 ret = EINVAL22;
774 goto done;
775 }
776
777 break;
778 case RESP_GROUP:
779 case RESP_GROUP_MEMBERS:
780 tag = ber_scanf(ber, "{aai", &domain_name, &name, &gid);
781 if (tag == LBER_ERROR((ber_tag_t) -1)) {
782 DEBUG(SSSDBG_OP_FAILURE, "ber_scanf 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_s2n_exop.c"
, 782, __FUNCTION__, __debug_macro_level, "ber_scanf failed.\n"
); } } while (0)
;
783 ret = EINVAL22;
784 goto done;
785 }
786
787 /* Winbind is not consistent with the case of the returned user
788 * name. In general all names should be lower case but there are
789 * bug in some version of winbind which might lead to upper case
790 * letters in the name. To be on the safe side we explicitly
791 * lowercase the name. */
792 attrs->a.group.gr_name = sss_tc_utf8_str_tolower(attrs, name);
793 if (attrs->a.group.gr_name == NULL((void*)0)) {
794 DEBUG(SSSDBG_OP_FAILURE, "talloc_strdup 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_s2n_exop.c"
, 794, __FUNCTION__, __debug_macro_level, "talloc_strdup failed.\n"
); } } while (0)
;
795 ret = ENOMEM12;
796 goto done;
797 }
798
799 attrs->a.group.gr_gid = gid;
800
801 if (is_v1 && type == RESP_GROUP_MEMBERS) {
802 ret = add_v1_group_data(ber, attrs);
803 if (ret != EOK0) {
804 DEBUG(SSSDBG_OP_FAILURE, "add_v1_group_data 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_s2n_exop.c"
, 804, __FUNCTION__, __debug_macro_level, "add_v1_group_data failed.\n"
); } } while (0)
;
805 goto done;
806 }
807 }
808
809 tag = ber_scanf(ber, "}}");
810 if (tag == LBER_ERROR((ber_tag_t) -1)) {
811 DEBUG(SSSDBG_OP_FAILURE, "ber_scanf 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_s2n_exop.c"
, 811, __FUNCTION__, __debug_macro_level, "ber_scanf failed.\n"
); } } while (0)
;
812 ret = EINVAL22;
813 goto done;
814 }
815
816 break;
817 case RESP_SID:
818 tag = ber_scanf(ber, "a}", &sid_str);
819 if (tag == LBER_ERROR((ber_tag_t) -1)) {
820 DEBUG(SSSDBG_OP_FAILURE, "ber_scanf 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_s2n_exop.c"
, 820, __FUNCTION__, __debug_macro_level, "ber_scanf failed.\n"
); } } while (0)
;
821 ret = EINVAL22;
822 goto done;
823 }
824
825 attrs->a.sid_str = talloc_strdup(attrs, sid_str);
826 if (attrs->a.sid_str == NULL((void*)0)) {
827 DEBUG(SSSDBG_OP_FAILURE, "talloc_strdup 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_s2n_exop.c"
, 827, __FUNCTION__, __debug_macro_level, "talloc_strdup failed.\n"
); } } while (0)
;
828 ret = ENOMEM12;
829 goto done;
830 }
831 break;
832 case RESP_NAME:
833 tag = ber_scanf(ber, "{aa}", &domain_name, &name);
834 if (tag == LBER_ERROR((ber_tag_t) -1)) {
835 DEBUG(SSSDBG_OP_FAILURE, "ber_scanf 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_s2n_exop.c"
, 835, __FUNCTION__, __debug_macro_level, "ber_scanf failed.\n"
); } } while (0)
;
836 ret = EINVAL22;
837 goto done;
838 }
839
840 attrs->a.name = sss_tc_utf8_str_tolower(attrs, name);
841 if (attrs->a.name == NULL((void*)0)) {
842 DEBUG(SSSDBG_OP_FAILURE, "sss_tc_utf8_str_tolower 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_s2n_exop.c"
, 842, __FUNCTION__, __debug_macro_level, "sss_tc_utf8_str_tolower failed.\n"
); } } while (0)
;
843 ret = ENOMEM12;
844 goto done;
845 }
846 break;
847 default:
848 DEBUG(SSSDBG_OP_FAILURE, "Unexpected response type [%d].\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_s2n_exop.c"
, 849, __FUNCTION__, __debug_macro_level, "Unexpected response type [%d].\n"
, type); } } while (0)
849 type)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_s2n_exop.c"
, 849, __FUNCTION__, __debug_macro_level, "Unexpected response type [%d].\n"
, type); } } while (0)
;
850 ret = EINVAL22;
851 goto done;
852 }
853
854 attrs->response_type = type;
855 if (type != RESP_SID) {
856 attrs->domain_name = talloc_strdup(attrs, domain_name);
857 if (attrs->domain_name == NULL((void*)0)) {
858 DEBUG(SSSDBG_OP_FAILURE, "talloc_strdup 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_s2n_exop.c"
, 858, __FUNCTION__, __debug_macro_level, "talloc_strdup failed.\n"
); } } while (0)
;
859 ret = ENOMEM12;
860 goto done;
861 }
862 }
863
864 ret = EOK0;
865
866done:
867 ber_memfree(domain_name);
868 ber_memfree(name);
869 ber_free(ber, 1);
870
871 if (ret == EOK0) {
872 *resp_attrs = attrs;
873 } else {
874 talloc_free(attrs)_talloc_free(attrs, "../sssd/src/providers/ipa/ipa_s2n_exop.c"
":" "874")
;
875 }
876
877 return ret;
878}
879
880struct ipa_s2n_get_fqlist_state {
881 struct tevent_context *ev;
882 struct ipa_id_ctx *ipa_ctx;
883 struct sss_domain_info *dom;
884 struct sdap_handle *sh;
885 struct req_input req_input;
886 char **fqname_list;
887 size_t fqname_idx;
888 int exop_timeout;
889 int entry_type;
890 enum request_types request_type;
891 struct resp_attrs *attrs;
892 struct sss_domain_info *obj_domain;
893 struct sysdb_attrs *override_attrs;
894};
895
896static errno_t ipa_s2n_get_fqlist_step(struct tevent_req *req);
897static void ipa_s2n_get_fqlist_get_override_done(struct tevent_req *subreq);
898static void ipa_s2n_get_fqlist_next(struct tevent_req *subreq);
899static errno_t ipa_s2n_get_fqlist_save_step(struct tevent_req *req);
900
901static struct tevent_req *ipa_s2n_get_fqlist_send(TALLOC_CTX *mem_ctx,
902 struct tevent_context *ev,
903 struct ipa_id_ctx *ipa_ctx,
904 struct sss_domain_info *dom,
905 struct sdap_handle *sh,
906 int exop_timeout,
907 int entry_type,
908 enum request_types request_type,
909 char **fqname_list)
910{
911 int ret;
912 struct ipa_s2n_get_fqlist_state *state;
913 struct tevent_req *req;
914
915 req = tevent_req_create(mem_ctx, &state, struct ipa_s2n_get_fqlist_state)_tevent_req_create((mem_ctx), (&state), sizeof(struct ipa_s2n_get_fqlist_state
), "struct ipa_s2n_get_fqlist_state", "../sssd/src/providers/ipa/ipa_s2n_exop.c"
":" "915")
;
916 if (req == NULL((void*)0)) {
917 return NULL((void*)0);
918 }
919
920 state->ev = ev;
921 state->ipa_ctx = ipa_ctx;
922 state->dom = dom;
923 state->sh = sh;
924 state->fqname_list = fqname_list;
925 state->fqname_idx = 0;
926 state->req_input.type = REQ_INP_NAME;
927 state->req_input.inp.name = NULL((void*)0);
928 state->exop_timeout = exop_timeout;
929 state->entry_type = entry_type;
930 state->request_type = request_type;
931 state->attrs = NULL((void*)0);
932 state->override_attrs = NULL((void*)0);
933
934 ret = ipa_s2n_get_fqlist_step(req);
935 if (ret != EOK0) {
936 DEBUG(SSSDBG_OP_FAILURE, "ipa_s2n_get_fqlist_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_s2n_exop.c"
, 936, __FUNCTION__, __debug_macro_level, "ipa_s2n_get_fqlist_step failed.\n"
); } } while (0)
;
937 goto done;
938 }
939
940done:
941 if (ret != EOK0) {
942 tevent_req_error(req, ret)_tevent_req_error(req, ret, "../sssd/src/providers/ipa/ipa_s2n_exop.c"
":" "942")
;
943 tevent_req_post(req, ev);
944 }
945
946 return req;
947}
948
949static errno_t ipa_s2n_get_fqlist_step(struct tevent_req *req)
950{
951 int ret;
952 struct ipa_s2n_get_fqlist_state *state = tevent_req_data(req,(struct ipa_s2n_get_fqlist_state *)_talloc_get_type_abort(_tevent_req_data
(req), "struct ipa_s2n_get_fqlist_state", "../sssd/src/providers/ipa/ipa_s2n_exop.c"
":" "953")
953 struct ipa_s2n_get_fqlist_state)(struct ipa_s2n_get_fqlist_state *)_talloc_get_type_abort(_tevent_req_data
(req), "struct ipa_s2n_get_fqlist_state", "../sssd/src/providers/ipa/ipa_s2n_exop.c"
":" "953")
;
954 struct berval *bv_req;
955 struct tevent_req *subreq;
956 struct sss_domain_info *parent_domain;
957 char *fqname = NULL((void*)0);
958 char *domain_name = NULL((void*)0);
959
960 parent_domain = get_domains_head(state->dom);
961
962 ret = sss_parse_name(state, parent_domain->names,
963 state->fqname_list[state->fqname_idx],
964 &domain_name, &fqname);
965 if (ret != EOK0) {
966 DEBUG(SSSDBG_CRIT_FAILURE, "Unable to parse name '%s' [%d]: %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_s2n_exop.c"
, 968, __FUNCTION__, __debug_macro_level, "Unable to parse name '%s' [%d]: %s\n"
, state->fqname_list[state->fqname_idx], ret, sss_strerror
(ret)); } } while (0)
967 state->fqname_list[state->fqname_idx],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_s2n_exop.c"
, 968, __FUNCTION__, __debug_macro_level, "Unable to parse name '%s' [%d]: %s\n"
, state->fqname_list[state->fqname_idx], ret, sss_strerror
(ret)); } } while (0)
968 ret, sss_strerror(ret))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_s2n_exop.c"
, 968, __FUNCTION__, __debug_macro_level, "Unable to parse name '%s' [%d]: %s\n"
, state->fqname_list[state->fqname_idx], ret, sss_strerror
(ret)); } } while (0)
;
969 return ret;
970 }
971
972 if (domain_name) {
973 state->obj_domain = find_domain_by_name(parent_domain,
974 domain_name, true1);
975 if (state->obj_domain == NULL((void*)0)) {
976 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_s2n_exop.c"
, 976, __FUNCTION__, __debug_macro_level, "find_domain_by_name failed.\n"
); } } while (0)
;
977 return ENOMEM12;
978 }
979 } else {
980 state->obj_domain = parent_domain;
981 }
982
983 state->req_input.inp.name = fqname;
984
985 ret = s2n_encode_request(state, state->obj_domain->name, state->entry_type,
986 state->request_type,
987 &state->req_input, &bv_req);
988 if (ret != EOK0) {
989 DEBUG(SSSDBG_OP_FAILURE, "s2n_encode_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_s2n_exop.c"
, 989, __FUNCTION__, __debug_macro_level, "s2n_encode_request failed.\n"
); } } while (0)
;
990 return ret;
991 }
992
993 subreq = ipa_s2n_exop_send(state, state->ev, state->sh, true1,
994 state->exop_timeout, bv_req);
995 if (subreq == NULL((void*)0)) {
996 DEBUG(SSSDBG_OP_FAILURE, "ipa_s2n_exop_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_s2n_exop.c"
, 996, __FUNCTION__, __debug_macro_level, "ipa_s2n_exop_send failed.\n"
); } } while (0)
;
997 return ENOMEM12;
998 }
999 tevent_req_set_callback(subreq, ipa_s2n_get_fqlist_next, req);
1000
1001 return EOK0;
1002}
1003
1004static void ipa_s2n_get_fqlist_next(struct tevent_req *subreq)
1005{
1006 int ret;
1007 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_s2n_exop.c"
":" "1008")
1008 struct tevent_req)(struct tevent_req *)_talloc_get_type_abort(_tevent_req_callback_data
(subreq), "struct tevent_req", "../sssd/src/providers/ipa/ipa_s2n_exop.c"
":" "1008")
;
1009 struct ipa_s2n_get_fqlist_state *state = tevent_req_data(req,(struct ipa_s2n_get_fqlist_state *)_talloc_get_type_abort(_tevent_req_data
(req), "struct ipa_s2n_get_fqlist_state", "../sssd/src/providers/ipa/ipa_s2n_exop.c"
":" "1010")
1010 struct ipa_s2n_get_fqlist_state)(struct ipa_s2n_get_fqlist_state *)_talloc_get_type_abort(_tevent_req_data
(req), "struct ipa_s2n_get_fqlist_state", "../sssd/src/providers/ipa/ipa_s2n_exop.c"
":" "1010")
;
1011 char *retoid = NULL((void*)0);
1012 struct berval *retdata = NULL((void*)0);
1013 const char *sid_str;
1014 struct be_acct_req *ar;
1015
1016 ret = ipa_s2n_exop_recv(subreq, state, &retoid, &retdata);
1017 talloc_zfree(subreq)do { _talloc_free(((void *)((uintptr_t)(subreq))), "../sssd/src/providers/ipa/ipa_s2n_exop.c"
":" "1017"); subreq = ((void*)0); } while(0)
;
1018 if (ret != EOK0) {
1019 DEBUG(SSSDBG_OP_FAILURE, "s2n exop 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_s2n_exop.c"
, 1019, __FUNCTION__, __debug_macro_level, "s2n exop request failed.\n"
); } } while (0)
;
1020 goto fail;
1021 }
1022
1023 talloc_zfree(state->attrs)do { _talloc_free(((void *)((uintptr_t)(state->attrs))), "../sssd/src/providers/ipa/ipa_s2n_exop.c"
":" "1023"); state->attrs = ((void*)0); } while(0)
;
1024 ret = s2n_response_to_attrs(state, retoid, retdata, &state->attrs);
1025 if (ret != EOK0) {
1026 DEBUG(SSSDBG_OP_FAILURE, "s2n_response_to_attrs 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_s2n_exop.c"
, 1026, __FUNCTION__, __debug_macro_level, "s2n_response_to_attrs failed.\n"
); } } while (0)
;
1027 goto fail;
1028 }
1029
1030 if (strcmp(state->ipa_ctx->view_name, 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) {
1031 ret = ipa_s2n_get_fqlist_save_step(req);
1032 if (ret == EOK0) {
1033 tevent_req_done(req)_tevent_req_done(req, "../sssd/src/providers/ipa/ipa_s2n_exop.c"
":" "1033")
;
1034 } else if (ret != EAGAIN11) {
1035 DEBUG(SSSDBG_OP_FAILURE, "ipa_s2n_get_fqlist_save_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_s2n_exop.c"
, 1035, __FUNCTION__, __debug_macro_level, "ipa_s2n_get_fqlist_save_step failed.\n"
); } } while (0)
;
1036 goto fail;
1037 }
1038
1039 return;
1040 }
1041
1042 ret = sysdb_attrs_get_string(state->attrs->sysdb_attrs, SYSDB_SID_STR"objectSIDString",
1043 &sid_str);
1044 if (ret != EOK0) {
1045 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_s2n_exop.c"
, 1045, __FUNCTION__, __debug_macro_level, "sysdb_attrs_get_string failed.\n"
); } } while (0)
;
1046 goto fail;
1047 }
1048
1049 ret = get_be_acct_req_for_sid(state, sid_str, state->obj_domain->name, &ar);
1050 if (ret != EOK0) {
1051 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_s2n_exop.c"
, 1051, __FUNCTION__, __debug_macro_level, "get_be_acct_req_for_sid failed.\n"
); } } while (0)
;
1052 goto fail;
1053 }
1054
1055 subreq = ipa_get_ad_override_send(state, state->ev,
1056 state->ipa_ctx->sdap_id_ctx,
1057 state->ipa_ctx->ipa_options,
1058 dp_opt_get_string(state->ipa_ctx->ipa_options->basic,_dp_opt_get_string(state->ipa_ctx->ipa_options->basic
, IPA_KRB5_REALM, __FUNCTION__)
1059 IPA_KRB5_REALM)_dp_opt_get_string(state->ipa_ctx->ipa_options->basic
, IPA_KRB5_REALM, __FUNCTION__)
,
1060 state->ipa_ctx->view_name,
1061 ar);
1062 if (subreq == NULL((void*)0)) {
1063 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_s2n_exop.c"
, 1063, __FUNCTION__, __debug_macro_level, "ipa_get_ad_override_send failed.\n"
); } } while (0)
;
1064 ret = ENOMEM12;
1065 goto fail;
1066 }
1067 tevent_req_set_callback(subreq, ipa_s2n_get_fqlist_get_override_done, req);
1068
1069 return;
1070
1071fail:
1072 tevent_req_error(req,ret)_tevent_req_error(req, ret, "../sssd/src/providers/ipa/ipa_s2n_exop.c"
":" "1072")
;
1073 return;
1074}
1075
1076static void ipa_s2n_get_fqlist_get_override_done(struct tevent_req *subreq)
1077{
1078 int ret;
1079 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_s2n_exop.c"
":" "1080")
1080 struct tevent_req)(struct tevent_req *)_talloc_get_type_abort(_tevent_req_callback_data
(subreq), "struct tevent_req", "../sssd/src/providers/ipa/ipa_s2n_exop.c"
":" "1080")
;
1081 struct ipa_s2n_get_fqlist_state *state = tevent_req_data(req,(struct ipa_s2n_get_fqlist_state *)_talloc_get_type_abort(_tevent_req_data
(req), "struct ipa_s2n_get_fqlist_state", "../sssd/src/providers/ipa/ipa_s2n_exop.c"
":" "1082")
1082 struct ipa_s2n_get_fqlist_state)(struct ipa_s2n_get_fqlist_state *)_talloc_get_type_abort(_tevent_req_data
(req), "struct ipa_s2n_get_fqlist_state", "../sssd/src/providers/ipa/ipa_s2n_exop.c"
":" "1082")
;
1083
1084 ret = ipa_get_ad_override_recv(subreq, NULL((void*)0), state, &state->override_attrs);
1085 talloc_zfree(subreq)do { _talloc_free(((void *)((uintptr_t)(subreq))), "../sssd/src/providers/ipa/ipa_s2n_exop.c"
":" "1085"); subreq = ((void*)0); } while(0)
;
1086 if (ret != EOK0) {
1087 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_s2n_exop.c"
, 1087, __FUNCTION__, __debug_macro_level, "IPA override lookup failed: %d\n"
, ret); } } while (0)
;
1088 goto fail;
1089 }
1090
1091 ret = ipa_s2n_get_fqlist_save_step(req);
1092 if (ret == EOK0) {
1093 tevent_req_done(req)_tevent_req_done(req, "../sssd/src/providers/ipa/ipa_s2n_exop.c"
":" "1093")
;
1094 } else if (ret != EAGAIN11) {
1095 DEBUG(SSSDBG_OP_FAILURE, "ipa_s2n_get_fqlist_save_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_s2n_exop.c"
, 1095, __FUNCTION__, __debug_macro_level, "ipa_s2n_get_fqlist_save_step failed.\n"
); } } while (0)
;
1096 goto fail;
1097 }
1098
1099 return;
1100
1101fail:
1102 tevent_req_error(req,ret)_tevent_req_error(req, ret, "../sssd/src/providers/ipa/ipa_s2n_exop.c"
":" "1102")
;
1103 return;
1104}
1105
1106static errno_t ipa_s2n_get_fqlist_save_step(struct tevent_req *req)
1107{
1108 int ret;
1109 struct ipa_s2n_get_fqlist_state *state = tevent_req_data(req,(struct ipa_s2n_get_fqlist_state *)_talloc_get_type_abort(_tevent_req_data
(req), "struct ipa_s2n_get_fqlist_state", "../sssd/src/providers/ipa/ipa_s2n_exop.c"
":" "1110")
1110 struct ipa_s2n_get_fqlist_state)(struct ipa_s2n_get_fqlist_state *)_talloc_get_type_abort(_tevent_req_data
(req), "struct ipa_s2n_get_fqlist_state", "../sssd/src/providers/ipa/ipa_s2n_exop.c"
":" "1110")
;
1111
1112 ret = ipa_s2n_save_objects(state->dom, &state->req_input, state->attrs,
1113 NULL((void*)0), state->ipa_ctx->view_name,
1114 state->override_attrs);
1115 if (ret != EOK0) {
1116 DEBUG(SSSDBG_OP_FAILURE, "ipa_s2n_save_objects 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_s2n_exop.c"
, 1116, __FUNCTION__, __debug_macro_level, "ipa_s2n_save_objects failed.\n"
); } } while (0)
;
1117 return ret;
1118 }
1119
1120 state->fqname_idx++;
1121 if (state->fqname_list[state->fqname_idx] == NULL((void*)0)) {
1122 return EOK0;
1123 }
1124
1125 ret = ipa_s2n_get_fqlist_step(req);
1126 if (ret != EOK0) {
1127 DEBUG(SSSDBG_OP_FAILURE, "ipa_s2n_get_fqlist_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_s2n_exop.c"
, 1127, __FUNCTION__, __debug_macro_level, "ipa_s2n_get_fqlist_step failed.\n"
); } } while (0)
;
1128 return ret;
1129 }
1130
1131 return EAGAIN11;
1132}
1133
1134static int ipa_s2n_get_fqlist_recv(struct tevent_req *req)
1135{
1136 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)
;
1137
1138 return EOK0;
1139}
1140
1141struct ipa_s2n_get_user_state {
1142 struct tevent_context *ev;
1143 struct ipa_id_ctx *ipa_ctx;
1144 struct sdap_options *opts;
1145 struct sss_domain_info *dom;
1146 struct sdap_handle *sh;
1147 struct req_input *req_input;
1148 int entry_type;
1149 enum request_types request_type;
1150 struct resp_attrs *attrs;
1151 struct resp_attrs *simple_attrs;
1152 struct sysdb_attrs *override_attrs;
1153 int exop_timeout;
1154};
1155
1156static void ipa_s2n_get_user_done(struct tevent_req *subreq);
1157
1158struct tevent_req *ipa_s2n_get_acct_info_send(TALLOC_CTX *mem_ctx,
1159 struct tevent_context *ev,
1160 struct ipa_id_ctx *ipa_ctx,
1161 struct sdap_options *opts,
1162 struct sss_domain_info *dom,
1163 struct sysdb_attrs *override_attrs,
1164 struct sdap_handle *sh,
1165 int entry_type,
1166 struct req_input *req_input)
1167{
1168 struct ipa_s2n_get_user_state *state;
1169 struct tevent_req *req;
1170 struct tevent_req *subreq;
1171 struct berval *bv_req = NULL((void*)0);
1172 int ret = EFAULT14;
1173 bool_Bool is_v1 = false0;
1174
1175 req = tevent_req_create(mem_ctx, &state, struct ipa_s2n_get_user_state)_tevent_req_create((mem_ctx), (&state), sizeof(struct ipa_s2n_get_user_state
), "struct ipa_s2n_get_user_state", "../sssd/src/providers/ipa/ipa_s2n_exop.c"
":" "1175")
;
1176 if (req == NULL((void*)0)) {
1177 return NULL((void*)0);
1178 }
1179
1180 state->ev = ev;
1181 state->ipa_ctx = ipa_ctx;
1182 state->opts = opts;
1183 state->dom = dom;
1184 state->sh = sh;
1185 state->req_input = req_input;
1186 state->entry_type = entry_type;
1187 state->attrs = NULL((void*)0);
1188 state->simple_attrs = NULL((void*)0);
1189 state->exop_timeout = dp_opt_get_int(opts->basic, SDAP_SEARCH_TIMEOUT)_dp_opt_get_int(opts->basic, SDAP_SEARCH_TIMEOUT, __FUNCTION__
)
;
1190 state->override_attrs = override_attrs;
1191
1192 if (sdap_is_extension_supported(sh, EXOP_SID2NAME_V1_OID)sdap_check_sup_list(&((sh)->supported_extensions), "2.16.840.1.113730.3.8.10.4.1"
)
) {
1193 state->request_type = REQ_FULL_WITH_MEMBERS;
1194 is_v1 = true1;
1195 } else if (sdap_is_extension_supported(sh, EXOP_SID2NAME_OID)sdap_check_sup_list(&((sh)->supported_extensions), "2.16.840.1.113730.3.8.10.4"
)
) {
1196 state->request_type = REQ_FULL;
1197 is_v1 = false0;
1198 } else {
1199 DEBUG(SSSDBG_CRIT_FAILURE, "Extdom not supported on the server, "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_s2n_exop.c"
, 1200, __FUNCTION__, __debug_macro_level, "Extdom not supported on the server, "
"cannot resolve objects from trusted domains.\n"); } } while
(0)
1200 "cannot resolve objects from trusted domains.\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_s2n_exop.c"
, 1200, __FUNCTION__, __debug_macro_level, "Extdom not supported on the server, "
"cannot resolve objects from trusted domains.\n"); } } while
(0)
;
1201 ret = EIO5;
1202 goto fail;
1203 }
1204
1205 ret = s2n_encode_request(state, dom->name, entry_type, state->request_type,
1206 req_input, &bv_req);
1207 if (ret != EOK0) {
1208 goto fail;
1209 }
1210
1211 subreq = ipa_s2n_exop_send(state, state->ev, state->sh, is_v1,
1212 state->exop_timeout, bv_req);
1213 if (subreq == NULL((void*)0)) {
1214 DEBUG(SSSDBG_OP_FAILURE, "ipa_s2n_exop_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_s2n_exop.c"
, 1214, __FUNCTION__, __debug_macro_level, "ipa_s2n_exop_send failed.\n"
); } } while (0)
;
1215 ret = ENOMEM12;
1216 goto fail;
1217 }
1218 tevent_req_set_callback(subreq, ipa_s2n_get_user_done, req);
1219
1220 return req;
1221
1222fail:
1223 tevent_req_error(req, ret)_tevent_req_error(req, ret, "../sssd/src/providers/ipa/ipa_s2n_exop.c"
":" "1223")
;
1224 tevent_req_post(req, ev);
1225
1226 return req;
1227}
1228
1229static errno_t process_members(struct sss_domain_info *domain,
1230 struct sysdb_attrs *group_attrs,
1231 char **members,
1232 TALLOC_CTX *mem_ctx, char ***_missing_members)
1233{
1234 int ret;
1235 size_t c;
1236 TALLOC_CTX *tmp_ctx;
1237 struct ldb_message *msg;
1238 const char *dn_str;
1239 struct sss_domain_info *obj_domain;
1240 struct sss_domain_info *parent_domain;
1241 char **missing_members = NULL((void*)0);
1242 size_t miss_count;
1
'miss_count' declared without an initial value
1243
1244 if (members == NULL((void*)0)) {
2
Assuming 'members' is not equal to null
3
Taking false branch
1245 DEBUG(SSSDBG_TRACE_INTERNAL, "No members\n")do { int __debug_macro_level = 0x2000; if ((debug_level &
(__debug_macro_level) || (debug_level == 0 && (__debug_macro_level
& (0x0010 | 0x0020))))) { debug_fn("../sssd/src/providers/ipa/ipa_s2n_exop.c"
, 1245, __FUNCTION__, __debug_macro_level, "No members\n"); }
} while (0)
;
1246 return EOK0;
1247 }
1248
1249 tmp_ctx = talloc_new(NULL)talloc_named_const(((void*)0), 0, "talloc_new: " "../sssd/src/providers/ipa/ipa_s2n_exop.c"
":" "1249")
;
1250 if (tmp_ctx == NULL((void*)0)) {
4
Assuming 'tmp_ctx' is not equal to null
5
Taking false branch
1251 DEBUG(SSSDBG_OP_FAILURE, "talloc_new 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_s2n_exop.c"
, 1251, __FUNCTION__, __debug_macro_level, "talloc_new failed.\n"
); } } while (0)
;
1252 return ENOMEM12;
1253 }
1254
1255 if (_missing_members != NULL((void*)0) && mem_ctx != NULL((void*)0)) {
6
Assuming '_missing_members' is not equal to null
7
Assuming 'mem_ctx' is equal to null
8
Taking false branch
1256 /* count members */
1257 for (c = 0; members[c] != NULL((void*)0); c++);
1258 missing_members = talloc_zero_array(tmp_ctx, char *, c + 1)(char * *)_talloc_zero_array(tmp_ctx, sizeof(char *), c + 1, "char *"
)
;
1259 if (missing_members == NULL((void*)0)) {
1260 DEBUG(SSSDBG_OP_FAILURE, "talloc_array_zero 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_s2n_exop.c"
, 1260, __FUNCTION__, __debug_macro_level, "talloc_array_zero failed.\n"
); } } while (0)
;
1261 ret = ENOMEM12;
1262 goto done;
1263 }
1264 miss_count = 0;
1265 }
1266
1267 parent_domain = get_domains_head(domain);
1268
1269 for (c = 0; members[c] != NULL((void*)0); c++) {
9
Loop condition is false. Execution continues on line 1327
1270 obj_domain = find_domain_by_object_name(parent_domain, members[c]);
1271 if (obj_domain == NULL((void*)0)) {
1272 DEBUG(SSSDBG_OP_FAILURE, "find_domain_by_object_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_s2n_exop.c"
, 1272, __FUNCTION__, __debug_macro_level, "find_domain_by_object_name failed.\n"
); } } while (0)
;
1273 ret = ENOMEM12;
1274 goto done;
1275 }
1276
1277 ret = sysdb_search_user_by_name(tmp_ctx, obj_domain, members[c], NULL((void*)0),
1278 &msg);
1279 if (ret == EOK0) {
1280 if (group_attrs != NULL((void*)0)) {
1281 dn_str = ldb_dn_get_linearized(msg->dn);
1282 if (dn_str == NULL((void*)0)) {
1283 DEBUG(SSSDBG_OP_FAILURE, "ldb_dn_get_linearized 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_s2n_exop.c"
, 1283, __FUNCTION__, __debug_macro_level, "ldb_dn_get_linearized failed.\n"
); } } while (0)
;
1284 goto done;
1285 }
1286
1287 DEBUG(SSSDBG_TRACE_ALL, "Adding member [%s][%s]\n",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_s2n_exop.c"
, 1288, __FUNCTION__, __debug_macro_level, "Adding member [%s][%s]\n"
, members[c], dn_str); } } while (0)
1288 members[c], dn_str)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_s2n_exop.c"
, 1288, __FUNCTION__, __debug_macro_level, "Adding member [%s][%s]\n"
, members[c], dn_str); } } while (0)
;
1289
1290 ret = sysdb_attrs_add_string(group_attrs, SYSDB_MEMBER"member", dn_str);
1291 if (ret != EOK0) {
1292 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_s2n_exop.c"
, 1293, __FUNCTION__, __debug_macro_level, "sysdb_attrs_add_string failed.\n"
); } } while (0)
1293 "sysdb_attrs_add_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_s2n_exop.c"
, 1293, __FUNCTION__, __debug_macro_level, "sysdb_attrs_add_string failed.\n"
); } } while (0)
;
1294 goto done;
1295 }
1296 }
1297 } else if (ret == ENOENT2) {
1298 if (group_attrs != NULL((void*)0)) {
1299 DEBUG(SSSDBG_TRACE_ALL, "Adding ghost member [%s]\n",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_s2n_exop.c"
, 1300, __FUNCTION__, __debug_macro_level, "Adding ghost member [%s]\n"
, members[c]); } } while (0)
1300 members[c])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_s2n_exop.c"
, 1300, __FUNCTION__, __debug_macro_level, "Adding ghost member [%s]\n"
, members[c]); } } while (0)
;
1301
1302 ret = sysdb_attrs_add_string(group_attrs, SYSDB_GHOST"ghost",
1303 members[c]);
1304 if (ret != EOK0) {
1305 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_s2n_exop.c"
, 1306, __FUNCTION__, __debug_macro_level, "sysdb_attrs_add_string failed.\n"
); } } while (0)
1306 "sysdb_attrs_add_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_s2n_exop.c"
, 1306, __FUNCTION__, __debug_macro_level, "sysdb_attrs_add_string failed.\n"
); } } while (0)
;
1307 goto done;
1308 }
1309 }
1310
1311 if (missing_members != NULL((void*)0)) {
1312 missing_members[miss_count] = talloc_strdup(missing_members,
1313 members[c]);
1314 if (missing_members[miss_count] == NULL((void*)0)) {
1315 DEBUG(SSSDBG_OP_FAILURE, "talloc_strdup 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_s2n_exop.c"
, 1315, __FUNCTION__, __debug_macro_level, "talloc_strdup failed.\n"
); } } while (0)
;
1316 ret = ENOMEM12;
1317 goto done;
1318 }
1319 miss_count++;
1320 }
1321 } else {
1322 DEBUG(SSSDBG_OP_FAILURE, "sysdb_search_user_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_s2n_exop.c"
, 1322, __FUNCTION__, __debug_macro_level, "sysdb_search_user_by_name failed.\n"
); } } while (0)
;
1323 goto done;
1324 }
1325 }
1326
1327 if (_missing_members != NULL((void*)0)) {
10
Taking true branch
1328 if (miss_count == 0) {
11
The left operand of '==' is a garbage value
1329 *_missing_members = NULL((void*)0);
1330 } else {
1331 if (mem_ctx != NULL((void*)0)) {
1332 *_missing_members = talloc_steal(mem_ctx, missing_members)({ __typeof__(missing_members) __talloc_steal_ret = (__typeof__
(missing_members))_talloc_steal_loc((mem_ctx),(missing_members
), "../sssd/src/providers/ipa/ipa_s2n_exop.c" ":" "1332"); __talloc_steal_ret
; })
;
1333 } else {
1334 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_s2n_exop.c"
, 1335, __FUNCTION__, __debug_macro_level, "Missing memory context for missing members list.\n"
); } } while (0)
1335 "Missing memory context for missing members list.\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_s2n_exop.c"
, 1335, __FUNCTION__, __debug_macro_level, "Missing memory context for missing members list.\n"
); } } while (0)
;
1336 ret = EINVAL22;
1337 goto done;
1338 }
1339 }
1340 }
1341
1342 ret = EOK0;
1343done:
1344 talloc_free(tmp_ctx)_talloc_free(tmp_ctx, "../sssd/src/providers/ipa/ipa_s2n_exop.c"
":" "1344")
;
1345
1346 return ret;
1347}
1348
1349static errno_t get_group_dn_list(TALLOC_CTX *mem_ctx,
1350 struct sss_domain_info *dom,
1351 size_t ngroups, char **groups,
1352 struct ldb_dn ***_dn_list,
1353 char ***_missing_groups)
1354{
1355 int ret;
1356 size_t c;
1357 TALLOC_CTX *tmp_ctx;
1358 struct ldb_dn **dn_list = NULL((void*)0);
1359 char **missing_groups = NULL((void*)0);
1360 struct ldb_message *msg = NULL((void*)0);
1361 size_t n_dns = 0;
1362 size_t n_missing = 0;
1363 struct sss_domain_info *obj_domain;
1364 struct sss_domain_info *parent_domain;
1365
1366 tmp_ctx = talloc_new(NULL)talloc_named_const(((void*)0), 0, "talloc_new: " "../sssd/src/providers/ipa/ipa_s2n_exop.c"
":" "1366")
;
1367 if (tmp_ctx == NULL((void*)0)) {
1368 DEBUG(SSSDBG_OP_FAILURE, "talloc_new 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_s2n_exop.c"
, 1368, __FUNCTION__, __debug_macro_level, "talloc_new failed.\n"
); } } while (0)
;
1369 return ENOMEM12;
1370 }
1371
1372 dn_list = talloc_zero_array(tmp_ctx, struct ldb_dn *, ngroups + 1)(struct ldb_dn * *)_talloc_zero_array(tmp_ctx, sizeof(struct ldb_dn
*), ngroups + 1, "struct ldb_dn *")
;
1373 missing_groups = talloc_zero_array(tmp_ctx, char *, ngroups + 1)(char * *)_talloc_zero_array(tmp_ctx, sizeof(char *), ngroups
+ 1, "char *")
;
1374 if (dn_list == NULL((void*)0) || missing_groups == NULL((void*)0)) {
1375 DEBUG(SSSDBG_OP_FAILURE, "talloc_array_zero 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_s2n_exop.c"
, 1375, __FUNCTION__, __debug_macro_level, "talloc_array_zero failed.\n"
); } } while (0)
;
1376 ret = ENOMEM12;
1377 goto done;
1378 }
1379
1380 parent_domain = (dom->parent == NULL((void*)0)) ? dom : dom->parent;
1381
1382 for (c = 0; c < ngroups; c++) {
1383 obj_domain = find_domain_by_object_name(parent_domain, groups[c]);
1384 if (obj_domain == NULL((void*)0)) {
1385 DEBUG(SSSDBG_OP_FAILURE, "find_domain_by_object_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_s2n_exop.c"
, 1385, __FUNCTION__, __debug_macro_level, "find_domain_by_object_name failed.\n"
); } } while (0)
;
1386 ret = ENOMEM12;
1387 goto done;
1388 }
1389
1390 ret = sysdb_search_group_by_name(tmp_ctx, obj_domain, groups[c], NULL((void*)0),
1391 &msg);
1392 if (ret == EOK0) {
1393 dn_list[n_dns] = ldb_dn_copy(dn_list, msg->dn);
1394 if (dn_list[n_dns] == NULL((void*)0)) {
1395 DEBUG(SSSDBG_OP_FAILURE, "ldb_dn_copy 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_s2n_exop.c"
, 1395, __FUNCTION__, __debug_macro_level, "ldb_dn_copy failed.\n"
); } } while (0)
;
1396 ret = ENOMEM12;
1397 goto done;
1398 }
1399 n_dns++;
1400 } else if (ret == ENOENT2) {
1401 missing_groups[n_missing] = talloc_strdup(missing_groups,
1402 groups[c]);
1403 if (missing_groups[n_missing] == NULL((void*)0)) {
1404 DEBUG(SSSDBG_OP_FAILURE, "talloc_strdup 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_s2n_exop.c"
, 1404, __FUNCTION__, __debug_macro_level, "talloc_strdup failed.\n"
); } } while (0)
;
1405 ret = ENOMEM12;
1406 goto done;
1407 }
1408 n_missing++;
1409 } else {
1410 DEBUG(SSSDBG_OP_FAILURE, "sysdb_search_group_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_s2n_exop.c"
, 1410, __FUNCTION__, __debug_macro_level, "sysdb_search_group_by_name failed.\n"
); } } while (0)
;
1411 goto done;
1412 }
1413 }
1414
1415 if (n_missing != 0) {
1416 *_missing_groups = talloc_steal(mem_ctx, missing_groups)({ __typeof__(missing_groups) __talloc_steal_ret = (__typeof__
(missing_groups))_talloc_steal_loc((mem_ctx),(missing_groups)
, "../sssd/src/providers/ipa/ipa_s2n_exop.c" ":" "1416"); __talloc_steal_ret
; })
;
1417 } else {
1418 *_missing_groups = NULL((void*)0);
1419 }
1420
1421 if (n_dns != 0) {
1422 *_dn_list = talloc_steal(mem_ctx, dn_list)({ __typeof__(dn_list) __talloc_steal_ret = (__typeof__(dn_list
))_talloc_steal_loc((mem_ctx),(dn_list), "../sssd/src/providers/ipa/ipa_s2n_exop.c"
":" "1422"); __talloc_steal_ret; })
;
1423 } else {
1424 *dn_list = NULL((void*)0);
1425 }
1426
1427 ret = EOK0;
1428
1429done:
1430 talloc_free(tmp_ctx)_talloc_free(tmp_ctx, "../sssd/src/providers/ipa/ipa_s2n_exop.c"
":" "1430")
;
1431
1432 return ret;
1433}
1434
1435static void ipa_s2n_get_fqlist_done(struct tevent_req *subreq);
1436static void ipa_s2n_get_user_get_override_done(struct tevent_req *subreq);
1437static void ipa_s2n_get_user_done(struct tevent_req *subreq)
1438{
1439 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_s2n_exop.c"
":" "1440")
1440 struct tevent_req)(struct tevent_req *)_talloc_get_type_abort(_tevent_req_callback_data
(subreq), "struct tevent_req", "../sssd/src/providers/ipa/ipa_s2n_exop.c"
":" "1440")
;
1441 struct ipa_s2n_get_user_state *state = tevent_req_data(req,(struct ipa_s2n_get_user_state *)_talloc_get_type_abort(_tevent_req_data
(req), "struct ipa_s2n_get_user_state", "../sssd/src/providers/ipa/ipa_s2n_exop.c"
":" "1442")
1442 struct ipa_s2n_get_user_state)(struct ipa_s2n_get_user_state *)_talloc_get_type_abort(_tevent_req_data
(req), "struct ipa_s2n_get_user_state", "../sssd/src/providers/ipa/ipa_s2n_exop.c"
":" "1442")
;
1443 int ret;
1444 char *retoid = NULL((void*)0);
1445 struct berval *retdata = NULL((void*)0);
1446 struct resp_attrs *attrs = NULL((void*)0);
1447 struct berval *bv_req = NULL((void*)0);
1448 char **missing_list = NULL((void*)0);
1449 struct ldb_dn **group_dn_list = NULL((void*)0);
1450 const char *sid_str;
1451 struct be_acct_req *ar;
1452
1453 ret = ipa_s2n_exop_recv(subreq, state, &retoid, &retdata);
1454 talloc_zfree(subreq)do { _talloc_free(((void *)((uintptr_t)(subreq))), "../sssd/src/providers/ipa/ipa_s2n_exop.c"
":" "1454"); subreq = ((void*)0); } while(0)
;
1455 if (ret != EOK0) {
1456 DEBUG(SSSDBG_OP_FAILURE, "s2n exop 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_s2n_exop.c"
, 1456, __FUNCTION__, __debug_macro_level, "s2n exop request failed.\n"
); } } while (0)
;
1457 goto done;
1458 }
1459
1460 switch (state->request_type) {
1461 case REQ_FULL_WITH_MEMBERS:
1462 case REQ_FULL:
1463 ret = s2n_response_to_attrs(state, retoid, retdata, &attrs);
1464 if (ret != EOK0) {
1465 DEBUG(SSSDBG_OP_FAILURE, "s2n_response_to_attrs 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_s2n_exop.c"
, 1465, __FUNCTION__, __debug_macro_level, "s2n_response_to_attrs failed.\n"
); } } while (0)
;
1466 goto done;
1467 }
1468
1469 if (!(strcasecmp(state->dom->name, attrs->domain_name) == 0 ||
1470 (state->dom->flat_name != NULL((void*)0) &&
1471 strcasecmp(state->dom->flat_name, attrs->domain_name) == 0))) {
1472 DEBUG(SSSDBG_OP_FAILURE, "Unexpected domain name returned, "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_s2n_exop.c"
, 1477, __FUNCTION__, __debug_macro_level, "Unexpected domain name returned, "
"expected [%s] or [%s], got [%s].\n", state->dom->name
, state->dom->flat_name == ((void*)0) ? "" : state->
dom->flat_name, attrs->domain_name); } } while (0)
1473 "expected [%s] or [%s], got [%s].\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_s2n_exop.c"
, 1477, __FUNCTION__, __debug_macro_level, "Unexpected domain name returned, "
"expected [%s] or [%s], got [%s].\n", state->dom->name
, state->dom->flat_name == ((void*)0) ? "" : state->
dom->flat_name, attrs->domain_name); } } while (0)
1474 state->dom->name,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_s2n_exop.c"
, 1477, __FUNCTION__, __debug_macro_level, "Unexpected domain name returned, "
"expected [%s] or [%s], got [%s].\n", state->dom->name
, state->dom->flat_name == ((void*)0) ? "" : state->
dom->flat_name, attrs->domain_name); } } while (0)
1475 state->dom->flat_name == NULL ? "" :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_s2n_exop.c"
, 1477, __FUNCTION__, __debug_macro_level, "Unexpected domain name returned, "
"expected [%s] or [%s], got [%s].\n", state->dom->name
, state->dom->flat_name == ((void*)0) ? "" : state->
dom->flat_name, attrs->domain_name); } } while (0)
1476 state->dom->flat_name,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_s2n_exop.c"
, 1477, __FUNCTION__, __debug_macro_level, "Unexpected domain name returned, "
"expected [%s] or [%s], got [%s].\n", state->dom->name
, state->dom->flat_name == ((void*)0) ? "" : state->
dom->flat_name, attrs->domain_name); } } while (0)
1477 attrs->domain_name)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_s2n_exop.c"
, 1477, __FUNCTION__, __debug_macro_level, "Unexpected domain name returned, "
"expected [%s] or [%s], got [%s].\n", state->dom->name
, state->dom->flat_name == ((void*)0) ? "" : state->
dom->flat_name, attrs->domain_name); } } while (0)
;
1478 ret = EINVAL22;
1479 goto done;
1480 }
1481
1482 state->attrs = attrs;
1483
1484 if (attrs->response_type == RESP_USER_GROUPLIST) {
1485 ret = get_group_dn_list(state, state->dom,
1486 attrs->ngroups, attrs->groups,
1487 &group_dn_list, &missing_list);
1488 if (ret != EOK0) {
1489 DEBUG(SSSDBG_OP_FAILURE, "get_group_dn_list 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_s2n_exop.c"
, 1489, __FUNCTION__, __debug_macro_level, "get_group_dn_list failed.\n"
); } } while (0)
;
1490 goto done;
1491 }
1492
1493 if (missing_list != NULL((void*)0)) {
1494 subreq = ipa_s2n_get_fqlist_send(state, state->ev,
1495 state->ipa_ctx, state->dom,
1496 state->sh, state->exop_timeout,
1497 BE_REQ_GROUP0x0002,
1498 REQ_FULL_WITH_MEMBERS,
1499 missing_list);
1500 if (subreq == NULL((void*)0)) {
1501 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_s2n_exop.c"
, 1502, __FUNCTION__, __debug_macro_level, "ipa_s2n_get_fqlist_send failed.\n"
); } } while (0)
1502 "ipa_s2n_get_fqlist_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_s2n_exop.c"
, 1502, __FUNCTION__, __debug_macro_level, "ipa_s2n_get_fqlist_send failed.\n"
); } } while (0)
;
1503 ret = ENOMEM12;
1504 goto done;
1505 }
1506 tevent_req_set_callback(subreq, ipa_s2n_get_fqlist_done,
1507 req);
1508
1509 return;
1510 }
1511 break;
1512 } else if (attrs->response_type == RESP_GROUP_MEMBERS) {
1513 ret = process_members(state->dom, NULL((void*)0), attrs->a.group.gr_mem,
1514 state, &missing_list);
1515 if (ret != EOK0) {
1516 DEBUG(SSSDBG_OP_FAILURE, "process_members 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_s2n_exop.c"
, 1516, __FUNCTION__, __debug_macro_level, "process_members failed.\n"
); } } while (0)
;
1517 goto done;
1518 }
1519
1520 if (missing_list != NULL((void*)0)) {
1521 subreq = ipa_s2n_get_fqlist_send(state, state->ev,
1522 state->ipa_ctx, state->dom,
1523 state->sh, state->exop_timeout,
1524 BE_REQ_USER0x0001,
1525 REQ_FULL_WITH_MEMBERS,
1526 missing_list);
1527 if (subreq == NULL((void*)0)) {
1528 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_s2n_exop.c"
, 1529, __FUNCTION__, __debug_macro_level, "ipa_s2n_get_fqlist_send failed.\n"
); } } while (0)
1529 "ipa_s2n_get_fqlist_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_s2n_exop.c"
, 1529, __FUNCTION__, __debug_macro_level, "ipa_s2n_get_fqlist_send failed.\n"
); } } while (0)
;
1530 ret = ENOMEM12;
1531 goto done;
1532 }
1533 tevent_req_set_callback(subreq, ipa_s2n_get_fqlist_done,
1534 req);
1535
1536 return;
1537 }
1538 break;
1539 }
1540
1541 if (state->req_input->type == REQ_INP_SECID) {
1542 /* We already know the SID, we do not have to read it. */
1543 break;
1544 }
1545
1546 state->request_type = REQ_SIMPLE;
1547
1548 ret = s2n_encode_request(state, state->dom->name, state->entry_type,
1549 state->request_type, state->req_input,
1550 &bv_req);
1551 if (ret != EOK0) {
1552 goto done;
1553 }
1554
1555 subreq = ipa_s2n_exop_send(state, state->ev, state->sh, false0,
1556 state->exop_timeout, bv_req);
1557 if (subreq == NULL((void*)0)) {
1558 DEBUG(SSSDBG_OP_FAILURE, "ipa_s2n_exop_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_s2n_exop.c"
, 1558, __FUNCTION__, __debug_macro_level, "ipa_s2n_exop_send failed.\n"
); } } while (0)
;
1559 ret = ENOMEM12;
1560 goto done;
1561 }
1562 tevent_req_set_callback(subreq, ipa_s2n_get_user_done, req);
1563
1564 return;
1565
1566 case REQ_SIMPLE:
1567 ret = s2n_response_to_attrs(state, retoid, retdata,
1568 &state->simple_attrs);
1569 if (ret != EOK0) {
1570 DEBUG(SSSDBG_OP_FAILURE, "s2n_response_to_attrs 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_s2n_exop.c"
, 1570, __FUNCTION__, __debug_macro_level, "s2n_response_to_attrs failed.\n"
); } } while (0)
;
1571 goto done;
1572 }
1573
1574 break;
1575 default:
1576 DEBUG(SSSDBG_CRIT_FAILURE, "Unexpected request type.\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_s2n_exop.c"
, 1576, __FUNCTION__, __debug_macro_level, "Unexpected request type.\n"
); } } while (0)
;
1577 ret = EINVAL22;
1578 goto done;
1579 }
1580
1581 if (state->attrs == NULL((void*)0)) {
1582 DEBUG(SSSDBG_CRIT_FAILURE, "Missing data of full 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_s2n_exop.c"
, 1582, __FUNCTION__, __debug_macro_level, "Missing data of full request.\n"
); } } while (0)
;
1583 ret = EINVAL22;
1584 goto done;
1585 }
1586
1587 if (state->simple_attrs != NULL((void*)0)
1588 && state->simple_attrs->response_type == RESP_SID) {
1589 sid_str = state->simple_attrs->a.sid_str;
1590 ret = EOK0;
1591 } else if (state->attrs->sysdb_attrs != NULL((void*)0)) {
1592 ret = sysdb_attrs_get_string(state->attrs->sysdb_attrs, SYSDB_SID_STR"objectSIDString",
1593 &sid_str);
1594 } else if (state->req_input->type == REQ_INP_SECID) {
1595 sid_str = state->req_input->inp.secid;
1596 ret = EOK0;
1597 } else {
1598 DEBUG(SSSDBG_TRACE_FUNC, "No SID available.\n")do { int __debug_macro_level = 0x0400; if ((debug_level &
(__debug_macro_level) || (debug_level == 0 && (__debug_macro_level
& (0x0010 | 0x0020))))) { debug_fn("../sssd/src/providers/ipa/ipa_s2n_exop.c"
, 1598, __FUNCTION__, __debug_macro_level, "No SID available.\n"
); } } while (0)
;
1599 ret = ENOENT2;
1600 }
1601
1602 if (ret == ENOENT2
1603 || 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")))); })
1604 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) {
1605 ret = ipa_s2n_save_objects(state->dom, state->req_input, state->attrs,
1606 state->simple_attrs, NULL((void*)0), NULL((void*)0));
1607 if (ret != EOK0) {
1608 DEBUG(SSSDBG_OP_FAILURE, "ipa_s2n_save_objects 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_s2n_exop.c"
, 1608, __FUNCTION__, __debug_macro_level, "ipa_s2n_save_objects failed.\n"
); } } while (0)
;
1609 goto done;
1610 }
1611 } else if (ret == EOK0) {
1612 ret = get_be_acct_req_for_sid(state, sid_str, state->dom->name, &ar);
1613 if (ret != EOK0) {
1614 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_s2n_exop.c"
, 1614, __FUNCTION__, __debug_macro_level, "get_be_acct_req_for_sid failed.\n"
); } } while (0)
;
1615 goto done;
1616 }
1617
1618 subreq = ipa_get_ad_override_send(state, state->ev,
1619 state->ipa_ctx->sdap_id_ctx,
1620 state->ipa_ctx->ipa_options,
1621 dp_opt_get_string(state->ipa_ctx->ipa_options->basic,_dp_opt_get_string(state->ipa_ctx->ipa_options->basic
, IPA_KRB5_REALM, __FUNCTION__)
1622 IPA_KRB5_REALM)_dp_opt_get_string(state->ipa_ctx->ipa_options->basic
, IPA_KRB5_REALM, __FUNCTION__)
,
1623 state->ipa_ctx->view_name,
1624 ar);
1625 if (subreq == NULL((void*)0)) {
1626 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_s2n_exop.c"
, 1626, __FUNCTION__, __debug_macro_level, "ipa_get_ad_override_send failed.\n"
); } } while (0)
;
1627 ret = ENOMEM12;
1628 goto done;
1629 }
1630 tevent_req_set_callback(subreq, ipa_s2n_get_user_get_override_done,
1631 req);
1632
1633 return;
1634 } else {
1635 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_s2n_exop.c"
, 1635, __FUNCTION__, __debug_macro_level, "sysdb_attrs_get_string failed.\n"
); } } while (0)
;
1636 goto done;
1637 }
1638
1639done:
1640 if (ret == EOK0) {
1641 tevent_req_done(req)_tevent_req_done(req, "../sssd/src/providers/ipa/ipa_s2n_exop.c"
":" "1641")
;
1642 } else {
1643 tevent_req_error(req, ret)_tevent_req_error(req, ret, "../sssd/src/providers/ipa/ipa_s2n_exop.c"
":" "1643")
;
1644 }
1645 return;
1646}
1647
1648static errno_t get_groups_dns(TALLOC_CTX *mem_ctx, struct sss_domain_info *dom,
1649 char **name_list, char ***_dn_list)
1650{
1651 int ret;
1652 TALLOC_CTX *tmp_ctx;
1653 int c;
1654 struct sss_domain_info *root_domain;
1655 char **dn_list;
1656
1657 if (name_list == NULL((void*)0)) {
1658 *_dn_list = NULL((void*)0);
1659 return EOK0;
1660 }
1661
1662 /* To handle cross-domain memberships we have to check the domain for
1663 * each group the member should be added or deleted. Since sub-domains
1664 * use fully-qualified names by default any short name can only belong
1665 * to the root/head domain. find_domain_by_object_name() will return
1666 * the domain given in the first argument if the second argument is a
1667 * a short name hence we always use root_domain as first argument. */
1668 root_domain = get_domains_head(dom);
1669 if (root_domain->fqnames) {
1670 DEBUG(SSSDBG_TRACE_FUNC,do { int __debug_macro_level = 0x0400; if ((debug_level &
(__debug_macro_level) || (debug_level == 0 && (__debug_macro_level
& (0x0010 | 0x0020))))) { debug_fn("../sssd/src/providers/ipa/ipa_s2n_exop.c"
, 1673, __FUNCTION__, __debug_macro_level, "Root domain uses fully-qualified names, "
"objects might not be correctly added to groups with " "short names.\n"
); } } while (0)
1671 "Root domain uses fully-qualified names, " \do { int __debug_macro_level = 0x0400; if ((debug_level &
(__debug_macro_level) || (debug_level == 0 && (__debug_macro_level
& (0x0010 | 0x0020))))) { debug_fn("../sssd/src/providers/ipa/ipa_s2n_exop.c"
, 1673, __FUNCTION__, __debug_macro_level, "Root domain uses fully-qualified names, "
"objects might not be correctly added to groups with " "short names.\n"
); } } while (0)
1672 "objects might not be correctly added to groups with " \do { int __debug_macro_level = 0x0400; if ((debug_level &
(__debug_macro_level) || (debug_level == 0 && (__debug_macro_level
& (0x0010 | 0x0020))))) { debug_fn("../sssd/src/providers/ipa/ipa_s2n_exop.c"
, 1673, __FUNCTION__, __debug_macro_level, "Root domain uses fully-qualified names, "
"objects might not be correctly added to groups with " "short names.\n"
); } } while (0)
1673 "short names.\n")do { int __debug_macro_level = 0x0400; if ((debug_level &
(__debug_macro_level) || (debug_level == 0 && (__debug_macro_level
& (0x0010 | 0x0020))))) { debug_fn("../sssd/src/providers/ipa/ipa_s2n_exop.c"
, 1673, __FUNCTION__, __debug_macro_level, "Root domain uses fully-qualified names, "
"objects might not be correctly added to groups with " "short names.\n"
); } } while (0)
;
1674 }
1675
1676 tmp_ctx = talloc_new(NULL)talloc_named_const(((void*)0), 0, "talloc_new: " "../sssd/src/providers/ipa/ipa_s2n_exop.c"
":" "1676")
;
1677 if (tmp_ctx == NULL((void*)0)) {
1678 DEBUG(SSSDBG_OP_FAILURE, "talloc_new 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_s2n_exop.c"
, 1678, __FUNCTION__, __debug_macro_level, "talloc_new failed.\n"
); } } while (0)
;
1679 return ENOMEM12;
1680 }
1681
1682 for (c = 0; name_list[c] != NULL((void*)0); c++);
1683
1684 dn_list = talloc_zero_array(tmp_ctx, char *, c + 1)(char * *)_talloc_zero_array(tmp_ctx, sizeof(char *), c + 1, "char *"
)
;
1685 if (dn_list == NULL((void*)0)) {
1686 DEBUG(SSSDBG_OP_FAILURE, "talloc_zero_array 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_s2n_exop.c"
, 1686, __FUNCTION__, __debug_macro_level, "talloc_zero_array failed.\n"
); } } while (0)
;
1687 ret = ENOMEM12;
1688 goto done;
1689 }
1690
1691 for (c = 0; name_list[c] != NULL((void*)0); c++) {
1692 dom = find_domain_by_object_name(root_domain, name_list[c]);
1693 if (dom == NULL((void*)0)) {
1694 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_s2n_exop.c"
, 1695, __FUNCTION__, __debug_macro_level, "Cannot find domain for [%s].\n"
, name_list[c]); } } while (0)
1695 "Cannot find domain for [%s].\n", name_list[c])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_s2n_exop.c"
, 1695, __FUNCTION__, __debug_macro_level, "Cannot find domain for [%s].\n"
, name_list[c]); } } while (0)
;
1696 ret = ENOENT2;
1697 goto done;
1698 }
1699
1700 /* This might fail if some unexpected cases are used. But current
1701 * sysdb code which handles group membership constructs DNs this way
1702 * as well, IPA names are lowercased and AD names by default will be
1703 * lowercased as well. If there are really use-cases which cause an
1704 * issue here, sysdb_group_strdn() has to be replaced by a proper
1705 * search. */
1706 dn_list[c] = sysdb_group_strdn(dn_list, dom->name, name_list[c]);
1707 if (dn_list[c] == NULL((void*)0)) {
1708 DEBUG(SSSDBG_OP_FAILURE, "sysdb_group_strdn 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_s2n_exop.c"
, 1708, __FUNCTION__, __debug_macro_level, "sysdb_group_strdn failed.\n"
); } } while (0)
;
1709 ret = ENOMEM12;
1710 goto done;
1711 }
1712 }
1713
1714 *_dn_list = talloc_steal(mem_ctx, dn_list)({ __typeof__(dn_list) __talloc_steal_ret = (__typeof__(dn_list
))_talloc_steal_loc((mem_ctx),(dn_list), "../sssd/src/providers/ipa/ipa_s2n_exop.c"
":" "1714"); __talloc_steal_ret; })
;
1715 ret = EOK0;
1716
1717done:
1718 talloc_free(tmp_ctx)_talloc_free(tmp_ctx, "../sssd/src/providers/ipa/ipa_s2n_exop.c"
":" "1718")
;
1719
1720 return ret;
1721}
1722
1723static errno_t ipa_s2n_save_objects(struct sss_domain_info *dom,
1724 struct req_input *req_input,
1725 struct resp_attrs *attrs,
1726 struct resp_attrs *simple_attrs,
1727 const char *view_name,
1728 struct sysdb_attrs *override_attrs)
1729{
1730 int ret;
1731 time_t now;
1732 uint64_t timeout = 10*60*60; /* FIXME: find a better timeout ! */
1733 struct sss_nss_homedir_ctx homedir_ctx;
1734 char *name = NULL((void*)0);
1735 char *realm;
1736 char *upn = NULL((void*)0);
1737 gid_t gid;
1738 gid_t orig_gid = 0;
1739 TALLOC_CTX *tmp_ctx;
1740 const char *sid_str;
1741 const char *tmp_str;
1742 struct ldb_result *res;
1743 enum sysdb_member_type type;
1744 char **sysdb_grouplist;
1745 char **add_groups;
1746 char **add_groups_dns;
1747 char **del_groups;
1748 char **del_groups_dns;
1749 bool_Bool in_transaction = false0;
1750 int tret;
1751
1752 tmp_ctx = talloc_new(NULL)talloc_named_const(((void*)0), 0, "talloc_new: " "../sssd/src/providers/ipa/ipa_s2n_exop.c"
":" "1752")
;
1753 if (tmp_ctx == NULL((void*)0)) {
1754 DEBUG(SSSDBG_OP_FAILURE, "talloc_new 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_s2n_exop.c"
, 1754, __FUNCTION__, __debug_macro_level, "talloc_new failed.\n"
); } } while (0)
;
1755 return ENOMEM12;
1756 }
1757
1758 now = time(NULL((void*)0));
1759
1760 if (attrs->sysdb_attrs == NULL((void*)0)) {
1761 attrs->sysdb_attrs = sysdb_new_attrs(attrs);
1762 if (attrs->sysdb_attrs == NULL((void*)0)) {
1763 DEBUG(SSSDBG_OP_FAILURE, "sysdb_new_attrs 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_s2n_exop.c"
, 1763, __FUNCTION__, __debug_macro_level, "sysdb_new_attrs failed.\n"
); } } while (0)
;
1764 ret = ENOMEM12;
1765 goto done;
1766 }
1767 }
1768
1769 if (attrs->sysdb_attrs != NULL((void*)0)) {
1770 ret = sysdb_attrs_get_string(attrs->sysdb_attrs,
1771 ORIGINALAD_PREFIX"originalAD" SYSDB_NAME"name", &tmp_str);
1772 if (ret == EOK0) {
1773 name = talloc_strdup(tmp_ctx, tmp_str);
1774 if (name == NULL((void*)0)) {
1775 DEBUG(SSSDBG_OP_FAILURE, "talloc_strdup 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_s2n_exop.c"
, 1775, __FUNCTION__, __debug_macro_level, "talloc_strdup failed.\n"
); } } while (0)
;
1776 ret = ENOMEM12;
1777 goto done;
1778 }
1779 DEBUG(SSSDBG_TRACE_ALL, "Found original AD name [%s].\n", name)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_s2n_exop.c"
, 1779, __FUNCTION__, __debug_macro_level, "Found original AD name [%s].\n"
, name); } } while (0)
;
1780 } else if (ret == ENOENT2) {
1781 name = NULL((void*)0);
1782 } else {
1783 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_s2n_exop.c"
, 1783, __FUNCTION__, __debug_macro_level, "sysdb_attrs_get_string failed.\n"
); } } while (0)
;
1784 goto done;
1785 }
1786
1787 ret = sysdb_attrs_get_string(attrs->sysdb_attrs,
1788 SYSDB_DEFAULT_OVERRIDE_NAME"defaultOverrideName", &tmp_str);
1789 if (ret == EOK0) {
1790 ret = sysdb_attrs_add_lc_name_alias(attrs->sysdb_attrs, tmp_str);
1791 if (ret != EOK0) {
1792 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_s2n_exop.c"
, 1793, __FUNCTION__, __debug_macro_level, "sysdb_attrs_add_lc_name_alias failed.\n"
); } } while (0)
1793 "sysdb_attrs_add_lc_name_alias 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_s2n_exop.c"
, 1793, __FUNCTION__, __debug_macro_level, "sysdb_attrs_add_lc_name_alias failed.\n"
); } } while (0)
;
1794 goto done;
1795 }
1796 } else if (ret != ENOENT2) {
1797 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_s2n_exop.c"
, 1797, __FUNCTION__, __debug_macro_level, "sysdb_attrs_get_string failed.\n"
); } } while (0)
;
1798 goto done;
1799 }
1800
1801 ret = sysdb_attrs_get_string(attrs->sysdb_attrs, SYSDB_UPN"userPrincipalName", &tmp_str);
1802 if (ret == EOK0) {
1803 upn = talloc_strdup(tmp_ctx, tmp_str);
1804 if (upn == NULL((void*)0)) {
1805 DEBUG(SSSDBG_OP_FAILURE, "talloc_strdup 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_s2n_exop.c"
, 1805, __FUNCTION__, __debug_macro_level, "talloc_strdup failed.\n"
); } } while (0)
;
1806 ret = ENOMEM12;
1807 goto done;
1808 }
1809 DEBUG(SSSDBG_TRACE_ALL, "Found original AD upn [%s].\n", upn)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_s2n_exop.c"
, 1809, __FUNCTION__, __debug_macro_level, "Found original AD upn [%s].\n"
, upn); } } while (0)
;
1810 } else if (ret == ENOENT2) {
1811 upn = NULL((void*)0);
1812 } else {
1813 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_s2n_exop.c"
, 1813, __FUNCTION__, __debug_macro_level, "sysdb_attrs_get_string failed.\n"
); } } while (0)
;
1814 goto done;
1815 }
1816 }
1817
1818 switch (attrs->response_type) {
1819 case RESP_USER:
1820 case RESP_USER_GROUPLIST:
1821 type = SYSDB_MEMBER_USER;
1822 if (dom->subdomain_homedir
1823 && attrs->a.user.pw_dir == NULL((void*)0)) {
1824 ZERO_STRUCT(homedir_ctx)memset((char *)&(homedir_ctx), 0, sizeof(homedir_ctx));
1825 homedir_ctx.username = attrs->a.user.pw_name;
1826 homedir_ctx.uid = attrs->a.user.pw_uid;
1827 homedir_ctx.domain = dom->name;
1828 homedir_ctx.flatname = dom->flat_name;
1829 homedir_ctx.config_homedir_substr = dom->homedir_substr;
1830
1831 attrs->a.user.pw_dir = expand_homedir_template(attrs,
1832 dom->subdomain_homedir,
1833 &homedir_ctx);
1834 if (attrs->a.user.pw_dir == NULL((void*)0)) {
1835 ret = ENOMEM12;
1836 goto done;
1837 }
1838 }
1839
1840 if (name == NULL((void*)0)) {
1841 /* we always use the fully qualified name for subdomain users */
1842 name = sss_tc_fqname(tmp_ctx, dom->names, dom,
1843 attrs->a.user.pw_name);
1844 if (!name) {
1845 DEBUG(SSSDBG_OP_FAILURE, "failed to format user name.\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_s2n_exop.c"
, 1845, __FUNCTION__, __debug_macro_level, "failed to format user name.\n"
); } } while (0)
;
1846 ret = ENOMEM12;
1847 goto done;
1848 }
1849 }
1850
1851 ret = sysdb_attrs_add_lc_name_alias(attrs->sysdb_attrs, name);
1852 if (ret != EOK0) {
1853 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_s2n_exop.c"
, 1854, __FUNCTION__, __debug_macro_level, "sysdb_attrs_add_lc_name_alias failed.\n"
); } } while (0)
1854 "sysdb_attrs_add_lc_name_alias 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_s2n_exop.c"
, 1854, __FUNCTION__, __debug_macro_level, "sysdb_attrs_add_lc_name_alias failed.\n"
); } } while (0)
;
1855 goto done;
1856 }
1857
1858 if (upn == NULL((void*)0)) {
1859 /* We also have to store a fake UPN here, because otherwise the
1860 * krb5 child later won't be able to properly construct one as
1861 * the username is fully qualified but the child doesn't have
1862 * access to the regex to deconstruct it */
1863 /* FIXME: The real UPN is available from the PAC, we should get
1864 * it from there. */
1865 realm = get_uppercase_realm(tmp_ctx, dom->name);
1866 if (!realm) {
1867 DEBUG(SSSDBG_OP_FAILURE, "failed to get realm.\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_s2n_exop.c"
, 1867, __FUNCTION__, __debug_macro_level, "failed to get realm.\n"
); } } while (0)
;
1868 ret = ENOMEM12;
1869 goto done;
1870 }
1871 upn = talloc_asprintf(tmp_ctx, "%s@%s",
1872 attrs->a.user.pw_name, realm);
1873 if (!upn) {
1874 DEBUG(SSSDBG_OP_FAILURE, "failed to format UPN.\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_s2n_exop.c"
, 1874, __FUNCTION__, __debug_macro_level, "failed to format UPN.\n"
); } } while (0)
;
1875 ret = ENOMEM12;
1876 goto done;
1877 }
1878
1879 /* We might already have the SID or the UPN from other sources
1880 * hence sysdb_attrs_add_string_safe is used to avoid double
1881 * entries. */
1882 ret = sysdb_attrs_add_string_safe(attrs->sysdb_attrs, SYSDB_UPN"userPrincipalName",
1883 upn);
1884 if (ret != EOK0) {
1885 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_s2n_exop.c"
, 1886, __FUNCTION__, __debug_macro_level, "sysdb_attrs_add_string failed.\n"
); } } while (0)
1886 "sysdb_attrs_add_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_s2n_exop.c"
, 1886, __FUNCTION__, __debug_macro_level, "sysdb_attrs_add_string failed.\n"
); } } while (0)
;
1887 goto done;
1888 }
1889 }
1890
1891 if (req_input->type == REQ_INP_SECID) {
1892 ret = sysdb_attrs_add_string_safe(attrs->sysdb_attrs,
1893 SYSDB_SID_STR"objectSIDString",
1894 req_input->inp.secid);
1895 if (ret != EOK0) {
1896 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_s2n_exop.c"
, 1897, __FUNCTION__, __debug_macro_level, "sysdb_attrs_add_string failed.\n"
); } } while (0)
1897 "sysdb_attrs_add_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_s2n_exop.c"
, 1897, __FUNCTION__, __debug_macro_level, "sysdb_attrs_add_string failed.\n"
); } } while (0)
;
1898 goto done;
1899 }
1900 }
1901
1902 if (simple_attrs != NULL((void*)0)
1903 && simple_attrs->response_type == RESP_SID) {
1904 ret = sysdb_attrs_add_string_safe(attrs->sysdb_attrs,
1905 SYSDB_SID_STR"objectSIDString",
1906 simple_attrs->a.sid_str);
1907 if (ret != EOK0) {
1908 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_s2n_exop.c"
, 1909, __FUNCTION__, __debug_macro_level, "sysdb_attrs_add_string failed.\n"
); } } while (0)
1909 "sysdb_attrs_add_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_s2n_exop.c"
, 1909, __FUNCTION__, __debug_macro_level, "sysdb_attrs_add_string failed.\n"
); } } while (0)
;
1910 goto done;
1911 }
1912 }
1913
1914 if (attrs->response_type == RESP_USER_GROUPLIST) {
1915 /* Since RESP_USER_GROUPLIST contains all group memberships it
1916 * is effectively an initgroups request hence
1917 * SYSDB_INITGR_EXPIRE will be set.*/
1918 ret = sysdb_attrs_add_time_t(attrs->sysdb_attrs,
1919 SYSDB_INITGR_EXPIRE"initgrExpireTimestamp",
1920 time(NULL((void*)0)) + timeout);
1921 if (ret != EOK0) {
1922 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_s2n_exop.c"
, 1923, __FUNCTION__, __debug_macro_level, "sysdb_attrs_add_time_t failed.\n"
); } } while (0)
1923 "sysdb_attrs_add_time_t 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_s2n_exop.c"
, 1923, __FUNCTION__, __debug_macro_level, "sysdb_attrs_add_time_t failed.\n"
); } } while (0)
;
1924 goto done;
1925 }
1926 }
1927
1928 gid = 0;
1929 if (dom->mpg == false0) {
1930 gid = attrs->a.user.pw_gid;
1931 } else {
1932 /* The extdom plugin always returns the objects with the
1933 * default view applied. Since the GID is handled specially
1934 * for MPG domains we have add any overridden GID separately.
1935 */
1936 ret = sysdb_attrs_get_uint32_t(attrs->sysdb_attrs,
1937 ORIGINALAD_PREFIX"originalAD" SYSDB_GIDNUM"gidNumber",
1938 &orig_gid);
1939 if (ret == EOK0 || ret == ENOENT2) {
1940 if ((orig_gid != 0 && orig_gid != attrs->a.user.pw_gid)
1941 || attrs->a.user.pw_uid != attrs->a.user.pw_gid) {
1942 ret = sysdb_attrs_add_uint32(attrs->sysdb_attrs,
1943 SYSDB_GIDNUM"gidNumber",
1944 attrs->a.user.pw_gid);
1945 if (ret != EOK0) {
1946 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_s2n_exop.c"
, 1947, __FUNCTION__, __debug_macro_level, "sysdb_attrs_add_uint32 failed.\n"
); } } while (0)
1947 "sysdb_attrs_add_uint32 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_s2n_exop.c"
, 1947, __FUNCTION__, __debug_macro_level, "sysdb_attrs_add_uint32 failed.\n"
); } } while (0)
;
1948 goto done;
1949 }
1950 }
1951 } else {
1952 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_s2n_exop.c"
, 1953, __FUNCTION__, __debug_macro_level, "sysdb_attrs_get_uint32_t failed.\n"
); } } while (0)
1953 "sysdb_attrs_get_uint32_t 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_s2n_exop.c"
, 1953, __FUNCTION__, __debug_macro_level, "sysdb_attrs_get_uint32_t failed.\n"
); } } while (0)
;
1954 goto done;
1955 }
1956 }
1957
1958 ret = sysdb_transaction_start(dom->sysdb);
1959 if (ret != EOK0) {
1960 DEBUG(SSSDBG_CRIT_FAILURE, "Failed to start transaction\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_s2n_exop.c"
, 1960, __FUNCTION__, __debug_macro_level, "Failed to start transaction\n"
); } } while (0)
;
1961 goto done;
1962 }
1963 in_transaction = true1;
1964
1965 ret = sysdb_store_user(dom, name, NULL((void*)0),
1966 attrs->a.user.pw_uid,
1967 gid, attrs->a.user.pw_gecos,
1968 attrs->a.user.pw_dir, attrs->a.user.pw_shell,
1969 NULL((void*)0), attrs->sysdb_attrs, NULL((void*)0),
1970 timeout, now);
1971 if (ret != EOK0) {
1972 DEBUG(SSSDBG_OP_FAILURE, "sysdb_store_user 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_s2n_exop.c"
, 1972, __FUNCTION__, __debug_macro_level, "sysdb_store_user failed.\n"
); } } while (0)
;
1973 goto done;
1974 }
1975
1976 if (attrs->response_type == RESP_USER_GROUPLIST) {
1977 ret = get_sysdb_grouplist(tmp_ctx, dom->sysdb, dom, name,
1978 &sysdb_grouplist);
1979 if (ret != EOK0) {
1980 DEBUG(SSSDBG_OP_FAILURE, "get_sysdb_grouplist 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_s2n_exop.c"
, 1980, __FUNCTION__, __debug_macro_level, "get_sysdb_grouplist failed.\n"
); } } while (0)
;
1981 goto done;
1982 }
1983
1984 ret = diff_string_lists(tmp_ctx, attrs->groups, sysdb_grouplist,
1985 &add_groups, &del_groups, NULL((void*)0));
1986 if (ret != EOK0) {
1987 DEBUG(SSSDBG_OP_FAILURE, "diff_string_lists 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_s2n_exop.c"
, 1987, __FUNCTION__, __debug_macro_level, "diff_string_lists failed.\n"
); } } while (0)
;
1988 goto done;
1989 }
1990
1991 ret = get_groups_dns(tmp_ctx, dom, add_groups, &add_groups_dns);
1992 if (ret != EOK0) {
1993 DEBUG(SSSDBG_OP_FAILURE, "get_groups_dns 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_s2n_exop.c"
, 1993, __FUNCTION__, __debug_macro_level, "get_groups_dns failed.\n"
); } } while (0)
;
1994 goto done;
1995 }
1996
1997 ret = get_groups_dns(tmp_ctx, dom, del_groups, &del_groups_dns);
1998 if (ret != EOK0) {
1999 DEBUG(SSSDBG_OP_FAILURE, "get_groups_dns 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_s2n_exop.c"
, 1999, __FUNCTION__, __debug_macro_level, "get_groups_dns failed.\n"
); } } while (0)
;
2000 goto done;
2001 }
2002
2003 DEBUG(SSSDBG_TRACE_INTERNAL, "Updating memberships for %s\n",do { int __debug_macro_level = 0x2000; if ((debug_level &
(__debug_macro_level) || (debug_level == 0 && (__debug_macro_level
& (0x0010 | 0x0020))))) { debug_fn("../sssd/src/providers/ipa/ipa_s2n_exop.c"
, 2004, __FUNCTION__, __debug_macro_level, "Updating memberships for %s\n"
, name); } } while (0)
2004 name)do { int __debug_macro_level = 0x2000; if ((debug_level &
(__debug_macro_level) || (debug_level == 0 && (__debug_macro_level
& (0x0010 | 0x0020))))) { debug_fn("../sssd/src/providers/ipa/ipa_s2n_exop.c"
, 2004, __FUNCTION__, __debug_macro_level, "Updating memberships for %s\n"
, name); } } while (0)
;
2005 ret = sysdb_update_members_dn(dom, name, SYSDB_MEMBER_USER,
2006 (const char *const *) add_groups_dns,
2007 (const char *const *) del_groups_dns);
2008 if (ret != EOK0) {
2009 DEBUG(SSSDBG_CRIT_FAILURE, "Membership update failed [%d]: %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_s2n_exop.c"
, 2010, __FUNCTION__, __debug_macro_level, "Membership update failed [%d]: %s\n"
, ret, sss_strerror(ret)); } } while (0)
2010 ret, sss_strerror(ret))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_s2n_exop.c"
, 2010, __FUNCTION__, __debug_macro_level, "Membership update failed [%d]: %s\n"
, ret, sss_strerror(ret)); } } while (0)
;
2011 goto done;
2012 }
2013 }
2014
2015 ret = sysdb_transaction_commit(dom->sysdb);
2016 if (ret != EOK0) {
2017 DEBUG(SSSDBG_CRIT_FAILURE, "Failed to commit transaction\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_s2n_exop.c"
, 2017, __FUNCTION__, __debug_macro_level, "Failed to commit transaction\n"
); } } while (0)
;
2018 goto done;
2019 }
2020 in_transaction = false0;
2021
2022 break;
2023 case RESP_GROUP:
2024 case RESP_GROUP_MEMBERS:
2025 type = SYSDB_MEMBER_GROUP;
2026
2027 if (0 != strcmp(dom->name, attrs->domain_name)__extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p
(dom->name) && __builtin_constant_p (attrs->domain_name
) && (__s1_len = strlen (dom->name), __s2_len = strlen
(attrs->domain_name), (!((size_t)(const void *)((dom->
name) + 1) - (size_t)(const void *)(dom->name) == 1) || __s1_len
>= 4) && (!((size_t)(const void *)((attrs->domain_name
) + 1) - (size_t)(const void *)(attrs->domain_name) == 1) ||
__s2_len >= 4)) ? __builtin_strcmp (dom->name, attrs->
domain_name) : (__builtin_constant_p (dom->name) &&
((size_t)(const void *)((dom->name) + 1) - (size_t)(const
void *)(dom->name) == 1) && (__s1_len = strlen (dom
->name), __s1_len < 4) ? (__builtin_constant_p (attrs->
domain_name) && ((size_t)(const void *)((attrs->domain_name
) + 1) - (size_t)(const void *)(attrs->domain_name) == 1) ?
__builtin_strcmp (dom->name, attrs->domain_name) : (__extension__
({ const unsigned char *__s2 = (const unsigned char *) (const
char *) (attrs->domain_name); int __result = (((const unsigned
char *) (const char *) (dom->name))[0] - __s2[0]); if (__s1_len
> 0 && __result == 0) { __result = (((const unsigned
char *) (const char *) (dom->name))[1] - __s2[1]); if (__s1_len
> 1 && __result == 0) { __result = (((const unsigned
char *) (const char *) (dom->name))[2] - __s2[2]); if (__s1_len
> 2 && __result == 0) __result = (((const unsigned
char *) (const char *) (dom->name))[3] - __s2[3]); } } __result
; }))) : (__builtin_constant_p (attrs->domain_name) &&
((size_t)(const void *)((attrs->domain_name) + 1) - (size_t
)(const void *)(attrs->domain_name) == 1) && (__s2_len
= strlen (attrs->domain_name), __s2_len < 4) ? (__builtin_constant_p
(dom->name) && ((size_t)(const void *)((dom->name
) + 1) - (size_t)(const void *)(dom->name) == 1) ? __builtin_strcmp
(dom->name, attrs->domain_name) : (- (__extension__ ({
const unsigned char *__s2 = (const unsigned char *) (const char
*) (dom->name); int __result = (((const unsigned char *) (
const char *) (attrs->domain_name))[0] - __s2[0]); if (__s2_len
> 0 && __result == 0) { __result = (((const unsigned
char *) (const char *) (attrs->domain_name))[1] - __s2[1]
); if (__s2_len > 1 && __result == 0) { __result =
(((const unsigned char *) (const char *) (attrs->domain_name
))[2] - __s2[2]); if (__s2_len > 2 && __result == 0
) __result = (((const unsigned char *) (const char *) (attrs->
domain_name))[3] - __s2[3]); } } __result; })))) : __builtin_strcmp
(dom->name, attrs->domain_name)))); })
) {
2028 dom = find_domain_by_name(get_domains_head(dom),
2029 attrs->domain_name, true1);
2030 if (dom == NULL((void*)0)) {
2031 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_s2n_exop.c"
, 2032, __FUNCTION__, __debug_macro_level, "Cannot find domain: [%s]\n"
, attrs->domain_name); } } while (0)
2032 "Cannot find domain: [%s]\n", attrs->domain_name)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_s2n_exop.c"
, 2032, __FUNCTION__, __debug_macro_level, "Cannot find domain: [%s]\n"
, attrs->domain_name); } } while (0)
;
2033 ret = EINVAL22;
2034 goto done;
2035 }
2036 }
2037
2038 if (name == NULL((void*)0)) {
2039 name = attrs->a.group.gr_name;
2040 }
2041
2042 if (IS_SUBDOMAIN(dom)((dom)->parent != ((void*)0))) {
2043 /* we always use the fully qualified name for subdomain users */
2044 name = sss_tc_fqname(tmp_ctx, dom->names, dom, name);
2045 if (!name) {
2046 DEBUG(SSSDBG_OP_FAILURE, "failed to format user name,\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_s2n_exop.c"
, 2046, __FUNCTION__, __debug_macro_level, "failed to format user name,\n"
); } } while (0)
;
2047 ret = ENOMEM12;
2048 goto done;
2049 }
2050 }
2051 DEBUG(SSSDBG_TRACE_FUNC, "Processing group %s\n", name)do { int __debug_macro_level = 0x0400; if ((debug_level &
(__debug_macro_level) || (debug_level == 0 && (__debug_macro_level
& (0x0010 | 0x0020))))) { debug_fn("../sssd/src/providers/ipa/ipa_s2n_exop.c"
, 2051, __FUNCTION__, __debug_macro_level, "Processing group %s\n"
, name); } } while (0)
;
2052
2053 ret = sysdb_attrs_add_lc_name_alias(attrs->sysdb_attrs, name);
2054 if (ret != EOK0) {
2055 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_s2n_exop.c"
, 2056, __FUNCTION__, __debug_macro_level, "sysdb_attrs_add_lc_name_alias failed.\n"
); } } while (0)
2056 "sysdb_attrs_add_lc_name_alias 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_s2n_exop.c"
, 2056, __FUNCTION__, __debug_macro_level, "sysdb_attrs_add_lc_name_alias failed.\n"
); } } while (0)
;
2057 goto done;
2058 }
2059
2060 /* We might already have the SID from other sources hence
2061 * sysdb_attrs_add_string_safe is used to avoid double entries. */
2062 if (req_input->type == REQ_INP_SECID) {
2063 ret = sysdb_attrs_add_string_safe(attrs->sysdb_attrs,
2064 SYSDB_SID_STR"objectSIDString",
2065 req_input->inp.secid);
2066 if (ret != EOK0) {
2067 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_s2n_exop.c"
, 2068, __FUNCTION__, __debug_macro_level, "sysdb_attrs_add_string failed.\n"
); } } while (0)
2068 "sysdb_attrs_add_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_s2n_exop.c"
, 2068, __FUNCTION__, __debug_macro_level, "sysdb_attrs_add_string failed.\n"
); } } while (0)
;
2069 goto done;
2070 }
2071 }
2072
2073 if (simple_attrs != NULL((void*)0)
2074 && simple_attrs->response_type == RESP_SID) {
2075 ret = sysdb_attrs_add_string_safe(attrs->sysdb_attrs,
2076 SYSDB_SID_STR"objectSIDString",
2077 simple_attrs->a.sid_str);
2078 if (ret != EOK0) {
2079 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_s2n_exop.c"
, 2080, __FUNCTION__, __debug_macro_level, "sysdb_attrs_add_string failed.\n"
); } } while (0)
2080 "sysdb_attrs_add_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_s2n_exop.c"
, 2080, __FUNCTION__, __debug_macro_level, "sysdb_attrs_add_string failed.\n"
); } } while (0)
;
2081 goto done;
2082 }
2083 }
2084
2085 ret = process_members(dom, attrs->sysdb_attrs,
2086 attrs->a.group.gr_mem, NULL((void*)0), NULL((void*)0));
2087 if (ret != EOK0) {
2088 DEBUG(SSSDBG_OP_FAILURE, "process_members 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_s2n_exop.c"
, 2088, __FUNCTION__, __debug_macro_level, "process_members failed.\n"
); } } while (0)
;
2089 goto done;
2090 }
2091
2092 ret = sysdb_store_group(dom, name, attrs->a.group.gr_gid,
2093 attrs->sysdb_attrs, timeout, now);
2094 if (ret != EOK0) {
2095 DEBUG(SSSDBG_OP_FAILURE, "sysdb_store_group 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_s2n_exop.c"
, 2095, __FUNCTION__, __debug_macro_level, "sysdb_store_group failed.\n"
); } } while (0)
;
2096 goto done;
2097 }
2098 break;
2099 default:
2100 DEBUG(SSSDBG_OP_FAILURE, "Unexpected response type [%d].\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_s2n_exop.c"
, 2101, __FUNCTION__, __debug_macro_level, "Unexpected response type [%d].\n"
, attrs->response_type); } } while (0)
2101 attrs->response_type)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_s2n_exop.c"
, 2101, __FUNCTION__, __debug_macro_level, "Unexpected response type [%d].\n"
, attrs->response_type); } } while (0)
;
2102 ret = EINVAL22;
2103 goto done;
2104 }
2105
2106 ret = sysdb_attrs_get_string(attrs->sysdb_attrs, SYSDB_SID_STR"objectSIDString", &sid_str);
2107 if (ret != EOK0) {
2108 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_s2n_exop.c"
, 2109, __FUNCTION__, __debug_macro_level, "Cannot find SID of object with override.\n"
); } } while (0)
2109 "Cannot find SID of object with override.\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_s2n_exop.c"
, 2109, __FUNCTION__, __debug_macro_level, "Cannot find SID of object with override.\n"
); } } while (0)
;
2110 goto done;
2111 }
2112
2113 ret = sysdb_search_object_by_sid(tmp_ctx, dom, sid_str, NULL((void*)0), &res);
2114 if (ret != EOK0) {
2115 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_s2n_exop.c"
, 2116, __FUNCTION__, __debug_macro_level, "Cannot find object with override with SID [%s].\n"
, sid_str); } } while (0)
2116 "Cannot find object with override with SID [%s].\n", sid_str)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_s2n_exop.c"
, 2116, __FUNCTION__, __debug_macro_level, "Cannot find object with override with SID [%s].\n"
, sid_str); } } while (0)
;
2117 goto done;
2118 }
2119
2120 ret = sysdb_store_override(dom, view_name, type, override_attrs,
2121 res->msgs[0]->dn);
2122 if (ret != EOK0) {
2123 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_s2n_exop.c"
, 2123, __FUNCTION__, __debug_macro_level, "sysdb_store_override failed.\n"
); } } while (0)
;
2124 goto done;
2125 }
2126
2127done:
2128 if (in_transaction) {
2129 tret = sysdb_transaction_cancel(dom->sysdb);
2130 if (tret != EOK0) {
2131 DEBUG(SSSDBG_CRIT_FAILURE, "Failed to cancel transaction\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_s2n_exop.c"
, 2131, __FUNCTION__, __debug_macro_level, "Failed to cancel transaction\n"
); } } while (0)
;
2132 }
2133 }
2134
2135 talloc_free(tmp_ctx)_talloc_free(tmp_ctx, "../sssd/src/providers/ipa/ipa_s2n_exop.c"
":" "2135")
;
2136
2137 return ret;
2138}
2139
2140static void ipa_s2n_get_fqlist_done(struct tevent_req *subreq)
2141{
2142 int ret;
2143 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_s2n_exop.c"
":" "2144")
2144 struct tevent_req)(struct tevent_req *)_talloc_get_type_abort(_tevent_req_callback_data
(subreq), "struct tevent_req", "../sssd/src/providers/ipa/ipa_s2n_exop.c"
":" "2144")
;
2145 struct ipa_s2n_get_user_state *state = tevent_req_data(req,(struct ipa_s2n_get_user_state *)_talloc_get_type_abort(_tevent_req_data
(req), "struct ipa_s2n_get_user_state", "../sssd/src/providers/ipa/ipa_s2n_exop.c"
":" "2146")
2146 struct ipa_s2n_get_user_state)(struct ipa_s2n_get_user_state *)_talloc_get_type_abort(_tevent_req_data
(req), "struct ipa_s2n_get_user_state", "../sssd/src/providers/ipa/ipa_s2n_exop.c"
":" "2146")
;
2147 const char *sid_str;
2148 struct be_acct_req *ar;
2149
2150 ret = ipa_s2n_get_fqlist_recv(subreq);
2151 talloc_zfree(subreq)do { _talloc_free(((void *)((uintptr_t)(subreq))), "../sssd/src/providers/ipa/ipa_s2n_exop.c"
":" "2151"); subreq = ((void*)0); } while(0)
;
2152 if (ret != EOK0) {
2153 DEBUG(SSSDBG_OP_FAILURE, "s2n get_fqlist 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_s2n_exop.c"
, 2153, __FUNCTION__, __debug_macro_level, "s2n get_fqlist request failed.\n"
); } } while (0)
;
2154 tevent_req_error(req, ret)_tevent_req_error(req, ret, "../sssd/src/providers/ipa/ipa_s2n_exop.c"
":" "2154")
;
2155 return;
2156 }
2157
2158 ret = sysdb_attrs_get_string(state->attrs->sysdb_attrs, SYSDB_SID_STR"objectSIDString",
2159 &sid_str);
2160 if (ret == ENOENT2) {
2161 ret = ipa_s2n_save_objects(state->dom, state->req_input, state->attrs,
2162 state->simple_attrs, NULL((void*)0), NULL((void*)0));
2163 if (ret != EOK0) {
2164 DEBUG(SSSDBG_OP_FAILURE, "ipa_s2n_save_objects 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_s2n_exop.c"
, 2164, __FUNCTION__, __debug_macro_level, "ipa_s2n_save_objects failed.\n"
); } } while (0)
;
2165 goto fail;
2166 }
2167 tevent_req_done(req)_tevent_req_done(req, "../sssd/src/providers/ipa/ipa_s2n_exop.c"
":" "2167")
;
2168 return;
2169 } else if (ret != EOK0) {
2170 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_s2n_exop.c"
, 2170, __FUNCTION__, __debug_macro_level, "sysdb_attrs_get_string failed.\n"
); } } while (0)
;
2171 goto fail;
2172 }
2173
2174 ret = get_be_acct_req_for_sid(state, sid_str, state->dom->name, &ar);
2175 if (ret != EOK0) {
2176 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_s2n_exop.c"
, 2176, __FUNCTION__, __debug_macro_level, "get_be_acct_req_for_sid failed.\n"
); } } while (0)
;
2177 goto fail;
2178 }
2179
2180 if (state->override_attrs == NULL((void*)0)
2181 && 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")))); })
2182 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) {
2183 subreq = ipa_get_ad_override_send(state, state->ev,
2184 state->ipa_ctx->sdap_id_ctx,
2185 state->ipa_ctx->ipa_options,
2186 dp_opt_get_string(state->ipa_ctx->ipa_options->basic,_dp_opt_get_string(state->ipa_ctx->ipa_options->basic
, IPA_KRB5_REALM, __FUNCTION__)
2187 IPA_KRB5_REALM)_dp_opt_get_string(state->ipa_ctx->ipa_options->basic
, IPA_KRB5_REALM, __FUNCTION__)
,
2188 state->ipa_ctx->view_name,
2189 ar);
2190 if (subreq == NULL((void*)0)) {
2191 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_s2n_exop.c"
, 2191, __FUNCTION__, __debug_macro_level, "ipa_get_ad_override_send failed.\n"
); } } while (0)
;
2192 ret = ENOMEM12;
2193 goto fail;
2194 }
2195 tevent_req_set_callback(subreq, ipa_s2n_get_user_get_override_done,
2196 req);
2197 } else {
2198 ret = ipa_s2n_save_objects(state->dom, state->req_input, state->attrs,
2199 state->simple_attrs,
2200 state->ipa_ctx->view_name,
2201 state->override_attrs);
2202 if (ret != EOK0) {
2203 DEBUG(SSSDBG_OP_FAILURE, "ipa_s2n_save_objects 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_s2n_exop.c"
, 2203, __FUNCTION__, __debug_macro_level, "ipa_s2n_save_objects failed.\n"
); } } while (0)
;
2204 tevent_req_error(req, ret)_tevent_req_error(req, ret, "../sssd/src/providers/ipa/ipa_s2n_exop.c"
":" "2204")
;
2205 return;
2206 }
2207
2208 tevent_req_done(req)_tevent_req_done(req, "../sssd/src/providers/ipa/ipa_s2n_exop.c"
":" "2208")
;
2209 }
2210
2211 return;
2212
2213fail:
2214 tevent_req_error(req, ret)_tevent_req_error(req, ret, "../sssd/src/providers/ipa/ipa_s2n_exop.c"
":" "2214")
;
2215 return;
2216}
2217
2218static void ipa_s2n_get_user_get_override_done(struct tevent_req *subreq)
2219{
2220 int ret;
2221 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_s2n_exop.c"
":" "2222")
2222 struct tevent_req)(struct tevent_req *)_talloc_get_type_abort(_tevent_req_callback_data
(subreq), "struct tevent_req", "../sssd/src/providers/ipa/ipa_s2n_exop.c"
":" "2222")
;
2223 struct ipa_s2n_get_user_state *state = tevent_req_data(req,(struct ipa_s2n_get_user_state *)_talloc_get_type_abort(_tevent_req_data
(req), "struct ipa_s2n_get_user_state", "../sssd/src/providers/ipa/ipa_s2n_exop.c"
":" "2224")
2224 struct ipa_s2n_get_user_state)(struct ipa_s2n_get_user_state *)_talloc_get_type_abort(_tevent_req_data
(req), "struct ipa_s2n_get_user_state", "../sssd/src/providers/ipa/ipa_s2n_exop.c"
":" "2224")
;
2225 struct sysdb_attrs *override_attrs = NULL((void*)0);
2226
2227 ret = ipa_get_ad_override_recv(subreq, NULL((void*)0), state, &override_attrs);
2228 talloc_zfree(subreq)do { _talloc_free(((void *)((uintptr_t)(subreq))), "../sssd/src/providers/ipa/ipa_s2n_exop.c"
":" "2228"); subreq = ((void*)0); } while(0)
;
2229 if (ret != EOK0) {
2230 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_s2n_exop.c"
, 2230, __FUNCTION__, __debug_macro_level, "IPA override lookup failed: %d\n"
, ret); } } while (0)
;
2231 tevent_req_error(req, ret)_tevent_req_error(req, ret, "../sssd/src/providers/ipa/ipa_s2n_exop.c"
":" "2231")
;
2232 return;
2233 }
2234
2235 ret = ipa_s2n_save_objects(state->dom, state->req_input, state->attrs,
2236 state->simple_attrs, state->ipa_ctx->view_name,
2237 override_attrs);
2238 if (ret != EOK0) {
2239 DEBUG(SSSDBG_OP_FAILURE, "ipa_s2n_save_objects 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_s2n_exop.c"
, 2239, __FUNCTION__, __debug_macro_level, "ipa_s2n_save_objects failed.\n"
); } } while (0)
;
2240 tevent_req_error(req, ret)_tevent_req_error(req, ret, "../sssd/src/providers/ipa/ipa_s2n_exop.c"
":" "2240")
;
2241 return;
2242 }
2243
2244 tevent_req_done(req)_tevent_req_done(req, "../sssd/src/providers/ipa/ipa_s2n_exop.c"
":" "2244")
;
2245 return;
2246}
2247
2248int ipa_s2n_get_acct_info_recv(struct tevent_req *req)
2249{
2250 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)
;
2251
2252 return EOK0;
2253}