[SCM] Samba Shared Repository - branch master updated

Andreas Schneider asn at samba.org
Wed Jan 30 00:52:02 UTC 2019


The branch, master has been updated
       via  d03991f569b selftest:Samba4: use 'smbcontrol samba shutdown'
       via  832776c0fcf s4:server: add support for 'smbcontrol samba shutdown'
       via  5bd7a8e5685 s4:server: avoid using pid=0 for the parent 'samba' process
       via  3a0c1da432c s4:messaging: add support 'smbcontrol <pid> debug/debuglevel'
       via  12b9adec3ff manpages/samba.7.xml: smbcontrol can also work with 'samba'
       via  7a7a5ccf501 ldb: The test api.py should not rely on order of entries in dict
       via  29f9618e38c dns.idl: fix DNS_RCODE from 0xF to 0x1F
       via  0b66cf93f2c python/tests/dns*: make use of dns.DNS_RCODE/dns.DNS_OPCODE
       via  8e7b63a1711 'articles' variable causes a dependency loop
       via  c0ed5bd0504 third_party/resolv_wrapper: fix HAVE_RESOLV_IPV6_NSADDRS for struct __res_state
       via  b2050db67b4 wafsamba/replace: move __STDC_WANT_LIB_EXT1__ to CFLAGS
       via  e49df24e80a replace: only include <sys/capability.h> with HAVE_POSIX_CAPABILITIES
       via  8061983d488 wscript: separate embedded_heimdal from system_heimdal
      from  60b062d614e vfs_gpfs: Fix the 32-bit build

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


- Log -----------------------------------------------------------------
commit d03991f569b54ae0a11911b622107fbae701715d
Author: Stefan Metzmacher <metze at samba.org>
Date:   Thu Jan 17 23:50:45 2019 +0100

    selftest:Samba4: use 'smbcontrol samba shutdown'
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=13752
    
    Signed-off-by: Stefan Metzmacher <metze at samba.org>
    Reviewed-by: Björn Baumbach <bbaumbach at samba.org>
    
    Autobuild-User(master): Andreas Schneider <asn at cryptomilk.org>
    Autobuild-Date(master): Wed Jan 30 01:51:48 CET 2019 on sn-devel-144

commit 832776c0fcf7cc658c128765514755c2d15b06a6
Author: Stefan Metzmacher <metze at samba.org>
Date:   Thu Jan 17 16:27:10 2019 +0100

    s4:server: add support for 'smbcontrol samba shutdown'
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=13752
    
    Signed-off-by: Stefan Metzmacher <metze at samba.org>
    Reviewed-by: Björn Baumbach <bbaumbach at samba.org>

commit 5bd7a8e5685caa09067745b108ef7e53e3108e97
Author: Stefan Metzmacher <metze at samba.org>
Date:   Mon Jan 28 16:29:51 2019 +0100

    s4:server: avoid using pid=0 for the parent 'samba' process
    
    It confuses the 'samba-tool processes' output and log messages.
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=13752
    
    Signed-off-by: Stefan Metzmacher <metze at samba.org>
    Reviewed-by: Björn Baumbach <bbaumbach at samba.org>

commit 3a0c1da432c53de234b54bac90a3fb84534994eb
Author: Stefan Metzmacher <metze at samba.org>
Date:   Tue Jan 15 01:39:06 2019 +0100

    s4:messaging: add support 'smbcontrol <pid> debug/debuglevel'
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=13752
    
    Signed-off-by: Stefan Metzmacher <metze at samba.org>
    Reviewed-by: Björn Baumbach <bbaumbach at samba.org>

commit 12b9adec3ff48f4356f9ff865891dc3c652ff86b
Author: Stefan Metzmacher <metze at samba.org>
Date:   Thu Jan 17 16:29:37 2019 +0100

    manpages/samba.7.xml: smbcontrol can also work with 'samba'
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=13752
    
    Signed-off-by: Stefan Metzmacher <metze at samba.org>
    Reviewed-by: Björn Baumbach <bbaumbach at samba.org>

