[SCM] Samba Shared Repository - branch master updated

Volker Lendecke vlendec at samba.org
Sun Aug 29 13:57:52 MDT 2010


The branch, master has been updated
       via  e466bb4 s3: Remove smbd_server_fd()
       via  e784e16 s3: Remove two uses of smbd_server_fd()
       via  5a6be0b s3: Remove smbd_server_fd() from srv_netlog_nt
       via  744cc26 s3: Remove smbd_server_fd() from smbd_register_ips
       via  5bbc4df s3: Lift smbd_server_fd() from msg_release_ip()
       via  467208e s3: Lift smbd_server_fd() from release_ip()
       via  6432383 s3: Remove a use of smbd_server_fd() in smbd main()
       via  70df6fc s3: Pass sconn to check_reload
       via  babfe23 s3: Pass sconn instead of msg_ctx to housekeeping_fn
       via  4a58c64 s3: Set the client_id in substitute.c once
       via  8d256b8 s3: Remove some uses of smbd_server_fd()
       via  291526b s3: Remove a use of smbd_server_fd
      from  b5ed9c2 s4-kcc: Notify dreplsrv that Topology has changed

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


- Log -----------------------------------------------------------------
commit e466bb4af45175a3fe1d6dff54c10d81c4e68257
Author: Volker Lendecke <vl at samba.org>
Date:   Sat Aug 28 17:25:22 2010 +0200

    s3: Remove smbd_server_fd()
    
    This breaks the perfcol_onefs() build.
    
    Tim, Steve, this use of smbd_server_fd is replacable by calls into
    substitute.c. I don't have a onefs environment around to build a fix, so I've
    decided to insert an #error, making it not compile. The fix should be pretty
    obvious, you can get the socket data via "%I" and "%i" substitutions.

commit e784e160ec899a32b673dfaa77fa12c8f27d296c
Author: Volker Lendecke <vl at samba.org>
Date:   Sat Aug 28 17:21:07 2010 +0200

    s3: Remove two uses of smbd_server_fd()
    
    Actually, this is a bit cheating. But those two files depend on
    smbd_server_conn anyway, it does not make things worse.

commit 5a6be0b3149e43bad14bb75c308ced904909dc58
Author: Volker Lendecke <vl at samba.org>
Date:   Sat Aug 28 17:19:42 2010 +0200

    s3: Remove smbd_server_fd() from srv_netlog_nt
    
    This is not actually used. If it was to be activated, we'd have to pass in a
    pipes_struct.

commit 744cc264517ac440d606570f6e36b8aa1ba836f3
Author: Volker Lendecke <vl at samba.org>
Date:   Sat Aug 28 17:16:08 2010 +0200

    s3: Remove smbd_server_fd() from smbd_register_ips

commit 5bbc4df1680342a5d0678462bac66d5e536219f6
Author: Volker Lendecke <vl at samba.org>
Date:   Sat Aug 28 17:12:43 2010 +0200

    s3: Lift smbd_server_fd() from msg_release_ip()

commit 467208e9f417158e97941ddabcec001fac36ab3a
Author: Volker Lendecke <vl at samba.org>
Date:   Sat Aug 28 17:09:56 2010 +0200

    s3: Lift smbd_server_fd() from release_ip()

commit 64323839261f66cfcb81e524e727c129961c573c
Author: Volker Lendecke <vl at samba.org>
Date:   Sat Aug 28 16:58:54 2010 +0200

    s3: Remove a use of smbd_server_fd() in smbd main()
    
    The effect this might have is that we set the socket options a bit later in
    inetd mode.

commit 70df6fcb2ad99b173ec80bc4b678537dcac036c0
Author: Volker Lendecke <vl at samba.org>
Date:   Sat Aug 28 16:57:51 2010 +0200

    s3: Pass sconn to check_reload
    
    This removes a use of smbd_server_fd()

commit babfe237171b0dc7561da0a0867d4b9bef2ee872
Author: Volker Lendecke <vl at samba.org>
Date:   Sat Aug 28 16:56:47 2010 +0200

    s3: Pass sconn instead of msg_ctx to housekeeping_fn

commit 4a58c640cce3b37d5eef62caddd15f64ef8befbe
Author: Volker Lendecke <vl at samba.org>
Date:   Sat Aug 28 16:33:00 2010 +0200

    s3: Set the client_id in substitute.c once
    
    This never changes during a client connection's life, so we can set it
    once.

