[SCM] Samba Shared Repository - branch master updated

Jeremy Allison jra at samba.org
Tue Apr 22 20:45:03 MDT 2014


The branch, master has been updated
       via  720f763 ad-dc: use exit_daemon() to communicate status of startup to systemd
       via  7496954 winbindd: use exit_daemon() to pass startup status to systemd
       via  6771c23 nmbd: use exit_daemon() to report status to systemd
       via  02a3b59 smbd: use exit_daemon() to support reporting to systemd from smbd
       via  aa8c8a7 add systemd integration
      from  13784b7 s3:smbd: fix typo in comment for set_conn_force_user_group()

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


- Log -----------------------------------------------------------------
commit 720f7639e43514d37c14da067389c421811279fa
Author: Alexander Bokovoy <ab at samba.org>
Date:   Wed Mar 26 12:30:30 2014 +0200

    ad-dc: use exit_daemon() to communicate status of startup to systemd
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=10517
    
    Signed-off-by: Alexander Bokovoy <ab at samba.org>
    Reviewed-by: Andreas Schneider <asn at samba.org>
    
    Autobuild-User(master): Jeremy Allison <jra at samba.org>
    Autobuild-Date(master): Wed Apr 23 04:44:46 CEST 2014 on sn-devel-104

commit 7496954a942c7736efa5b7a164585783b03b6151
Author: Alexander Bokovoy <ab at samba.org>
Date:   Wed Mar 26 11:45:21 2014 +0200

    winbindd: use exit_daemon() to pass startup status to systemd
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=10517
    
    Signed-off-by: Alexander Bokovoy <ab at samba.org>
    Reviewed-by: Andreas Schneider <asn at samba.org>

commit 6771c23aa06d824028c26eafedab7d4fb1711d4f
Author: Alexander Bokovoy <ab at samba.org>
Date:   Wed Mar 26 11:34:56 2014 +0200

    nmbd: use exit_daemon() to report status to systemd
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=10517
    
    Signed-off-by: Alexander Bokovoy <ab at samba.org>
    Reviewed-by: Andreas Schneider <asn at samba.org>

commit 02a3b598a5294f74886531156646e55067ac0251
Author: Alexander Bokovoy <ab at samba.org>
Date:   Wed Mar 26 10:56:12 2014 +0200

    smbd: use exit_daemon() to support reporting to systemd from smbd
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=10517
    
    Signed-off-by: Alexander Bokovoy <ab at samba.org>
    Reviewed-by: Andreas Schneider <asn at samba.org>

commit aa8c8a7b5b062b36a74a505aa48ba7dc5141aa55
Author: Alexander Bokovoy <ab at samba.org>
Date:   Tue Mar 25 12:53:04 2014 +0200

    add systemd integration
    
    Add --with-systemd / --without-systemd options to check whether
    libsystemd-daemon library is available and use it to report service
    startup status to systemd for smbd/winbindd/nmbd and AD DC.
    
    The problem it solves is correct reporting of the Samba services
    at the point when they are ready to serve clients, important for
    high availability software integration.
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=10517
    
    Signed-off-by: Alexander Bokovoy <ab at samba.org>
    Reviewed-by: Andreas Schneider <asn at samba.org>

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

Summary of changes:
 lib/util/become_daemon.c          |   37 +++++++++++++++++++++++++++-
 lib/util/samba_util.h             |   12 +++++++++
 lib/util/wscript_build            |    2 +-
 packaging/systemd/nmb.service     |    3 +-
 packaging/systemd/samba.service   |    3 +-
 packaging/systemd/smb.service     |    3 +-
 packaging/systemd/winbind.service |    3 +-
 source3/nmbd/nmbd.c               |   43 ++++++++++++++-------------------
 source3/smbd/server.c             |   48 +++++++++++++++++-------------------
 source3/winbindd/winbindd.c       |   18 +++++++-------
 source4/smbd/server.c             |   23 ++++++++---------
 wscript                           |   26 +++++++++++++++++--
 12 files changed, 141 insertions(+), 80 deletions(-)


Changeset truncated at 500 lines:

diff --git a/lib/util/become_daemon.c b/lib/util/become_daemon.c
index 2ca0478..35c8b32 100644
--- a/lib/util/become_daemon.c
+++ b/lib/util/become_daemon.c
@@ -24,6 +24,9 @@
 #include "includes.h"
 #include "system/filesys.h"
 #include "system/locale.h"