commit 7a7a5ccf501f89c530970bde072509ed86d7bd89
Author: Lukas Slebodnik <lslebodn at fedoraproject.org>
Date:   Tue Jan 22 10:04:02 2019 +0100

    ldb: The test api.py should not rely on order of entries in dict
    
    Test failed on s390x but there is a simple reproducer for any
    architecture.
    
    The built-in function repr returns the canonical string representation
    of the object. We needn't care about order attributes in string
    representation. Therefore test should pass for any order.
    
        for i in {1..30}; do
            PYTHONHASHSEED=random \
            python2 -c 'import ldb; msg = ldb.Message(); msg.dn = ldb.Dn(ldb.Ldb(), "dc=foo29"); msg["dc"] = b"foo"; print(repr(msg)) '
        done
    
      ======================================================================
      FAIL: test_repr (__main__.LdbMsgTests)
      ----------------------------------------------------------------------
      Traceback (most recent call last):
        File "tests/python/api.py", line 2322, in test_repr
          "Message({'dn': Dn('dc=foo29'), 'dc': MessageElement(['foo'])})")
      AssertionError: "Message({'dc': MessageElement(['foo']), 'dn': Dn('dc=foo29')})" != "Message({'dn': Dn('dc=foo29'), 'dc': MessageElement(['foo'])})"
      ----------------------------------------------------------------------
      Ran 1025 tests in 29.146s
      FAILED (failures=1)
    
    Signed-off-by: Lukas Slebodnik <lslebodn at fedoraproject.org>
    Reviewed-by: Douglas Bagnall <douglas.bagnall at catalyst.net.nz>
    Reviewed-by: Andreas Schneider <asn at samba.org>

commit 29f9618e38c42e8ccbabc5d2eedae94287c67355
Author: Stefan Metzmacher <metze at samba.org>
Date:   Wed Jan 23 09:32:08 2019 +0100

    dns.idl: fix DNS_RCODE from 0xF to 0x1F
    
    commit 74206984daa9c707a38675df88d6bbe660d876bc introduced
    TSIG related error codes up to DNS_RCODE_BADALG   = 0x15
    
    Signed-off-by: Stefan Metzmacher <metze at samba.org>
    Reviewed-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Andreas Schneider <asn at samba.org>

commit 0b66cf93f2c46e3ccb537757f8132894a6526b7b
Author: Stefan Metzmacher <metze at samba.org>
Date:   Wed Jan 23 09:31:17 2019 +0100

    python/tests/dns*: make use of dns.DNS_RCODE/dns.DNS_OPCODE
    
    Signed-off-by: Stefan Metzmacher <metze at samba.org>
    Reviewed-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Andreas Schneider <asn at samba.org>

commit 8e7b63a17112c012652d0c85ef8a45870e83d589
Author: David Mulder <dmulder at suse.com>
Date:   Sat Jan 26 08:53:18 2019 -0700

    'articles' variable causes a dependency loop
    
    This 'articles' variable contains
    'smbdotconf/parameters.all.xml' and causes a
    dependency loop when creating parameters.all.xml
    
    Signed-off-by: David Mulder <dmulder at suse.com>
    Reviewed-by: Andrew Bartlet <abartlet at samba.org>
    Reviewed-by: Noel Power <noel.power at suse.com>
    Reviewed-by: Andreas Schneider <asn at samba.org>

commit c0ed5bd05041e6a7a44c020588d9a1272f4be101
Author: Stefan Metzmacher <metze at samba.org>
Date:   Fri Jan 25 15:12:46 2019 +0100

    third_party/resolv_wrapper: fix HAVE_RESOLV_IPV6_NSADDRS for struct __res_state
    
    Signed-off-by: Stefan Metzmacher <metze at samba.org>
    Reviewed-by: Andreas Schneider <asn at samba.org>

commit b2050db67b47ab5d8ac9bf5b223b3a3289eb854e
Author: Stefan Metzmacher <metze at samba.org>
Date:   Sun Jan 27 20:27:42 2019 +0100

    wafsamba/replace: move __STDC_WANT_LIB_EXT1__ to CFLAGS
    
    This fixes the build of python bindings, which use memset_s()
    (via ZERO_STRUCT).
    
    In python bindings Python.h needs to be the first header, which means
    is already includes string.h. Defining __STDC_WANT_LIB_EXT1__ in
    replace.h is too late in that case.
    
    This fixes the --check-c-compiler=gcc --picky-developer on FreeBSD 12.
    
    Signed-off-by: Stefan Metzmacher <metze at samba.org>
    Reviewed-by: Andreas Schneider <asn at samba.org>

commit e49df24e80a1c0bc2a1cc46c026e2aebfd5d6ddd
Author: Stefan Metzmacher <metze at samba.org>
Date:   Fri Jan 25 23:52:34 2019 +0100

    replace: only include <sys/capability.h> with HAVE_POSIX_CAPABILITIES
    
    On FreeBSD <sys/capability.h> is a legacy wrapper to <sys/capsicum.h>,
    which implements something different. With FreeBSD 12 including
    <sys/capability.h> generates a compiler warning/error.
    
    Signed-off-by: Stefan Metzmacher <metze at samba.org>
    Reviewed-by: Andreas Schneider <asn at samba.org>

