]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
gpo: vgp_sudoers_ext handle missing and dispersed principal names
authorDavid Mulder <dmulder@suse.com>
Fri, 26 Feb 2021 16:46:49 +0000 (09:46 -0700)
committerJeremy Allison <jra@samba.org>
Mon, 8 Mar 2021 17:58:37 +0000 (17:58 +0000)
If we don't anticipate a missing principal name,
the extension crashes. Also, principal names could
be in dispersed listelements.

Signed-off-by: David Mulder <dmulder@suse.com>
Reviewed-by: Jeremy Allison <jra@samba.org>
python/samba/vgp_sudoers_ext.py
selftest/knownfail.d/gpo [deleted file]

index 573ec9fb4d1e53f8303d67aa88709d76242b57ec..bae6cb1c382d301bd6c9b701e21c382fa3213263 100644 (file)
@@ -49,7 +49,10 @@ class vgp_sudoers_ext(gp_xml_ext):
                 for entry in data.findall('sudoers_entry'):
                     command = entry.find('command').text
                     user = entry.find('user').text
-                    principals = entry.find('listelement').findall('principal')
+                    listelements = entry.findall('listelement')
+                    principals = []
+                    for listelement in listelements:
+                        principals.extend(listelement.findall('principal'))
                     if len(principals) > 0:
                         uname = ','.join([u.text if u.attrib['type'] == 'user' \
                             else '%s%%' % u.text for u in principals])
@@ -96,7 +99,10 @@ class vgp_sudoers_ext(gp_xml_ext):
             for entry in data.findall('sudoers_entry'):
                 command = entry.find('command').text
                 user = entry.find('user').text
-                principals = entry.find('listelement').findall('principal')
+                listelements = entry.findall('listelement')
+                principals = []
+                for listelement in listelements:
+                    principals.extend(listelement.findall('principal'))
                 if len(principals) > 0:
                     uname = ','.join([u.text if u.attrib['type'] == 'user' \
                         else '%s%%' % u.text for u in principals])
diff --git a/selftest/knownfail.d/gpo b/selftest/knownfail.d/gpo
deleted file mode 100644 (file)
index 4be23fb..0000000
+++ /dev/null
@@ -1 +0,0 @@
-^samba.tests.gpo.samba.tests.gpo.GPOTests.test_vgp_sudoers