+#if HAVE_SYSTEMD
+#include <systemd/sd-daemon.h>
+#endif
 
 /*******************************************************************
  Close the low 3 fd's and open dev/null in their place.
@@ -75,8 +78,13 @@ _PUBLIC_ void close_low_fds(bool stdin_too, bool stdout_too, bool stderr_too)
 
 _PUBLIC_ void become_daemon(bool do_fork, bool no_process_group, bool log_stdout)
 {
+	pid_t newpid;
 	if (do_fork) {
-		if (fork()) {
+		newpid = fork();
+		if (newpid) {
+#if HAVE_SYSTEMD
+			sd_notifyf(0, "READY=0\nSTATUS=Starting process...\nMAINPID=%lu", (unsigned long) newpid);
+#endif /* HAVE_SYSTEMD */
 			_exit(0);
 		}
 	}
@@ -100,3 +108,30 @@ _PUBLIC_ void become_daemon(bool do_fork, bool no_process_group, bool log_stdout
 	 * never close stderr (but debug might dup it onto a log file) */
 	close_low_fds(do_fork, !log_stdout, false);
 }
+
+_PUBLIC_ void exit_daemon(const char *msg, int error)
+{
+#ifdef HAVE_SYSTEMD
+	if (msg == NULL) {
+		msg = strerror(error);
+	}
+
+	sd_notifyf(0, "STATUS=daemon failed to start: %s\n"
+				  "ERRNO=%i",
+				  msg,
+				  error);
+#endif
+	DEBUG(0, ("STATUS=daemon failed to start: %s, error code %d\n", msg, error));
+	exit(1);
+}
+
+_PUBLIC_ void daemon_ready(const char *daemon)
+{
+	if (daemon == NULL) {
+		daemon = "Samba";
+	}
+#ifdef HAVE_SYSTEMD
+	sd_notifyf(0, "READY=1\nSTATUS=%s: ready to serve connections...", daemon);
+#endif
+	DEBUG(0, ("STATUS=daemon '%s' finished starting up and ready to serve connections", daemon));
+}
diff --git a/lib/util/samba_util.h b/lib/util/samba_util.h
index dcb92ee..e3fe6a6 100644
--- a/lib/util/samba_util.h
+++ b/lib/util/samba_util.h
@@ -842,6 +842,18 @@ _PUBLIC_ void close_low_fds(bool stdin_too, bool stdout_too, bool stderr_too);
 _PUBLIC_ void become_daemon(bool do_fork, bool no_process_group, bool log_stdout);
 
 /**
+ Exit daemon and print error message to the log at level 0
+ Optionally report failure to systemd if systemd integration is enabled
+**/
+_PUBLIC_ void exit_daemon(const char *msg, int error);
+
+/**
+ Report that the daemon is ready to serve connections to the log at level 0
+ Optionally report status to systemd if systemd integration is enabled
+**/
+_PUBLIC_ void daemon_ready(const char *daemon);
+
+/**
  * @brief Get a password from the console.
  *
  * You should make sure that the buffer is an empty string!
diff --git a/lib/util/wscript_build b/lib/util/wscript_build
index a45dbde..fe2c183 100755
--- a/lib/util/wscript_build
+++ b/lib/util/wscript_build
@@ -10,7 +10,7 @@ bld.SAMBA_LIBRARY('samba-util',
                     server_id.c dprintf.c parmlist.c bitmap.c pidfile.c
                     tevent_debug.c util_process.c''',
                   deps='DYNCONFIG',
-                  public_deps='talloc tevent execinfo pthread LIBCRYPTO charset util_setid',
+                  public_deps='talloc tevent execinfo pthread LIBCRYPTO charset util_setid systemd-daemon',
                   public_headers='debug.h attr.h byteorder.h data_blob.h memory.h safe_string.h time.h talloc_stack.h xfile.h dlinklist.h samba_util.h string_wrappers.h',
                   header_path= [ ('dlinklist.h samba_util.h', '.'), ('*', 'util') ],
                   local_include=False,
diff --git a/packaging/systemd/nmb.service b/packaging/systemd/nmb.service
index e5e81a1..3d71a7d 100644
--- a/packaging/systemd/nmb.service
+++ b/packaging/systemd/nmb.service
@@ -3,7 +3,8 @@ Description=Samba NMB Daemon
 After=syslog.target network.target
 
 [Service]
-Type=forking
+Type=notify
+NotifyAccess=all
 PIDFile=/run/nmbd.pid
 EnvironmentFile=-/etc/sysconfig/samba
 ExecStart=/usr/sbin/nmbd $NMBDOPTIONS
diff --git a/packaging/systemd/samba.service b/packaging/systemd/samba.service
index e2878d1..824f89c 100644
--- a/packaging/systemd/samba.service
+++ b/packaging/systemd/samba.service
@@ -3,7 +3,8 @@ Description=Samba AD Daemon
 After=syslog.target network.target
 
 [Service]
-Type=forking
+Type=notify
+NotifyAccess=all
 PIDFile=/run/samba.pid
 LimitNOFILE=16384
 EnvironmentFile=-/etc/sysconfig/samba
diff --git a/packaging/systemd/smb.service b/packaging/systemd/smb.service
index d0d945a..9810891 100644
--- a/packaging/systemd/smb.service
+++ b/packaging/systemd/smb.service
@@ -3,7 +3,8 @@ Description=Samba SMB Daemon
 After=syslog.target network.target nmb.service winbind.service
 
 [Service]
-Type=forking
+Type=notify
+NotifyAccess=all
 PIDFile=/run/smbd.pid
 LimitNOFILE=16384
 EnvironmentFile=-/etc/sysconfig/samba
diff --git a/packaging/systemd/winbind.service b/packaging/systemd/winbind.service
index eff266f..f711a17 100644
--- a/packaging/systemd/winbind.service
+++ b/packaging/systemd/winbind.service
@@ -3,7 +3,8 @@ Description=Samba Winbind Daemon
 After=syslog.target network.target nmb.service
 
 [Service]
-Type=forking
+Type=notify
+NotifyAccess=all
 PIDFile=/run/winbindd.pid
 EnvironmentFile=-/etc/sysconfig/samba
 ExecStart=/usr/sbin/winbindd "$WINBINDOPTIONS"
diff --git a/source3/nmbd/nmbd.c b/source3/nmbd/nmbd.c
index 80c2329..500ba85 100644
--- a/source3/nmbd/nmbd.c
+++ b/source3/nmbd/nmbd.c
@@ -975,16 +975,12 @@ static bool open_sockets(bool isdaemon, int port)
 
 	ok = directory_create_or_exist(lp_lock_directory(), geteuid(), 0755);
 	if (!ok) {
-		DEBUG(0, ("Failed to create directory %s for lock files - %s\n",
-			  lp_lock_directory(), strerror(errno)));
-		exit(1);
+		exit_daemon("Failed to create directory for lock files, check 'lock directory'", errno);
 	}
 
 	ok = directory_create_or_exist(lp_pid_directory(), geteuid(), 0755);
 	if (!ok) {
-		DEBUG(0, ("Failed to create directory %s for pid files - %s\n",
-			  lp_pid_directory(), strerror(errno)));
-		exit(1);
+		exit_daemon("Failed to create directory for pid files, check 'pid directory'", errno);
 	}
 
 	pidfile_create(lp_pid_directory(), "nmbd");
@@ -993,8 +989,7 @@ static bool open_sockets(bool isdaemon, int port)
 				   false);
 
 	if (!NT_STATUS_IS_OK(status)) {
-		DEBUG(0,("reinit_after_fork() failed\n"));
-		exit(1);
+		exit_daemon("reinit_after_fork() failed", map_errno_from_nt_status(status));
 	}
 
 	/*
@@ -1004,16 +999,15 @@ static bool open_sockets(bool isdaemon, int port)
 	 */
 	status = init_before_fork();
 	if (!NT_STATUS_IS_OK(status)) {
-		DEBUG(0, ("init_before_fork failed: %s\n", nt_errstr(status)));
-		exit(1);
+		exit_daemon(nt_errstr(status), map_errno_from_nt_status(status));
 	}
 
 	if (!nmbd_setup_sig_term_handler(msg))
