diff options
author | Stefan Metzmacher <metze@samba.org> | 2004-08-19 13:32:06 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 12:58:11 -0500 |
commit | 9d62046b0e09fa7a4a660859dd8651e6d60c8dc8 (patch) | |
tree | 50e7036ab1e464575d967882bc98cadb47dc8b5a /source4 | |
parent | c3ec4582ba8d840be0ccfd18e6704f5583b6469f (diff) | |
download | samba-9d62046b0e09fa7a4a660859dd8651e6d60c8dc8.tar.gz samba-9d62046b0e09fa7a4a660859dd8651e6d60c8dc8.tar.xz samba-9d62046b0e09fa7a4a660859dd8651e6d60c8dc8.zip |
r1919: paasword change basicly works now:-)
but we need to find the real pdc for the users domain
and fallback to other levels
metze
(This used to be commit f1b9c1f3dd0fb927c065541da900ae43e0018a62)
Diffstat (limited to 'source4')
-rw-r--r-- | source4/libnet/libnet.h | 5 | ||||
-rw-r--r-- | source4/libnet/libnet_passwd.c | 10 | ||||
-rw-r--r-- | source4/libnet/libnet_rpc.c | 34 | ||||
-rw-r--r-- | source4/utils/net/net_password.c | 3 |
4 files changed, 46 insertions, 6 deletions
diff --git a/source4/libnet/libnet.h b/source4/libnet/libnet.h index 65dba4ff78..0a96e6c530 100644 --- a/source4/libnet/libnet.h +++ b/source4/libnet/libnet.h @@ -25,6 +25,11 @@ struct libnet_context { * a client env context * a user env context */ + struct { + const char *account_name; + const char *domain_name; + const char *password; + } user; }; /* struct and enum for connecting to a dcerpc inferface */ diff --git a/source4/libnet/libnet_passwd.c b/source4/libnet/libnet_passwd.c index ea61a457ba..cdb5160a92 100644 --- a/source4/libnet/libnet_passwd.c +++ b/source4/libnet/libnet_passwd.c @@ -109,11 +109,11 @@ static NTSTATUS libnet_ChangePassword_generic(struct libnet_context *ctx, TALLOC NTSTATUS status; union libnet_ChangePassword r2; - r2.generic.level = LIBNET_CHANGE_PASSWORD_RPC; - r2.rpc.in.account_name = NULL; - r2.rpc.in.domain_name = NULL; - r2.rpc.in.oldpassword = NULL; - r2.rpc.in.newpassword = NULL; + r2.rpc.level = LIBNET_CHANGE_PASSWORD_RPC; + r2.rpc.in.account_name = r->generic.in.account_name; + r2.rpc.in.domain_name = r->generic.in.domain_name; + r2.rpc.in.oldpassword = r->generic.in.oldpassword; + r2.rpc.in.newpassword = r->generic.in.newpassword; status = libnet_ChangePassword(ctx, mem_ctx, &r2); diff --git a/source4/libnet/libnet_rpc.c b/source4/libnet/libnet_rpc.c index 0ab07fa4a5..c76498d0bb 100644 --- a/source4/libnet/libnet_rpc.c +++ b/source4/libnet/libnet_rpc.c @@ -20,8 +20,40 @@ #include "includes.h" +/* connect to a dcerpc interface of a domains PDC */ +NTSTATUS libnet_rpc_connect_pdc(struct libnet_context *ctx, TALLOC_CTX *mem_ctx, union libnet_rpc_connect *r) +{ + NTSTATUS status; + const char *binding = NULL; + const char *pdc = NULL; + + /* TODO: find real PDC! + * for now I use the lp_netbios_name() + * that's the most important for me as we don't have + * smbpasswd in samba4 (and this is good!:-) --metze + */ + pdc = lp_netbios_name(); + + binding = talloc_asprintf(mem_ctx, "ncacn_np:%s",pdc); + + 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); + + return status; +} + /* connect to a dcerpc interface */ NTSTATUS libnet_rpc_connect(struct libnet_context *ctx, TALLOC_CTX *mem_ctx, union libnet_rpc_connect *r) { - return NT_STATUS_NOT_IMPLEMENTED; + switch (r->pdc.level) { + case LIBNET_RPC_CONNECT_PDC: + return libnet_rpc_connect_pdc(ctx, mem_ctx, r); + } + + return NT_STATUS_INVALID_LEVEL; } diff --git a/source4/utils/net/net_password.c b/source4/utils/net/net_password.c index c9c549fcff..9daa3f401f 100644 --- a/source4/utils/net/net_password.c +++ b/source4/utils/net/net_password.c @@ -46,6 +46,9 @@ static int net_password_change(struct net_context *ctx, int argc, const char **a if (!libnetctx) { return -1; } + libnetctx->user.account_name = ctx->user.account_name; + libnetctx->user.domain_name = ctx->user.domain_name; + libnetctx->user.password = ctx->user.password; /* prepare password change */ r.generic.level = LIBNET_CHANGE_PASSWORD_GENERIC; |