]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
Revert "Remove the pipe_idx variable from rpc_pipe_client"
authorVolker Lendecke <vl@samba.org>
Fri, 25 Apr 2008 14:33:54 +0000 (16:33 +0200)
committerVolker Lendecke <vl@samba.org>
Fri, 25 Apr 2008 14:33:54 +0000 (16:33 +0200)
This reverts commit 4840febcd481563c3d9b2fabc1fe1b2ae5a76cf6.

source/include/client.h
source/include/rpc_client.h
source/lib/netapi/cm.c
source/libsmb/libsmb_xattr.c
source/rpc_client/cli_netlogon.c
source/rpc_client/cli_pipe.c
source/rpc_client/ndr.c
source/rpc_parse/parse_rpc.c

index d9f4727203cafd3e07329438b3e22b4fa519b142..af03e2bb60835d57b4272cc7691d5b938910accf 100644 (file)
@@ -62,12 +62,10 @@ struct rpc_pipe_client {
 
        struct cli_state *cli;
 
+       int pipe_idx;
        const char *pipe_name;
        uint16 fnum;
 
-       const struct ndr_syntax_id *abstract_syntax;
-       const struct ndr_syntax_id *transfer_syntax;
-
        const char *desthost;
        const char *srv_name_slash;
 
index ce0c9329818adf0c961776a07b44f52c180c31b2..c552271ee76ef1d331e77cee617088e5c7b8f248 100644 (file)
@@ -91,7 +91,7 @@
 #define CLI_DO_RPC_WERR( pcli, ctx, p_idx, opnum, q_in, r_out, \
                              q_ps, r_ps, q_io_fn, r_io_fn, default_error ) \
 {\
-       SMB_ASSERT(rpccli_is_pipe_idx(pcli, p_idx)); \
+       SMB_ASSERT(pcli->pipe_idx == p_idx); \
        if (!prs_init( &q_ps, RPC_MAX_PDU_FRAG_LEN, ctx, MARSHALL )) { \
                return WERR_NOMEM;\
        }\
index 2e16b98ffba1e1bac3f32c27fc853d2f80b2bcea..54642372479742f0d765b495c9cef4d7d304f825 100644 (file)
@@ -105,7 +105,7 @@ static struct rpc_pipe_client *pipe_cm_find(struct cli_state *cli,
                }
 
                if (strequal(cli->desthost, p->pipe->desthost) &&
-                   rpccli_is_pipe_idx(p->pipe, pipe_idx)) {
+                   pipe_idx == p->pipe->pipe_idx) {
                        *status = NT_STATUS_OK;
                        return p->pipe;
                }
index 8763205d1fabec34df1eb2582a0bdfb78df6fbaf..e17146e611cefb6604968f0ad90f85613d074b65 100644 (file)
@@ -39,7 +39,7 @@ find_lsa_pipe_hnd(struct cli_state *ipc_cli)
              pipe_hnd;
              pipe_hnd = pipe_hnd->next) {
                 
-               if (rpccli_is_pipe_idx(pipe_hnd, PI_LSARPC)) {
+               if (pipe_hnd->pipe_idx == PI_LSARPC) {
                        return pipe_hnd;
                }
        }
index cb1d93e9c117ee39fbec4cf8a4c18b14a6114e6b..bf1e161957acf9b9c6a25ccf8ec680b04c932366 100644 (file)
@@ -134,7 +134,7 @@ NTSTATUS rpccli_netlogon_setup_creds(struct rpc_pipe_client *cli,
        struct dcinfo *dc;
        bool retried = false;
 
-       SMB_ASSERT(rpccli_is_pipe_idx(cli, PI_NETLOGON));
+       SMB_ASSERT(cli->pipe_idx == PI_NETLOGON);
 
        dc = cli->dc;
        if (!dc) {
index 2979d168c5d2b970861362908d65eb273dbc3160..b9d184f023a53d90208a61641e5d6af1276882d4 100644 (file)
@@ -1092,8 +1092,8 @@ static NTSTATUS create_schannel_auth_rpc_bind_req( struct rpc_pipe_client *cli,
 static NTSTATUS create_bind_or_alt_ctx_internal(enum RPC_PKT_TYPE pkt_type,
                                                prs_struct *rpc_out, 
                                                uint32 rpc_call_id,
-                                               const RPC_IFACE *abstract,
-                                               const RPC_IFACE *transfer,
+                                               RPC_IFACE *abstract,
+                                               RPC_IFACE *transfer,
                                                RPC_HDR_AUTH *phdr_auth,
                                                prs_struct *pauth_info)
 {
@@ -1174,8 +1174,7 @@ static NTSTATUS create_bind_or_alt_ctx_internal(enum RPC_PKT_TYPE pkt_type,
 static NTSTATUS create_rpc_bind_req(struct rpc_pipe_client *cli,
                                prs_struct *rpc_out, 
                                uint32 rpc_call_id,
-                               const RPC_IFACE *abstract,
-                               const RPC_IFACE *transfer,
+                               RPC_IFACE *abstract, RPC_IFACE *transfer,
                                enum pipe_auth_type auth_type,
                                enum pipe_auth_level auth_level)
 {
@@ -1640,7 +1639,34 @@ static bool rpc_pipe_set_hnd_state(struct rpc_pipe_client *cli,
  Check the rpc bind acknowledge response.
 ****************************************************************************/
 
-static bool check_bind_response(RPC_HDR_BA *hdr_ba, const RPC_IFACE *transfer)
+static bool valid_pipe_name(const int pipe_idx, RPC_IFACE *abstract, RPC_IFACE *transfer)
+{
+       if ( pipe_idx >= PI_MAX_PIPES ) {
+               DEBUG(0,("valid_pipe_name: Programmer error!  Invalid pipe index [%d]\n",
+                       pipe_idx));
+               return False;
+       }
+
+       DEBUG(5,("Bind Abstract Syntax: "));    
+       dump_data(5, (uint8 *)&pipe_names[pipe_idx].abstr_syntax, 
+                 sizeof(pipe_names[pipe_idx].abstr_syntax));
+       DEBUG(5,("Bind Transfer Syntax: "));
+       dump_data(5, (uint8 *)&pipe_names[pipe_idx].trans_syntax,
+                 sizeof(pipe_names[pipe_idx].trans_syntax));
+
+       /* copy the required syntaxes out so we can do the right bind */
+       
+       *transfer = *pipe_names[pipe_idx].trans_syntax;
+       *abstract = *pipe_names[pipe_idx].abstr_syntax;
+
+       return True;
+}
+
+/****************************************************************************
+ Check the rpc bind acknowledge response.
+****************************************************************************/
+
+static bool check_bind_response(RPC_HDR_BA *hdr_ba, const int pipe_idx, RPC_IFACE *transfer)
 {
        if ( hdr_ba->addr.len == 0) {
                DEBUG(4,("Ignoring length check -- ASU bug (server didn't fill in the pipe name correctly)"));
@@ -1813,8 +1839,8 @@ static NTSTATUS rpc_finish_auth3_bind(struct rpc_pipe_client *cli,
  ********************************************************************/
 
 static NTSTATUS create_rpc_alter_context(uint32 rpc_call_id,
-                                       const RPC_IFACE *abstract,
-                                       const RPC_IFACE *transfer,
+                                       RPC_IFACE *abstract,
+                                       RPC_IFACE *transfer,
                                        enum pipe_auth_level auth_level,
                                        const DATA_BLOB *pauth_blob, /* spnego auth blob already created. */
                                        prs_struct *rpc_out)
@@ -1857,8 +1883,8 @@ static NTSTATUS rpc_finish_spnego_ntlmssp_bind(struct rpc_pipe_client *cli,
                                 RPC_HDR *phdr,
                                 prs_struct *rbuf,
                                 uint32 rpc_call_id,
-                               const RPC_IFACE *abstract,
-                               const RPC_IFACE *transfer,
+                               RPC_IFACE *abstract,
+                               RPC_IFACE *transfer,
                                 enum pipe_auth_type auth_type,
                                 enum pipe_auth_level auth_level)
 {
@@ -1992,6 +2018,8 @@ static NTSTATUS rpc_pipe_bind(struct rpc_pipe_client *cli,
 {
        RPC_HDR hdr;
        RPC_HDR_BA hdr_ba;
+       RPC_IFACE abstract;
+       RPC_IFACE transfer;
        prs_struct rpc_out;
        prs_struct rbuf;
        uint32 rpc_call_id;
@@ -2003,14 +2031,17 @@ static NTSTATUS rpc_pipe_bind(struct rpc_pipe_client *cli,
                (unsigned int)auth_type,
                (unsigned int)auth_level ));
 
+       if (!valid_pipe_name(cli->pipe_idx, &abstract, &transfer)) {
+               return NT_STATUS_INVALID_PARAMETER;
+       }
+
        prs_init_empty(&rpc_out, talloc_tos(), MARSHALL);
 
        rpc_call_id = get_rpc_call_id();
 
        /* Marshall the outgoing data. */
        status = create_rpc_bind_req(cli, &rpc_out, rpc_call_id,
-                               cli->abstract_syntax,
-                               cli->transfer_syntax,
+                               &abstract, &transfer,
                                auth_type,
                                auth_level);
 
@@ -2050,7 +2081,7 @@ static NTSTATUS rpc_pipe_bind(struct rpc_pipe_client *cli,
                return NT_STATUS_BUFFER_TOO_SMALL;
        }
 
-       if(!check_bind_response(&hdr_ba, cli->transfer_syntax)) {
+       if(!check_bind_response(&hdr_ba, cli->pipe_idx, &transfer)) {
                DEBUG(2,("rpc_pipe_bind: check_bind_response failed.\n"));
                prs_mem_free(&rbuf);
                return NT_STATUS_BUFFER_TOO_SMALL;
@@ -2080,8 +2111,7 @@ static NTSTATUS rpc_pipe_bind(struct rpc_pipe_client *cli,
                case PIPE_AUTH_TYPE_SPNEGO_NTLMSSP:
                        /* Need to send alter context request and reply. */
                        status = rpc_finish_spnego_ntlmssp_bind(cli, &hdr, &rbuf, rpc_call_id,
-                                               cli->abstract_syntax,
-                                               cli->transfer_syntax,
+                                               &abstract, &transfer,
                                                auth_type, auth_level);
                        if (!NT_STATUS_IS_OK(status)) {
                                prs_mem_free(&rbuf);
@@ -2132,11 +2162,6 @@ unsigned int rpccli_set_timeout(struct rpc_pipe_client *cli,
        return cli_set_timeout(cli->cli, timeout);
 }
 
-bool rpccli_is_pipe_idx(struct rpc_pipe_client *cli, int pipe_idx)
-{
-       return (cli->abstract_syntax == pipe_names[pipe_idx].abstr_syntax);
-}
-
 /****************************************************************************
  Open a named pipe over SMB to a remote server.
  *
@@ -2164,13 +2189,6 @@ static struct rpc_pipe_client *cli_rpc_pipe_open(struct cli_state *cli, int pipe
                return NULL;
        }
 
-       if ( pipe_idx >= PI_MAX_PIPES ) {
-               DEBUG(0, ("cli_rpc_pipe_open: Programmer error!  Invalid pipe "
-                         "index [%d]\n", pipe_idx));
-               *perr = NT_STATUS_INVALID_PARAMETER;
-               return NULL;
-       }
-
        /* The pipe name index must fall within our array */
        SMB_ASSERT((pipe_idx >= 0) && (pipe_idx < PI_MAX_PIPES));
 
@@ -2195,8 +2213,7 @@ static struct rpc_pipe_client *cli_rpc_pipe_open(struct cli_state *cli, int pipe
 
        result->fnum = fnum;
        result->cli = cli;
-       result->abstract_syntax = pipe_names[pipe_idx].abstr_syntax;
-       result->transfer_syntax = pipe_names[pipe_idx].trans_syntax;
+       result->pipe_idx = pipe_idx;
        result->auth.auth_type = PIPE_AUTH_TYPE_NONE;
        result->auth.auth_level = PIPE_AUTH_LEVEL_NONE;
 
index 91751a2d71248209cbc1e2051759af15a72fecc7..ae705b313b507adb43d63e895bcdb09c7d04ce22 100644 (file)
@@ -35,7 +35,7 @@ NTSTATUS cli_do_rpc_ndr(struct rpc_pipe_client *cli,
        NTSTATUS status;
        enum ndr_err_code ndr_err;
 
-       SMB_ASSERT(rpccli_is_pipe_idx(cli, p_idx));
+       SMB_ASSERT(cli->pipe_idx == p_idx);
        SMB_ASSERT(table->num_calls > opnum);
 
        call = &table->calls[opnum];
index d0be83bd4eb9810a11ca1f367dbc4222bacaa1ef..3f89721154566aeea93afd21516106474d4079df 100644 (file)
@@ -252,8 +252,7 @@ static bool smb_io_rpc_hdr_bba(const char *desc,  RPC_HDR_BBA *rpc, prs_struct *
  Note the transfer pointer must remain valid until this is marshalled.
 ********************************************************************/
 
-void init_rpc_context(RPC_CONTEXT *rpc_ctx, uint16 context_id,
-                     const RPC_IFACE *abstract, const RPC_IFACE *transfer)
+void init_rpc_context(RPC_CONTEXT *rpc_ctx, uint16 context_id, RPC_IFACE *abstract, RPC_IFACE *transfer)
 {
        rpc_ctx->context_id   = context_id   ; /* presentation context identifier (0x0) */
        rpc_ctx->num_transfer_syntaxes = 1 ; /* the number of syntaxes (has always been 1?)(0x1) */