-		exit(1);
+		exit_daemon("NMBD failed to setup signal handler", EINVAL);
 	if (!nmbd_setup_stdin_handler(msg, !Fork))
-		exit(1);
+		exit_daemon("NMBD failed to setup stdin handler", EINVAL);
 	if (!nmbd_setup_sig_hup_handler(msg))
-		exit(1);
+		exit_daemon("NMBD failed to setup SIGHUP handler", EINVAL);
 
 	/* get broadcast messages */
 
@@ -1021,8 +1015,7 @@ static bool open_sockets(bool isdaemon, int port)
 				FLAG_MSG_GENERAL |
 				FLAG_MSG_NMBD |
 				FLAG_MSG_DBWRAP)) {
-		DEBUG(1, ("Could not register myself in serverid.tdb\n"));
-		exit(1);
+		exit_daemon("Could not register NMBD process in serverid.tdb", EACCES);
 	}
 
 	messaging_register(msg, NULL, MSG_FORCE_ELECTION,
@@ -1053,9 +1046,8 @@ static bool open_sockets(bool isdaemon, int port)
 
 	/* Create an nmbd subnet record for each of the above. */
 	if( False == create_subnets() ) {
-		DEBUG(0,("ERROR: Failed when creating subnet lists. Exiting.\n"));
 		kill_async_dns_child();
-		exit(1);
+		exit_daemon("NMBD failed when creating subnet lists", EACCES);
 	}
 
 	/* Load in any static local names. */ 
@@ -1067,9 +1059,8 @@ static bool open_sockets(bool isdaemon, int port)
 
 	/* If we are acting as a WINS server, initialise data structures. */
 	if( !initialise_wins() ) {
-		DEBUG( 0, ( "nmbd: Failed when initialising WINS server.\n" ) );
 		kill_async_dns_child();
-		exit(1);
+		exit_daemon( "NMBD failed when initialising WINS server.", EACCES);
 	}
 
 	/* 
@@ -1081,21 +1072,23 @@ static bool open_sockets(bool isdaemon, int port)
 	 */
 
 	if( False == register_my_workgroup_and_names() ) {
-		DEBUG(0,("ERROR: Failed when creating my my workgroup. Exiting.\n"));
 		kill_async_dns_child();
-		exit(1);
+		exit_daemon( "NMBD failed when creating my workgroup.", EACCES);
 	}
 
 	if (!initialize_nmbd_proxy_logon()) {
-		DEBUG(0,("ERROR: Failed setup nmbd_proxy_logon.\n"));
 		kill_async_dns_child();
-		exit(1);
+		exit_daemon( "NMBD failed to setup nmbd_proxy_logon.", EACCES);
 	}
 
 	if (!nmbd_init_packet_server()) {
 		kill_async_dns_child();
-                exit(1);
-        }
+		exit_daemon( "NMBD failed to setup packet server.", EACCES);
+	}
+
+	if (is_daemon && !opt_interactive) {
+		daemon_ready("nmbd");
+	}
 
 	TALLOC_FREE(frame);
 	process(msg);
