The branch, v3-2-test has been updated
       via  a30a26d471a572167ee13bf10be1a275a6592851 (commit)
       via  c56e1c08cef107ff33a34346ceeca3475a102b19 (commit)
       via  7331c4c2781bf7904942c119f1a8de8eda00ae7e (commit)
       via  99fc3283c4ecc791f5a242bd1983b4352ce3e6cf (commit)
       via  45be749ed69f8c1ad3ebe8ea1f35c806db2ed5d0 (commit)
       via  4840febcd481563c3d9b2fabc1fe1b2ae5a76cf6 (commit)
       via  d8a04b798c44c26a91a37fa7090dd071a1909166 (commit)
      from  3f6c5b99664a75a6f490ee3b6980b89cacf7f579 (commit)

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=v3-2-test


- Log -----------------------------------------------------------------
commit a30a26d471a572167ee13bf10be1a275a6592851
Author: Volker Lendecke <[EMAIL PROTECTED]>
Date:   Sun Apr 20 14:07:38 2008 +0200

    Make convert_samr_dispinfo_to_NET_DISPLAY() static

commit c56e1c08cef107ff33a34346ceeca3475a102b19
Author: Volker Lendecke <[EMAIL PROTECTED]>
Date:   Sun Apr 20 14:05:25 2008 +0200

    Introduce rpc_pipe_np_smb_conn()
    
    This abstracts away all references to rpc_pipe_client->cli, the only 
reference
    is now in cli_pipe.c.

commit 7331c4c2781bf7904942c119f1a8de8eda00ae7e
Author: Volker Lendecke <[EMAIL PROTECTED]>
Date:   Sun Apr 20 14:02:21 2008 +0200

    Remove a redundant reference to rpc_pipe_state->cli from srv_spoolss
    
    This assignment is done in cli_rpc_pipe_open called from
    cli_rpc_pipe_open_noauth already.

commit 99fc3283c4ecc791f5a242bd1983b4352ce3e6cf
Author: Volker Lendecke <[EMAIL PROTECTED]>
Date:   Sun Apr 20 13:51:46 2008 +0200

    Replace cli_rpc_pipe_close by a talloc destructor on rpc_pipe_struct

commit 45be749ed69f8c1ad3ebe8ea1f35c806db2ed5d0
Author: Volker Lendecke <[EMAIL PROTECTED]>
Date:   Sun Apr 20 12:19:27 2008 +0200

    Refactoring: Move stuff around for creating a pipe

commit 4840febcd481563c3d9b2fabc1fe1b2ae5a76cf6
Author: Volker Lendecke <[EMAIL PROTECTED]>
Date:   Sun Apr 20 11:45:41 2008 +0200

    Remove the pipe_idx variable from rpc_pipe_client

commit d8a04b798c44c26a91a37fa7090dd071a1909166
Author: Volker Lendecke <[EMAIL PROTECTED]>
Date:   Sun Apr 20 11:27:24 2008 +0200

    Remove some unused code referencing pipe_names[]

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

Summary of changes:
 source/client/client.c             |    4 +-
 source/include/client.h            |   12 ++-
 source/include/rpc_client.h        |    2 +-
 source/lib/netapi/cm.c             |    4 +-
 source/lib/netapi/user.c           |   10 +-
 source/libnet/libnet_join.c        |    6 +-
 source/libsmb/clientgen.c          |   48 +--------
 source/libsmb/libsmb_dir.c         |    2 +-
 source/libsmb/libsmb_xattr.c       |    2 +-
 source/libsmb/passchange.c         |    2 +-
 source/rpc_client/cli_netlogon.c   |    2 +-
 source/rpc_client/cli_pipe.c       |  210 ++++++++++++++++++------------------
 source/rpc_client/ndr.c            |    2 +-
 source/rpc_parse/parse_rpc.c       |    3 +-
 source/rpc_server/srv_spoolss_nt.c |    6 +-
 source/rpcclient/cmd_spoolss.c     |    2 +-
 source/rpcclient/cmd_test.c        |   10 +-
 source/rpcclient/rpcclient.c       |    6 +-
 source/utils/net_rpc.c             |   39 ++++----
 source/utils/net_rpc_join.c        |    8 +-
 source/utils/net_rpc_shell.c       |    2 +-
 source/utils/net_util.c            |    2 +-
 source/utils/smbcacls.c            |    8 +-
 source/utils/smbtree.c             |    4 +-
 source/winbindd/winbindd_cm.c      |   52 ++++-----
 25 files changed, 200 insertions(+), 248 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source/client/client.c b/source/client/client.c
