S3: Add ntlmssp_set_password_hash
authorVolker Lendecke <vl@samba.org>
Mon, 11 Jun 2012 11:12:30 +0000 (13:12 +0200)
committerStefan Metzmacher <metze@samba.org>
Tue, 12 Jun 2012 08:48:15 +0000 (10:48 +0200)
Signed-off-by: Stefan Metzmacher <metze@samba.org>
source3/include/proto.h
source3/libsmb/ntlmssp.c

index b265d7a2c16f58cbdb3707724a5db74041b33a93..d1d71310657f6c244e6b72e2bdedb85fe80686ea 100644 (file)
@@ -939,6 +939,8 @@ bool get_dc_name(const char *domain,
 struct ntlmssp_state;
 NTSTATUS ntlmssp_set_username(struct ntlmssp_state *ntlmssp_state, const char *user) ;
 NTSTATUS ntlmssp_set_password(struct ntlmssp_state *ntlmssp_state, const char *password) ;
+NTSTATUS ntlmssp_set_password_hash(struct ntlmssp_state *ntlmssp_state,
+                                  const char *hash);
 NTSTATUS ntlmssp_set_domain(struct ntlmssp_state *ntlmssp_state, const char *domain) ;
 void ntlmssp_want_feature_list(struct ntlmssp_state *ntlmssp_state, char *feature_list);
 void ntlmssp_want_feature(struct ntlmssp_state *ntlmssp_state, uint32_t feature);
index 95a5dc9ccb32e7a191752c48d1274d6b33c6a62b..fb41c3c4873ae013d30968e2617917989d529ce2 100644 (file)
@@ -106,6 +106,28 @@ NTSTATUS ntlmssp_set_password(struct ntlmssp_state *ntlmssp_state, const char *p
        return NT_STATUS_OK;
 }
 
+NTSTATUS ntlmssp_set_password_hash(struct ntlmssp_state *state,
+                                  const char *pwhash)
+{
+       char nt_hash[16];
+       size_t converted;
+
+       converted = strhex_to_str(
+               nt_hash, sizeof(nt_hash), pwhash, strlen(pwhash));
+       if (converted != sizeof(nt_hash)) {
+               return NT_STATUS_INVALID_PARAMETER;
+       }
+
+       TALLOC_FREE(state->lm_hash);
+       TALLOC_FREE(state->nt_hash);
+
+       state->nt_hash = (uint8_t *)talloc_memdup(state, nt_hash, 16);
+       if (!state->nt_hash) {
+               return NT_STATUS_NO_MEMORY;
+       }
+       return NT_STATUS_OK;
+}
+
 /**
  * Set a domain on an NTLMSSP context - ensures it is talloc()ed
  *