diff --git a/source3/smbd/server.c b/source3/smbd/server.c
index bc9d293..96580ba 100644
--- a/source3/smbd/server.c
+++ b/source3/smbd/server.c
@@ -1356,8 +1356,7 @@ extern void build_options(bool screen);
 				   ev_ctx,
 				   false);
 	if (!NT_STATUS_IS_OK(status)) {
-		DEBUG(0,("reinit_after_fork() failed\n"));
-		exit(1);
+		exit_daemon("reinit_after_fork() failed", map_errno_from_nt_status(status));
 	}
 
 	if (!interactive) {
@@ -1368,8 +1367,7 @@ extern void build_options(bool screen);
 		 */
 		status = init_before_fork();
 		if (!NT_STATUS_IS_OK(status)) {
-			DEBUG(0, ("init_before_fork failed: %s\n", nt_errstr(status)));
-			exit(1);
+			exit_daemon(nt_errstr(status), map_errno_from_nt_status(status));
 		}
 	}
 
@@ -1402,7 +1400,7 @@ extern void build_options(bool screen);
 	/* Setup all the TDB's - including CLEAR_IF_FIRST tdb's. */
 
 	if (smbd_memcache() == NULL) {
-		exit(1);
+		exit_daemon("no memcache available", EACCES);
 	}
 
 	memcache_set_global(smbd_memcache());
