On Wed, Jul 20, 2016 at 12:24:11PM +0200, Jakub Hrozek wrote:
On Fri, Jul 15, 2016 at 03:24:15PM +0200, Petr Cech wrote:
On 07/12/2016 10:31 AM, Pavel Březina wrote:
On 07/11/2016 05:12 PM, Petr Cech wrote:
On 07/05/2016 08:44 AM, Jakub Hrozek wrote:
On Mon, Jun 27, 2016 at 03:37:25PM +0200, Petr Cech wrote:
...
+static errno_t ad_get_enabled_domains(TALLOC_CTX *mem_ctx,
struct ad_id_ctx *ad_id_ctx,
const char *ad_domain,
const char
***_ad_enabled_domains) +{
- int ret;
- const char *str;
- const char *option_name;
- char **domains = NULL;
- const char **list = NULL;
- int count;
- bool is_ad_in_domains;
- TALLOC_CTX *tmp_ctx = NULL;
- tmp_ctx = talloc_new(NULL);
- if (tmp_ctx == NULL) {
return ENOMEM;
- }
- str = dp_opt_get_cstring(ad_id_ctx->ad_options->basic,
AD_ENABLED_DOMAINS);
- if (str == NULL) {
_ad_enabled_domains = NULL;
ret = EOK;
goto done;
- }
- count = 0;
- ret = split_on_separator(tmp_ctx, str, ',', true, true,
&domains, &count);
- if (ret != EOK) {
option_name =
ad_id_ctx->ad_options->basic[AD_ENABLED_DOMAINS].opt_name;
DEBUG(SSSDBG_CRIT_FAILURE, "Failed to parse option [%s],
[%i] [%s]!\n",
option_name, ret,
sss_strerror(ret));
ret = EINVAL;
goto done;
- }
- list = talloc_array_size(tmp_ctx, sizeof(char*), count);
- if (list == NULL) {
ret = ENOMEM;
goto done;
- }
- is_ad_in_domains = false;
- for (int i = 0; i < count; i++) {
list[i] = talloc_strdup(list, domains[i]);
Do we need to duplicate the string here, wouldn't it be enough to steal it?
This is my attempt to satisfy the needs. I am trying to make: # const char** from char** I would like to return const char** because it is option. But the function split_on_separator() expects char**.
Does anybody know better solution?
You can use discard_const for this case.
Hi list,
I pulled master again and it started to work :-)
Regards...
I finally tested the patches and they work fine in my setup of two domains (root and child domain).
I'll also install and configure a third AD domain to do some more testing, but in the meantime, I tested that a user from disabled subdomain can't be lookup up and a user who is a member of a group from another domain reports correct group membership (the tokengroups code stores a range that corresponds to the trusted domain, but not the domain, subsequent lookup of that ID "fails" with idmap domain not found).
So functional ACK for now, I just need to do more testing with a third domain.
OK, the patchset doesn't work with a third domain:
Program received signal SIGSEGV, Segmentation fault. 0x00007f9aac975716 in __strcmp_sse2_unaligned () from /lib64/libc.so.6 Missing separate debuginfos, use: dnf debuginfo-install gssproxy-0.4.1-4.fc23.x86_64 (gdb) bt #0 0x00007f9aac975716 in __strcmp_sse2_unaligned () from /lib64/libc.so.6 #1 0x00007f9ab0c5c24f in string_in_list (string=0xf22e50 "subdom.win.trust.test", list=0x7fff84129408, case_sensitive=true) at /sssd/src/util/util.c:712 #2 0x00007f9aa844e5a2 in ad_subdomains_process (mem_ctx=0xf26150, domain=0xe9c7f0, enabled_domains_list=0xef76a0, nsd=2, sd=0xf14960, root=0x0, _nsd_out=0x7fff841294e8, _sd_out=0x7fff841294e0) at /sssd/src/providers/ad/ad_subdomains.c:538 #3 0x00007f9aa844f272 in ad_get_slave_domain_done (subreq=0x0) at /sssd/src/providers/ad/ad_subdomains.c:809 #4 0x00007f9aa77142f0 in sdap_search_bases_ex_done (subreq=0x0) at /sssd/src/providers/ldap/sdap_ops.c:222 #5 0x00007f9aa76d94b5 in sdap_get_generic_done (subreq=0xf22710) at /sssd/src/providers/ldap/sdap_async.c:1871 #6 0x00007f9aa76d8eff in generic_ext_search_handler (subreq=0x0, opts=0xee9690) at /sssd/src/providers/ldap/sdap_async.c:1688 #7 0x00007f9aa76d925d in sdap_get_and_parse_generic_done (subreq=0xf23cc0) at /sssd/src/providers/ldap/sdap_async.c:1796 #8 0x00007f9aa76d89d2 in sdap_get_generic_op_finished (op=0xf24b00, reply=0xf14960, error=0, pvt=0xf23cc0) at /sssd/src/providers/ldap/sdap_async.c:1578 #9 0x00007f9aa76d4c34 in sdap_process_message (ev=0xe7bc60, sh=0xf11710, msg=0xf25c10) at /sssd/src/providers/ldap/sdap_async.c:353 #10 0x00007f9aa76d47b3 in sdap_process_result (ev=0xe7bc60, pvt=0xf11710) at /sssd/src/providers/ldap/sdap_async.c:197 #11 0x00007f9aa76d4476 in sdap_ldap_next_result (ev=0xe7bc60, te=0xf24a40, tv=..., pvt=0xf11710) at /sssd/src/providers/ldap/sdap_async.c:145 #12 0x00007f9aad2bcb2d in tevent_common_loop_timer_delay () from /lib64/libtevent.so.0 #13 0x00007f9aad2bdb5a in epoll_event_loop_once () from /lib64/libtevent.so.0 ---Type <return> to continue, or q <return> to quit--- #14 0x00007f9aad2bc257 in std_event_loop_once () from /lib64/libtevent.so.0 #15 0x00007f9aad2b842d in _tevent_loop_once () from /lib64/libtevent.so.0 #16 0x00007f9aad2b85cb in tevent_common_loop_wait () from /lib64/libtevent.so.0 #17 0x00007f9aad2bc1f7 in std_event_loop_wait () from /lib64/libtevent.so.0 #18 0x00007f9ab0c605d2 in server_loop (main_ctx=0xe7d0b0) at /sssd/src/util/server.c:702 #19 0x0000000000409372 in main (argc=8, argv=0x7fff84129ca8) at /sssd/src/providers/data_provider_be.c:587 (gdb) frame 1 #1 0x00007f9ab0c5c24f in string_in_list (string=0xf22e50 "subdom.win.trust.test", list=0x7fff84129408, case_sensitive=true) at /sssd/src/util/util.c:712 712 if (compare(string, list[c]) == 0) { (gdb) p string $1 = 0xf22e50 "subdom.win.trust.test" (gdb) p list[c] $2 = 0x100000000ea03b0 <error: Cannot access memory at address 0x100000000ea03b0> (gdb)
In sssd.conf I had: ad_enabled_domains = win.trust.test, siblingdom.win.trust.test