commit 8d256b8f30e726bec6755712121840d3a4c9b620
Author: Volker Lendecke <vl at samba.org>
Date:   Sat Aug 28 16:19:31 2010 +0200

    s3: Remove some uses of smbd_server_fd()
    
    The change in behaviour is that we don't detect "socket option" changes anymore
    when printers are added or removed.

commit 291526b9cf54bab0e099896ebb668d24d151b5ab
Author: Volker Lendecke <vl at samba.org>
Date:   Sat Aug 28 16:18:07 2010 +0200

    s3: Remove a use of smbd_server_fd
    
    This disables different socket options per user for ntlmssp authentiation, a
    change in behaviour which is exotic enough I believe.

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

Summary of changes:
 source3/auth/auth_ntlmssp.c         |    2 +-
 source3/include/proto.h             |    3 +-
 source3/lib/dummysmbd.c             |    5 ---
 source3/lib/substitute.c            |   45 +++++++++++++++++++-------
 source3/modules/perfcount_onefs.c   |   31 ++++++++++--------
 source3/rpc_server/srv_netlog_nt.c  |    5 +--
 source3/rpc_server/srv_spoolss_nt.c |    4 +-
 source3/smbd/globals.h              |    2 +-
 source3/smbd/process.c              |   60 ++++++++++++++++++++++-------------
 source3/smbd/server.c               |   17 ++++------
 source3/torture/vfstest.c           |    8 +----
 11 files changed, 104 insertions(+), 78 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source3/auth/auth_ntlmssp.c b/source3/auth/auth_ntlmssp.c
