[SCM] Samba Shared Repository - branch master updated - release-4-0-0alpha7-202-gbf85a14

Stefan Metzmacher metze at samba.org
Fri Mar 6 16:11:51 GMT 2009


The branch, master has been updated
       via  bf85a14182f0dfe6d21cda2039c7ccb961419328 (commit)
       via  3f3e15ab91373597390320269f5cd701d3f07a3b (commit)
       via  6e572d40a913f788f06e4bc7a7047129bc22ad5a (commit)
       via  589eb81e3fe5262d544af2c5032c99b5a4d4ba85 (commit)
       via  196a5d038886bdea678ac9ae97bdf9dab825e23f (commit)
       via  4b6cbe80b28b7a99ba8f35190d809f5a439fdd22 (commit)
      from  918e6288fa775893a7e895334e05ce7780f89eaf (commit)

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


- Log -----------------------------------------------------------------
commit bf85a14182f0dfe6d21cda2039c7ccb961419328
Author: Stefan Metzmacher <metze at samba.org>
Date:   Fri Mar 6 16:27:10 2009 +0100

    s3:make_test: run CHAIN1 test
    
    metze

commit 3f3e15ab91373597390320269f5cd701d3f07a3b
Author: Stefan Metzmacher <metze at samba.org>
Date:   Fri Mar 6 12:01:44 2009 +0100

    s3:libsmb: merge cli_setup_signing_state() into cli_initialise_ex()
    
    metze

commit 6e572d40a913f788f06e4bc7a7047129bc22ad5a
Author: Stefan Metzmacher <metze at samba.org>
Date:   Fri Mar 6 11:52:15 2009 +0100

    s3:libsmb: remove cli_setup_signing_state() and add struct cli_state *cli_initialise_ex()
    
    This prepares the next changes.
    
    metze

commit 589eb81e3fe5262d544af2c5032c99b5a4d4ba85
Author: Stefan Metzmacher <metze at samba.org>
Date:   Fri Mar 6 11:40:21 2009 +0100

    s3:winbindd_cm: remove useless cli_setup_signing_state(*cli, Undefined) call
    
    cli_setup_signing_state() with Undefined is a noop.
    
    metze

commit 196a5d038886bdea678ac9ae97bdf9dab825e23f
Author: Stefan Metzmacher <metze at samba.org>
Date:   Fri Mar 6 07:45:06 2009 +0100

    s3:signing: the seqnum should only be decremented by 1 for ntcancel requests
    
    [MS-SMB] 3.3.5.1 Receiving Any Message says that the seqnum
    is incremented by only for ntcancel requests for any other
    request it's by incremented by 2, even if it doesn't expect
    a response.
    
    metze

commit 4b6cbe80b28b7a99ba8f35190d809f5a439fdd22
Author: Stefan Metzmacher <metze at samba.org>
Date:   Fri Mar 6 07:38:41 2009 +0100

    s3:errormap: add ECANCELED, ERRDOS/ERRbadfid, NT_STATUS_CANCELLED mapping
    
    If someone knows a better dos error, please tell me...
    
    metze

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

Summary of changes:
 source3/include/proto.h                    |    4 +-
 source3/lib/errmap_unix.c                  |    3 +
 source3/libsmb/cliconnect.c                |    4 +-
 source3/libsmb/clidfs.c                    |    3 +-
 source3/libsmb/clientgen.c                 |   58 +++++++++++++++-------------
 source3/libsmb/smb_signing.c               |    6 ++-
 source3/script/tests/test_smbtorture_s3.sh |    2 +-
 source3/smbd/aio.c                         |    8 ++--
 source3/smbd/nttrans.c                     |    2 +-
 source3/winbindd/winbindd_cm.c             |    2 -
 10 files changed, 48 insertions(+), 44 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source3/include/proto.h b/source3/include/proto.h
index ffdef43..c8dff53 100644
--- a/source3/include/proto.h
+++ b/source3/include/proto.h
@@ -2430,8 +2430,8 @@ void cli_setup_packet_buf(struct cli_state *cli, char *buf);
 void cli_setup_packet(struct cli_state *cli);
 void cli_setup_bcc(struct cli_state *cli, void *p);
 void cli_init_creds(struct cli_state *cli, const char *username, const char *domain, const char *password);