commit 8061983d4882f3ba3f12da71443b035d7b672eec
Author: Stefan Metzmacher <metze at samba.org>
Date:   Thu Jan 24 02:31:10 2019 +0100

    wscript: separate embedded_heimdal from system_heimdal
    
    This allows to default (embedded_heimdal) to build even with a
    broken krb5-config file from Heimdal.
    
    In the system_heimdal case we parse the content of krb5-config
    instead of just executing it. This fails on FreeBSD 12 as
    krb5-config contains iso-8859-1 characters, which can't be parsed
    as unicode python buffers when using python3.
    
    Fixing the system_heimdal case is a task for another day,
    I guess it will only work once we imported a current heimdal version
    and actually tested the system_heimdal case.
    
    Signed-off-by: Stefan Metzmacher <metze at samba.org>
    Reviewed-by: Andreas Schneider <asn at samba.org>

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

Summary of changes:
 buildtools/wafsamba/wscript             |  9 +++
 docs-xml/manpages/samba.7.xml           |  2 +-
 docs-xml/wscript_build                  |  4 +-
 lib/ldb/tests/python/api.py             | 14 +++--
 lib/replace/replace.h                   | 10 +++-
 lib/replace/system/capability.h         |  2 +
 librpc/idl/dns.idl                      |  3 +-
 python/samba/tests/dns_base.py          |  4 +-
 python/samba/tests/dns_forwarder.py     |  4 +-
 selftest/target/Samba4.pm               |  9 +++
 source4/heimdal_build/wscript_configure | 94 -------------------------------
 source4/lib/messaging/messaging.c       | 72 ++++++++++++++++++++++++
 source4/smbd/server.c                   | 39 ++++++++++++-
 third_party/resolv_wrapper/wscript      |  2 +-
 wscript                                 | 11 ++--
 wscript_configure_embedded_heimdal      |  1 +
 wscript_configure_system_heimdal        | 99 +++++++++++++++++++++++++++++++++
 17 files changed, 258 insertions(+), 121 deletions(-)
 create mode 100644 wscript_configure_embedded_heimdal
 create mode 100644 wscript_configure_system_heimdal


Changeset truncated at 500 lines:

diff --git a/buildtools/wafsamba/wscript b/buildtools/wafsamba/wscript
index 7b8fb01db5e..57d8a1504e1 100644
--- a/buildtools/wafsamba/wscript
+++ b/buildtools/wafsamba/wscript
@@ -444,6 +444,15 @@ def configure(conf):
     conf.DEFINE('_GNU_SOURCE', 1, add_to_cflags=True)
     conf.DEFINE('_XOPEN_SOURCE_EXTENDED', 1, add_to_cflags=True)
 
+    #
+    # Needs to be defined before std*.h and string*.h are included
+    # As Python.h already brings string.h we need it in CFLAGS.
+    # See memset_s() details here:
+    # https://en.cppreference.com/w/c/string/byte/memset
+    #
+    if conf.CHECK_CFLAGS(['-D__STDC_WANT_LIB_EXT1__=1'] + conf.env.WERROR_CFLAGS):
+        conf.ADD_CFLAGS('-D__STDC_WANT_LIB_EXT1__=1')
+
     # on Tru64 certain features are only available with _OSF_SOURCE set to 1
     # and _XOPEN_SOURCE set to 600
     if conf.env['SYSTEM_UNAME_SYSNAME'] == 'OSF1':
diff --git a/docs-xml/manpages/samba.7.xml b/docs-xml/manpages/samba.7.xml
index 5b72d659871..836ed23619f 100644
--- a/docs-xml/manpages/samba.7.xml
+++ b/docs-xml/manpages/samba.7.xml
@@ -166,7 +166,7 @@
 		<manvolnum>1</manvolnum></citerefentry></term>
 		<listitem><para><command>smbcontrol</command> is a utility
 		that can change the behaviour of running
-		<command>smbd</command>, <command>nmbd</command> and
+		<command>samba</command>, <command>smbd</command>, <command>nmbd</command> and
 		<command>winbindd</command> daemons.
 		</para></listitem>
 		</varlistentry>
