summaryrefslogtreecommitdiff
path: root/source4/libnet/libnet_rpc.c
diff options
context:
space:
mode:
authorStefan Metzmacher <metze@samba.org>2004-08-25 09:22:47 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 12:58:22 -0500
commit1795dfd4549767bb5920eee0d5af2588d4a8b8ec (patch)
treeae8e7cbc1cbe1f1b553210703c758d550a03a90c /source4/libnet/libnet_rpc.c
parentaca1e774f729f0662bf220b9468cd9e4dab8be73 (diff)
downloadsamba-1795dfd4549767bb5920eee0d5af2588d4a8b8ec.tar.gz
samba-1795dfd4549767bb5920eee0d5af2588d4a8b8ec.tar.bz2
samba-1795dfd4549767bb5920eee0d5af2588d4a8b8ec.zip
r2061: - split libnet header files
- add LIB_RPC_CONNECT_STANDARD level which takes a server name and the PIPE NAME,UUID and VERSION metze (This used to be commit 6aeaa6aca39c8c2a9edf8d4b3e538bebb68070d7)
Diffstat (limited to 'source4/libnet/libnet_rpc.c')
-rw-r--r--source4/libnet/libnet_rpc.c52
1 files changed, 41 insertions, 11 deletions
diff --git a/source4/libnet/libnet_rpc.c b/source4/libnet/libnet_rpc.c
index 4896236e68..01de99c167 100644
--- a/source4/libnet/libnet_rpc.c
+++ b/source4/libnet/libnet_rpc.c
@@ -56,11 +56,39 @@ NTSTATUS libnet_find_pdc(struct libnet_context *ctx, TALLOC_CTX *mem_ctx, union
return NT_STATUS_INVALID_LEVEL;
}
-/* connect to a dcerpc interface of a domains PDC */
-static NTSTATUS libnet_rpc_connect_pdc(struct libnet_context *ctx, TALLOC_CTX *mem_ctx, union libnet_rpc_connect *r)
+/* connect to a dcerpc interface of a server */
+static NTSTATUS libnet_rpc_connect_standard(struct libnet_context *ctx, TALLOC_CTX *mem_ctx, union libnet_rpc_connect *r)
{
NTSTATUS status;
const char *binding = NULL;
+
+ binding = talloc_asprintf(mem_ctx, "ncacn_np:%s",
+ r->standard.in.server_name);
+
+ status = dcerpc_pipe_connect(&r->standard.out.dcerpc_pipe,
+ binding,
+ r->standard.in.dcerpc_iface_uuid,
+ r->standard.in.dcerpc_iface_version,
+ ctx->user.domain_name,
+ ctx->user.account_name,
+ ctx->user.password);
+ if (!NT_STATUS_IS_OK(status)) {
+ r->standard.out.error_string = talloc_asprintf(mem_ctx,
+ "dcerpc_pipe_connect to pipe %s failed with %s\n",
+ r->standard.in.dcerpc_iface_name, binding);
+ return status;
+ }
+
+ r->standard.out.error_string = NULL;
+
+ return status;
+}
+
+/* connect to a dcerpc interface of a time server */
+static NTSTATUS libnet_rpc_connect_pdc(struct libnet_context *ctx, TALLOC_CTX *mem_ctx, union libnet_rpc_connect *r)
+{
+ NTSTATUS status;
+ union libnet_rpc_connect r2;
union libnet_find_pdc f;
f.generic.level = LIBNET_FIND_PDC_GENERIC;
@@ -71,16 +99,16 @@ static NTSTATUS libnet_rpc_connect_pdc(struct libnet_context *ctx, TALLOC_CTX *m
return status;
}
- binding = talloc_asprintf(mem_ctx, "ncacn_np:%s",
- f.generic.out.pdc_name);
+ r2.standard.level = LIBNET_RPC_CONNECT_STANDARD;
+ r2.standard.in.server_name = f.generic.out.pdc_name;
+ r2.standard.in.dcerpc_iface_name = r->standard.in.dcerpc_iface_name;
+ r2.standard.in.dcerpc_iface_uuid = r->standard.in.dcerpc_iface_uuid;
+ r2.standard.in.dcerpc_iface_version = r->standard.in.dcerpc_iface_version;
+
+ status = libnet_rpc_connect(ctx, mem_ctx, &r2);
- status = dcerpc_pipe_connect(&r->pdc.out.dcerpc_pipe,
- binding,
- r->pdc.in.dcerpc_iface_uuid,
- r->pdc.in.dcerpc_iface_version,
- ctx->user.domain_name,
- ctx->user.account_name,
- ctx->user.password);
+ r->pdc.out.dcerpc_pipe = r2.standard.out.dcerpc_pipe;
+ r->pdc.out.error_string = r2.standard.out.error_string;
return status;
}
@@ -89,6 +117,8 @@ static NTSTATUS libnet_rpc_connect_pdc(struct libnet_context *ctx, TALLOC_CTX *m
NTSTATUS libnet_rpc_connect(struct libnet_context *ctx, TALLOC_CTX *mem_ctx, union libnet_rpc_connect *r)
{
switch (r->pdc.level) {
+ case LIBNET_RPC_CONNECT_STANDARD:
+ return libnet_rpc_connect_standard(ctx, mem_ctx, r);
case LIBNET_RPC_CONNECT_PDC:
return libnet_rpc_connect_pdc(ctx, mem_ctx, r);
}