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:
parent
c3ec4582ba
commit
9d62046b0e
@ -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 */
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user