diff options
author | Stefan Metzmacher <metze@samba.org> | 2004-08-25 09:22:47 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 12:58:22 -0500 |
commit | 1795dfd4549767bb5920eee0d5af2588d4a8b8ec (patch) | |
tree | ae8e7cbc1cbe1f1b553210703c758d550a03a90c /source4/libnet/libnet_rpc.c | |
parent | aca1e774f729f0662bf220b9468cd9e4dab8be73 (diff) | |
download | samba-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.c | 52 |
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); } |