r21300: let the caller decide if it wants rid decrypted hashes or not
authorStefan Metzmacher <metze@samba.org>
Mon, 12 Feb 2007 13:34:04 +0000 (13:34 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 19:48:05 +0000 (14:48 -0500)
metze
(This used to be commit 8711d01ffd080c43512b88b995daf2d6b7c06ba1)

source4/libnet/libnet_samdump.c
source4/libnet/libnet_samdump_keytab.c
source4/libnet/libnet_samsync_ldb.c
source4/libnet/libnet_vampire.c
source4/libnet/libnet_vampire.h

index 8ece32474173eecfc064cd135c36760ad38f48fb..795345461642114003bc2a81188d3ba4876f0025 100644 (file)
@@ -163,6 +163,7 @@ NTSTATUS libnet_SamDump(struct libnet_context *ctx, TALLOC_CTX *mem_ctx, struct
 
        r2.out.error_string            = NULL;
        r2.in.binding_string           = r->in.binding_string;
+       r2.in.rid_crypt                = lp_parm_bool(-1, "vampire", "rid decrypt", True);
        r2.in.init_fn                  = NULL;
        r2.in.delta_fn                 = libnet_samdump_fn;
        r2.in.fn_ctx                   = samdump_state;
index b61469ea002349ae56bb7bc3d6e21f41557deb3e..ae95da43bac0d00b76a69d1ee4924752d17042c2 100644 (file)
@@ -100,6 +100,7 @@ NTSTATUS libnet_SamDump_keytab(struct libnet_context *ctx, TALLOC_CTX *mem_ctx,
 
        r2.out.error_string            = NULL;
        r2.in.binding_string           = r->in.binding_string;
+       r2.in.rid_crypt                = true;
        r2.in.init_fn                  = NULL;
        r2.in.delta_fn                 = libnet_samdump_keytab_fn;
        r2.in.fn_ctx                   = discard_const(r->in.keytab_name);
index 3b4ba304e4b098baa2e75b973a4f54147b4a87f5..648eb8eed97802d69e2bd945dc0a3a8a777c7a80 100644 (file)
@@ -1215,6 +1215,7 @@ NTSTATUS libnet_samsync_ldb(struct libnet_context *ctx, TALLOC_CTX *mem_ctx, str
 
        r2.out.error_string    = NULL;
        r2.in.binding_string   = r->in.binding_string;
+       r2.in.rid_crypt        = true;
        r2.in.init_fn          = libnet_samsync_ldb_init;
        r2.in.delta_fn         = libnet_samsync_ldb_fn;
        r2.in.fn_ctx           = state;
index 32879e7610d59ae855e46e7564a1f1778c5f9a4d..9b63f1b5119bfc4f1880d126aeecde30e4e09393 100644 (file)
@@ -38,6 +38,7 @@
  */
 static NTSTATUS fix_user(TALLOC_CTX *mem_ctx,
                         struct creds_CredentialState *creds,
+                        bool rid_crypt,
                         enum netr_SamDatabaseID database,
                         struct netr_DELTA_ENUM *delta,
                         char **error_string) 
@@ -50,7 +51,7 @@ static NTSTATUS fix_user(TALLOC_CTX *mem_ctx,
        const char *username = user->account_name.string;
        NTSTATUS nt_status;
 
-       if (lp_parm_bool(-1, "vampire", "rid_decrypt", True)) {
+       if (rid_crypt) {
                if (user->lm_password_present) {
                        sam_rid_crypt(rid, user->lmpassword.hash, lm_hash.hash, 0);
                        user->lmpassword = lm_hash;
@@ -74,7 +75,7 @@ static NTSTATUS fix_user(TALLOC_CTX *mem_ctx,
                nt_status = ndr_pull_struct_blob(&data, mem_ctx, &keys, (ndr_pull_flags_fn_t)ndr_pull_netr_USER_KEYS);
                if (NT_STATUS_IS_OK(nt_status)) {
                        if (keys.keys.keys2.lmpassword.length == 16) {
-                               if (lp_parm_bool(-1, "vampire", "rid decrypt", True)) {
+                               if (rid_crypt) {
                                        sam_rid_crypt(rid, keys.keys.keys2.lmpassword.pwd.hash, lm_hash.hash, 0);
                                        user->lmpassword = lm_hash;
                                } else {
@@ -83,7 +84,7 @@ static NTSTATUS fix_user(TALLOC_CTX *mem_ctx,
                                user->lm_password_present = True;
                        }
                        if (keys.keys.keys2.ntpassword.length == 16) {
-                               if (lp_parm_bool(-1, "vampire", "rid decrypt", True)) {
+                               if (rid_crypt) {
                                        sam_rid_crypt(rid, keys.keys.keys2.ntpassword.pwd.hash, nt_hash.hash, 0);
                                        user->ntpassword = nt_hash;
                                } else {
@@ -91,6 +92,7 @@ static NTSTATUS fix_user(TALLOC_CTX *mem_ctx,
                                }
                                user->nt_password_present = True;
                        }
+                       /* TODO: rid decrypt history fields */
                } else {
                        *error_string = talloc_asprintf(mem_ctx, "Failed to parse Sensitive Data for %s:", username);
                        dump_data(10, data.data, data.length);
@@ -128,6 +130,7 @@ static NTSTATUS fix_secret(TALLOC_CTX *mem_ctx,
 
 static NTSTATUS fix_delta(TALLOC_CTX *mem_ctx,                 
                          struct creds_CredentialState *creds,
+                         bool rid_crypt,
                          enum netr_SamDatabaseID database,
                          struct netr_DELTA_ENUM *delta,
                          char **error_string)
@@ -139,6 +142,7 @@ static NTSTATUS fix_delta(TALLOC_CTX *mem_ctx,
        {
                nt_status = fix_user(mem_ctx, 
                                     creds,
+                                    rid_crypt,
                                     database,
                                     delta,
                                     error_string);
@@ -354,6 +358,7 @@ NTSTATUS libnet_SamSync_netlogon(struct libnet_context *ctx, TALLOC_CTX *mem_ctx
                                 * de-obfuscating the data */
                                nt_status = fix_delta(delta_ctx, 
                                                      creds, 
+                                                     r->in.rid_crypt,
                                                      dbsync.in.database_id,
                                                      &dbsync.out.delta_enum_array->delta_enum[d], 
                                                      &error_string);
index a3735d18487e9b3db9a27a21a11f72c822fd3249..80200b6771f529ce5e3f74412b0ae4efaf2fac3f 100644 (file)
@@ -33,6 +33,7 @@ struct libnet_SamSync_state {
 struct libnet_SamSync {
        struct {
                const char *binding_string;
+               bool rid_crypt;
                NTSTATUS (*init_fn)(TALLOC_CTX *mem_ctx,                
                                    void *private,
                                    struct libnet_SamSync_state *samsync_state,