r26651: libsmb: Allow specifying signing policy from higher up.
authorJelmer Vernooij <jelmer@samba.org>
Thu, 3 Jan 2008 23:21:58 +0000 (17:21 -0600)
committerStefan Metzmacher <metze@samba.org>
Thu, 3 Jan 2008 18:33:36 +0000 (12:33 -0600)
The number of arguments is getting a bit excessive now, so it
probably makes sense to pass in the smbcli_options struct rather than
all members individually and add a convenience function for obtaining a
smbcli_options struct from a loadparm context.

17 files changed:
source/client/client.c
source/libcli/cliconnect.c
source/libcli/raw/clitransport.c
source/libcli/raw/clitree.c
source/libcli/raw/libcliraw.h
source/libcli/raw/smb_signing.c
source/libcli/smb_composite/connect.c
source/libcli/smb_composite/fetchfile.c
source/libcli/smb_composite/fsinfo.c
source/libcli/smb_composite/smb_composite.h
source/librpc/rpc/dcerpc_connect.c
source/ntvfs/cifs/vfs_cifs.c
source/scripting/ejs/smbcalls_cli.c
source/torture/basic/base.c
source/torture/basic/misc.c
source/torture/raw/lockbench.c
source/torture/raw/openbench.c

index 7ce3268d3a4dfd0ef6a5562302b64a794990d83d..259966ddaa2d190ae7fcaa1d3c02211f7434976a 100644 (file)
@@ -3065,7 +3065,7 @@ static int do_host_query(struct loadparm_context *lp_ctx, const char *query_host
 /****************************************************************************
 handle a message operation
 ****************************************************************************/
-static int do_message_op(const char *netbios_name, const char *desthost, const char **destports, const char *destip, int name_type, struct resolve_context *resolve_ctx, int max_xmit, int max_mux, bool use_spnego)
+static int do_message_op(const char *netbios_name, const char *desthost, const char **destports, const char *destip, int name_type, struct resolve_context *resolve_ctx, int max_xmit, int max_mux, bool use_spnego, enum smb_signing_state signing)
 {
        struct nbt_name called, calling;
        const char *server_name;
@@ -3077,7 +3077,7 @@ static int do_message_op(const char *netbios_name, const char *desthost, const c
 
        server_name = destip ? destip : desthost;
 
-       if (!(cli=smbcli_state_init(NULL)) || !smbcli_socket_connect(cli, server_name, destports, resolve_ctx, max_xmit, max_mux, use_spnego)) {
+       if (!(cli=smbcli_state_init(NULL)) || !smbcli_socket_connect(cli, server_name, destports, resolve_ctx, max_xmit, max_mux, use_spnego, signing)) {
                d_printf("Connection to %s failed\n", server_name);
                return 1;
        }
@@ -3225,7 +3225,7 @@ static int do_message_op(const char *netbios_name, const char *desthost, const c
        }
 
        if (message) {
-               return do_message_op(lp_netbios_name(cmdline_lp_ctx), desthost, lp_smb_ports(cmdline_lp_ctx), dest_ip, name_type, lp_resolve_context(cmdline_lp_ctx), lp_max_xmit(cmdline_lp_ctx), lp_maxmux(cmdline_lp_ctx), lp_nt_status_support(cmdline_lp_ctx) && lp_use_spnego(cmdline_lp_ctx));
+               return do_message_op(lp_netbios_name(cmdline_lp_ctx), desthost, lp_smb_ports(cmdline_lp_ctx), dest_ip, name_type, lp_resolve_context(cmdline_lp_ctx), lp_max_xmit(cmdline_lp_ctx), lp_maxmux(cmdline_lp_ctx), lp_nt_status_support(cmdline_lp_ctx) && lp_use_spnego(cmdline_lp_ctx), lp_client_signing(cmdline_lp_ctx));
        }
        
        if (!do_connect(ctx, lp_resolve_context(cmdline_lp_ctx), desthost, lp_smb_ports(cmdline_lp_ctx), service, cmdline_credentials))
index c13dde97112dadbcf9e45d7b123e279b7271dc96..c1fadaa6797daba0f05cef626963b28b67b5bda2 100644 (file)
   wrapper around smbcli_sock_connect()
 */
 bool smbcli_socket_connect(struct smbcli_state *cli, const char *server, 
-                          const char **ports, struct resolve_context *resolve_ctx,
-                          int max_xmit, int max_mux, bool use_spnego)
+                          const char **ports, 
+                          struct resolve_context *resolve_ctx,
+                          int max_xmit, int max_mux, bool use_spnego,
+                          enum smb_signing_state signing)
 {
        struct smbcli_socket *sock;
 
@@ -42,7 +44,7 @@ bool smbcli_socket_connect(struct smbcli_state *cli, const char *server,
        if (sock == NULL) return false;
        
        cli->transport = smbcli_transport_init(sock, cli, true, max_xmit,
-                                              max_mux, use_spnego);
+                                              max_mux, use_spnego, signing);
        if (!cli->transport) {
                return false;
        }
index bdaeaeb58a310bd542df7b7bb9ee3808b42ecefd..3ca828d46b5ae150327a2edc60f6326ac12190a4 100644 (file)
@@ -76,7 +76,8 @@ struct smbcli_transport *smbcli_transport_init(struct smbcli_socket *sock,
                                               bool primary, 
                                               int max_xmit,
                                               int max_mux,
-                                              bool use_spnego)
+                                              bool use_spnego,
+                                              enum smb_signing_state signing)
 {
        struct smbcli_transport *transport;
 
@@ -93,6 +94,7 @@ struct smbcli_transport *smbcli_transport_init(struct smbcli_socket *sock,
        transport->options.max_xmit = max_xmit;
        transport->options.max_mux = max_mux;
        transport->options.request_timeout = SMB_REQUEST_TIMEOUT;
+       transport->options.signing = signing;
 
        transport->negotiate.max_xmit = transport->options.max_xmit;
 
index 94fa37383bb1a242ea3265853c505ef406a19668..3d8a6760a19f9a792e6a8e1c55ef854f1440d978 100644 (file)
@@ -198,8 +198,7 @@ NTSTATUS smbcli_tree_full_connection(TALLOC_CTX *parent_ctx,
        io.in.max_protocol = lp_cli_maxprotocol(global_loadparm);
        io.in.unicode = lp_unicode(global_loadparm);
        io.in.use_spnego = lp_use_spnego(global_loadparm) && lp_nt_status_support(global_loadparm);
-
-
+       io.in.signing = lp_client_signing(global_loadparm);
        
        status = smb_composite_connect(&io, parent_ctx, resolve_ctx, ev);
        if (NT_STATUS_IS_OK(status)) {
index 6c97e61f047325834e275079621d3e474c1d6944..dd6904dec2d14e407573047bcdf942fd7386ba0f 100644 (file)
@@ -97,6 +97,7 @@ struct smbcli_options {
        uint32_t max_xmit;
        uint16_t max_mux;
        int request_timeout;
+       enum smb_signing_state signing;
 };
 
 /* this is the context for the client transport layer */
index e19e81af7ed42c1d55e9e68074c3c28f56579756..0053710aaf1d4c84a4f94c93faeee077b541e307 100644 (file)
@@ -383,7 +383,7 @@ bool smbcli_init_signing(struct smbcli_transport *transport)
                return false;
        }
        
-       switch (lp_client_signing(global_loadparm)) {
+       switch (transport->options.signing) {
        case SMB_SIGNING_OFF:
                transport->negotiate.sign_info.allow_smb_signing = false;
                break;
index bdefe39b717b3fbb410be7aeda4203d6876cf08d..e45a8a25f9d0d39854f424a82de32ea990730004 100644 (file)
@@ -309,7 +309,8 @@ static NTSTATUS connect_socket(struct composite_context *c,
        state->transport = smbcli_transport_init(state->sock, state, true, 
                                                 io->in.max_xmit,
                                                 io->in.max_mux,
-                                                io->in.use_spnego);
+                                                io->in.use_spnego,
+                                                io->in.signing);
        NT_STATUS_HAVE_NO_MEMORY(state->transport);
 
        if (is_ipaddress(state->sock->hostname) &&
index 893eb854f5c91ea98db37df654d41e6ff6989c6d..5fa48b4863915ce9d0ca23745abdf884519d8134 100644 (file)
@@ -154,7 +154,8 @@ struct composite_context *smb_composite_fetchfile_send(struct smb_composite_fetc
        state->connect->in.unicode = lp_unicode(global_loadparm);
        state->connect->in.use_spnego = lp_use_spnego(global_loadparm) && 
                lp_nt_status_support(global_loadparm);
-
+       state->connect->in.signing = lp_client_signing(global_loadparm);
+       
        state->creq = smb_composite_connect_send(state->connect, state, 
                                                 lp_resolve_context(global_loadparm), event_ctx);
        if (state->creq == NULL) goto failed;
index bf425ad7c8b17c39d91905edda83b361053c6c9e..b6a5a5f2ccaddfa396c2b05a68f64b026366d155 100644 (file)
@@ -160,6 +160,7 @@ struct composite_context *smb_composite_fsinfo_send(struct smbcli_tree *tree,
        state->connect->in.unicode = lp_unicode(global_loadparm);
        state->connect->in.use_spnego = lp_use_spnego(global_loadparm) && 
                lp_nt_status_support(global_loadparm);
+       state->connect->in.signing = lp_client_signing(global_loadparm);
 
        c->state = COMPOSITE_STATE_IN_PROGRESS;
        state->stage = FSINFO_CONNECT;
index 41ce4b03bd7b2b18f96f18f0fb9dfbe0181446c2..dd193fc82069ff354490db540995dcde96a2d46b 100644 (file)
@@ -27,6 +27,8 @@
   particularly designed to be used in async applications
 */
 
+#include "libcli/raw/signing.h"
+
 
 /*
   a composite open/read(s)/close request that loads a whole file
@@ -97,6 +99,7 @@ struct smb_composite_connect {
                int max_xmit;
                int max_mux;
                int max_protocol;
+               enum smb_signing_state signing;
        } in;
        struct {
                struct smbcli_tree *tree;
index 26bccbbad7e2d1f548b8bd8d0dfec161d949f468..9bd503c6258fd98069a2fd6339a0cf1ade794b5b 100644 (file)
@@ -125,6 +125,7 @@ static struct composite_context *dcerpc_pipe_connect_ncacn_np_smb_send(TALLOC_CT
        conn->in.max_protocol = lp_cli_maxprotocol(lp_ctx);
        conn->in.unicode = lp_unicode(lp_ctx);
        conn->in.use_spnego = lp_use_spnego(lp_ctx) && lp_nt_status_support(lp_ctx);
+       conn->in.signing = lp_client_signing(lp_ctx);
 
        /*
         * provide proper credentials - user supplied, but allow a
index 0b4cbb8a130ce5c9b5d3f9099b731119618f99e7..0b0c9b10372a079abf53de9a79c4e2b428a8d76c 100644 (file)
@@ -208,6 +208,7 @@ static NTSTATUS cvfs_connect(struct ntvfs_module_context *ntvfs,
        io.in.max_protocol = lp_cli_maxprotocol(ntvfs->ctx->lp_ctx);
        io.in.unicode = lp_unicode(ntvfs->ctx->lp_ctx);
        io.in.use_spnego = lp_use_spnego(ntvfs->ctx->lp_ctx) && lp_nt_status_support(ntvfs->ctx->lp_ctx);
+       io.in.signing = lp_client_signing(ntvfs->ctx->lp_ctx);
        
        creq = smb_composite_connect_send(&io, private, 
                                          lp_resolve_context(ntvfs->ctx->lp_ctx),
index b66318dc3d3e372e18fc57c9b190ce004f57eb6b..5e61a4df212a73efbd679b5a6d572236a8b31580 100644 (file)
@@ -451,6 +451,7 @@ static int ejs_tree_connect(MprVarHandle eid, int argc, char **argv)
        io.in.max_protocol = lp_cli_maxprotocol(global_loadparm);
        io.in.unicode = lp_unicode(global_loadparm);
        io.in.use_spnego = lp_use_spnego(global_loadparm) && lp_nt_status_support(global_loadparm);
+       io.in.signing = lp_client_signing(global_loadparm);
 
        result = smb_composite_connect(&io, mem_ctx, 
                                       lp_resolve_context(global_loadparm), 
index 9820a02f2746fb968c291f32bd9d92a162e1ec5b..fcd788481b393c4cb9d12a59344d452bc73fcabc 100644 (file)
@@ -51,7 +51,7 @@ static struct smbcli_state *open_nbt_connection(struct torture_context *tctx)
                goto failed;
        }
 
-       if (!smbcli_socket_connect(cli, host, lp_smb_ports(tctx->lp_ctx), lp_resolve_context(tctx->lp_ctx), lp_max_xmit(tctx->lp_ctx), lp_maxmux(tctx->lp_ctx), lp_nt_status_support(tctx->lp_ctx) && lp_use_spnego(tctx->lp_ctx))) {
+       if (!smbcli_socket_connect(cli, host, lp_smb_ports(tctx->lp_ctx), lp_resolve_context(tctx->lp_ctx), lp_max_xmit(tctx->lp_ctx), lp_maxmux(tctx->lp_ctx), lp_nt_status_support(tctx->lp_ctx) && lp_use_spnego(tctx->lp_ctx), lp_client_signing(tctx->lp_ctx))) {
                torture_comment(tctx, "Failed to connect with %s\n", host);
                goto failed;
        }
index f4cb47e7ba958e2e7aa5c268b19a45036576817d..986a4574a9a136bb3bae297cbb707a3a70f33752 100644 (file)
@@ -827,6 +827,7 @@ static struct composite_context *torture_connect_async(
        smb->in.max_protocol = lp_cli_maxprotocol(tctx->lp_ctx);
        smb->in.unicode = lp_unicode(tctx->lp_ctx);
        smb->in.use_spnego = lp_use_spnego(tctx->lp_ctx) && lp_nt_status_support(tctx->lp_ctx);
+       smb->in.signing = lp_client_signing(tctx->lp_ctx);
        
        return smb_composite_connect_send(smb,mem_ctx,
                                          lp_resolve_context(tctx->lp_ctx),ev);
index ea570e5bf50458f960adbcc3ca3d1501d39597fa..5093816a3135ffe858094a6309d480c8e09c5092 100644 (file)
@@ -199,6 +199,7 @@ static void reopen_connection(struct event_context *ev, struct timed_event *te,
        io->in.max_protocol = lp_cli_maxprotocol(state->tctx->lp_ctx);
        io->in.unicode = lp_unicode(state->tctx->lp_ctx);
        io->in.use_spnego = lp_use_spnego(state->tctx->lp_ctx) && lp_nt_status_support(state->tctx->lp_ctx);
+       io->in.signing = lp_client_signing(state->tctx->lp_ctx);
 
        /* kill off the remnants of the old connection */
        talloc_free(state->tree);
index 0582905816115acba1780d49a3e62f45757f01a2..7f4752cdf7c3ec4761e4ae88b01a8be2e621b853 100644 (file)
@@ -137,6 +137,7 @@ static void reopen_connection(struct event_context *ev, struct timed_event *te,
        io->in.max_protocol = lp_cli_maxprotocol(state->tctx->lp_ctx);
        io->in.unicode = lp_unicode(state->tctx->lp_ctx);
        io->in.use_spnego = lp_use_spnego(state->tctx->lp_ctx) && lp_nt_status_support(state->tctx->lp_ctx);
+       io->in.signing = lp_client_signing(state->tctx->lp_ctx);
 
        /* kill off the remnants of the old connection */
        talloc_free(state->tree);