const struct samr_Password *machine_password,
const struct netr_Credential *credentials_in,
struct netr_Credential *credentials_out,
+ uint32_t client_requested_flags,
const struct dom_sid *client_sid,
uint32_t negotiate_flags)
{
struct netlogon_creds_CredentialState *creds = talloc_zero(mem_ctx, struct netlogon_creds_CredentialState);
+ struct timeval tv = timeval_current();
+ NTTIME now = timeval_to_nttime(&tv);
NTSTATUS status;
bool ok;
talloc_free(creds);
return NULL;
}
+ creds->ex->client_requested_flags = client_requested_flags;
+ creds->ex->auth_time = now;
creds->ex->client_sid = *client_sid;
if (negotiate_flags & NETLOGON_NEG_SUPPORTS_AES) {
const struct samr_Password *machine_password,
const struct netr_Credential *credentials_in,
struct netr_Credential *credentials_out,
+ uint32_t client_requested_flags,
const struct dom_sid *client_sid,
uint32_t negotiate_flags);
NTSTATUS netlogon_creds_server_step_check(struct netlogon_creds_CredentialState *creds,
* On the server we use CLEAR_IF_FIRST,
* so db layout changes don't matter there.
*/
+ netr_NegotiateFlags client_requested_flags;
+ NTTIME auth_time;
dom_sid client_sid;
} netlogon_creds_CredentialState_extra_info;
&mach_pwd,
r->in.credentials,
r->out.return_credentials,
+ in_neg_flags,
&sid,
neg_flags);
if (!creds) {
"samAccountName",
NULL};
uint32_t server_flags = 0;
+ uint32_t client_flags = 0;
uint32_t negotiate_flags = 0;
ZERO_STRUCTP(r->out.return_credentials);
* NETLOGON_NEG_STRONG_KEYS from server_flags...
*/
- negotiate_flags = *r->in.negotiate_flags & server_flags;
+ client_flags = *r->in.negotiate_flags;
+ negotiate_flags = client_flags & server_flags;
switch (r->in.secure_channel_type) {
case SEC_CHAN_WKSTA:
curNtHash,
r->in.credentials,
r->out.return_credentials,
+ client_flags,
*sid,
negotiate_flags);
if (creds == NULL && prevNtHash != NULL) {
prevNtHash,
r->in.credentials,
r->out.return_credentials,
+ client_flags,
*sid,
negotiate_flags);
}