Fabiano Fidêncio 40fe76f
From f9b7073e5cd057cf961b34f99ea1dff0c86b5b6a Mon Sep 17 00:00:00 2001
Fabiano Fidêncio 40fe76f
From: Jakub Hrozek <jhrozek@redhat.com>
Fabiano Fidêncio 40fe76f
Date: Fri, 17 Nov 2017 20:15:34 +0100
Fabiano Fidêncio 40fe76f
Subject: [PATCH 01/15] IPA: Handle empty nisDomainName
Fabiano Fidêncio 40fe76f
MIME-Version: 1.0
Fabiano Fidêncio 40fe76f
Content-Type: text/plain; charset=UTF-8
Fabiano Fidêncio 40fe76f
Content-Transfer-Encoding: 8bit
Fabiano Fidêncio 40fe76f
Fabiano Fidêncio 40fe76f
Resolves:
Fabiano Fidêncio 40fe76f
https://pagure.io/SSSD/sssd/issue/3573
Fabiano Fidêncio 40fe76f
Fabiano Fidêncio 40fe76f
If nisdomain=, i.e. a blank NIS domain name, sssd was not processing the
Fabiano Fidêncio 40fe76f
netgroup at all. This is not in agreement with man innetgr which says "Any of
Fabiano Fidêncio 40fe76f
the elements in a triple can be empty, which means that anything matches. The
Fabiano Fidêncio 40fe76f
functions described here allow access to the netgroup databases".
Fabiano Fidêncio 40fe76f
Fabiano Fidêncio 40fe76f
This patch instead returns an empty domain as well, which eventually
Fabiano Fidêncio 40fe76f
produces the same output as if the netgroup was requested from the
Fabiano Fidêncio 40fe76f
compat tree.
Fabiano Fidêncio 40fe76f
Fabiano Fidêncio 40fe76f
To reproduce the bug:
Fabiano Fidêncio 40fe76f
$ ipa netgroup-add
Fabiano Fidêncio 40fe76f
Netgroup name: emptydom
Fabiano Fidêncio 40fe76f
-------------------------
Fabiano Fidêncio 40fe76f
Added netgroup "emptydom"
Fabiano Fidêncio 40fe76f
-------------------------
Fabiano Fidêncio 40fe76f
  Netgroup name: emptydom
Fabiano Fidêncio 40fe76f
  NIS domain name: ipa.test
Fabiano Fidêncio 40fe76f
  IPA unique ID: 164bc15a-f4b3-11e7-acdb-525400ca6df3
Fabiano Fidêncio 40fe76f
$ ipa netgroup-add-member
Fabiano Fidêncio 40fe76f
Netgroup name: emptydom
Fabiano Fidêncio 40fe76f
[member user]: admin
Fabiano Fidêncio 40fe76f
[member group]:
Fabiano Fidêncio 40fe76f
[member host]:
Fabiano Fidêncio 40fe76f
[member host group]:
Fabiano Fidêncio 40fe76f
[member netgroup]:
Fabiano Fidêncio 40fe76f
  Netgroup name: emptydom
Fabiano Fidêncio 40fe76f
  NIS domain name: ipa.test
Fabiano Fidêncio 40fe76f
  Member User: admin
Fabiano Fidêncio 40fe76f
-------------------------
Fabiano Fidêncio 40fe76f
Number of members added 1
Fabiano Fidêncio 40fe76f
-------------------------
Fabiano Fidêncio 40fe76f
$ ipa netgroup-mod --nisdomain="" emptydom
Fabiano Fidêncio 40fe76f
----------------------------
Fabiano Fidêncio 40fe76f
Modified netgroup "emptydom"
Fabiano Fidêncio 40fe76f
----------------------------
Fabiano Fidêncio 40fe76f
  Netgroup name: emptydom
Fabiano Fidêncio 40fe76f
  Member User: admin
Fabiano Fidêncio 40fe76f
Fabiano Fidêncio 40fe76f
Then run:
Fabiano Fidêncio 40fe76f
    getent negroup emptydom
Fabiano Fidêncio 40fe76f
without the patch, the netgroup won't be resolvable. It will resolve to
Fabiano Fidêncio 40fe76f
a netgroup triple that looks like this after the patch:
Fabiano Fidêncio 40fe76f
    emptydom              (-,admin,)
Fabiano Fidêncio 40fe76f
Fabiano Fidêncio 40fe76f
Reviewed-by: Fabiano FidĂȘncio <fidencio@redhat.com>
Fabiano Fidêncio 40fe76f
---
Fabiano Fidêncio 40fe76f
 src/providers/ipa/ipa_netgroups.c | 6 ++++--
Fabiano Fidêncio 40fe76f
 1 file changed, 4 insertions(+), 2 deletions(-)
Fabiano Fidêncio 40fe76f
Fabiano Fidêncio 40fe76f
diff --git a/src/providers/ipa/ipa_netgroups.c b/src/providers/ipa/ipa_netgroups.c
Fabiano Fidêncio 40fe76f
index 5c929a485..05ebac758 100644
Fabiano Fidêncio 40fe76f
--- a/src/providers/ipa/ipa_netgroups.c
Fabiano Fidêncio 40fe76f
+++ b/src/providers/ipa/ipa_netgroups.c
Fabiano Fidêncio 40fe76f
@@ -953,7 +953,9 @@ static int ipa_netgr_process_all(struct ipa_get_netgroups_state *state)
Fabiano Fidêncio 40fe76f
 
Fabiano Fidêncio 40fe76f
         ret = sysdb_attrs_get_string(state->netgroups[i], SYSDB_NETGROUP_DOMAIN,
Fabiano Fidêncio 40fe76f
                                      &domain);
Fabiano Fidêncio 40fe76f
-        if (ret != EOK) {
Fabiano Fidêncio 40fe76f
+        if (ret == ENOENT) {
Fabiano Fidêncio 40fe76f
+            domain = NULL;
Fabiano Fidêncio 40fe76f
+        } else if (ret != EOK) {
Fabiano Fidêncio 40fe76f
             goto done;
Fabiano Fidêncio 40fe76f
         }
Fabiano Fidêncio 40fe76f
 
Fabiano Fidêncio 40fe76f
@@ -974,7 +976,7 @@ static int ipa_netgr_process_all(struct ipa_get_netgroups_state *state)
Fabiano Fidêncio 40fe76f
                 for (k = 0; k < hosts_count; k++) {
Fabiano Fidêncio 40fe76f
                     triple = talloc_asprintf(state, "(%s,%s,%s)",
Fabiano Fidêncio 40fe76f
                                              hosts[k], uids[j],
Fabiano Fidêncio 40fe76f
-                                             domain);
Fabiano Fidêncio 40fe76f
+                                             domain ? domain : "");
Fabiano Fidêncio 40fe76f
                     if (triple == NULL) {
Fabiano Fidêncio 40fe76f
                         ret = ENOMEM;
Fabiano Fidêncio 40fe76f
                         goto done;
Fabiano Fidêncio 40fe76f
-- 
Fabiano Fidêncio 40fe76f
2.14.3
Fabiano Fidêncio 40fe76f