diff --git a/docs-xml/wscript_build b/docs-xml/wscript_build
index 86600ae4a82..796b685c709 100644
--- a/docs-xml/wscript_build
+++ b/docs-xml/wscript_build
@@ -140,11 +140,11 @@ def smbdotconf_generate_parameter_list(task):
 # Since nothing really forces sorting in glob, we have to sort by file name
 # POSIX file systems aren't required to return sorted content but we want
 # smb.conf parameters to be sorted alphabetically
-sources = bld.path.ant_glob("smbdotconf/**/*.xml", flat=False)
+parameter_all = 'smbdotconf/parameters.all.xml'
+sources = bld.path.ant_glob("smbdotconf/**/*.xml", flat=False, excl=parameter_all)
 articles = " ".join(sorted([x.path_from(bld.path) for x in sources],
                            key=lambda m: m.split(os.sep)[-1]))
 
-parameter_all = 'smbdotconf/parameters.all.xml'
 bld.SAMBA_GENERATOR(parameter_all,
                     source=articles,
                     target=parameter_all,
diff --git a/lib/ldb/tests/python/api.py b/lib/ldb/tests/python/api.py
index 1d9f33f8f73..e8826b5af3b 100755
--- a/lib/ldb/tests/python/api.py
+++ b/lib/ldb/tests/python/api.py
@@ -2317,12 +2317,14 @@ class LdbMsgTests(TestCase):
                 "Message({'dc': MessageElement([b'foo']), 'dn': Dn('dc=foo29')}).text",
             ])
         else:
-            self.assertEqual(
-                repr(self.msg),
-                "Message({'dn': Dn('dc=foo29'), 'dc': MessageElement(['foo'])})")
-            self.assertEqual(
-                repr(self.msg.text),
-                "Message({'dn': Dn('dc=foo29'), 'dc': MessageElement(['foo'])}).text")
+            self.assertIn(repr(self.msg), [
+                "Message({'dn': Dn('dc=foo29'), 'dc': MessageElement(['foo'])})",
+                "Message({'dc': MessageElement(['foo']), 'dn': Dn('dc=foo29')})",
+            ])
+            self.assertIn(repr(self.msg.text), [
+                "Message({'dn': Dn('dc=foo29'), 'dc': MessageElement(['foo'])}).text",
+                "Message({'dc': MessageElement(['foo']), 'dn': Dn('dc=foo29')}).text",
+            ])
 
     def test_len(self):
         self.assertEqual(0, len(self.msg))
diff --git a/lib/replace/replace.h b/lib/replace/replace.h
index 76898f013f8..212ed265d4a 100644
--- a/lib/replace/replace.h
+++ b/lib/replace/replace.h
@@ -36,8 +36,14 @@
 #include <standards.h>
 #endif
 
-/* Needs to be defined before std*.h and string*.h are included */
-#define __STDC_WANT_LIB_EXT1__ 1
+/*
+ * Needs to be defined before std*.h and string*.h are included
+ * As it's also needed when Python.h is the first header we
+ * require a global -D__STDC_WANT_LIB_EXT1__=1
+ */
+#ifndef __STDC_WANT_LIB_EXT1__
+#error -D__STDC_WANT_LIB_EXT1__=1 required
+#endif
 
 #include <stdio.h>
 #include <stdlib.h>
diff --git a/lib/replace/system/capability.h b/lib/replace/system/capability.h
index a7b78f02756..44b8d5127a9 100644
--- a/lib/replace/system/capability.h
+++ b/lib/replace/system/capability.h
@@ -37,7 +37,9 @@
 #define BROKEN_RHEL5_SYS_CAP_HEADER_WORKAROUND
 #endif
 
+#ifdef HAVE_POSIX_CAPABILITIES
 #include <sys/capability.h>
+#endif
 
 #ifdef BROKEN_RHEL5_SYS_CAP_HEADER_WORKAROUND
 #undef _LINUX_TYPES_H
