The branch, v3-4-test has been updated
       via  bd3f30d1dac3febd69c1c9266ca52dc836a92632 (commit)
       via  bca1bc1d79f9ca3ccaac61a32882b72198c527cb (commit)
      from  6673ad24d48ad44fa76497f0327b13e82721d0a1 (commit)

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=v3-4-test


- Log -----------------------------------------------------------------
commit bd3f30d1dac3febd69c1c9266ca52dc836a92632
Author: Günther Deschner <[email protected]>
Date:   Fri Apr 3 21:26:14 2009 +0200

    s3-samr: add support for _samr_Connect3() while planning to pass a s4 
smbtorture test.
    
    Guenther
    (cherry picked from commit 12d9765177fc16f7b13e460e1d79c50c256d6fa8)

commit bca1bc1d79f9ca3ccaac61a32882b72198c527cb
Author: Günther Deschner <[email protected]>
Date:   Tue Dec 9 13:25:59 2008 +0100

    s3-samr: add support for setting password hashes via samr_SetUserInfo level 
21.
    
    Guenther
    (cherry picked from commit df29f49eddbfcd5c6ac9a26d688a1a3f7a087da5)

-----------------------------------------------------------------------

Summary of changes:
 source3/rpc_server/srv_samr_nt.c |   86 +++++++++++++++++++++++++++++++------
 1 files changed, 72 insertions(+), 14 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source3/rpc_server/srv_samr_nt.c b/source3/rpc_server/srv_samr_nt.c
index c60d904..7881ca6 100644
--- a/source3/rpc_server/srv_samr_nt.c
+++ b/source3/rpc_server/srv_samr_nt.c
@@ -3245,6 +3245,9 @@ NTSTATUS _samr_Connect2(pipes_struct *p,
        case NDR_SAMR_CONNECT2:
                fn = "_samr_Connect2";
                break;
+       case NDR_SAMR_CONNECT3:
+               fn = "_samr_Connect3";
+               break;
        case NDR_SAMR_CONNECT4:
                fn = "_samr_Connect4";
                break;
@@ -3289,6 +3292,22 @@ NTSTATUS _samr_Connect2(pipes_struct *p,
        return nt_status;
 }
 
+/****************************************************************
+ _samr_Connect3
+****************************************************************/
+
+NTSTATUS _samr_Connect3(pipes_struct *p,
+                       struct samr_Connect3 *r)
+{
+       struct samr_Connect2 c;
+
+       c.in.system_name        = r->in.system_name;
+       c.in.access_mask        = r->in.access_mask;
+       c.out.connect_handle    = r->out.connect_handle;
+
+       return _samr_Connect2(p, &c);
+}
+
 /*******************************************************************
  _samr_Connect4
  ********************************************************************/
@@ -3667,8 +3686,9 @@ static bool set_user_info_20(struct samr_UserInfo20 *id20,
  set_user_info_21
  ********************************************************************/
 
-static NTSTATUS set_user_info_21(TALLOC_CTX *mem_ctx,
-                                struct samr_UserInfo21 *id21,
+static NTSTATUS set_user_info_21(struct samr_UserInfo21 *id21,
+                                TALLOC_CTX *mem_ctx,
+                                DATA_BLOB *session_key,
                                 struct samu *pwd)
 {
        NTSTATUS status;
@@ -3686,6 +3706,52 @@ static NTSTATUS set_user_info_21(TALLOC_CTX *mem_ctx,
                return NT_STATUS_ACCESS_DENIED;
        }
 
+       if (id21->fields_present & SAMR_FIELD_NT_PASSWORD_PRESENT) {
+               if (id21->nt_password_set) {
+                       DATA_BLOB in, out;
+
+                       if ((id21->nt_owf_password.length != 16) ||
+                           (id21->nt_owf_password.size != 16)) {
+                               return NT_STATUS_INVALID_PARAMETER;
+                       }
+
+                       if (!session_key->length) {
+                               return NT_STATUS_NO_USER_SESSION_KEY;
+                       }
+
+                       in = data_blob_const(id21->nt_owf_password.array, 16);
+                       out = data_blob_talloc_zero(mem_ctx, 16);
+
+                       sess_crypt_blob(&out, &in, session_key, false);
+
+                       pdb_set_nt_passwd(pwd, out.data, PDB_CHANGED);
+                       pdb_set_pass_last_set_time(pwd, time(NULL), 
PDB_CHANGED);
+               }
+       }
+
+       if (id21->fields_present & SAMR_FIELD_LM_PASSWORD_PRESENT) {
+               if (id21->lm_password_set) {
+                       DATA_BLOB in, out;
+
+                       if ((id21->lm_owf_password.length != 16) ||
+                           (id21->lm_owf_password.size != 16)) {
+                               return NT_STATUS_INVALID_PARAMETER;
+                       }
+
+                       if (!session_key->length) {
+                               return NT_STATUS_NO_USER_SESSION_KEY;
+                       }
+
+                       in = data_blob_const(id21->lm_owf_password.array, 16);
+                       out = data_blob_talloc_zero(mem_ctx, 16);
+
+                       sess_crypt_blob(&out, &in, session_key, false);
+
+                       pdb_set_lanman_passwd(pwd, out.data, PDB_CHANGED);
+                       pdb_set_pass_last_set_time(pwd, time(NULL), 
PDB_CHANGED);
+               }
+       }
+
        /* we need to separately check for an account rename first */
 
        if (id21->account_name.string &&
@@ -4147,8 +4213,10 @@ NTSTATUS _samr_SetUserInfo(pipes_struct *p,
                        break;
 
                case 21:
-                       status = set_user_info_21(p->mem_ctx,
-                                                 &info->info21, pwd);
+                       status = set_user_info_21(&info->info21,
+                                                 p->mem_ctx,
+                                                 
&p->server_info->user_session_key,
+                                                 pwd);
                        break;
 
                case 23:
@@ -5852,16 +5920,6 @@ NTSTATUS _samr_GetBootKeyInformation(pipes_struct *p,
 /****************************************************************
 ****************************************************************/
 
-NTSTATUS _samr_Connect3(pipes_struct *p,
-                       struct samr_Connect3 *r)
-{
-       p->rng_fault_state = true;
-       return NT_STATUS_NOT_IMPLEMENTED;
-}
-
-/****************************************************************
-****************************************************************/
-
 NTSTATUS _samr_RidToSid(pipes_struct *p,
                        struct samr_RidToSid *r)
 {


-- 
Samba Shared Repository

Reply via email to