-void cli_setup_signing_state(struct cli_state *cli, int signing_state);
 struct cli_state *cli_initialise(void);
+struct cli_state *cli_initialise_ex(int signing_state);
 void cli_nt_pipes_close(struct cli_state *cli);
 void cli_shutdown(struct cli_state *cli);
 void cli_sockopt(struct cli_state *cli, const char *options);
@@ -3209,7 +3209,7 @@ bool srv_oplock_set_signing(bool onoff);
 bool srv_check_sign_mac(const char *inbuf, bool must_be_ok);
 void srv_calculate_sign_mac(char *outbuf);
 void srv_defer_sign_response(uint16 mid);
-void srv_cancel_sign_response(uint16 mid);
+void srv_cancel_sign_response(uint16 mid, bool cancel);
 void srv_set_signing_negotiated(void);
 bool srv_is_signing_active(void);
 bool srv_is_signing_negotiated(void);
diff --git a/source3/lib/errmap_unix.c b/source3/lib/errmap_unix.c
index 9adb237..bb09726 100644
--- a/source3/lib/errmap_unix.c
+++ b/source3/lib/errmap_unix.c
@@ -95,6 +95,9 @@ const struct unix_error_map unix_dos_nt_errmap[] = {
 #ifdef ENOATTR
 	{ ENOATTR, ERRDOS, ERRbadfile, NT_STATUS_NOT_FOUND },
 #endif
+#ifdef ECANCELED
+	{ ECANCELED, ERRDOS, ERRbadfid, NT_STATUS_CANCELLED},
+#endif
 
 	{ 0, 0, 0, NT_STATUS_OK }
 };
