[SCM] Samba Shared Repository - branch master updated - release-4-0-0alpha7-632-g3b73cdb

Stefan Metzmacher metze at samba.org
Sat Mar 21 10:29:40 GMT 2009


The branch, master has been updated
       via  3b73cdb41201dd545e019e8e8313f6b8c51c7226 (commit)
       via  431fc718c13d259748ac20019997241981639c95 (commit)
       via  593ab6ac00c217f6d661b4babface40a0b0dd4ce (commit)
       via  6ef1442360a35284e4aaaa98eea701fc2eab43c5 (commit)
       via  66dc53ee017d74a6f610bbe04337f064901fe2a1 (commit)
      from  62ab39dde37f5570b336b9db5b4e3c2e4640e877 (commit)

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


- Log -----------------------------------------------------------------
commit 3b73cdb41201dd545e019e8e8313f6b8c51c7226
Author: Stefan Metzmacher <metze at samba.org>
Date:   Wed Jan 28 10:10:12 2009 +0100

    s3:nmbd: implement a MAILSLOT => CLDAP proxy for NETLOGON_SAMLOGON requests
    
    This will be used as part a the franky setup, where nmbd will forward
    the MAILSLOT requests to the local samba4 CLDAP server.
    
    "nmbd_proxy_logon:cldap_server = 127.0.0.1" would configure
    and activate this feature.
    
    metze

commit 431fc718c13d259748ac20019997241981639c95
Author: Stefan Metzmacher <metze at samba.org>
Date:   Fri Mar 20 16:18:47 2009 +0100

    selftest/Samba3: always use the same timeout for all servers
    
    metze

commit 593ab6ac00c217f6d661b4babface40a0b0dd4ce
Author: Stefan Metzmacher <metze at samba.org>
Date:   Fri Mar 20 16:11:14 2009 +0100

    s4:selftest: rename SMBD_VALGRIND => SAMBA_VALGRIND
    
    metze

commit 6ef1442360a35284e4aaaa98eea701fc2eab43c5
Author: Stefan Metzmacher <metze at samba.org>
Date:   Fri Mar 20 15:13:39 2009 +0100

    s4:smbd: the name of the binary is "samba" now
    
    metze

commit 66dc53ee017d74a6f610bbe04337f064901fe2a1
Author: Stefan Metzmacher <metze at samba.org>
Date:   Fri Mar 20 16:27:17 2009 +0100

    socket_wrapper: fix connect() for dgram sockets, if the destination isn't there yet
    
    metze

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

Summary of changes:
 lib/socket_wrapper/socket_wrapper.c |   10 +-
 selftest/target/Samba3.pm           |   32 +++---
 selftest/target/Samba4.pm           |    8 +-
 source3/include/proto.h             |    2 +
 source3/nmbd/nmbd.c                 |    6 +
 source3/nmbd/nmbd_processlogon.c    |  238 +++++++++++++++++++++++++++++++++++
 source3/samba4.mk                   |   12 +-
 source4/selftest/config.mk          |   12 +-
 source4/smbd/server.c               |    2 +-
 9 files changed, 285 insertions(+), 37 deletions(-)


Changeset truncated at 500 lines:

diff --git a/lib/socket_wrapper/socket_wrapper.c b/lib/socket_wrapper/socket_wrapper.c
index 44082e7..1d35c8d 100644
--- a/lib/socket_wrapper/socket_wrapper.c
+++ b/lib/socket_wrapper/socket_wrapper.c
@@ -1686,10 +1686,14 @@ _PUBLIC_ int swrap_connect(int s, const struct sockaddr *serv_addr, socklen_t ad
 	ret = sockaddr_convert_to_un(si, (const struct sockaddr *)serv_addr, addrlen, &un_addr, 0, NULL);
 	if (ret == -1) return -1;
 
-	swrap_dump_packet(si, serv_addr, SWRAP_CONNECT_SEND, NULL, 0);
+	if (si->type == SOCK_DGRAM) {
+		ret = 0;
+	} else {
+		swrap_dump_packet(si, serv_addr, SWRAP_CONNECT_SEND, NULL, 0);
 
-	ret = real_connect(s, (struct sockaddr *)&un_addr, 
-			   sizeof(struct sockaddr_un));
+		ret = real_connect(s, (struct sockaddr *)&un_addr,
+				   sizeof(struct sockaddr_un));
+	}
 
 	/* to give better errors */
 	if (ret == -1 && errno == ENOENT) {
diff --git a/selftest/target/Samba3.pm b/selftest/target/Samba3.pm
index 2b96226..78aafa7 100644
--- a/selftest/target/Samba3.pm
+++ b/selftest/target/Samba3.pm
@@ -126,9 +126,8 @@ sub setup_dc($$)
 				    $dc_options);
 
 	$self->check_or_start($vars,
-			      ($ENV{NMBD_MAXTIME} or 2700),
-			      ($ENV{WINBINDD_MAXTIME} or 2700),
-			      ($ENV{SMBD_MAXTIME} or 2700));
+			      ($ENV{SMBD_MAXTIME} or 2700),
+			       "yes", "yes", "yes");
 
 	$self->wait_for_start($vars);
 
