[SCM] Samba Shared Repository - branch master updated

Stefan Metzmacher metze at samba.org
Tue Dec 10 17:46:02 UTC 2019


The branch, master has been updated
       via  bc0c876a9eb pidl:NDR/Parser: only include structs in ndr_interface_public_struct
       via  238d08b07d0 selftest: Confirm that ndrdump struct mode is not available for enums
      from  73f43626062 CVE-2019-14870: mit-kdc: enforce delegation_not_allowed flag

https://git.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit bc0c876a9ebbec1a31856a9e7147a481c69ba434
Author: Andrew Bartlett <abartlet at samba.org>
Date:   Thu Dec 5 11:37:05 2019 +1300

    pidl:NDR/Parser: only include structs in ndr_interface_public_struct
    
    We only have ndrdump and the fuzzers set up for structures, not BITMAPS,
    ENUMS etc.
    
    Pair-Programmed-With: Stefan Metzmacher <metze at samba.org>
    
    Signed-off-by: Andrew Bartlett <abartlet at samba.org>
    Signed-off-by: Stefan Metzmacher <metze at samba.org>
    
    Autobuild-User(master): Stefan Metzmacher <metze at samba.org>
    Autobuild-Date(master): Tue Dec 10 17:45:46 UTC 2019 on sn-devel-184

commit 238d08b07d0178940c28839518c9f1afbc605378
Author: Andrew Bartlett <abartlet at samba.org>
Date:   Fri Dec 6 11:00:57 2019 +1300

    selftest: Confirm that ndrdump struct mode is not available for enums
    
    These are not passed by pointer so the structure dump system does not work
    for these.  It is best to dump the containing structure instead.
    
    Signed-off-by: Andrew Bartlett <abartlet at samba.org>
    Reviewed-by: Stefan Metzmacher <metze at samba.org>

-----------------------------------------------------------------------

Summary of changes:
 pidl/lib/Parse/Pidl/Samba4/NDR/Parser.pm | 20 ++++++++++++++++----
 python/samba/tests/blackbox/ndrdump.py   | 14 ++++++++++++++
 2 files changed, 30 insertions(+), 4 deletions(-)


Changeset truncated at 500 lines:

diff --git a/pidl/lib/Parse/Pidl/Samba4/NDR/Parser.pm b/pidl/lib/Parse/Pidl/Samba4/NDR/Parser.pm
index 91b5f942994..c2821874db8 100644
--- a/pidl/lib/Parse/Pidl/Samba4/NDR/Parser.pm
+++ b/pidl/lib/Parse/Pidl/Samba4/NDR/Parser.pm
@@ -88,6 +88,18 @@ sub has_fast_array($$)
 	return ($t->{NAME} eq "uint8");
 }
 
+sub is_public_struct
+{
+	my ($d) = @_;
+	if (!has_property($d, "public")) {
+		return 0;
+	}
+	my $t = $d;
+	if ($d->{TYPE} eq "TYPEDEF") {
+		$t = $d->{DATA};
+	}
+	return $t->{TYPE} eq "STRUCT";
+}
 
 ####################################
 # defer() is like pidl(), but adds to 
@@ -2794,7 +2806,7 @@ sub FunctionTable($$)
 	my $uname = uc $interface->{NAME};
 
 	foreach my $d (@{$interface->{TYPES}}) {
-	        next unless (has_property($d, "public"));
+	        next unless (is_public_struct($d));
 		$count_public_structs += 1;
 	}
 	return if ($#{$interface->{FUNCTIONS}}+1 == 0 and
@@ -2807,8 +2819,8 @@ sub FunctionTable($$)
 	$self->pidl("static const struct ndr_interface_public_struct $interface->{NAME}\_public_structs[] = {");
 
 	foreach my $d (@{$interface->{TYPES}}) {
-	        next unless (has_property($d, "public"));
-		$self->StructEntry($d)
+	        next unless (is_public_struct($d));
+		$self->StructEntry($d);
 	}
 	$self->pidl("\t{ .name = NULL }");
 	$self->pidl("};");
@@ -3034,7 +3046,7 @@ sub ParseTypePrintFunction($$$)
 
 	$self->pidl_hdr("void ".TypeFunctionName("ndr_print", $e)."(struct ndr_print *ndr, const char *name, $args);");
 
-	if (has_property($e, "public")) {
+	if (is_public_struct($e)) {
                 $self->pidl("static void ".TypeFunctionName("ndr_print_flags", $e).
                              "(struct ndr_print *$ndr, const char *name, int unused, $args)"
                              );
diff --git a/python/samba/tests/blackbox/ndrdump.py b/python/samba/tests/blackbox/ndrdump.py
index f56858e98ba..5e4b3bfbd8c 100644
--- a/python/samba/tests/blackbox/ndrdump.py
+++ b/python/samba/tests/blackbox/ndrdump.py
@@ -111,6 +111,20 @@ dump OK
         # convert expected to bytes for python 3
         self.assertEqual(actual, expected.encode('utf-8'))
 
+    def test_ndrdump_with_enum_not_struct(self):
+        expected = '''Public structure 'netr_SchannelType' not found
+'''
+        try:
+            actual = self.check_exit_code(
+                "ndrdump misc netr_SchannelType --input=x struct",
+                1)
+        except BlackboxProcessError as e:
+            self.fail(e)
+
+        # check_output will return bytes
+        # convert expected to bytes for python 3
+        self.assertEqual(actual, expected.encode('utf-8'))
+
     def test_ndrdump_input_cmdline_short_struct_name(self):
         expected = '''pull returned Buffer Size Error
 '''


-- 
Samba Shared Repository



More information about the samba-cvs mailing list