@@ -1414,69 +1412,65 @@ extern void build_options(bool screen);
 		exit(1);
 
 	if (!secrets_init()) {
-		DEBUG(0, ("ERROR: smbd can not open secrets.tdb\n"));
-		exit(1);
+		exit_daemon("smbd can not open secrets.tdb", EACCES);
 	}
 
 	if (lp_server_role() == ROLE_DOMAIN_BDC || lp_server_role() == ROLE_DOMAIN_PDC) {
 		struct loadparm_context *lp_ctx = loadparm_init_s3(NULL, loadparm_s3_helpers());
 		if (!open_schannel_session_store(NULL, lp_ctx)) {
-			DEBUG(0,("ERROR: Samba cannot open schannel store for secured NETLOGON operations.\n"));
-			exit(1);
+			exit_daemon("ERROR: Samba cannot open schannel store for secured NETLOGON operations.", EACCES);
 		}
 		TALLOC_FREE(lp_ctx);
 	}
 
 	if(!get_global_sam_sid()) {
-		DEBUG(0,("ERROR: Samba cannot create a SAM SID.\n"));
-		exit(1);
+		exit_daemon("Samba cannot create a SAM SID", EACCES);
 	}
 
 	server_id = messaging_server_id(msg_ctx);
 	status = smbXsrv_version_global_init(&server_id);
 	if (!NT_STATUS_IS_OK(status)) {
-		exit(1);
+		exit_daemon("Samba cannot init server context", EACCES);
 	}
 
 	status = smbXsrv_session_global_init();
 	if (!NT_STATUS_IS_OK(status)) {
-		exit(1);
+		exit_daemon("Samba cannot init session context", EACCES);
 	}
 
 	status = smbXsrv_tcon_global_init();
 	if (!NT_STATUS_IS_OK(status)) {
-		exit(1);
+		exit_daemon("Samba cannot init tcon context", EACCES);
 	}
 
 	if (!locking_init())
-		exit(1);
+		exit_daemon("Samba cannot init locking", EACCES);
 
 	if (!messaging_tdb_parent_init(ev_ctx)) {
-		exit(1);
+		exit_daemon("Samba cannot init TDB messaging", EACCES);
 	}
 
 	if (!smbd_parent_notify_init(NULL, msg_ctx, ev_ctx)) {
-		exit(1);
+		exit_daemon("Samba cannot init notification", EACCES);
 	}
 
 	if (!smbd_scavenger_init(NULL, msg_ctx, ev_ctx)) {
-		exit(1);
+		exit_daemon("Samba cannot init scavenging", EACCES);
 	}
 
 	if (!serverid_parent_init(ev_ctx)) {
-		exit(1);
+		exit_daemon("Samba cannot init server id", EACCES);
 	}
 
 	if (!W_ERROR_IS_OK(registry_init_full()))
-		exit(1);
+		exit_daemon("Samba cannot init registry", EACCES);
 
 	/* Open the share_info.tdb here, so we don't have to open
 	   after the fork on every single connection.  This is a small
 	   performance improvment and reduces the total number of system
 	   fds used. */
 	if (!share_info_db_init()) {
-		DEBUG(0,("ERROR: failed to load share info db.\n"));
-		exit(1);
+		exit_daemon("ERROR: failed to load share info db.", EACCES);
 	}
 
 	status = init_system_session_info();
