mirror of
https://github.com/samba-team/samba.git
synced 2025-02-08 05:57:51 +03:00
s3:libsmb: add trust_pw_new_value() helper function
This generates a new trust password based on the secure channel type and lp_security(). NT4 really has a limit of 28 UTF16 bytes. BUG: https://bugzilla.samba.org/show_bug.cgi?id=12262 Signed-off-by: Stefan Metzmacher <metze@samba.org> Reviewed-by: Ralph Boehme <slow@samba.org>
This commit is contained in:
parent
a287754168
commit
9e26ad86fb
@ -862,6 +862,9 @@ void update_trustdom_cache( void );
|
|||||||
struct netlogon_creds_cli_context;
|
struct netlogon_creds_cli_context;
|
||||||
struct messaging_context;
|
struct messaging_context;
|
||||||
struct dcerpc_binding_handle;
|
struct dcerpc_binding_handle;
|
||||||
|
char *trust_pw_new_value(TALLOC_CTX *mem_ctx,
|
||||||
|
enum netr_SchannelType sec_channel_type,
|
||||||
|
int security);
|
||||||
NTSTATUS trust_pw_change(struct netlogon_creds_cli_context *context,
|
NTSTATUS trust_pw_change(struct netlogon_creds_cli_context *context,
|
||||||
struct messaging_context *msg_ctx,
|
struct messaging_context *msg_ctx,
|
||||||
struct dcerpc_binding_handle *b,
|
struct dcerpc_binding_handle *b,
|
||||||
|
@ -47,6 +47,62 @@ static int trust_pw_change_state_destructor(struct trust_pw_change_state *state)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
char *trust_pw_new_value(TALLOC_CTX *mem_ctx,
|
||||||
|
enum netr_SchannelType sec_channel_type,
|
||||||
|
int security)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* use secure defaults.
|
||||||
|
*/
|
||||||
|
size_t min = 128;
|
||||||
|
size_t max = 255;
|
||||||
|
|
||||||
|
switch (sec_channel_type) {
|
||||||
|
case SEC_CHAN_WKSTA:
|
||||||
|
case SEC_CHAN_BDC:
|
||||||
|
if (security == SEC_DOMAIN) {
|
||||||
|
/*
|
||||||
|
* The maximum length of a trust account password.
|
||||||
|
* Used when we randomly create it, 15 char passwords
|
||||||
|
* exceed NT4's max password length.
|
||||||
|
*/
|
||||||
|
min = 14;
|
||||||
|
max = 14;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case SEC_CHAN_DNS_DOMAIN:
|
||||||
|
/*
|
||||||
|
* new_len * 2 = 498 bytes is the largest possible length
|
||||||
|
* NL_PASSWORD_VERSION consumes the rest of the possible 512 bytes
|
||||||
|
* and a confounder with at least 2 bytes is required.
|
||||||
|
*
|
||||||
|
* Windows uses new_len = 120 => 240 bytes (utf16)
|
||||||
|
*/
|
||||||
|
min = 120;
|
||||||
|
max = 120;
|
||||||
|
break;
|
||||||
|
/* fall through */
|
||||||
|
case SEC_CHAN_DOMAIN:
|
||||||
|
/*
|
||||||
|
* The maximum length of a trust account password.
|
||||||
|
* Used when we randomly create it, 15 char passwords
|
||||||
|
* exceed NT4's max password length.
|
||||||
|
*/
|
||||||
|
min = 14;
|
||||||
|
max = 14;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Create a random machine account password
|
||||||
|
* We create a random buffer and convert that to utf8.
|
||||||
|
* This is similar to what windows is doing.
|
||||||
|
*/
|
||||||
|
return generate_random_machine_password(mem_ctx, min, max);
|
||||||
|
}
|
||||||
|
|
||||||
NTSTATUS trust_pw_change(struct netlogon_creds_cli_context *context,
|
NTSTATUS trust_pw_change(struct netlogon_creds_cli_context *context,
|
||||||
struct messaging_context *msg_ctx,
|
struct messaging_context *msg_ctx,
|
||||||
struct dcerpc_binding_handle *b,
|
struct dcerpc_binding_handle *b,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user