@@ -163,9 +162,8 @@ sub setup_member($$$)
 	system($cmd) == 0 or die("Join failed\n$cmd");
 
 	$self->check_or_start($ret,
-			      ($ENV{NMBD_MAXTIME} or 2700),
-			      ($ENV{WINBINDD_MAXTIME} or 2700),
-			      ($ENV{SMBD_MAXTIME} or 2700));
+			      ($ENV{SMBD_MAXTIME} or 2700),
+			       "yes", "yes", "yes");
 
 	$self->wait_for_start($ret);
 
@@ -212,8 +210,8 @@ sub read_pid($$)
 	return $pid;
 }
 
-sub check_or_start($$$$) {
-	my ($self, $env_vars, $nmbd_maxtime, $winbindd_maxtime, $smbd_maxtime) = @_;
+sub check_or_start($$$$$) {
+	my ($self, $env_vars, $maxtime, $nmbd, $winbindd, $smbd) = @_;
 
 	unlink($env_vars->{NMBD_TEST_LOG});
 	print "STARTING NMBD...";
@@ -229,13 +227,13 @@ sub check_or_start($$$$) {
 		$ENV{NSS_WRAPPER_PASSWD} = $env_vars->{NSS_WRAPPER_PASSWD};
 		$ENV{NSS_WRAPPER_GROUP} = $env_vars->{NSS_WRAPPER_GROUP};
 
-		if ($nmbd_maxtime eq "skip") {
+		if ($nmbd ne "yes") {
 			$SIG{USR1} = $SIG{ALRM} = $SIG{INT} = $SIG{QUIT} = $SIG{TERM} = sub {
 				my $signame = shift;
 				print("Skip nmbd received signal $signame");
 				exit 0;
 			};
-			sleep(999999);
+			sleep($maxtime);
 			exit 0;
 		}
 
@@ -246,7 +244,7 @@ sub check_or_start($$$$) {
 
 		$ENV{MAKE_TEST_BINARY} = $self->binpath("nmbd");
 
-		my @preargs = ($self->binpath("timelimit"), $nmbd_maxtime);
+		my @preargs = ($self->binpath("timelimit"), $maxtime);
 		if(defined($ENV{NMBD_VALGRIND})) { 
 			@preargs = split(/ /, $ENV{NMBD_VALGRIND});
 		}
@@ -270,13 +268,13 @@ sub check_or_start($$$$) {
 		$ENV{NSS_WRAPPER_PASSWD} = $env_vars->{NSS_WRAPPER_PASSWD};
 		$ENV{NSS_WRAPPER_GROUP} = $env_vars->{NSS_WRAPPER_GROUP};
 
-		if ($winbindd_maxtime eq "skip") {
+		if ($winbindd ne "yes") {
 			$SIG{USR1} = $SIG{ALRM} = $SIG{INT} = $SIG{QUIT} = $SIG{TERM} = sub {
 				my $signame = shift;
 				print("Skip winbindd received signal $signame");
 				exit 0;
 			};
-			sleep(999999);
+			sleep($maxtime);
 			exit 0;
 		}
 
@@ -287,7 +285,7 @@ sub check_or_start($$$$) {
 
 		$ENV{MAKE_TEST_BINARY} = $self->binpath("winbindd");
 
-		my @preargs = ($self->binpath("timelimit"), $winbindd_maxtime);
+		my @preargs = ($self->binpath("timelimit"), $maxtime);
 		if(defined($ENV{WINBINDD_VALGRIND})) {
 			@preargs = split(/ /, $ENV{WINBINDD_VALGRIND});
 		}
@@ -311,13 +309,13 @@ sub check_or_start($$$$) {
 		$ENV{NSS_WRAPPER_PASSWD} = $env_vars->{NSS_WRAPPER_PASSWD};
 		$ENV{NSS_WRAPPER_GROUP} = $env_vars->{NSS_WRAPPER_GROUP};
 
-		if ($smbd_maxtime eq "skip") {
+		if ($smbd ne "yes") {
 			$SIG{USR1} = $SIG{ALRM} = $SIG{INT} = $SIG{QUIT} = $SIG{TERM} = sub {
 				my $signame = shift;
 				print("Skip smbd received signal $signame");
 				exit 0;
 			};
-			sleep(999999);
+			sleep($maxtime);
 			exit 0;
 		}
 
@@ -326,7 +324,7 @@ sub check_or_start($$$$) {
 		if (defined($ENV{SMBD_OPTIONS})) {
 			@optargs = split(/ /, $ENV{SMBD_OPTIONS});
 		}
-		my @preargs = ($self->binpath("timelimit"), $smbd_maxtime);
+		my @preargs = ($self->binpath("timelimit"), $maxtime);
 		if(defined($ENV{SMBD_VALGRIND})) {
 			@preargs = split(/ /,$ENV{SMBD_VALGRIND});
 		}
diff --git a/selftest/target/Samba4.pm b/selftest/target/Samba4.pm
index 71dddf6..1058ac6 100644
--- a/selftest/target/Samba4.pm
+++ b/selftest/target/Samba4.pm
@@ -103,8 +103,8 @@ sub check_or_start($$$)
 		SocketWrapper::set_default_iface($env_vars->{SOCKET_WRAPPER_DEFAULT_IFACE});
 
 		my $valgrind = "";
-		if (defined($ENV{SMBD_VALGRIND})) {
-		    $valgrind = $ENV{SMBD_VALGRIND};
+		if (defined($ENV{SAMBA_VALGRIND})) {
+		    $valgrind = $ENV{SAMBA_VALGRIND};
 		} 
 
 		$ENV{KRB5_CONFIG} = $env_vars->{KRB5_CONFIG}; 
@@ -122,8 +122,8 @@ sub check_or_start($$$)
 		if (defined($max_time)) {
 			$optarg = "--maximum-runtime=$max_time ";
 		}
-		if (defined($ENV{SMBD_OPTIONS})) {
-			$optarg.= " $ENV{SMBD_OPTIONS}";
+		if (defined($ENV{SAMBA_OPTIONS})) {
+			$optarg.= " $ENV{SAMBA_OPTIONS}";
 		}
 		my $samba = $self->bindir_path("samba");
 		my $ret = system("$valgrind $samba $optarg $env_vars->{CONFIGURATION} -M single -i --leak-report-full");
diff --git a/source3/include/proto.h b/source3/include/proto.h
index dc26f6d..c84b1cb 100644
--- a/source3/include/proto.h
+++ b/source3/include/proto.h
@@ -3779,6 +3779,8 @@ bool send_mailslot(bool unique, const char *mailslot,char *buf, size_t len,
 
 /* The following definitions come from nmbd/nmbd_processlogon.c  */
 
+bool initialize_nmbd_proxy_logon(void);
+
 void process_logon_packet(struct packet_struct *p, char *buf,int len, 
                           const char *mailslot);
 
diff --git a/source3/nmbd/nmbd.c b/source3/nmbd/nmbd.c
index 3279466..daf4c29 100644
--- a/source3/nmbd/nmbd.c
+++ b/source3/nmbd/nmbd.c
@@ -988,6 +988,12 @@ static bool open_sockets(bool isdaemon, int port)
 		exit(1);
 	}
 
+	if (!initialize_nmbd_proxy_logon()) {
+		DEBUG(0,("ERROR: Failed setup nmbd_proxy_logon.\n"));
+		kill_async_dns_child();
+		exit(1);
+	}
+
 	TALLOC_FREE(frame);
 	process();
 
diff --git a/source3/nmbd/nmbd_processlogon.c b/source3/nmbd/nmbd_processlogon.c
index 59a2ca4..8173337 100644
--- a/source3/nmbd/nmbd_processlogon.c
+++ b/source3/nmbd/nmbd_processlogon.c
@@ -24,6 +24,9 @@
 */
 
 #include "includes.h"
+#include "../libcli/netlogon.h"
+#include "../libcli/cldap/cldap.h"
+#include "../lib/tsocket/tsocket.h"
 
 struct sam_database_info {
         uint32 index;
@@ -65,6 +68,235 @@ static void delayed_init_logon_handler(struct event_context *event_ctx,
 	TALLOC_FREE(te);
 }
 
+struct nmbd_proxy_logon_context {
+	struct cldap_socket *cldap_sock;
+};
+
+static struct nmbd_proxy_logon_context *global_nmbd_proxy_logon;
+
+bool initialize_nmbd_proxy_logon(void)
+{
+	const char *cldap_server = lp_parm_const_string(-1, "nmbd_proxy_logon",
+						        "cldap_server", NULL);
+	struct nmbd_proxy_logon_context *ctx;
+	NTSTATUS status;
+	struct in_addr addr;
+	char addrstr[INET_ADDRSTRLEN];
+	const char *server_str;
+	int ret;
+	struct tsocket_address *server_addr;
+
+	if (!cldap_server) {
+		return true;
+	}
+
+	addr = interpret_addr2(cldap_server);
+	server_str = inet_ntop(AF_INET, &addr,
+			     addrstr, sizeof(addrstr));
+	if (!server_str || strcmp("0.0.0.0", server_str) == 0) {
+		DEBUG(0,("Failed to resolve[%s] for nmbd_proxy_logon\n",
+			 cldap_server));
+		return false;
+	}
+
+	ctx = talloc_zero(nmbd_event_context(),
+			  struct nmbd_proxy_logon_context);
+	if (!ctx) {
+		return false;
+	}
+
+	ret = tsocket_address_inet_from_strings(ctx, "ipv4",
+						server_str, LDAP_PORT,
+						&server_addr);
+	if (ret != 0) {
+		TALLOC_FREE(ctx);
+		status = map_nt_error_from_unix(errno);
+		DEBUG(0,("Failed to create cldap tsocket_address for %s - %s\n",
+			 server_str, nt_errstr(status)));
+		return false;
+	}
+
+	/* we create a connected udp socket */
+	status = cldap_socket_init(ctx, nmbd_event_context(), NULL,
+				   server_addr, &ctx->cldap_sock);
+	TALLOC_FREE(server_addr);
+	if (!NT_STATUS_IS_OK(status)) {
+		TALLOC_FREE(ctx);
+		DEBUG(0,("failed to create cldap socket for %s: %s\n",
+			server_str, nt_errstr(status)));
+		return false;
+	}
+
+	global_nmbd_proxy_logon = ctx;
+	return true;
+}
+
+struct nmbd_proxy_logon_state {
+	struct in_addr local_ip;
+	struct packet_struct *p;
+	const char *remote_name;
+	uint8_t remote_name_type;
+	const char *remote_mailslot;
+	struct nbt_netlogon_packet req;
+	struct nbt_netlogon_response resp;
+	struct cldap_netlogon io;
+};
+
+static int nmbd_proxy_logon_state_destructor(struct nmbd_proxy_logon_state *s)
+{
+	s->p->locked = false;
+	free_packet(s->p);
+	return 0;
+}
+
+static void nmbd_proxy_logon_done(struct tevent_req *subreq);
+
+static void nmbd_proxy_logon(struct nmbd_proxy_logon_context *ctx,
+			     struct in_addr local_ip,
+			     struct packet_struct *p,
+			     uint8_t *buf,
+			     uint32_t len)
+{
+	struct nmbd_proxy_logon_state *state;
+	enum ndr_err_code ndr_err;
+	DATA_BLOB blob = data_blob_const(buf, len);
+	const char *computer_name = NULL;
+	const char *mailslot_name = NULL;
+	const char *user_name = NULL;
+	const char *domain_sid = NULL;
+	uint32_t acct_control = 0;
+	uint32_t nt_version = 0;
+	struct tevent_req *subreq;
+	fstring source_name;
+	struct dgram_packet *dgram = &p->packet.dgram;
+
+	state = TALLOC_ZERO_P(ctx, struct nmbd_proxy_logon_state);
+	if (!state) {
+		DEBUG(0,("failed to allocate nmbd_proxy_logon_state\n"));
+		return;
+	}
+
+	pull_ascii_nstring(source_name, sizeof(source_name), dgram->source_name.name);
+	state->remote_name = talloc_strdup(state, source_name);
+	state->remote_name_type = dgram->source_name.name_type,
+	state->local_ip = local_ip;
+	state->p = p;
+
+	ndr_err = ndr_pull_struct_blob(
+		&blob, state, NULL, &state->req,
+		(ndr_pull_flags_fn_t)ndr_pull_nbt_netlogon_packet);
+	if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
+		NTSTATUS status = ndr_map_error2ntstatus(ndr_err);
+		DEBUG(0,("failed parse nbt_letlogon_packet: %s\n",
+			nt_errstr(status)));
+		TALLOC_FREE(state);
+		return;
+	}
+
+	if (DEBUGLEVEL >= 10) {
+		DEBUG(10, ("nmbd_proxy_logon:\n"));
+		NDR_PRINT_DEBUG(nbt_netlogon_packet, &state->req);
+	}
+
+	switch (state->req.command) {
+	case LOGON_SAM_LOGON_REQUEST:
+		computer_name	= state->req.req.logon.computer_name;
+		user_name	= state->req.req.logon.user_name;
+		mailslot_name	= state->req.req.logon.mailslot_name;
+		acct_control	= state->req.req.logon.acct_control;
+		if (state->req.req.logon.sid_size > 0) {
+			domain_sid = dom_sid_string(state,
+						    &state->req.req.logon.sid);
+			if (!domain_sid) {
+				DEBUG(0,("failed to get a string for sid\n"));
+				TALLOC_FREE(state);
+				return;
+			}
+		}
+		nt_version	= state->req.req.logon.nt_version;
+		break;
+
+	default:
+		/* this can't happen as the caller already checks the command */
+		break;
+	}
+
+	state->remote_mailslot = mailslot_name;
+
+	if (user_name && strlen(user_name) == 0) {
+		user_name = NULL;
+	}
+
+	if (computer_name && strlen(computer_name) == 0) {
+		computer_name = NULL;
+	}
+
+	/*
+	 * as the socket is connected,
+	 * we don't need to specify the destination
+	 */
+	state->io.in.dest_address	= NULL;
+	state->io.in.dest_port		= 0;
+	state->io.in.realm		= NULL;
+	state->io.in.host		= computer_name;
+	state->io.in.user		= user_name;
+	state->io.in.domain_guid	= NULL;
+	state->io.in.domain_sid		= domain_sid;
+	state->io.in.acct_control	= acct_control;
+	state->io.in.version		= nt_version;
+	state->io.in.map_response	= false;
+
+	subreq = cldap_netlogon_send(state,
+				     ctx->cldap_sock,
+				     &state->io);
+	if (!subreq) {
+		DEBUG(0,("failed to send cldap netlogon call\n"));
+		TALLOC_FREE(state);
+		return;
+	}
+	tevent_req_set_callback(subreq, nmbd_proxy_logon_done, state);
+
+	/* we reply async */
+	state->p->locked = true;
+	talloc_set_destructor(state, nmbd_proxy_logon_state_destructor);
+}
+
+static void nmbd_proxy_logon_done(struct tevent_req *subreq)
+{
+	struct nmbd_proxy_logon_state *state =
+		tevent_req_callback_data(subreq,
+		struct nmbd_proxy_logon_state);
+	NTSTATUS status;
+	DATA_BLOB response;
+
+	status = cldap_netlogon_recv(subreq, NULL, state, &state->io);
+	if (!NT_STATUS_IS_OK(status)) {
+		DEBUG(0,("failed to recv cldap netlogon call: %s\n",
+			nt_errstr(status)));
+		TALLOC_FREE(state);
+		return;
+	}
+
+	status = push_netlogon_samlogon_response(&response, state, NULL,
+						 &state->io.out.netlogon);
+	if (!NT_STATUS_IS_OK(status)) {
+		DEBUG(0,("failed to push netlogon_samlogon_response: %s\n",
+			nt_errstr(status)));
+		TALLOC_FREE(state);
+		return;
+	}
+
+	send_mailslot(true, state->remote_mailslot,
+		      (char *)response.data, response.length,
+		      global_myname(), 0x0,
+		      state->remote_name,
+		      state->remote_name_type,
+		      state->p->ip,
+		      state->local_ip,
+		      state->p->port);
+	TALLOC_FREE(state);
+}
+
 /****************************************************************************
 Process a domain logon packet
 **************************************************************************/
@@ -318,6 +550,12 @@ reporting %s domain %s 0x%x ntversion=%x lm_nt token=%x lm_20 token=%x\n",
 				char *q = buf + 2;
 				fstring asccomp;
 
+				if (global_nmbd_proxy_logon) {
+					nmbd_proxy_logon(global_nmbd_proxy_logon,
+							 ip, p, (uint8_t *)buf, len);
+					return;
+				}
+
 				q += 2;
 
 				if (PTR_DIFF(q, buf) >= len) {
diff --git a/source3/samba4.mk b/source3/samba4.mk
index 7e7690a..3f661bd 100644
--- a/source3/samba4.mk
+++ b/source3/samba4.mk
@@ -225,32 +225,32 @@ test4-%::
 valgrindtest4:: valgrindtest-all
 
 valgrindtest4-quick:: all
-	SMBD_VALGRIND="xterm -n server -e $(selftestdir)/valgrind_run $(LD_LIBPATH_OVERRIDE)" \
+	SAMBA_VALGRIND="xterm -n server -e $(selftestdir)/valgrind_run $(LD_LIBPATH_OVERRIDE)" \
 	VALGRIND="valgrind -q --num-callers=30 --log-file=${selftest_prefix}/valgrind.log" \
 	$(SELFTEST4) $(SELFTEST4_QUICK_OPTS) --immediate --socket-wrapper $(TESTS)
 
 valgrindtest4-all:: everything
-	SMBD_VALGRIND="xterm -n server -e $(selftestdir)/valgrind_run $(LD_LIBPATH_OVERRIDE)" \
+	SAMBA_VALGRIND="xterm -n server -e $(selftestdir)/valgrind_run $(LD_LIBPATH_OVERRIDE)" \
 	VALGRIND="valgrind -q --num-callers=30 --log-file=${selftest_prefix}/valgrind.log" \
 	$(SELFTEST4) $(SELFTEST4_NOSLOW_OPTS) --immediate --socket-wrapper $(TESTS)
 
 valgrindtest4-env:: everything
-	SMBD_VALGRIND="xterm -n server -e $(selftestdir)/valgrind_run $(LD_LIBPATH_OVERRIDE)" \
+	SAMBA_VALGRIND="xterm -n server -e $(selftestdir)/valgrind_run $(LD_LIBPATH_OVERRIDE)" \
 	VALGRIND="valgrind -q --num-callers=30 --log-file=${selftest_prefix}/valgrind.log" \
 	$(SELFTEST4) $(SELFTEST4_NOSLOW_OPTS) --socket-wrapper --testenv
 
 gdbtest4:: gdbtest4-all
 
 gdbtest4-quick:: all
-	SMBD_VALGRIND="xterm -n server -e $(selftestdir)/gdb_run $(LD_LIBPATH_OVERRIDE)" \
+	SAMBA_VALGRIND="xterm -n server -e $(selftestdir)/gdb_run $(LD_LIBPATH_OVERRIDE)" \
 	$(SELFTEST4) $(SELFTEST4_QUICK_OPTS) --immediate --socket-wrapper $(TESTS)
 
 gdbtest4-all:: everything
-	SMBD_VALGRIND="xterm -n server -e $(selftestdir)/gdb_run $(LD_LIBPATH_OVERRIDE)" \
+	SAMBA_VALGRIND="xterm -n server -e $(selftestdir)/gdb_run $(LD_LIBPATH_OVERRIDE)" \
 	$(SELFTEST4) $(SELFTEST4_NOSLOW_OPTS) --immediate --socket-wrapper $(TESTS)
 
 gdbtest4-env:: everything
-	SMBD_VALGRIND="xterm -n server -e $(selftestdir)/gdb_run $(LD_LIBPATH_OVERRIDE)" \
+	SAMBA_VALGRIND="xterm -n server -e $(selftestdir)/gdb_run $(LD_LIBPATH_OVERRIDE)" \
 	$(SELFTEST4) $(SELFTEST4_NOSLOW_OPTS) --socket-wrapper --testenv
 
 plugins: $(PLUGINS)
diff --git a/source4/selftest/config.mk b/source4/selftest/config.mk
index 324532c..1838a0b 100644


-- 
Samba Shared Repository


More information about the samba-cvs mailing list