index d533ac9..aa7998c 100644
--- a/source3/auth/auth_ntlmssp.c
+++ b/source3/auth/auth_ntlmssp.c
@@ -122,7 +122,7 @@ static NTSTATUS auth_ntlmssp_check_password(struct ntlmssp_state *ntlmssp_state,
 	/* sub_set_smb_name checks for weird internally */
 	sub_set_smb_name(auth_ntlmssp_state->ntlmssp_state->user);
 
-	reload_services(smbd_messaging_context(), smbd_server_fd(), True);
+	reload_services(smbd_messaging_context(), -1, True);
 
 	nt_status = make_user_info_map(&user_info, 
 				       auth_ntlmssp_state->ntlmssp_state->user, 
diff --git a/source3/include/proto.h b/source3/include/proto.h
index e2d1c94..5b9414f 100644
--- a/source3/include/proto.h
+++ b/source3/include/proto.h
@@ -816,6 +816,8 @@ const char *get_remote_machine_name(void);
 void sub_set_smb_name(const char *name);
 void set_current_user_info(const char *smb_name, const char *unix_name,
 			   const char *domain);
+void sub_set_socket_ids(const char *peeraddr, const char *peername,
+			const char *sockaddr);
 const char *get_current_username(void);
 void standard_sub_basic(const char *smb_name, const char *domain_name,
 			char *str, size_t len);
@@ -5389,7 +5391,6 @@ void server_messaging_context_free(void);
 
 /* The following definitions come from smbd/server.c  */
 
-int smbd_server_fd(void);
 struct event_context *smbd_event_context(void);
 struct messaging_context *smbd_messaging_context(void);
 struct memcache *smbd_memcache(void);
diff --git a/source3/lib/dummysmbd.c b/source3/lib/dummysmbd.c
index eb6bfe9..2ab0ed5 100644
--- a/source3/lib/dummysmbd.c
+++ b/source3/lib/dummysmbd.c
@@ -23,11 +23,6 @@
 
 #include "includes.h"
 
-int smbd_server_fd(void)
-{
-	return -1;
-}
-
 int find_service(fstring service)
 {
 	return -1;
diff --git a/source3/lib/substitute.c b/source3/lib/substitute.c
index d7ca184..399ef1d 100644
--- a/source3/lib/substitute.c
+++ b/source3/lib/substitute.c
@@ -192,6 +192,33 @@ void sub_set_smb_name(const char *name)
 	}
 }
 
+static char sub_peeraddr[INET6_ADDRSTRLEN];
+static const char *sub_peername = "";
+static char sub_sockaddr[INET6_ADDRSTRLEN];
+
+void sub_set_socket_ids(const char *peeraddr, const char *peername,
+			const char *sockaddr)
+{
+	const char *addr = peeraddr;
+
+	if (strnequal(addr, "::ffff:", 7)) {
+		addr += 7;
+	}
+	strlcpy(sub_peeraddr, addr, sizeof(sub_peeraddr));
+
+	sub_peername = SMB_STRDUP(peername);
+	if (sub_peername == NULL) {
+		sub_peername = sub_peeraddr;
+	}
+
+	/*
+	 * Shouldn't we do the ::ffff: cancellation here as well? The
+	 * original code in alloc_sub_basic() did not do it, so I'm
+	 * leaving it out here as well for compatibility.
+	 */
+	strlcpy(sub_sockaddr, sockaddr, sizeof(sub_sockaddr));
+}
+
 static const char *get_smb_user_name(void)
 {
 	return smb_user_name ? smb_user_name : "";
@@ -538,7 +565,6 @@ static char *alloc_sub_basic(const char *smb_name, const char *domain_name,
 {
 	char *b, *p, *s, *r, *a_string;
 	fstring pidstr, vnnstr;
-	char addr[INET6_ADDRSTRLEN];
 	const char *local_machine_name = get_local_machine_name();
 	TALLOC_CTX *tmp_ctx = NULL;
 
@@ -593,20 +619,15 @@ static char *alloc_sub_basic(const char *smb_name, const char *domain_name,
 			a_string = realloc_string_sub(a_string, "%D", r);
 			break;
 		case 'I' : {
-			int offset = 0;
-			client_addr(smbd_server_fd(), addr, sizeof(addr));
-			if (strnequal(addr,"::ffff:",7)) {
-				offset = 7;
-			}
-			a_string = realloc_string_sub(a_string, "%I",
-						      addr + offset);
+			a_string = realloc_string_sub(
+				a_string, "%I",
+				sub_peeraddr[0] ? sub_peeraddr : "0.0.0.0");
 			break;
 		}
 		case 'i': 
 			a_string = realloc_string_sub(
 				a_string, "%i",
-				client_socket_addr(smbd_server_fd(),
-						   addr, sizeof(addr)));
+				sub_sockaddr[0] ? sub_sockaddr : "0.0.0.0");
 			break;
 		case 'L' : 
 			if ( StrnCaseCmp(p, "%LOGONSERVER%", strlen("%LOGONSERVER%")) == 0 ) {
@@ -622,8 +643,8 @@ static char *alloc_sub_basic(const char *smb_name, const char *domain_name,
 			a_string = realloc_string_sub(a_string, "%N", automount_server(smb_name));
 			break;
 		case 'M' :
-			a_string = realloc_string_sub(
-				a_string, "%M", client_name(smbd_server_fd()));
+			a_string = realloc_string_sub(a_string, "%M",
+						      sub_peername);
 			break;
 		case 'R' :
 			a_string = realloc_string_sub(a_string, "%R", remote_proto);
diff --git a/source3/modules/perfcount_onefs.c b/source3/modules/perfcount_onefs.c
index 75dc145..d693376 100644
--- a/source3/modules/perfcount_onefs.c
+++ b/source3/modules/perfcount_onefs.c
@@ -302,23 +302,26 @@ static void onefs_smb_statistics_end(struct smb_perfcount_data *pcd)
 
 	/* get address info once, doesn't change for process */
 	if (rem_addr == 0) {
-		struct sockaddr_storage sa;
-		socklen_t sa_len;
-		int fd = smbd_server_fd();
-
-		sa_len = sizeof sa;
-		if (getpeername(fd, (struct sockaddr *)&sa, &sa_len) == 0 && 
-		    sa.ss_family == AF_INET)
-			rem_addr = ((struct sockaddr_in *)&sa)->sin_addr.s_addr;
-		else
+
+#error Isilon, please remove this after testing the code below
+
+		char *addr;
+
+		addr = talloc_sub_basic(talloc_tos(), "", "", "%I");
+		if (addr != NULL) {
+			rem_addr = interpret_addr(addr);
+			TALLOC_FREE(addr);
+		} else {
 			rem_addr = ISC_MASKED_ADDR;
+		}
 
-		sa_len = sizeof sa;
-		if (getsockname(fd, (struct sockaddr *)&sa, &sa_len) == 0 &&
-		    sa.ss_family == AF_INET)
-			loc_addr = ((struct sockaddr_in *)&sa)->sin_addr.s_addr;
-		else
+		addr = talloc_sub_basic(talloc_tos(), "", "", "%i");
+		if (addr != NULL) {
+			loc_addr = interpret_addr(addr);
+			TALLOC_FREE(addr);
+		} else {
 			loc_addr = ISC_MASKED_ADDR;
+		}
 	}
 
 	/*
diff --git a/source3/rpc_server/srv_netlog_nt.c b/source3/rpc_server/srv_netlog_nt.c
index 73f216f..d0f9dc9 100644
--- a/source3/rpc_server/srv_netlog_nt.c
+++ b/source3/rpc_server/srv_netlog_nt.c
@@ -600,7 +600,6 @@ static NTSTATUS get_md4pw(struct samr_Password *md4pw, const char *mach_acct,
 	union samr_UserInfo *info;
 	struct auth_serversupplied_info *server_info;
 #if 0
-	char addr[INET6_ADDRSTRLEN];
 
     /*
      * Currently this code is redundent as we already have a filter
@@ -612,8 +611,8 @@ static NTSTATUS get_md4pw(struct samr_Password *md4pw, const char *mach_acct,
      */
 
 	if (!allow_access(lp_domain_hostsdeny(), lp_domain_hostsallow(),
-			  client_name(smbd_server_fd()),
-			  client_addr(smbd_server_fd(),addr,sizeof(addr)))) {
+			  p->client_id.name,
+			  p->client_id.addr)) {
 		DEBUG(0,("get_md4pw: Workstation %s denied access to domain\n", mach_acct));
 		return False;
 	}
diff --git a/source3/rpc_server/srv_spoolss_nt.c b/source3/rpc_server/srv_spoolss_nt.c
index 4e97122..6ce377d 100644
--- a/source3/rpc_server/srv_spoolss_nt.c
+++ b/source3/rpc_server/srv_spoolss_nt.c
@@ -342,7 +342,7 @@ static WERROR delete_printer_hook(TALLOC_CTX *ctx, NT_USER_TOKEN *token,
 
 	/* go ahead and re-read the services immediately */
 	become_root();
-	reload_services(msg_ctx, smbd_server_fd(), false);
+	reload_services(msg_ctx, -1, false);
 	unbecome_root();
 
 	if ( lp_servicenumber( sharename )  > 0 )
@@ -5765,7 +5765,7 @@ static bool add_printer_hook(TALLOC_CTX *ctx, NT_USER_TOKEN *token,
 
 	/* reload our services immediately */
 	become_root();
-	reload_services(msg_ctx, smbd_server_fd(), false);
+	reload_services(msg_ctx, -1, false);
 	unbecome_root();
 
 	numlines = 0;
diff --git a/source3/smbd/globals.h b/source3/smbd/globals.h
index 759fead..c4d65aa 100644
--- a/source3/smbd/globals.h
+++ b/source3/smbd/globals.h
@@ -469,7 +469,7 @@ struct smbd_server_connection {
 
 		struct {
 			/*
-			 * fd for the fcntl lock mutexing access to smbd_server_fd
+			 * fd for the fcntl lock mutexing access to our sock
 			 */
 			int socket_lock_fd;
 
diff --git a/source3/smbd/process.c b/source3/smbd/process.c
index a18f045..51b2e51 100644
--- a/source3/smbd/process.c
+++ b/source3/smbd/process.c
@@ -928,7 +928,7 @@ static void smbd_sig_hup_handler(struct tevent_context *ev,
 		private_data, struct messaging_context);
 	change_to_root_user();
 	DEBUG(1,("Reloading services after SIGHUP\n"));
-	reload_services(msg_ctx, smbd_server_fd(), False);
+	reload_services(msg_ctx, smbd_server_conn->sock, False);
 }
 
 void smbd_setup_sig_hup_handler(struct tevent_context *ev,
@@ -2212,7 +2212,7 @@ void chain_reply(struct smb_request *req)
  Check if services need reloading.
 ****************************************************************************/
 
-static void check_reload(struct messaging_context *msg_ctx, time_t t)
+static void check_reload(struct smbd_server_connection *sconn, time_t t)
 {
 	time_t printcap_cache_time = (time_t)lp_printcap_cache_time();
 
@@ -2237,7 +2237,7 @@ static void check_reload(struct messaging_context *msg_ctx, time_t t)
 	}
 
 	if (t >= last_smb_conf_reload_time+SMBD_RELOAD_CHECK) {
-		reload_services(msg_ctx, smbd_server_fd(), True);
+		reload_services(sconn->msg_ctx, sconn->sock, True);
 		last_smb_conf_reload_time = t;
 	}
 
@@ -2251,7 +2251,7 @@ static void check_reload(struct messaging_context *msg_ctx, time_t t)
 			|| (t-last_printer_reload_time  < 0) ) 
 		{
 			DEBUG( 3,( "Printcap cache time expired.\n"));
-			reload_printers(msg_ctx);
+			reload_printers(sconn->msg_ctx);
 			last_printer_reload_time = t;
 		}
 	}
@@ -2377,10 +2377,8 @@ received when we should release a specific IP
 ****************************************************************************/
 static void release_ip(const char *ip, void *priv)
 {
-	char addr[INET6_ADDRSTRLEN];
-	char *p = addr;
-
-	client_socket_addr(smbd_server_fd(),addr,sizeof(addr));
+	const char *addr = (const char *)priv;
+	const char *p = addr;
 
 	if (strncmp("::ffff:", addr, 7) == 0) {
 		p = addr + 7;
@@ -2403,7 +2401,10 @@ static void release_ip(const char *ip, void *priv)
 static void msg_release_ip(struct messaging_context *msg_ctx, void *private_data,
 			   uint32_t msg_type, struct server_id server_id, DATA_BLOB *data)
 {
-	release_ip((char *)data->data, NULL);
+	struct smbd_server_connection *sconn = talloc_get_type_abort(
+		private_data, struct smbd_server_connection);
+
+	release_ip((char *)data->data, sconn->client_id.addr);
 }
 
 #ifdef CLUSTER_SUPPORT
@@ -2494,15 +2495,15 @@ static bool deadtime_fn(const struct timeval *now, void *private_data)
 
 static bool housekeeping_fn(const struct timeval *now, void *private_data)
 {
-	struct messaging_context *msg_ctx = talloc_get_type_abort(
-		private_data, struct messaging_context);
+	struct smbd_server_connection *sconn = talloc_get_type_abort(
+		private_data, struct smbd_server_connection);
 	change_to_root_user();
 
 	/* update printer queue caches if necessary */
-	update_monitored_printq_cache(msg_ctx);
+	update_monitored_printq_cache(sconn->msg_ctx);
 
 	/* check if we need to reload services */
-	check_reload(msg_ctx, time(NULL));
+	check_reload(sconn, time(NULL));
 
 	/* Change machine password if neccessary. */
 	attempt_machine_password_change();
@@ -2888,6 +2889,27 @@ fail:
 	return false;
 }
 
+static NTSTATUS smbd_register_ips(struct smbd_server_connection *sconn,
+				  struct sockaddr_storage *srv,
+				  struct sockaddr_storage *clnt)
+{
+	struct ctdbd_connection *cconn;
+	char tmp_addr[INET6_ADDRSTRLEN];
+	char *addr;
+
+	cconn = messaging_ctdbd_connection(procid_self());
+	if (cconn == NULL) {
+		return NT_STATUS_NO_MEMORY;
+	}
+
+	client_socket_addr(sconn->sock, addr, sizeof(addr));
+	addr = talloc_strdup(cconn, tmp_addr);
+	if (addr == NULL) {
+		return NT_STATUS_NO_MEMORY;
+	}
+	return ctdbd_register_ips(cconn, srv, clnt, release_ip, addr);
+}
+
 /****************************************************************************
  Process commands from the client
 ****************************************************************************/
@@ -3037,7 +3059,7 @@ void smbd_process(struct smbd_server_connection *sconn)
 	/* register our message handlers */
 	messaging_register(sconn->msg_ctx, NULL,
 			   MSG_SMB_FORCE_TDIS, msg_force_tdis);
-	messaging_register(sconn->msg_ctx, NULL,
+	messaging_register(sconn->msg_ctx, sconn,
 			   MSG_SMB_RELEASE_IP, msg_release_ip);
 	messaging_register(sconn->msg_ctx, NULL,
 			   MSG_SMB_CLOSE_FILE, msg_close_file);
@@ -3069,8 +3091,7 @@ void smbd_process(struct smbd_server_connection *sconn)
 
 	if (!(event_add_idle(smbd_event_context(), NULL,
 			     timeval_set(SMBD_SELECT_TIMEOUT, 0),
-			     "housekeeping", housekeeping_fn,
-			     sconn->msg_ctx))) {
+			     "housekeeping", housekeeping_fn, sconn))) {
 		DEBUG(0, ("Could not add housekeeping event\n"));
 		exit(1);
 	}
@@ -3088,13 +3109,8 @@ void smbd_process(struct smbd_server_connection *sconn)
 		struct sockaddr_storage srv, clnt;
 
 		if (client_get_tcp_info(&srv, &clnt) == 0) {
-
 			NTSTATUS status;
-
-			status = ctdbd_register_ips(
-				messaging_ctdbd_connection(procid_self()),
-				&srv, &clnt, release_ip, NULL);
-
+			status = smbd_register_ips(sconn, &srv, &clnt);
 			if (!NT_STATUS_IS_OK(status)) {
 				DEBUG(0, ("ctdbd_register_ips failed: %s\n",
 					  nt_errstr(status)));
diff --git a/source3/smbd/server.c b/source3/smbd/server.c
index 7d25769..aa0f7e8 100644
--- a/source3/smbd/server.c
+++ b/source3/smbd/server.c
@@ -53,18 +53,12 @@ static_decl_rpc;
 extern int dcelogin_atmost_once;
 #endif /* WITH_DFS */
 
-int smbd_server_fd(void)
-{
-	return server_fd;
-}
-
 static void smbd_set_server_fd(int fd)
 {
 	struct smbd_server_connection *sconn = smbd_server_conn;
+	char addr[INET6_ADDRSTRLEN];
 	const char *name;
 
-	server_fd = fd;
-
 	sconn->sock = fd;
 
 	/*
@@ -82,6 +76,10 @@ static void smbd_set_server_fd(int fd)
 	}
 	sconn->client_id.name =
 		(name != NULL) ? name : sconn->client_id.addr;
+
+	sub_set_socket_ids(sconn->client_id.addr, sconn->client_id.name,
+			   client_socket_addr(sconn->sock, addr,
+					      sizeof(addr)));
 }
 
 struct event_context *smbd_event_context(void)
@@ -102,7 +100,7 @@ static void smb_conf_updated(struct messaging_context *msg,
 	DEBUG(10,("smb_conf_updated: Got message saying smb.conf was "
 		  "updated. Reloading.\n"));
 	change_to_root_user();
-	reload_services(msg, smbd_server_fd(), False);
+	reload_services(msg, smbd_server_conn->sock, False);
 }
 
 
@@ -1005,8 +1003,7 @@ extern void build_options(bool screen);
 	 * Reloading of the printers will not work here as we don't have a
 	 * server info and rpc services set up. It will be called later.
 	 */
-	if (!reload_services(smbd_messaging_context(), smbd_server_fd(),
-			     False)) {
+	if (!reload_services(smbd_messaging_context(), -1, False)) {
 		exit(1);
 	}
 
diff --git a/source3/torture/vfstest.c b/source3/torture/vfstest.c
index 4d537da..923b547 100644
--- a/source3/torture/vfstest.c
+++ b/source3/torture/vfstest.c
@@ -410,14 +410,8 @@ void exit_server_cleanly(const char *const reason)
 	exit_server("normal exit");
 }
 
-static int server_fd = -1;
 int last_message = -1;
 
-int smbd_server_fd(void)
-{
-		return server_fd;
-}
-
 struct event_context *smbd_event_context(void)
 {
 	static struct event_context *ctx;
@@ -463,7 +457,7 @@ int main(int argc, char *argv[])
 	poptFreeContext(pc);
 
 	/* TODO: check output */
-	reload_services(smbd_messaging_context(), smbd_server_fd(), False);
+	reload_services(smbd_messaging_context(), -1, False);
 
 	/* the following functions are part of the Samba debugging
 	   facilities.  See lib/debug.c */


-- 
Samba Shared Repository


More information about the samba-cvs mailing list