]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
Refactoring: libnetapi_open_pipe takes an interface instead of pipe_idx
authorVolker Lendecke <vl@samba.org>
Sun, 20 Jul 2008 15:59:30 +0000 (17:59 +0200)
committerVolker Lendecke <vl@samba.org>
Mon, 21 Jul 2008 12:36:27 +0000 (14:36 +0200)
source/include/proto.h
source/lib/netapi/cm.c
source/lib/netapi/getdc.c
source/lib/netapi/group.c
source/lib/netapi/joindomain.c
source/lib/netapi/localgroup.c
source/lib/netapi/netapi_private.h
source/lib/netapi/serverinfo.c
source/lib/netapi/user.c
source/rpc_client/cli_pipe.c

index 26129530519b9239564197f96f43774eba16d50a..194dda76487b5fa83253d1caee9c36531ab4cee0 100644 (file)
@@ -7911,6 +7911,9 @@ bool prs_data_blob(prs_struct *prs, DATA_BLOB *blob, TALLOC_CTX *mem_ctx);
 /* The following definitions come from rpc_parse/parse_rpc.c  */
 
 const char *cli_get_pipe_name(int pipe_idx);
+const char *cli_get_pipe_name_from_iface(TALLOC_CTX *mem_ctx,
+                                        struct cli_state *cli,
+                                        const struct ndr_syntax_id *interface);
 int cli_get_pipe_idx(const RPC_IFACE *syntax);
 const struct ndr_syntax_id *cli_get_iface(int pipe_idx);
 void init_rpc_hdr(RPC_HDR *hdr, enum RPC_PKT_TYPE pkt_type, uint8 flags,
index fe5490c73b4ce139034bf84bf113e24e1b74c01b..8eaabb3cda25827b82c461cdfdf5a3ce99765fc8 100644 (file)
@@ -91,75 +91,70 @@ static struct client_pipe_connection *pipe_connections;
 /********************************************************************
 ********************************************************************/
 
-static struct rpc_pipe_client *pipe_cm_find(struct cli_state *cli,
-                                           int pipe_idx,
-                                           NTSTATUS *status)
+static NTSTATUS pipe_cm_find(struct cli_state *cli,
+                            const struct ndr_syntax_id *interface,
+                            struct rpc_pipe_client **presult)
 {
        struct client_pipe_connection *p;
 
        for (p = pipe_connections; p; p = p->next) {
 
                if (!rpc_pipe_np_smb_conn(p->pipe)) {
-                       *status = NT_STATUS_PIPE_EMPTY;
-                       return NULL;
+                       return NT_STATUS_PIPE_EMPTY;
                }
 
-               if (strequal(cli->desthost, p->pipe->desthost) &&
-                   rpccli_is_pipe_idx(p->pipe, pipe_idx)) {
-                       *status = NT_STATUS_OK;
-                       return p->pipe;
+               if (strequal(cli->desthost, p->pipe->desthost)
+                   && ndr_syntax_id_equal(&p->pipe->abstract_syntax,
+                                          interface)) {
+                       *presult = p->pipe;
+                       return NT_STATUS_OK;
                }
        }
 
-       *status = NT_STATUS_PIPE_NOT_AVAILABLE;
-
-       return NULL;
+       return NT_STATUS_PIPE_NOT_AVAILABLE;
 }
 
 /********************************************************************
 ********************************************************************/
 
-static struct rpc_pipe_client *pipe_cm_connect(TALLOC_CTX *mem_ctx,
-                                              struct cli_state *cli,
-                                              int pipe_idx,
-                                              NTSTATUS *status)
+static NTSTATUS pipe_cm_connect(TALLOC_CTX *mem_ctx,
+                               struct cli_state *cli,
+                               const struct ndr_syntax_id *interface,
+                               struct rpc_pipe_client **presult)
 {
        struct client_pipe_connection *p;
+       NTSTATUS status;
 
        p = TALLOC_ZERO_ARRAY(mem_ctx, struct client_pipe_connection, 1);
        if (!p) {
-               *status = NT_STATUS_NO_MEMORY;
-               return NULL;
+               return NT_STATUS_NO_MEMORY;
        }
 
-       *status = cli_rpc_pipe_open_noauth(cli, cli_get_iface(pipe_idx),
-                                          &p->pipe);
-       if (!NT_STATUS_IS_OK(*status)) {
+       status = cli_rpc_pipe_open_noauth(cli, interface, &p->pipe);
+       if (!NT_STATUS_IS_OK(status)) {
                TALLOC_FREE(p);
-               return NULL;
+               return status;
        }
 
        DLIST_ADD(pipe_connections, p);
 
-       return p->pipe;
+       *presult = p->pipe;
+       return NT_STATUS_OK;
 }
 
 /********************************************************************
 ********************************************************************/
 
-static struct rpc_pipe_client *pipe_cm_open(TALLOC_CTX *ctx,
-                                           struct cli_state *cli,
-                                           int pipe_idx,
-                                           NTSTATUS *status)
+static NTSTATUS pipe_cm_open(TALLOC_CTX *ctx,
+                            struct cli_state *cli,
+                            const struct ndr_syntax_id *interface,
+                            struct rpc_pipe_client **presult)
 {
-       struct rpc_pipe_client *p;
-
-       p = pipe_cm_find(cli, pipe_idx, status);
-       if (!p) {
-               p = pipe_cm_connect(ctx, cli, pipe_idx, status);
+       if (NT_STATUS_IS_OK(pipe_cm_find(cli, interface, presult))) {
+               return NT_STATUS_OK;
        }
 
-       return p;
+       return pipe_cm_connect(ctx, cli, interface, presult);
 }
 
 /********************************************************************
@@ -167,23 +162,26 @@ static struct rpc_pipe_client *pipe_cm_open(TALLOC_CTX *ctx,
 
 WERROR libnetapi_open_pipe(struct libnetapi_ctx *ctx,
                           struct cli_state *cli,
-                          int pipe_idx,
-                          struct rpc_pipe_client **pipe_cli)
+                          const struct ndr_syntax_id *interface,
+                          struct rpc_pipe_client **presult)
 {
+       struct rpc_pipe_client *result;
        NTSTATUS status;
 
-       if (!cli || !pipe_cli) {
+       if (!cli || !presult) {
                return WERR_INVALID_PARAM;
        }
 
-       *pipe_cli = pipe_cm_open(ctx, cli, pipe_idx, &status);
-       if (!*pipe_cli) {
+       status = pipe_cm_open(ctx, cli, interface, &result);
+       if (!NT_STATUS_IS_OK(status)) {
                libnetapi_set_error_string(ctx, "failed to open PIPE %s: %s",
-                       cli_get_pipe_name(pipe_idx),
+                       cli_get_pipe_name_from_iface(debug_ctx(), cli,
+                                                    interface),
                        get_friendly_nt_error_msg(status));
                return WERR_DEST_NOT_FOUND;
        }
 
+       *presult = result;
        return WERR_OK;
 }
 
index c1d021b1d48acfd8273d02a9c761d86f43080baa..46360424317e79e6b6e714eed44103bbd579e70c 100644 (file)
@@ -50,7 +50,8 @@ WERROR NetGetDCName_r(struct libnetapi_ctx *ctx,
                goto done;
        }
 
-       werr = libnetapi_open_pipe(ctx, cli, PI_NETLOGON, &pipe_cli);
+       werr = libnetapi_open_pipe(ctx, cli, &ndr_table_netlogon.syntax_id,
+                                  &pipe_cli);
        if (!W_ERROR_IS_OK(werr)) {
                goto done;
        }
@@ -90,7 +91,8 @@ WERROR NetGetAnyDCName_r(struct libnetapi_ctx *ctx,
                goto done;
        }
 
-       werr = libnetapi_open_pipe(ctx, cli, PI_NETLOGON, &pipe_cli);
+       werr = libnetapi_open_pipe(ctx, cli, &ndr_table_netlogon.syntax_id,
+                                  &pipe_cli);
        if (!W_ERROR_IS_OK(werr)) {
                goto done;
        }
@@ -149,7 +151,8 @@ WERROR DsGetDcName_r(struct libnetapi_ctx *ctx,
                goto done;
        }
 
-       werr = libnetapi_open_pipe(ctx, cli, PI_NETLOGON, &pipe_cli);
+       werr = libnetapi_open_pipe(ctx, cli, &ndr_table_netlogon.syntax_id,
+                                  &pipe_cli);
        if (!W_ERROR_IS_OK(werr)) {
                goto done;
        }
index 15580b3c2267a92006f14a6c38b79954046d93cb..04ffb7c8074fe450bf2a84ed65a52c0923f19359 100644 (file)
@@ -76,7 +76,8 @@ WERROR NetGroupAdd_r(struct libnetapi_ctx *ctx,
                goto done;
        }
 
-       werr = libnetapi_open_pipe(ctx, cli, PI_SAMR, &pipe_cli);
+       werr = libnetapi_open_pipe(ctx, cli, &ndr_table_samr.syntax_id,
+                                  &pipe_cli);
        if (!W_ERROR_IS_OK(werr)) {
                goto done;
        }
@@ -255,7 +256,8 @@ WERROR NetGroupDel_r(struct libnetapi_ctx *ctx,
                goto done;
        }
 
-       werr = libnetapi_open_pipe(ctx, cli, PI_SAMR, &pipe_cli);
+       werr = libnetapi_open_pipe(ctx, cli, &ndr_table_samr.syntax_id,
+                                  &pipe_cli);
        if (!W_ERROR_IS_OK(werr)) {
                goto done;
        }
@@ -428,7 +430,8 @@ WERROR NetGroupSetInfo_r(struct libnetapi_ctx *ctx,
                goto done;
        }
 
-       werr = libnetapi_open_pipe(ctx, cli, PI_SAMR, &pipe_cli);
+       werr = libnetapi_open_pipe(ctx, cli, &ndr_table_samr.syntax_id,
+                                  &pipe_cli);
        if (!W_ERROR_IS_OK(werr)) {
                goto done;
        }
@@ -671,7 +674,8 @@ WERROR NetGroupGetInfo_r(struct libnetapi_ctx *ctx,
                goto done;
        }
 
-       werr = libnetapi_open_pipe(ctx, cli, PI_SAMR, &pipe_cli);
+       werr = libnetapi_open_pipe(ctx, cli, &ndr_table_samr.syntax_id,
+                                  &pipe_cli);
        if (!W_ERROR_IS_OK(werr)) {
                goto done;
        }
@@ -795,7 +799,8 @@ WERROR NetGroupAddUser_r(struct libnetapi_ctx *ctx,
                goto done;
        }
 
-       werr = libnetapi_open_pipe(ctx, cli, PI_SAMR, &pipe_cli);
+       werr = libnetapi_open_pipe(ctx, cli, &ndr_table_samr.syntax_id,
+                                  &pipe_cli);
        if (!W_ERROR_IS_OK(werr)) {
                goto done;
        }
@@ -924,7 +929,8 @@ WERROR NetGroupDelUser_r(struct libnetapi_ctx *ctx,
                goto done;
        }
 
-       werr = libnetapi_open_pipe(ctx, cli, PI_SAMR, &pipe_cli);
+       werr = libnetapi_open_pipe(ctx, cli, &ndr_table_samr.syntax_id,
+                                  &pipe_cli);
        if (!W_ERROR_IS_OK(werr)) {
                goto done;
        }
@@ -1210,7 +1216,8 @@ WERROR NetGroupEnum_r(struct libnetapi_ctx *ctx,
                goto done;
        }
 
-       werr = libnetapi_open_pipe(ctx, cli, PI_SAMR, &pipe_cli);
+       werr = libnetapi_open_pipe(ctx, cli, &ndr_table_samr.syntax_id,
+                                  &pipe_cli);
        if (!W_ERROR_IS_OK(werr)) {
                goto done;
        }
index a33e0eeee56f30f79b3219097aa6c3061c547494..8d5202f07e3bef113096530004086e0ba6d301dd 100644 (file)
@@ -110,7 +110,8 @@ WERROR NetJoinDomain_r(struct libnetapi_ctx *ctx,
                goto done;
        }
 
-       werr = libnetapi_open_pipe(ctx, cli, PI_WKSSVC, &pipe_cli);
+       werr = libnetapi_open_pipe(ctx, cli, &ndr_table_wkssvc.syntax_id,
+                                  &pipe_cli);
        if (!W_ERROR_IS_OK(werr)) {
                goto done;
        }
@@ -241,7 +242,8 @@ WERROR NetUnjoinDomain_r(struct libnetapi_ctx *ctx,
                goto done;
        }
 
-       werr = libnetapi_open_pipe(ctx, cli, PI_WKSSVC, &pipe_cli);
+       werr = libnetapi_open_pipe(ctx, cli, &ndr_table_wkssvc.syntax_id,
+                                  &pipe_cli);
        if (!W_ERROR_IS_OK(werr)) {
                goto done;
        }
@@ -293,7 +295,8 @@ WERROR NetGetJoinInformation_r(struct libnetapi_ctx *ctx,
                goto done;
        }
 
-       werr = libnetapi_open_pipe(ctx, cli, PI_WKSSVC, &pipe_cli);
+       werr = libnetapi_open_pipe(ctx, cli, &ndr_table_wkssvc.syntax_id,
+                                  &pipe_cli);
        if (!W_ERROR_IS_OK(werr)) {
                goto done;
        }
@@ -427,7 +430,8 @@ WERROR NetGetJoinableOUs_r(struct libnetapi_ctx *ctx,
                goto done;
        }
 
-       werr = libnetapi_open_pipe(ctx, cli, PI_WKSSVC, &pipe_cli);
+       werr = libnetapi_open_pipe(ctx, cli, &ndr_table_wkssvc.syntax_id,
+                                  &pipe_cli);
        if (!W_ERROR_IS_OK(werr)) {
                goto done;
        }
index faf57cc5faa90aabd7cc1a89e5f077f839331dca..fe36d86b05c3feac45ee795e6b42b9b77b058081 100644 (file)
@@ -166,7 +166,8 @@ WERROR NetLocalGroupAdd_r(struct libnetapi_ctx *ctx,
                goto done;
        }
 
-       werr = libnetapi_open_pipe(ctx, cli, PI_SAMR, &pipe_cli);
+       werr = libnetapi_open_pipe(ctx, cli, &ndr_table_samr.syntax_id,
+                                  &pipe_cli);
        if (!W_ERROR_IS_OK(werr)) {
                goto done;
        }
@@ -293,7 +294,8 @@ WERROR NetLocalGroupDel_r(struct libnetapi_ctx *ctx,
                goto done;
        }
 
-       werr = libnetapi_open_pipe(ctx, cli, PI_SAMR, &pipe_cli);
+       werr = libnetapi_open_pipe(ctx, cli, &ndr_table_samr.syntax_id,
+                                  &pipe_cli);
        if (!W_ERROR_IS_OK(werr)) {
                goto done;
        }
@@ -472,7 +474,8 @@ WERROR NetLocalGroupGetInfo_r(struct libnetapi_ctx *ctx,
                goto done;
        }
 
-       werr = libnetapi_open_pipe(ctx, cli, PI_SAMR, &pipe_cli);
+       werr = libnetapi_open_pipe(ctx, cli, &ndr_table_samr.syntax_id,
+                                  &pipe_cli);
        if (!W_ERROR_IS_OK(werr)) {
                goto done;
        }
@@ -650,7 +653,8 @@ WERROR NetLocalGroupSetInfo_r(struct libnetapi_ctx *ctx,
                goto done;
        }
 
-       werr = libnetapi_open_pipe(ctx, cli, PI_SAMR, &pipe_cli);
+       werr = libnetapi_open_pipe(ctx, cli, &ndr_table_samr.syntax_id,
+                                  &pipe_cli);
        if (!W_ERROR_IS_OK(werr)) {
                goto done;
        }
@@ -792,7 +796,8 @@ WERROR NetLocalGroupEnum_r(struct libnetapi_ctx *ctx,
                goto done;
        }
 
-       werr = libnetapi_open_pipe(ctx, cli, PI_SAMR, &pipe_cli);
+       werr = libnetapi_open_pipe(ctx, cli, &ndr_table_samr.syntax_id,
+                                  &pipe_cli);
        if (!W_ERROR_IS_OK(werr)) {
                goto done;
        }
index 915d60617f29d1f078e0b85f74256ed4d2c1ce53..ef6e7cf2b79d0cc1377943017cdfca5fa85a5856 100644 (file)
@@ -49,8 +49,8 @@ WERROR libnetapi_open_ipc_connection(struct libnetapi_ctx *ctx,
 WERROR libnetapi_shutdown_cm(struct libnetapi_ctx *ctx);
 WERROR libnetapi_open_pipe(struct libnetapi_ctx *ctx,
                           struct cli_state *cli,
-                          int pipe_idx,
-                          struct rpc_pipe_client **pipe_cli);
+                          const struct ndr_syntax_id *interface,
+                          struct rpc_pipe_client **presult);
 WERROR libnetapi_samr_open_domain(struct libnetapi_ctx *mem_ctx,
                                  struct rpc_pipe_client *pipe_cli,
                                  uint32_t connect_mask,
index 7920bc29d037afe4dfe6f0655391e8704608eed7..a591d3753abd63c4e32d97d322ffb858d09772f1 100644 (file)
@@ -75,7 +75,8 @@ WERROR NetServerGetInfo_r(struct libnetapi_ctx *ctx,
                goto done;
        }
 
-       werr = libnetapi_open_pipe(ctx, cli, PI_SRVSVC, &pipe_cli);
+       werr = libnetapi_open_pipe(ctx, cli, &ndr_table_srvsvc.syntax_id,
+                                  &pipe_cli);
        if (!W_ERROR_IS_OK(werr)) {
                goto done;
        }
@@ -175,7 +176,8 @@ WERROR NetServerSetInfo_r(struct libnetapi_ctx *ctx,
                goto done;
        }
 
-       werr = libnetapi_open_pipe(ctx, cli, PI_SRVSVC, &pipe_cli);
+       werr = libnetapi_open_pipe(ctx, cli, &ndr_table_srvsvc.syntax_id,
+                                  &pipe_cli);
        if (!W_ERROR_IS_OK(werr)) {
                goto done;
        }
@@ -221,7 +223,8 @@ WERROR NetRemoteTOD_r(struct libnetapi_ctx *ctx,
                goto done;
        }
 
-       werr = libnetapi_open_pipe(ctx, cli, PI_SRVSVC, &pipe_cli);
+       werr = libnetapi_open_pipe(ctx, cli, &ndr_table_srvsvc.syntax_id,
+                                  &pipe_cli);
        if (!W_ERROR_IS_OK(werr)) {
                goto done;
        }
index 8d695368484baf379c551a0ca7d17b5dd9108311..f896dde3aa0ae983f60f69730a6ab1dbce2adee3 100644 (file)
@@ -170,7 +170,8 @@ WERROR NetUserAdd_r(struct libnetapi_ctx *ctx,
                goto done;
        }
 
-       werr = libnetapi_open_pipe(ctx, cli, PI_SAMR, &pipe_cli);
+       werr = libnetapi_open_pipe(ctx, cli, &ndr_table_samr.syntax_id,
+                                  &pipe_cli);
        if (!W_ERROR_IS_OK(werr)) {
                goto done;
        }
@@ -333,7 +334,8 @@ WERROR NetUserDel_r(struct libnetapi_ctx *ctx,
                goto done;
        }
 
-       werr = libnetapi_open_pipe(ctx, cli, PI_SAMR, &pipe_cli);
+       werr = libnetapi_open_pipe(ctx, cli, &ndr_table_samr.syntax_id,
+                                  &pipe_cli);
        if (!W_ERROR_IS_OK(werr)) {
                goto done;
        }
@@ -709,7 +711,8 @@ WERROR NetUserEnum_r(struct libnetapi_ctx *ctx,
                goto done;
        }
 
-       werr = libnetapi_open_pipe(ctx, cli, PI_SAMR, &pipe_cli);
+       werr = libnetapi_open_pipe(ctx, cli, &ndr_table_samr.syntax_id,
+                                  &pipe_cli);
        if (!W_ERROR_IS_OK(werr)) {
                goto done;
        }
@@ -1001,7 +1004,8 @@ WERROR NetQueryDisplayInformation_r(struct libnetapi_ctx *ctx,
                goto done;
        }
 
-       werr = libnetapi_open_pipe(ctx, cli, PI_SAMR, &pipe_cli);
+       werr = libnetapi_open_pipe(ctx, cli, &ndr_table_samr.syntax_id,
+                                  &pipe_cli);
        if (!W_ERROR_IS_OK(werr)) {
                goto done;
        }
@@ -1128,7 +1132,8 @@ WERROR NetUserGetInfo_r(struct libnetapi_ctx *ctx,
                goto done;
        }
 
-       werr = libnetapi_open_pipe(ctx, cli, PI_SAMR, &pipe_cli);
+       werr = libnetapi_open_pipe(ctx, cli, &ndr_table_samr.syntax_id,
+                                  &pipe_cli);
        if (!W_ERROR_IS_OK(werr)) {
                goto done;
        }
index b5a188ed7628f6be3042dc239410463e2b7550f8..6f132a6431db0d8343de6624da8688d9781b2347 100644 (file)
@@ -86,9 +86,9 @@ const char *cli_get_pipe_name(int pipe_idx)
        return &pipe_names[pipe_idx].client_pipe[5];
 }
 
-static const char *cli_get_pipe_name_from_iface(TALLOC_CTX *mem_ctx,
-                                               struct cli_state *cli,
-                                               const struct ndr_syntax_id *interface)
+const char *cli_get_pipe_name_from_iface(TALLOC_CTX *mem_ctx,
+                                        struct cli_state *cli,
+                                        const struct ndr_syntax_id *interface)
 {
        int i;
        for (i = 0; pipe_names[i].client_pipe; i++) {