diff --git a/source3/libsmb/cliconnect.c b/source3/libsmb/cliconnect.c
index 58e7dd1..e3d1b65 100644
--- a/source3/libsmb/cliconnect.c
+++ b/source3/libsmb/cliconnect.c
@@ -1949,7 +1949,7 @@ NTSTATUS cli_start_connection(struct cli_state **output_cli,
 	if (!my_name) 
 		my_name = global_myname();
 
-	if (!(cli = cli_initialise())) {
+	if (!(cli = cli_initialise_ex(signing_state))) {
 		return NT_STATUS_NO_MEMORY;
 	}
 
@@ -1997,8 +1997,6 @@ again:
 		return NT_STATUS_BAD_NETWORK_NAME;
 	}
 
-	cli_setup_signing_state(cli, signing_state);
-
 	if (flags & CLI_FULL_CONNECTION_DONT_SPNEGO)
 		cli->use_spnego = False;
 	else if (flags & CLI_FULL_CONNECTION_USE_KERBEROS)
diff --git a/source3/libsmb/clidfs.c b/source3/libsmb/clidfs.c
index e642f16..1153d8d 100644
--- a/source3/libsmb/clidfs.c
+++ b/source3/libsmb/clidfs.c
@@ -151,7 +151,7 @@ static struct cli_state *do_connect(TALLOC_CTX *ctx,
 	zero_sockaddr(&ss);
 
 	/* have to open a new connection */
-	if (!(c=cli_initialise())) {
+	if (!(c=cli_initialise_ex(cm_creds.signing_state))) {
 		d_printf("Connection to %s failed\n", server_n);
 		if (c) {
 			cli_shutdown(c);
@@ -177,7 +177,6 @@ static struct cli_state *do_connect(TALLOC_CTX *ctx,
 	c->protocol = max_protocol;
 	c->use_kerberos = cm_creds.use_kerberos;
 	c->fallback_after_kerberos = cm_creds.fallback_after_kerberos;
-	cli_setup_signing_state(c, cm_creds.signing_state);
 
 	if (!cli_session_request(c, &calling, &called)) {
 		char *p;
diff --git a/source3/libsmb/clientgen.c b/source3/libsmb/clientgen.c
index 0382ef5..2983f77 100644
--- a/source3/libsmb/clientgen.c
+++ b/source3/libsmb/clientgen.c
@@ -425,33 +425,15 @@ void cli_init_creds(struct cli_state *cli, const char *username, const char *dom
 }
 
 /****************************************************************************
- Set the signing state (used from the command line).
-****************************************************************************/
-
-void cli_setup_signing_state(struct cli_state *cli, int signing_state)
-{
-	if (signing_state == Undefined)
-		return;
-
-	if (signing_state == false) {
-		cli->sign_info.allow_smb_signing = false;
-		cli->sign_info.mandatory_signing = false;
-		return;
-	}
-
-	cli->sign_info.allow_smb_signing = true;
-
-	if (signing_state == Required) 
-		cli->sign_info.mandatory_signing = true;
-}
-
-/****************************************************************************
  Initialise a client structure. Always returns a malloc'ed struct.
+ Set the signing state (used from the command line).
 ****************************************************************************/
 
-struct cli_state *cli_initialise(void)
+struct cli_state *cli_initialise_ex(int signing_state)
 {
 	struct cli_state *cli = NULL;
+	bool allow_smb_signing = false;
+	bool mandatory_signing = false;
 
 	/* Check the effective uid - make sure we are not setuid */
 	if (is_setuid_root()) {
@@ -490,12 +472,27 @@ struct cli_state *cli_initialise(void)
 	if (getenv("CLI_FORCE_DOSERR"))
 		cli->force_dos_errors = true;
 
-	if (lp_client_signing()) 
-		cli->sign_info.allow_smb_signing = true;
+	if (lp_client_signing()) {
+		allow_smb_signing = true;
+	}
+
+	if (lp_client_signing() == Required) {
+		mandatory_signing = true;
+	}
+
+	if (signing_state != Undefined) {
+		allow_smb_signing = true;
+	}
+
+	if (signing_state == false) {
+		allow_smb_signing = false;
+		mandatory_signing = false;
+	}
+
+	if (signing_state == Required) {
+		mandatory_signing = true;
+	}
 
-	if (lp_client_signing() == Required) 
-		cli->sign_info.mandatory_signing = true;
-                                   
 	if (!cli->outbuf || !cli->inbuf)
                 goto error;
 
@@ -510,6 +507,8 @@ struct cli_state *cli_initialise(void)
 #endif
 
 	/* initialise signing */
+	cli->sign_info.allow_smb_signing = allow_smb_signing;
+	cli->sign_info.mandatory_signing = mandatory_signing;
 	cli_null_set_signing(cli);
 
 	cli->initialised = 1;
@@ -526,6 +525,11 @@ struct cli_state *cli_initialise(void)
         return NULL;
 }
 
+struct cli_state *cli_initialise(void)
+{
+	return cli_initialise_ex(Undefined);
+}
+
 /****************************************************************************
  Close all pipes open on this session.
 ****************************************************************************/
diff --git a/source3/libsmb/smb_signing.c b/source3/libsmb/smb_signing.c
index ea1eb05..55b30d4 100644
--- a/source3/libsmb/smb_signing.c
+++ b/source3/libsmb/smb_signing.c
@@ -865,7 +865,7 @@ void srv_defer_sign_response(uint16 mid)
  cancelled by mid. This should never find one....
 ************************************************************/
 
-void srv_cancel_sign_response(uint16 mid)
+void srv_cancel_sign_response(uint16 mid, bool cancel)
 {
 	struct smb_basic_signing_context *data;
 	uint32 dummy_seq;
@@ -884,7 +884,9 @@ void srv_cancel_sign_response(uint16 mid)
 		;
 
 	/* cancel doesn't send a reply so doesn't burn a sequence number. */
-	data->send_seq_num -= 1;
+	if (cancel) {
+		data->send_seq_num -= 1;
+	}
 }
 
 /***********************************************************
diff --git a/source3/script/tests/test_smbtorture_s3.sh b/source3/script/tests/test_smbtorture_s3.sh
index 842277b..70c6d34 100755
--- a/source3/script/tests/test_smbtorture_s3.sh
+++ b/source3/script/tests/test_smbtorture_s3.sh
@@ -27,7 +27,7 @@ tests="$tests UNLINK BROWSE ATTR TRANS2 TORTURE "
 tests="$tests OPLOCK1 OPLOCK2 OPLOCK3"
 tests="$tests DIR DIR1 TCON TCONDEV RW1 RW2 RW3"
 tests="$tests OPEN XCOPY RENAME DELETE PROPERTIES W2K"
-tests="$tests TCON2 IOCTL CHKPATH FDSESS LOCAL-SUBSTITUTE"
+tests="$tests TCON2 IOCTL CHKPATH FDSESS LOCAL-SUBSTITUTE CHAIN1"
 
 skipped1="RANDOMIPC NEGNOWAIT NBENCH ERRMAPEXTRACT TRANS2SCAN NTTRANSSCAN"
 skipped2="DENY1 DENY2 OPENATTR CASETABLE EATEST"
diff --git a/source3/smbd/aio.c b/source3/smbd/aio.c
index 6b19e09..cfa4b43 100644
--- a/source3/smbd/aio.c
+++ b/source3/smbd/aio.c
@@ -347,7 +347,7 @@ static int handle_aio_read_complete(struct aio_extra *aio_ex)
 		/* If errno is ECANCELED then don't return anything to the
 		 * client. */
 		if (errno == ECANCELED) {
-			srv_cancel_sign_response(aio_ex->req->mid);
+			srv_cancel_sign_response(aio_ex->req->mid, false);
 			return 0;
 		}
 
@@ -441,7 +441,7 @@ static int handle_aio_write_complete(struct aio_extra *aio_ex)
 		/* If errno is ECANCELED then don't return anything to the
 		 * client. */
 		if (errno == ECANCELED) {
-			srv_cancel_sign_response(aio_ex->req->mid);
+			srv_cancel_sign_response(aio_ex->req->mid, false);
 			return 0;
 		}
 
@@ -534,7 +534,7 @@ void smbd_aio_complete_mid(unsigned int mid)
 	if (!aio_ex) {
 		DEBUG(3,("smbd_aio_complete_mid: Can't find record to "
 			 "match mid %u.\n", mid));
-		srv_cancel_sign_response(mid);
+		srv_cancel_sign_response(mid, false);
 		return;
 	}
 
@@ -544,7 +544,7 @@ void smbd_aio_complete_mid(unsigned int mid)
 		 * ignore. */
 		DEBUG( 3,( "smbd_aio_complete_mid: file closed whilst "
 			   "aio outstanding (mid[%u]).\n", mid));
-		srv_cancel_sign_response(mid);
+		srv_cancel_sign_response(mid, false);
 		return;
 	}
 
diff --git a/source3/smbd/nttrans.c b/source3/smbd/nttrans.c
index 86a4650..9c7fb19 100644
--- a/source3/smbd/nttrans.c
+++ b/source3/smbd/nttrans.c
@@ -1131,7 +1131,7 @@ void reply_ntcancel(struct smb_request *req)
 	START_PROFILE(SMBntcancel);
 	remove_pending_change_notify_requests_by_mid(req->mid);
 	remove_pending_lock_requests_by_mid(req->mid);
-	srv_cancel_sign_response(req->mid);
+	srv_cancel_sign_response(req->mid, true);
 
 	DEBUG(3,("reply_ntcancel: cancel called on mid = %d.\n", req->mid));
 
diff --git a/source3/winbindd/winbindd_cm.c b/source3/winbindd/winbindd_cm.c
index 35768fe..7a53f19 100644
--- a/source3/winbindd/winbindd_cm.c
+++ b/source3/winbindd/winbindd_cm.c
@@ -821,8 +821,6 @@ static NTSTATUS cm_prepare_connection(const struct winbindd_domain *domain,
 		}
 	}
 
-	cli_setup_signing_state(*cli, Undefined);
-
 	result = cli_negprot(*cli);
 
 	if (!NT_STATUS_IS_OK(result)) {


-- 
Samba Shared Repository


More information about the samba-cvs mailing list