index 1c9c21e..b4e1985 100644
--- a/source/client/client.c
+++ b/source/client/client.c
@@ -3658,7 +3658,7 @@ static bool browse_host_rpc(bool sort)
                                              &werr);
 
        if (!NT_STATUS_IS_OK(status) || !W_ERROR_IS_OK(werr)) {
-               cli_rpc_pipe_close(pipe_hnd);
+               TALLOC_FREE(pipe_hnd);
                TALLOC_FREE(frame);
                return false;
        }
@@ -3668,7 +3668,7 @@ static bool browse_host_rpc(bool sort)
                browse_fn(info.name, info.type, info.comment, NULL);
        }
 
-       cli_rpc_pipe_close(pipe_hnd);
+       TALLOC_FREE(pipe_hnd);
        TALLOC_FREE(frame);
        return true;
 }
diff --git a/source/include/client.h b/source/include/client.h
index af03e2b..5cfc9a6 100644
--- a/source/include/client.h
+++ b/source/include/client.h
@@ -62,15 +62,17 @@ struct rpc_pipe_client {
 
        struct cli_state *cli;
 
-       int pipe_idx;
        const char *pipe_name;
        uint16 fnum;
 
-       const char *desthost;
-       const char *srv_name_slash;
+       const struct ndr_syntax_id *abstract_syntax;
+       const struct ndr_syntax_id *transfer_syntax;
 
-       const char *domain;
-       const char *user_name;
+       char *desthost;
+       char *srv_name_slash;
+
+       char *domain;
+       char *user_name;
        struct pwd_info pwd;
 
        uint16 max_xmit_frag;
diff --git a/source/include/rpc_client.h b/source/include/rpc_client.h
index c552271..ce0c932 100644
--- a/source/include/rpc_client.h
+++ b/source/include/rpc_client.h
@@ -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(pcli->pipe_idx == p_idx); \
+       SMB_ASSERT(rpccli_is_pipe_idx(pcli, p_idx)); \
        if (!prs_init( &q_ps, RPC_MAX_PDU_FRAG_LEN, ctx, MARSHALL )) { \
                return WERR_NOMEM;\
        }\
diff --git a/source/lib/netapi/cm.c b/source/lib/netapi/cm.c
index 5464237..ae1091c 100644
--- a/source/lib/netapi/cm.c
+++ b/source/lib/netapi/cm.c
@@ -99,13 +99,13 @@ static struct rpc_pipe_client *pipe_cm_find(struct 
cli_state *cli,
 
        for (p = pipe_connections; p; p = p->next) {
 
-               if (!p->pipe->cli) {
+               if (!rpc_pipe_np_smb_conn(p->pipe)) {
                        *status = NT_STATUS_PIPE_EMPTY;
                        return NULL;
                }
 
                if (strequal(cli->desthost, p->pipe->desthost) &&
-                   pipe_idx == p->pipe->pipe_idx) {
+                   rpccli_is_pipe_idx(p->pipe, pipe_idx)) {
                        *status = NT_STATUS_OK;
                        return p->pipe;
                }
diff --git a/source/lib/netapi/user.c b/source/lib/netapi/user.c
index 05a0510..f2dc785 100644
--- a/source/lib/netapi/user.c
+++ b/source/lib/netapi/user.c
@@ -845,11 +845,11 @@ static WERROR 
convert_samr_dispinfo_to_NET_DISPLAY_GROUP(TALLOC_CTX *mem_ctx,
 /****************************************************************
 ****************************************************************/
 
-WERROR convert_samr_dispinfo_to_NET_DISPLAY(TALLOC_CTX *mem_ctx,
-                                           union samr_DispInfo *info,
-                                           uint32_t level,
-                                           uint32_t *entries_read,
-                                           void **buffer)
+static WERROR convert_samr_dispinfo_to_NET_DISPLAY(TALLOC_CTX *mem_ctx,
+                                                  union samr_DispInfo *info,
+                                                  uint32_t level,
+                                                  uint32_t *entries_read,
+                                                  void **buffer)
 {
        switch (level) {
                case 1:
diff --git a/source/libnet/libnet_join.c b/source/libnet/libnet_join.c
index 207a3ac..d22fbc2 100644
--- a/source/libnet/libnet_join.c
+++ b/source/libnet/libnet_join.c
@@ -706,7 +706,7 @@ static NTSTATUS libnet_join_lookup_dc_rpc(TALLOC_CTX 
*mem_ctx,
        }
 
        rpccli_lsa_Close(pipe_hnd, mem_ctx, &lsa_pol);
-       cli_rpc_pipe_close(pipe_hnd);
+       TALLOC_FREE(pipe_hnd);
 
  done:
        return status;
@@ -951,7 +951,7 @@ static NTSTATUS libnet_join_joindomain_rpc(TALLOC_CTX 
*mem_ctx,
        if (is_valid_policy_hnd(&user_pol)) {
                rpccli_samr_Close(pipe_hnd, mem_ctx, &user_pol);
        }
-       cli_rpc_pipe_close(pipe_hnd);
+       TALLOC_FREE(pipe_hnd);
 
        return status;
 }
@@ -1217,7 +1217,7 @@ done:
        if (pipe_hnd) {
                rpccli_samr_Close(pipe_hnd, mem_ctx, &domain_pol);
                rpccli_samr_Close(pipe_hnd, mem_ctx, &sam_pol);
-               cli_rpc_pipe_close(pipe_hnd);
+               TALLOC_FREE(pipe_hnd);
        }
 
        if (cli) {
diff --git a/source/libsmb/clientgen.c b/source/libsmb/clientgen.c
index ef2c263..e64b6fa 100644
--- a/source/libsmb/clientgen.c
+++ b/source/libsmb/clientgen.c
@@ -617,54 +617,16 @@ struct cli_state *cli_initialise(void)
 }
 
 /****************************************************************************
- External interface.
- Close an open named pipe over SMB. Free any authentication data.
- Returns false if the cli_close call failed.
- ****************************************************************************/
-
-bool cli_rpc_pipe_close(struct rpc_pipe_client *cli)
-{
-       bool ret;
-
-       if (!cli) {
-               return false;
-       }
-
-       ret = cli_close(cli->cli, cli->fnum);
-
-       if (!ret) {
-               DEBUG(1,("cli_rpc_pipe_close: cli_close failed on pipe %s, "
-                         "fnum 0x%x "
-                         "to machine %s.  Error was %s\n",
-                         cli->pipe_name,
-                         (int) cli->fnum,
-                         cli->desthost,
-                         cli_errstr(cli->cli)));
-       }
-
-       if (cli->auth.cli_auth_data_free_func) {
-               (*cli->auth.cli_auth_data_free_func)(&cli->auth);
-       }
-
-       DEBUG(10,("cli_rpc_pipe_close: closed pipe %s to machine %s\n",
-               cli->pipe_name, cli->desthost ));
-
-       DLIST_REMOVE(cli->cli->pipe_list, cli);
-       talloc_destroy(cli);
-       return ret;
-}
-
-/****************************************************************************
  Close all pipes open on this session.
 ****************************************************************************/
 
 void cli_nt_pipes_close(struct cli_state *cli)
 {
-       struct rpc_pipe_client *cp, *next;
-
-       for (cp = cli->pipe_list; cp; cp = next) {
-               next = cp->next;
-               cli_rpc_pipe_close(cp);
+       while (cli->pipe_list != NULL) {
+               /*
+                * No TALLOC_FREE here!
+                */
+               talloc_free(cli->pipe_list);
        }
 }
 
diff --git a/source/libsmb/libsmb_dir.c b/source/libsmb/libsmb_dir.c
index 612a877..aea4f10 100644
--- a/source/libsmb/libsmb_dir.c
+++ b/source/libsmb/libsmb_dir.c
@@ -319,7 +319,7 @@ net_share_enum_rpc(struct cli_state *cli,
 
 done:
         /* Close the server service pipe */
-        cli_rpc_pipe_close(pipe_hnd);
+        TALLOC_FREE(pipe_hnd);
 
         /* Tell 'em if it worked */
         return W_ERROR_IS_OK(result) ? 0 : -1;
diff --git a/source/libsmb/libsmb_xattr.c b/source/libsmb/libsmb_xattr.c
index e17146e..8763205 100644
--- a/source/libsmb/libsmb_xattr.c
+++ b/source/libsmb/libsmb_xattr.c
@@ -39,7 +39,7 @@ find_lsa_pipe_hnd(struct cli_state *ipc_cli)
              pipe_hnd;
              pipe_hnd = pipe_hnd->next) {
                 
-               if (pipe_hnd->pipe_idx == PI_LSARPC) {
+               if (rpccli_is_pipe_idx(pipe_hnd, PI_LSARPC)) {
                        return pipe_hnd;
                }
        }
diff --git a/source/libsmb/passchange.c b/source/libsmb/passchange.c
index 2f9a87d..8f7cbf2 100644
--- a/source/libsmb/passchange.c
+++ b/source/libsmb/passchange.c
@@ -196,7 +196,7 @@ NTSTATUS remote_password_change(const char *remote_machine, 
const char *user_nam
        }
 
        /* OK, that failed, so try again... */
-       cli_rpc_pipe_close(pipe_hnd);
+       TALLOC_FREE(pipe_hnd);
        
        /* Try anonymous NTLMSSP... */
        cli_init_creds(cli, "", "", NULL);
diff --git a/source/rpc_client/cli_netlogon.c b/source/rpc_client/cli_netlogon.c
index bf1e161..cb1d93e 100644
--- a/source/rpc_client/cli_netlogon.c
+++ b/source/rpc_client/cli_netlogon.c
@@ -134,7 +134,7 @@ NTSTATUS rpccli_netlogon_setup_creds(struct rpc_pipe_client 
*cli,
        struct dcinfo *dc;
        bool retried = false;
 
-       SMB_ASSERT(cli->pipe_idx == PI_NETLOGON);
+       SMB_ASSERT(rpccli_is_pipe_idx(cli, PI_NETLOGON));
 
        dc = cli->dc;
        if (!dc) {
diff --git a/source/rpc_client/cli_pipe.c b/source/rpc_client/cli_pipe.c
index bc9a426..1ea01c9 100644
--- a/source/rpc_client/cli_pipe.c
+++ b/source/rpc_client/cli_pipe.c
@@ -1066,7 +1066,10 @@ static NTSTATUS create_schannel_auth_rpc_bind_req( 
struct rpc_pipe_client *cli,
        /* Use lp_workgroup() if domain not specified */
 
        if (!cli->domain || !cli->domain[0]) {
-               cli->domain = lp_workgroup();
+               cli->domain = talloc_strdup(cli, lp_workgroup());
+               if (cli->domain == NULL) {
+                       return NT_STATUS_NO_MEMORY;
+               }
        }
 
        init_rpc_auth_schannel_neg(&schannel_neg, cli->domain, global_myname());
@@ -1092,8 +1095,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,
-                                               RPC_IFACE *abstract,
-                                               RPC_IFACE *transfer,
+                                               const RPC_IFACE *abstract,
+                                               const RPC_IFACE *transfer,
                                                RPC_HDR_AUTH *phdr_auth,
                                                prs_struct *pauth_info)
 {
@@ -1174,7 +1177,8 @@ 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,
-                               RPC_IFACE *abstract, RPC_IFACE *transfer,
+                               const RPC_IFACE *abstract,
+                               const RPC_IFACE *transfer,
                                enum pipe_auth_type auth_type,
                                enum pipe_auth_level auth_level)
 {
@@ -1639,56 +1643,12 @@ static bool rpc_pipe_set_hnd_state(struct 
rpc_pipe_client *cli,
  Check the rpc bind acknowledge response.
 ****************************************************************************/
 
-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)
+static bool check_bind_response(RPC_HDR_BA *hdr_ba, const 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)"));
        }
 
-# if 0 /* JERRY -- apparently ASU forgets to fill in the server pipe name 
sometimes */
-       if ( !strequal(hdr_ba->addr.str, pipe_names[pipe_idx].client_pipe) &&
-            !strequal(hdr_ba->addr.str, pipe_names[pipe_idx].server_pipe) )
-       {
-               DEBUG(4,("bind_rpc_pipe: pipe_name %s != expected pipe %s.  oh 
well!\n",
-                        pipe_names[i].server_pipe ,hdr_ba->addr.str));
-               return False;
-       }
-       
-       DEBUG(5,("bind_rpc_pipe: server pipe_name found: %s\n", 
pipe_names[i].server_pipe ));
-
-       if (pipe_names[pipe_idx].server_pipe == NULL) {
-               DEBUG(2,("bind_rpc_pipe: pipe name %s unsupported\n", 
hdr_ba->addr.str));
-               return False;
-       }
-#endif         /* JERRY */
-
        /* check the transfer syntax */
        if ((hdr_ba->transfer.if_version != transfer->if_version) ||
             (memcmp(&hdr_ba->transfer.uuid, &transfer->uuid, 
sizeof(transfer->uuid)) !=0)) {
@@ -1856,8 +1816,8 @@ static NTSTATUS rpc_finish_auth3_bind(struct 
rpc_pipe_client *cli,
  ********************************************************************/
 
 static NTSTATUS create_rpc_alter_context(uint32 rpc_call_id,
-                                       RPC_IFACE *abstract,
-                                       RPC_IFACE *transfer,
+                                       const RPC_IFACE *abstract,
+                                       const RPC_IFACE *transfer,
                                        enum pipe_auth_level auth_level,
                                        const DATA_BLOB *pauth_blob, /* spnego 
auth blob already created. */
                                        prs_struct *rpc_out)
@@ -1900,8 +1860,8 @@ static NTSTATUS rpc_finish_spnego_ntlmssp_bind(struct 
rpc_pipe_client *cli,
                                 RPC_HDR *phdr,
                                 prs_struct *rbuf,
                                 uint32 rpc_call_id,
-                               RPC_IFACE *abstract,
-                               RPC_IFACE *transfer,
+                               const RPC_IFACE *abstract,
+                               const RPC_IFACE *transfer,
                                 enum pipe_auth_type auth_type,
                                 enum pipe_auth_level auth_level)
 {
@@ -2035,8 +1995,6 @@ 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;
@@ -2048,17 +2006,14 @@ 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,
-                               &abstract, &transfer,
+                               cli->abstract_syntax,
+                               cli->transfer_syntax,
                                auth_type,
                                auth_level);
 
@@ -2098,7 +2053,7 @@ static NTSTATUS rpc_pipe_bind(struct rpc_pipe_client *cli,
                return NT_STATUS_BUFFER_TOO_SMALL;
        }
 
-       if(!check_bind_response(&hdr_ba, cli->pipe_idx, &transfer)) {
+       if(!check_bind_response(&hdr_ba, cli->transfer_syntax)) {
                DEBUG(2,("rpc_pipe_bind: check_bind_response failed.\n"));
                prs_mem_free(&rbuf);
                return NT_STATUS_BUFFER_TOO_SMALL;
@@ -2128,7 +2083,8 @@ 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,
-                                               &abstract, &transfer,
+                                               cli->abstract_syntax,
+                                               cli->transfer_syntax,
                                                auth_type, auth_level);
                        if (!NT_STATUS_IS_OK(status)) {
                                prs_mem_free(&rbuf);
@@ -2179,6 +2135,40 @@ 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);
+}
+
+struct cli_state *rpc_pipe_np_smb_conn(struct rpc_pipe_client *p)
+{
+       return p->cli;
+}
+
+static int rpc_pipe_destructor(struct rpc_pipe_client *p)
+{
+       bool ret;
+
+       ret = cli_close(p->cli, p->fnum);
+       if (!ret) {
+               DEBUG(1, ("rpc_pipe_destructor: cli_close failed on pipe %s, "
+                         "fnum 0x%x to machine %s.  Error was %s\n",
+                         p->pipe_name, (int) p->fnum,
+                         p->desthost, cli_errstr(p->cli)));
+       }
+
+       if (p->auth.cli_auth_data_free_func) {
+               (*p->auth.cli_auth_data_free_func)(&p->auth);
+       }
+
+       DEBUG(10, ("rpc_pipe_destructor: closed pipe %s to machine %s\n",
+                  p->pipe_name, p->desthost ));
+
+       DLIST_REMOVE(p->cli->pipe_list, p);
+
+       return ret ? -1 : 0;
+}
+
 /****************************************************************************
  Open a named pipe over SMB to a remote server.
  *
@@ -2211,38 +2201,29 @@ static struct rpc_pipe_client *cli_rpc_pipe_open(struct 
cli_state *cli, int pipe
 
        result = TALLOC_ZERO_P(NULL, struct rpc_pipe_client);
        if (result == NULL) {
+               *perr = NT_STATUS_NO_MEMORY;
                return NULL;
        }
 
        result->pipe_name = cli_get_pipe_name(pipe_idx);
 
-       fnum = cli_nt_create(cli, result->pipe_name, DESIRED_ACCESS_PIPE);
-
-       if (fnum == -1) {
-               DEBUG(1,("cli_rpc_pipe_open: cli_nt_create failed on pipe %s "
-                        "to machine %s.  Error was %s\n",
-                        result->pipe_name, cli->desthost,
-                        cli_errstr(cli)));
-               *perr = cli_get_nt_error(cli);
-               talloc_destroy(result);
-               return NULL;
-       }
-
-       result->fnum = fnum;
        result->cli = cli;
-       result->pipe_idx = pipe_idx;
+       result->abstract_syntax = pipe_names[pipe_idx].abstr_syntax;
+       result->transfer_syntax = pipe_names[pipe_idx].trans_syntax;
        result->auth.auth_type = PIPE_AUTH_TYPE_NONE;
        result->auth.auth_level = PIPE_AUTH_LEVEL_NONE;
 
+       result->domain = talloc_strdup(result, cli->domain);
+       result->user_name = talloc_strdup(result, cli->user_name);
        result->desthost = talloc_strdup(result, cli->desthost);
-       if (result->desthost == NULL) {
-               TALLOC_FREE(result);
-               return NULL;
-       }
-
        result->srv_name_slash = talloc_asprintf_strupper_m(
                result, "\\\\%s", result->desthost);
-       if (result->srv_name_slash == NULL) {
+
+       if ((result->domain == NULL)
+           || (result->user_name == NULL)


-- 
Samba Shared Repository

Reply via email to