@@ -1497,7 +1491,7 @@ extern void build_options(bool screen);
 	}
 	status = smbXsrv_open_global_init();
 	if (!NT_STATUS_IS_OK(status)) {
-		exit(1);
+		exit_daemon("Samba cannot init global open", map_errno_from_nt_status(status));
 	}
 
 	/* This MUST be done before start_epmd() because otherwise
@@ -1528,7 +1522,11 @@ extern void build_options(bool screen);
 	}
 
 	if (!dcesrv_ep_setup(ev_ctx, msg_ctx)) {
-		exit(1);
+		exit_daemon("Samba cannot setup ep pipe", EACCES);
+	}
+
+	if (is_daemon && !interactive) {
+		daemon_ready("smbd");
 	}
 
 	/* only start other daemons if we are running as a daemon
@@ -1545,7 +1543,7 @@ extern void build_options(bool screen);
 			bool bgq = lp_parm_bool(-1, "smbd", "backgroundqueue", true);
 
 			if (!printing_subsystem_init(ev_ctx, msg_ctx, true, bgq)) {
-				exit(1);
+				exit_daemon("Samba failed to init printing subsystem", EACCES);
 			}
 		}
 	} else if (!lp__disable_spoolss() &&
diff --git a/source3/winbindd/winbindd.c b/source3/winbindd/winbindd.c
index 8bc1343..e384be1 100644
--- a/source3/winbindd/winbindd.c
+++ b/source3/winbindd/winbindd.c
@@ -1551,8 +1551,7 @@ int main(int argc, const char **argv)
 				   winbind_event_context(),
 				   false);
 	if (!NT_STATUS_IS_OK(status)) {
-		DEBUG(0,("reinit_after_fork() failed\n"));
-		exit(1);
+		exit_daemon("Winbindd reinit_after_fork() failed", map_errno_from_nt_status(status));
 	}
 
 	/*
@@ -1562,17 +1561,14 @@ int main(int argc, const char **argv)
 	 */
 	status = init_before_fork();
 	if (!NT_STATUS_IS_OK(status)) {
-		DEBUG(0, ("init_before_fork failed: %s\n", nt_errstr(status)));
-		exit(1);
+		exit_daemon(nt_errstr(status), map_errno_from_nt_status(status));
 	}
 
 	winbindd_register_handlers(winbind_messaging_context(), !Fork);
 
 	status = init_system_session_info();
 	if (!NT_STATUS_IS_OK(status)) {
-		DEBUG(1, ("ERROR: failed to setup system user info: %s.\n",
-			  nt_errstr(status)));
-		exit(1);
+		exit_daemon("Winbindd failed to setup system user info", map_errno_from_nt_status(status));
 	}
 
 	rpc_lsarpc_init(NULL);
@@ -1584,11 +1580,15 @@ int main(int argc, const char **argv)
 	/* setup listen sockets */
 
 	if (!winbindd_setup_listeners()) {
-		DEBUG(0,("winbindd_setup_listeners() failed\n"));
-		exit(1);
+		exit_daemon("Winbindd failed to setup listeners", EPIPE);
 	}
 
 	TALLOC_FREE(frame);
+
+	if (!interactive) {
+		daemon_ready("winbindd");
+	}
+
 	/* Loop waiting for requests */
 	while (1) {
 		frame = talloc_stackframe();
diff --git a/source4/smbd/server.c b/source4/smbd/server.c
index 26fd89a..55fd38c 100644
--- a/source4/smbd/server.c
+++ b/source4/smbd/server.c
@@ -398,15 +398,13 @@ static int binary_smbd_main(const char *binary_name, int argc, const char *argv[
 
 	if (lpcfg_server_role(cmdline_lp_ctx) == ROLE_ACTIVE_DIRECTORY_DC) {
 		if (!open_schannel_session_store(talloc_autofree_context(), cmdline_lp_ctx)) {
-			DEBUG(0,("ERROR: Samba cannot open schannel store for secured NETLOGON operations.\n"));
-			exit(1);
+			exit_daemon("Samba cannot open schannel store for secured NETLOGON operations.", EACCES);
 		}
 	}
 
 	/* make sure we won't go through nss_winbind */
 	if (!winbind_off()) {
-		DEBUG(0,("Failed to disable recusive winbindd calls.  Exiting.\n"));
-		exit(1);
+		exit_daemon("Samba failed to disable recusive winbindd calls.", EACCES);
 	}
 
 	gensec_init(); /* FIXME: */
@@ -431,8 +429,7 @@ static int binary_smbd_main(const char *binary_name, int argc, const char *argv[
 	event_ctx = s4_event_context_init(talloc_autofree_context());
 
 	if (event_ctx == NULL) {
-		DEBUG(0,("Initializing event context failed\n"));
-		return 1;
+		exit_daemon("Initializing event context failed", EACCES);
 	}
 
 	if (opt_interactive) {
@@ -449,7 +446,7 @@ static int binary_smbd_main(const char *binary_name, int argc, const char *argv[


-- 
Samba Shared Repository


More information about the samba-cvs mailing list