1
0
mirror of https://github.com/samba-team/samba.git synced 2024-12-22 13:34:15 +03:00

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 f1b9c1f3dd)
This commit is contained in:
Stefan Metzmacher 2004-08-19 13:32:06 +00:00 committed by Gerald (Jerry) Carter
parent c3ec4582ba
commit 9d62046b0e
4 changed files with 46 additions and 6 deletions

View File

@ -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 */

View File

@ -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);

View File

@ -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;
}

View File

@ -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;