diff --git a/librpc/idl/dns.idl b/librpc/idl/dns.idl
index 8e8eed5ab23..c47a40344f2 100644
--- a/librpc/idl/dns.idl
+++ b/librpc/idl/dns.idl
@@ -23,8 +23,7 @@ interface dns
 	const int DNS_MAX_LABEL_LENGTH   = 63;
 
 	typedef [public,bitmap16bit] bitmap {
-		DNS_RCODE                   = 0x000F,
-		DNS_FLAG_BROADCAST          = 0x0010,
+		DNS_RCODE                   = 0x001F,
 		DNS_FLAG_RECURSION_AVAIL    = 0x0080,
 		DNS_FLAG_RECURSION_DESIRED  = 0x0100,
 		DNS_FLAG_TRUNCATION         = 0x0200,
diff --git a/python/samba/tests/dns_base.py b/python/samba/tests/dns_base.py
index 56c02dd6e51..ddd8b4efd1a 100644
--- a/python/samba/tests/dns_base.py
+++ b/python/samba/tests/dns_base.py
@@ -68,13 +68,13 @@ class DNSTest(TestCaseInTempDir):
 
     def assert_dns_rcode_equals(self, packet, rcode):
         "Helper function to check return code"
-        p_errcode = packet.operation & 0x000F
+        p_errcode = packet.operation & dns.DNS_RCODE
         self.assertEquals(p_errcode, rcode, "Expected RCODE %s, got %s" %
                           (self.errstr(rcode), self.errstr(p_errcode)))
 
     def assert_dns_opcode_equals(self, packet, opcode):
         "Helper function to check opcode"
-        p_opcode = packet.operation & 0x7800
+        p_opcode = packet.operation & dns.DNS_OPCODE
         self.assertEquals(p_opcode, opcode, "Expected OPCODE %s, got %s" %
                           (opcode, p_opcode))
 
diff --git a/python/samba/tests/dns_forwarder.py b/python/samba/tests/dns_forwarder.py
index 8178678e885..65616898172 100644
--- a/python/samba/tests/dns_forwarder.py
+++ b/python/samba/tests/dns_forwarder.py
@@ -81,13 +81,13 @@ class DNSTest(TestCase):
 
     def assert_dns_rcode_equals(self, packet, rcode):
         "Helper function to check return code"
-        p_errcode = packet.operation & 0x000F
+        p_errcode = packet.operation & dns.DNS_RCODE
         self.assertEquals(p_errcode, rcode, "Expected RCODE %s, got %s" %
                           (self.errcodes[rcode], self.errcodes[p_errcode]))
 
     def assert_dns_opcode_equals(self, packet, opcode):
         "Helper function to check opcode"
-        p_opcode = packet.operation & 0x7800
+        p_opcode = packet.operation & dns.DNS_OPCODE
         self.assertEquals(p_opcode, opcode, "Expected OPCODE %s, got %s" %
                           (opcode, p_opcode))
 
diff --git a/selftest/target/Samba4.pm b/selftest/target/Samba4.pm
index f2635e574cd..b662776a847 100755
--- a/selftest/target/Samba4.pm
+++ b/selftest/target/Samba4.pm
@@ -2221,6 +2221,15 @@ sub teardown_env_terminate($$)
 	my ($self, $envvars) = @_;
 	my $pid;
 
+	# This should cause samba to terminate gracefully
+	my $smbcontrol = Samba::bindir_path($self, "smbcontrol");
+	my $cmd = "";
+	$cmd .= "$smbcontrol samba shutdown $envvars->{CONFIGURATION}";
+	my $ret = system($cmd);
+	if ($ret != 0) {
+		warn "'$cmd' failed with '$ret'\n";
+	}
+
 	# This should cause samba to terminate gracefully
 	close($envvars->{STDIN_PIPE});
 
diff --git a/source4/heimdal_build/wscript_configure b/source4/heimdal_build/wscript_configure
index 4d4e6a0cff9..903fb5139db 100644
--- a/source4/heimdal_build/wscript_configure
+++ b/source4/heimdal_build/wscript_configure
@@ -164,97 +164,3 @@ conf.define('HAVE_KRB5_PRINCIPAL_GET_TYPE', 1)
 conf.define('HAVE_KRB5_WARNX', 1)
 conf.define('HAVE_KRB5_PROMPT_TYPE', 1)
 
-heimdal_includedirs = []
-heimdal_libdirs = []
-krb5_config = conf.find_program("krb5-config.heimdal", var="HEIMDAL_KRB5_CONFIG")
-if not krb5_config:
-    krb5_config = conf.find_program("krb5-config", var="HEIMDAL_KRB5_CONFIG")
-if krb5_config:
-    # Not ideal, but seems like the best way to get at these paths:
-    f = open(krb5_config[0], 'r')
-    try:
-        for l in f:
-            if l.startswith("libdir="):
-                heimdal_libdirs.append(l.strip()[len("libdir="):])
-            elif l.startswith("includedir="):
-                include_path = l.strip()[len("includedir="):]
-                heimdal_includedirs.append(include_path)
-                conf.define('HEIMDAL_KRB5_TYPES_PATH',
-                            include_path + "/krb5-types.h")
-    finally:
-        f.close()
-
-def check_system_heimdal_lib(name, functions='', headers='', onlyif=None):
-    # Only use system library if the user requested the bundled one not be
-    # used.
-    if conf.LIB_MAY_BE_BUNDLED(name):
-        return False
-    setattr(conf.env, "CPPPATH_%s" % name.upper(), heimdal_includedirs)
-    setattr(conf.env, "LIBPATH_%s" % name.upper(), heimdal_libdirs)
-    if not conf.CHECK_BUNDLED_SYSTEM(name, checkfunctions=functions, headers=headers,
-                                     onlyif=onlyif):
-        return False
-    conf.define('USING_SYSTEM_%s' % name.upper(), 1)
-    return True
-
-def check_system_heimdal_binary(name):
-    if conf.LIB_MAY_BE_BUNDLED(name):
-        return False
-    if not conf.find_program(name, var=name.upper()):
-        return False
-    conf.define('USING_SYSTEM_%s' % name.upper(), 1)
-    return True
-
-check_system_heimdal_lib("com_err", "com_right_r com_err", "com_err.h")
-
-if check_system_heimdal_lib("roken", "rk_socket_set_reuseaddr", "roken.h"):
-    conf.env.CPPPATH_ROKEN_HOSTCC = conf.env.CPPPATH_ROKEN
-    conf.env.LIBPATH_ROKEN_HOSTCC = conf.env.LIBPATH_ROKEN
-    conf.env.LIB_ROKEN_HOSTCC = "roken"
-    conf.SET_TARGET_TYPE("ROKEN_HOSTCC", 'SYSLIB')
-
-# Make sure HAVE_CONFIG_H is unset, as the system Heimdal headers use it
-# and include config.h if it is set, resulting in failure (since config.h
-# doesn't yet exist)
-
-DEFINES = list(conf.env.DEFINES)
-conf.undefine("HAVE_CONFIG_H")
-while "HAVE_CONFIG_H=1" in conf.env.DEFINES:
-    conf.env.DEFINES.remove("HAVE_CONFIG_H=1")
-try:
-    check_system_heimdal_lib("wind", "wind_stringprep", "wind.h", onlyif="roken")
-    check_system_heimdal_lib("hx509", "hx509_bitstring_print", "hx509.h", onlyif="roken wind")
-    check_system_heimdal_lib("asn1", "initialize_asn1_error_table", "asn1_err.h", onlyif="roken com_err")
-    check_system_heimdal_lib("heimbase", "heim_cmp", "heimbase.h", onlyif="roken")
-    check_system_heimdal_lib("hcrypto", "MD4_Init", "hcrypto/md4.h",
-        onlyif="asn1 roken com_err")
-    if check_system_heimdal_lib("krb5", "krb5_anyaddr", "krb5.h",
-        onlyif="roken wind asn1 hx509 hcrypto com_err heimbase"):
-        conf.CHECK_FUNCS_IN('krb5_free_unparsed_name', 'krb5', headers="krb5.h")
-    check_system_heimdal_lib("gssapi", "gss_oid_to_name", "gssapi.h",
-        onlyif="hcrypto asn1 roken krb5 com_err wind")
-    check_system_heimdal_lib("heimntlm", "heim_ntlm_ntlmv2_key", "heimntlm.h",
-        onlyif="roken hcrypto krb5")
-    if check_system_heimdal_lib("hdb", "hdb_db_dir", "krb5.h hdb.h",
-        onlyif="roken krb5 hcrypto com_err wind"):
-        conf.CHECK_CODE('''
-            #include <hdb.h>
-            int main(void) { hdb_enctype2key(NULL, NULL, NULL, 0, NULL); }
-            ''',
-            define='HDB_ENCTYPE2KEY_TAKES_KEYSET',
-            addmain=False,
-            lib='hdb',
-            msg='Checking whether hdb_enctype2key takes a keyset argument',
-            local_include=False)
-
-    check_system_heimdal_lib("kdc", "kdc_log", "kdc.h",
-        onlyif="roken krb5 hdb asn1 heimntlm hcrypto com_err wind heimbase")
-finally:
-    conf.env.DEFINES = DEFINES
-
-# With the proper checks in place we should be able to build against the system libtommath.
-#if conf.CHECK_BUNDLED_SYSTEM('tommath', checkfunctions='mp_init', headers='tommath.h'):
-#    conf.define('USING_SYSTEM_TOMMATH', 1)
-
-check_system_heimdal_binary("compile_et")
-check_system_heimdal_binary("asn1_compile")
diff --git a/source4/lib/messaging/messaging.c b/source4/lib/messaging/messaging.c
index 6c10289515f..6cf58539a75 100644
--- a/source4/lib/messaging/messaging.c
+++ b/source4/lib/messaging/messaging.c
@@ -121,6 +121,68 @@ static void ringbuf_log_msg(struct imessaging_context *msg,
 	imessaging_send(msg, src, MSG_RINGBUF_LOG, &blob);
 }
 
+/****************************************************************************
+ Receive a "set debug level" message.
+****************************************************************************/
+
+static void debug_imessage(struct imessaging_context *msg_ctx,
+			   void *private_data,
+			   uint32_t msg_type,
+			   struct server_id src,
+			   DATA_BLOB *data)
+{
+	const char *params_str = (const char *)data->data;
+	struct server_id_buf src_buf;
+	struct server_id dst = imessaging_get_server_id(msg_ctx);
+	struct server_id_buf dst_buf;
+
+	/* Check, it's a proper string! */
+	if (params_str[(data->length)-1] != '\0') {
+		DBG_ERR("Invalid debug message from pid %s to pid %s\n",
+			server_id_str_buf(src, &src_buf),
+			server_id_str_buf(dst, &dst_buf));
+		return;
+	}
+
+	DBG_ERR("INFO: Remote set of debug to `%s' (pid %s from pid %s)\n",
+		params_str,
+		server_id_str_buf(dst, &dst_buf),
+		server_id_str_buf(src, &src_buf));
+
+	debug_parse_levels(params_str);
+}
+
+/****************************************************************************
+ Return current debug level.
+****************************************************************************/
+
+static void debuglevel_imessage(struct imessaging_context *msg_ctx,
+				void *private_data,
+				uint32_t msg_type,
+				struct server_id src,
+				DATA_BLOB *data)
+{
+	char *message = debug_list_class_names_and_levels();
+	DATA_BLOB blob = data_blob_null;
+	struct server_id_buf src_buf;
+	struct server_id dst = imessaging_get_server_id(msg_ctx);
+	struct server_id_buf dst_buf;
+
+	DBG_DEBUG("Received REQ_DEBUGLEVEL message (pid %s from pid %s)\n",
+		  server_id_str_buf(dst, &dst_buf),
+		  server_id_str_buf(src, &src_buf));
+
+	if (message == NULL) {
+		DBG_ERR("debug_list_class_names_and_levels returned NULL\n");
+		return;
+	}
+
+	blob = data_blob_string_const_null(message);
+	imessaging_send(msg_ctx, src, MSG_DEBUGLEVEL, &blob);
+
+	TALLOC_FREE(message);
+}
+
 /*
   return uptime of messaging server via irpc
 */
@@ -460,6 +522,16 @@ struct imessaging_context *imessaging_init(TALLOC_CTX *mem_ctx,
 	if (!NT_STATUS_IS_OK(status)) {
 		goto fail;
 	}
+	status = imessaging_register(msg, NULL, MSG_DEBUG,
+				     debug_imessage);
+	if (!NT_STATUS_IS_OK(status)) {
+		goto fail;
+	}
+	status = imessaging_register(msg, NULL, MSG_REQ_DEBUGLEVEL,
+				     debuglevel_imessage);
+	if (!NT_STATUS_IS_OK(status)) {
+		goto fail;
+	}
 	status = IRPC_REGISTER(msg, irpc, IRPC_UPTIME, irpc_uptime, msg);
 	if (!NT_STATUS_IS_OK(status)) {
 		goto fail;
diff --git a/source4/smbd/server.c b/source4/smbd/server.c
index 626123bc9b0..cf860491c1a 100644
--- a/source4/smbd/server.c
+++ b/source4/smbd/server.c
@@ -45,6 +45,7 @@
 #include "libds/common/roles.h"
 #include "lib/util/tfork.h"
 #include "dsdb/samdb/ldb_modules/util.h"
+#include "lib/util/server_id.h"
 
 #ifdef HAVE_PTHREAD
 #include <pthread.h>
@@ -291,6 +292,31 @@ static int prime_ldb_databases(struct tevent_context *event_ctx, bool *am_backup
 	return LDB_SUCCESS;
 }
 
+/*
+  called from 'smbcontrol samba shutdown'
+ */
+static void samba_parent_shutdown(struct imessaging_context *msg,
+				  void *private_data,
+				  uint32_t msg_type,
+				  struct server_id src,
+				  DATA_BLOB *data)
+{
+	struct server_state *state =
+		talloc_get_type_abort(private_data,
+		struct server_state);
+	struct server_id_buf src_buf;
+	struct server_id dst = imessaging_get_server_id(msg);
+	struct server_id_buf dst_buf;
+
+	DBG_ERR("samba_shutdown of %s %s: from %s\n",
+		state->binary_name,
+		server_id_str_buf(dst, &dst_buf),
+		server_id_str_buf(src, &src_buf));
+
+	TALLOC_FREE(state);
+	exit(0);
+}
+
 /*
   called when a fatal condition occurs in a child task
  */
@@ -316,7 +342,7 @@ static NTSTATUS setup_parent_messaging(struct server_state *state,
 
 	msg = imessaging_init(state->event_ctx,
 			      lp_ctx,
-			      cluster_id(0, SAMBA_PARENT_TASKID),
+			      cluster_id(getpid(), SAMBA_PARENT_TASKID),
 			      state->event_ctx);
 	NT_STATUS_HAVE_NO_MEMORY(msg);
 
@@ -325,10 +351,19 @@ static NTSTATUS setup_parent_messaging(struct server_state *state,
 		return status;
 	}
 
+	status = imessaging_register(msg, state, MSG_SHUTDOWN,
+				     samba_parent_shutdown);
+	if (!NT_STATUS_IS_OK(status)) {
+		return status;
+	}
+
 	status = IRPC_REGISTER(msg, irpc, SAMBA_TERMINATE,
 			       samba_terminate, state);
+	if (!NT_STATUS_IS_OK(status)) {
+		return status;
+	}
 
-	return status;
+	return NT_STATUS_OK;
 }
 
 
diff --git a/third_party/resolv_wrapper/wscript b/third_party/resolv_wrapper/wscript
index 93fec427b5d..6bd2d51db41 100644
--- a/third_party/resolv_wrapper/wscript
+++ b/third_party/resolv_wrapper/wscript
@@ -28,7 +28,7 @@ def configure(conf):
 
         conf.CHECK_HEADERS('resolv.h')
 
-        conf.CHECK_STRUCTURE_MEMBER('struct _res_state',
+        conf.CHECK_STRUCTURE_MEMBER('struct __res_state',
                                     '_u._ext.nsaddrs',
                                     headers='resolv.h',
                                     define='HAVE_RESOLV_IPV6_NSADDRS')
diff --git a/wscript b/wscript
index e38a8e9aecf..4a5fc421baa 100644
--- a/wscript
+++ b/wscript
@@ -246,14 +246,11 @@ def configure(conf):
                                  'hx509', 'wind', 'gssapi', 'hcrypto',
                                  'krb5', 'heimbase', 'asn1_compile',
                                  'compile_et', 'kdc', 'hdb', 'heimntlm')
+        conf.PROCESS_SEPARATE_RULE('system_heimdal')
+
+    if not conf.CONFIG_GET('KRB5_VENDOR'):
+        conf.PROCESS_SEPARATE_RULE('embedded_heimdal')
 
-    # Only process heimdal_build for non-MIT KRB5 builds
-    # When MIT KRB5 checks are done as above, conf.env.KRB5_VENDOR will be set
-    # to the lowcased output of 'krb5-config --vendor'.
-    # If it is not set or the output is 'heimdal', we are dealing with
-    # system-provided or embedded Heimdal build
-    if conf.CONFIG_GET('KRB5_VENDOR') in (None, 'heimdal'):
-        conf.RECURSE('source4/heimdal_build')
     conf.RECURSE('source4/lib/tls')
     conf.RECURSE('source4/dsdb/samdb/ldb_modules')
     conf.RECURSE('source4/ntvfs/sysdep')
diff --git a/wscript_configure_embedded_heimdal b/wscript_configure_embedded_heimdal
new file mode 100644
index 00000000000..8c55ae2a938
--- /dev/null
+++ b/wscript_configure_embedded_heimdal
@@ -0,0 +1 @@
+conf.RECURSE('source4/heimdal_build')
diff --git a/wscript_configure_system_heimdal b/wscript_configure_system_heimdal
new file mode 100644
index 00000000000..0ff6dad2f55
--- /dev/null
+++ b/wscript_configure_system_heimdal
@@ -0,0 +1,99 @@


-- 
Samba Shared Repository



More information about the samba-cvs mailing list