[SCM] Samba Shared Repository - branch v3-3-test updated - release-3-2-0pre2-4647-g7a3091a

Günther Deschner gd at samba.org
Thu Dec 11 18:16:14 GMT 2008


The branch, v3-3-test has been updated
       via  7a3091a48b844bbad93c61a0570fd23bd87f76e1 (commit)
       via  332456f09bfea29e5a6558b5bd3b8c585892a3f5 (commit)
       via  4260aadc2e00b6856d5cc2365ab751f3458472d5 (commit)
       via  e22e9c09d1cb9102180b2a5401d21f391894f1ac (commit)
       via  2edf2cef9cb43a65ce8ee8e8a782d248856030dd (commit)
       via  c94cd674409f01d71bd9174829b1f05b95c50703 (commit)
       via  e00a25dbba3daf06c744f998967c27c8a539e558 (commit)
       via  b5e5124439b0215c2a82bf816f364661b4ba7785 (commit)
       via  ec3f80f86daa392a42c75edaee0865b6127347b1 (commit)
       via  1cbbda7adcd6a5558fa259261c527aff6fc82477 (commit)
       via  aed5272422f7842ac7aad6be5eadf813bdaf90d6 (commit)
       via  299190ee53bc024abb832dfd6a832c4a756b99ee (commit)
       via  6f466b2aeca8b3052dd8cf59ec1560bb23fe9c93 (commit)
       via  bfcff837ebde5b4d726bfccd62d72e5d062adbc0 (commit)
       via  d5b7884b8e0ab5a92b9c69c4d1a812689f8d183e (commit)
       via  90786ee2012e038b3ea5f5600903e7c208c6083b (commit)
       via  fb575f6ce7915a41079afc8762fbf83e256c6631 (commit)
       via  d444a0d29c35715f5e1cf48d26f3d4064d93ff68 (commit)
       via  85a2c0607e25b8a3ca91c50f71f4d649d29bd0e3 (commit)
       via  584249dfffe5ed9efd67bfc598413d5d19eb80cf (commit)
       via  9b0f3359fc7cb27c5e4726b87ae4035e1908736a (commit)
       via  e273479c7bdb57bbfaaae997a32fb3f2d8f7f896 (commit)
       via  11a4ccc2b0f54324bbed2360fa48055fa43fee6d (commit)
      from  5744177740120524740db884564142df19358ae7 (commit)

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


- Log -----------------------------------------------------------------
commit 7a3091a48b844bbad93c61a0570fd23bd87f76e1
Author: Günther Deschner <gd at samba.org>
Date:   Thu Dec 11 19:13:43 2008 +0100

    s3-samr: fix rpcclient after idl change.
    
    Guenther

commit 332456f09bfea29e5a6558b5bd3b8c585892a3f5
Author: Günther Deschner <gd at samba.org>
Date:   Thu Dec 11 19:04:24 2008 +0100

    s3-samr: modify logging in _samr_Connect2 so that it can be called from other calls as well.
    
    Guenther

commit 4260aadc2e00b6856d5cc2365ab751f3458472d5
Author: Günther Deschner <gd at samba.org>
Date:   Tue Dec 9 12:39:47 2008 +0100

    s3-samr: a level 18 password set needs to set the pwdlastset as well.
    
    Guenther

commit e22e9c09d1cb9102180b2a5401d21f391894f1ac
Author: Günther Deschner <gd at samba.org>
Date:   Fri Dec 5 16:13:28 2008 +0100

    s3-samr: fix samr_SetUserInfo level 18 server-side.
    
    Guenther

commit 2edf2cef9cb43a65ce8ee8e8a782d248856030dd
Author: Günther Deschner <gd at samba.org>
Date:   Thu Dec 4 18:15:03 2008 +0100

    s3-samr: fix SAMR_FIELD_PASSWORD callers.
    
    Guenther

commit c94cd674409f01d71bd9174829b1f05b95c50703
Author: Günther Deschner <gd at samba.org>
Date:   Thu Dec 4 18:12:45 2008 +0100

    samr: make more explicit what SAMR_FIELD_PASSWORD{2} means.
    
    Guenther

commit e00a25dbba3daf06c744f998967c27c8a539e558
Author: Günther Deschner <gd at samba.org>
Date:   Thu Dec 4 13:09:38 2008 +0100

    samr: fill in two unknowns in samr_UserInfo21.
    
    Guenther

commit b5e5124439b0215c2a82bf816f364661b4ba7785
Author: Günther Deschner <gd at samba.org>
Date:   Tue Dec 2 23:25:16 2008 +0100

    samr: fill in two unknowns in samr_DomInfo13.
    
    Guenther

commit ec3f80f86daa392a42c75edaee0865b6127347b1
Author: Günther Deschner <gd at samba.org>
Date:   Sat Nov 29 00:36:23 2008 +0100

    s3-samr: fix init_samr_user_info2{1,3,5} callers.
    
    Guenther

commit 1cbbda7adcd6a5558fa259261c527aff6fc82477
Author: Günther Deschner <gd at samba.org>
Date:   Thu Dec 4 18:21:10 2008 +0100

    s3-samr: fix samr callers of samr_UserInfo18.
    
    Guenther

commit aed5272422f7842ac7aad6be5eadf813bdaf90d6
Author: Günther Deschner <gd at samba.org>
Date:   Sat Nov 29 00:30:21 2008 +0100

    s3-build: re-run make samba3-idl.
    
    Guenther

commit 299190ee53bc024abb832dfd6a832c4a756b99ee
Author: Günther Deschner <gd at samba.org>
Date:   Fri Dec 5 12:40:19 2008 +0100

    samr: fix samr_UserInfo18, lm/nt pwd mixup.
    
    Guenther

commit 6f466b2aeca8b3052dd8cf59ec1560bb23fe9c93
Author: Günther Deschner <gd at samba.org>
Date:   Thu Dec 4 18:19:29 2008 +0100

    samr: fix samr_UserInfo18. It also contains password_expired, thanks metze.
    
    Guenther

commit bfcff837ebde5b4d726bfccd62d72e5d062adbc0
Author: Günther Deschner <gd at samba.org>
Date:   Sat Nov 29 00:23:16 2008 +0100

    s3-samr: refuse do process UserSetInfo with 0 fields_present.
    
    Guenther

commit d5b7884b8e0ab5a92b9c69c4d1a812689f8d183e
Author: Günther Deschner <gd at samba.org>
Date:   Tue Dec 2 02:08:05 2008 +0100

    s3-samr: simplify _samr_QueryUserInfo a lot and fix some few potential memleaks.
    
    Guenther

commit 90786ee2012e038b3ea5f5600903e7c208c6083b
Author: Günther Deschner <gd at samba.org>
Date:   Tue Dec 2 00:58:53 2008 +0100

    s3-samr: fix samr_SetUserInfo{2} level 23.
    
    Do not just start decoding/setting passwords when fields_present
    do not indicate there is a password to be set.
    
    Guenther

commit fb575f6ce7915a41079afc8762fbf83e256c6631
Author: Günther Deschner <gd at samba.org>
Date:   Tue Dec 2 00:08:56 2008 +0100

    s3-samr: _samr_EnumDomainUsers always returns a sam array (even w/o users).
    
    Guenther

commit d444a0d29c35715f5e1cf48d26f3d4064d93ff68
Author: Günther Deschner <gd at samba.org>
Date:   Thu Nov 27 01:22:39 2008 +0100

    s3-samr: fix return code for invalid name in _samr_LookupDomain.
    
    Guenther

commit 85a2c0607e25b8a3ca91c50f71f4d649d29bd0e3
Author: Günther Deschner <gd at samba.org>
Date:   Thu Nov 27 01:21:49 2008 +0100

    s3-samr: avoid enumeration and user creation on builtin domain handle.
    
    Guenther

commit 584249dfffe5ed9efd67bfc598413d5d19eb80cf
Author: Günther Deschner <gd at samba.org>
Date:   Tue Nov 25 15:51:35 2008 +0100

    s3-samr: support samr_CreateUser as well.
    
    Guenther

commit 9b0f3359fc7cb27c5e4726b87ae4035e1908736a
Author: Günther Deschner <gd at samba.org>
Date:   Tue Nov 25 15:50:28 2008 +0100

    s3-samr: support samr_QueryUserInfo2 as well.
    
    Guenther

commit e273479c7bdb57bbfaaae997a32fb3f2d8f7f896
Author: Günther Deschner <gd at samba.org>
Date:   Tue Nov 25 12:21:37 2008 +0100

    s3-samr: add support for _samr_QueryUserInfo level 5.
    
    Guenther

commit 11a4ccc2b0f54324bbed2360fa48055fa43fee6d
Author: Günther Deschner <gd at samba.org>
Date:   Tue Nov 25 12:18:39 2008 +0100

    s3-samr: add init_samr_user_info5.
    
    Guenther

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

Summary of changes:
 source/include/proto.h           |   22 ++-
 source/lib/netapi/user.c         |    2 +-
 source/librpc/gen_ndr/ndr_samr.c |   54 +++---
 source/librpc/gen_ndr/samr.h     |   18 +-
 source/librpc/idl/samr.idl       |   16 +-
 source/rpc_client/init_samr.c    |   63 +++++-
 source/rpc_server/srv_samr_nt.c  |  467 ++++++++++++++++++++++----------------
 source/rpcclient/cmd_samr.c      |    5 +-
 source/utils/net_rpc.c           |    2 +-
 9 files changed, 394 insertions(+), 255 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source/include/proto.h b/source/include/proto.h
index 41624c9..7cc1adc 100644
--- a/source/include/proto.h
+++ b/source/include/proto.h
@@ -7396,6 +7396,25 @@ void init_samr_alias_info1(struct samr_AliasInfoAll *r,
 			   const char *description);
 void init_samr_alias_info3(struct lsa_String *r,
 			   const char *description);
+void init_samr_user_info5(struct samr_UserInfo5 *r,
+			  const char *account_name,
+			  const char *full_name,
+			  uint32_t rid,
+			  uint32_t primary_gid,
+			  const char *home_directory,
+			  const char *home_drive,
+			  const char *logon_script,
+			  const char *profile_path,
+			  const char *description,
+			  const char *workstations,
+			  NTTIME last_logon,
+			  NTTIME last_logoff,
+			  struct samr_LogonHours logon_hours,
+			  uint16_t bad_password_count,
+			  uint16_t logon_count,
+			  NTTIME last_password_change,
+			  NTTIME acct_expiry,
+			  uint32_t acct_flags);
 void init_samr_user_info7(struct samr_UserInfo7 *r,
 			  const char *account_name);
 void init_samr_user_info9(struct samr_UserInfo9 *r,
@@ -7404,7 +7423,8 @@ void init_samr_user_info16(struct samr_UserInfo16 *r,
 			   uint32_t acct_flags);
 void init_samr_user_info18(struct samr_UserInfo18 *r,
 			   const uint8 lm_pwd[16],
-			   const uint8 nt_pwd[16]);
+			   const uint8 nt_pwd[16],
+			   uint8_t password_expired);
 void init_samr_user_info20(struct samr_UserInfo20 *r,
 			   struct lsa_BinaryString *parameters);
 void init_samr_user_info21(struct samr_UserInfo21 *r,
diff --git a/source/lib/netapi/user.c b/source/lib/netapi/user.c
index 2abc25d..d7fe392 100644
--- a/source/lib/netapi/user.c
+++ b/source/lib/netapi/user.c
@@ -46,7 +46,7 @@ static void convert_USER_INFO_X_to_samr_user_info21(struct USER_INFO_X *infoX,
 		fields_present |= SAMR_FIELD_ACCOUNT_NAME;
 	}
 	if (infoX->usriX_password) {
-		fields_present |= SAMR_FIELD_PASSWORD;
+		fields_present |= SAMR_FIELD_NT_PASSWORD_PRESENT;
 	}
 	if (infoX->usriX_flags) {
 		fields_present |= SAMR_FIELD_ACCT_FLAGS;
diff --git a/source/librpc/gen_ndr/ndr_samr.c b/source/librpc/gen_ndr/ndr_samr.c
index bd87a50..8e45ebd 100644
--- a/source/librpc/gen_ndr/ndr_samr.c
+++ b/source/librpc/gen_ndr/ndr_samr.c
@@ -774,8 +774,7 @@ static enum ndr_err_code ndr_push_samr_DomInfo13(struct ndr_push *ndr, int ndr_f
 		NDR_CHECK(ndr_push_align(ndr, 8));
 		NDR_CHECK(ndr_push_hyper(ndr, NDR_SCALARS, r->sequence_num));
 		NDR_CHECK(ndr_push_NTTIME(ndr, NDR_SCALARS, r->domain_create_time));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->unknown1));
-		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->unknown2));
+		NDR_CHECK(ndr_push_hyper(ndr, NDR_SCALARS, r->modified_count_at_last_promotion));
 	}
 	if (ndr_flags & NDR_BUFFERS) {
 	}
@@ -788,8 +787,7 @@ static enum ndr_err_code ndr_pull_samr_DomInfo13(struct ndr_pull *ndr, int ndr_f
 		NDR_CHECK(ndr_pull_align(ndr, 8));
 		NDR_CHECK(ndr_pull_hyper(ndr, NDR_SCALARS, &r->sequence_num));
 		NDR_CHECK(ndr_pull_NTTIME(ndr, NDR_SCALARS, &r->domain_create_time));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->unknown1));
-		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->unknown2));
+		NDR_CHECK(ndr_pull_hyper(ndr, NDR_SCALARS, &r->modified_count_at_last_promotion));
 	}
 	if (ndr_flags & NDR_BUFFERS) {
 	}
@@ -802,8 +800,7 @@ _PUBLIC_ void ndr_print_samr_DomInfo13(struct ndr_print *ndr, const char *name,
 	ndr->depth++;
 	ndr_print_hyper(ndr, "sequence_num", r->sequence_num);
 	ndr_print_NTTIME(ndr, "domain_create_time", r->domain_create_time);
-	ndr_print_uint32(ndr, "unknown1", r->unknown1);
-	ndr_print_uint32(ndr, "unknown2", r->unknown2);
+	ndr_print_hyper(ndr, "modified_count_at_last_promotion", r->modified_count_at_last_promotion);
 	ndr->depth--;
 }
 
@@ -2574,10 +2571,11 @@ static enum ndr_err_code ndr_push_samr_UserInfo18(struct ndr_push *ndr, int ndr_
 {
 	if (ndr_flags & NDR_SCALARS) {
 		NDR_CHECK(ndr_push_align(ndr, 1));
-		NDR_CHECK(ndr_push_samr_Password(ndr, NDR_SCALARS, &r->lm_pwd));
 		NDR_CHECK(ndr_push_samr_Password(ndr, NDR_SCALARS, &r->nt_pwd));
-		NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r->lm_pwd_active));
+		NDR_CHECK(ndr_push_samr_Password(ndr, NDR_SCALARS, &r->lm_pwd));
 		NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r->nt_pwd_active));
+		NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r->lm_pwd_active));
+		NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r->password_expired));
 	}
 	if (ndr_flags & NDR_BUFFERS) {
 	}
@@ -2588,10 +2586,11 @@ static enum ndr_err_code ndr_pull_samr_UserInfo18(struct ndr_pull *ndr, int ndr_
 {
 	if (ndr_flags & NDR_SCALARS) {
 		NDR_CHECK(ndr_pull_align(ndr, 1));
-		NDR_CHECK(ndr_pull_samr_Password(ndr, NDR_SCALARS, &r->lm_pwd));
 		NDR_CHECK(ndr_pull_samr_Password(ndr, NDR_SCALARS, &r->nt_pwd));
-		NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &r->lm_pwd_active));
+		NDR_CHECK(ndr_pull_samr_Password(ndr, NDR_SCALARS, &r->lm_pwd));
 		NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &r->nt_pwd_active));
+		NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &r->lm_pwd_active));
+		NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &r->password_expired));
 	}
 	if (ndr_flags & NDR_BUFFERS) {
 	}
@@ -2602,10 +2601,11 @@ _PUBLIC_ void ndr_print_samr_UserInfo18(struct ndr_print *ndr, const char *name,
 {
 	ndr_print_struct(ndr, name, "samr_UserInfo18");
 	ndr->depth++;
-	ndr_print_samr_Password(ndr, "lm_pwd", &r->lm_pwd);
 	ndr_print_samr_Password(ndr, "nt_pwd", &r->nt_pwd);
-	ndr_print_uint8(ndr, "lm_pwd_active", r->lm_pwd_active);
+	ndr_print_samr_Password(ndr, "lm_pwd", &r->lm_pwd);
 	ndr_print_uint8(ndr, "nt_pwd_active", r->nt_pwd_active);
+	ndr_print_uint8(ndr, "lm_pwd_active", r->lm_pwd_active);
+	ndr_print_uint8(ndr, "password_expired", r->password_expired);
 	ndr->depth--;
 }
 
@@ -2683,8 +2683,8 @@ _PUBLIC_ void ndr_print_samr_FieldsPresent(struct ndr_print *ndr, const char *na
 	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SAMR_FIELD_PARAMETERS", SAMR_FIELD_PARAMETERS, r);
 	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SAMR_FIELD_COUNTRY_CODE", SAMR_FIELD_COUNTRY_CODE, r);
 	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SAMR_FIELD_CODE_PAGE", SAMR_FIELD_CODE_PAGE, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SAMR_FIELD_PASSWORD", SAMR_FIELD_PASSWORD, r);
-	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SAMR_FIELD_PASSWORD2", SAMR_FIELD_PASSWORD2, r);
+	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SAMR_FIELD_NT_PASSWORD_PRESENT", SAMR_FIELD_NT_PASSWORD_PRESENT, r);
+	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SAMR_FIELD_LM_PASSWORD_PRESENT", SAMR_FIELD_LM_PASSWORD_PRESENT, r);
 	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SAMR_FIELD_PRIVATE_DATA", SAMR_FIELD_PRIVATE_DATA, r);
 	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SAMR_FIELD_EXPIRED_FLAG", SAMR_FIELD_EXPIRED_FLAG, r);
 	ndr_print_bitmap_flag(ndr, sizeof(uint32_t), "SAMR_FIELD_SEC_DESC", SAMR_FIELD_SEC_DESC, r);
@@ -2712,8 +2712,8 @@ static enum ndr_err_code ndr_push_samr_UserInfo21(struct ndr_push *ndr, int ndr_
 		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->workstations));
 		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->comment));
 		NDR_CHECK(ndr_push_lsa_BinaryString(ndr, NDR_SCALARS, &r->parameters));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->unknown1));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->unknown2));
+		NDR_CHECK(ndr_push_lsa_BinaryString(ndr, NDR_SCALARS, &r->lm_owf_password));
+		NDR_CHECK(ndr_push_lsa_BinaryString(ndr, NDR_SCALARS, &r->nt_owf_password));
 		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_SCALARS, &r->unknown3));
 		NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->buf_count));
 		NDR_CHECK(ndr_push_unique_ptr(ndr, r->buffer));
@@ -2726,8 +2726,8 @@ static enum ndr_err_code ndr_push_samr_UserInfo21(struct ndr_push *ndr, int ndr_
 		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->logon_count));
 		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->country_code));
 		NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r->code_page));
-		NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r->nt_password_set));
 		NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r->lm_password_set));
+		NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r->nt_password_set));
 		NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r->password_expired));
 		NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r->unknown4));
 	}
@@ -2742,8 +2742,8 @@ static enum ndr_err_code ndr_push_samr_UserInfo21(struct ndr_push *ndr, int ndr_
 		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->workstations));
 		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->comment));
 		NDR_CHECK(ndr_push_lsa_BinaryString(ndr, NDR_BUFFERS, &r->parameters));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->unknown1));
-		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->unknown2));
+		NDR_CHECK(ndr_push_lsa_BinaryString(ndr, NDR_BUFFERS, &r->lm_owf_password));
+		NDR_CHECK(ndr_push_lsa_BinaryString(ndr, NDR_BUFFERS, &r->nt_owf_password));
 		NDR_CHECK(ndr_push_lsa_String(ndr, NDR_BUFFERS, &r->unknown3));
 		if (r->buffer) {
 			NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->buf_count));
@@ -2776,8 +2776,8 @@ static enum ndr_err_code ndr_pull_samr_UserInfo21(struct ndr_pull *ndr, int ndr_
 		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->workstations));
 		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->comment));
 		NDR_CHECK(ndr_pull_lsa_BinaryString(ndr, NDR_SCALARS, &r->parameters));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->unknown1));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->unknown2));
+		NDR_CHECK(ndr_pull_lsa_BinaryString(ndr, NDR_SCALARS, &r->lm_owf_password));
+		NDR_CHECK(ndr_pull_lsa_BinaryString(ndr, NDR_SCALARS, &r->nt_owf_password));
 		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_SCALARS, &r->unknown3));
 		NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->buf_count));
 		NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_buffer));
@@ -2795,8 +2795,8 @@ static enum ndr_err_code ndr_pull_samr_UserInfo21(struct ndr_pull *ndr, int ndr_
 		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->logon_count));
 		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->country_code));
 		NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->code_page));
-		NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &r->nt_password_set));
 		NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &r->lm_password_set));
+		NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &r->nt_password_set));
 		NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &r->password_expired));
 		NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &r->unknown4));
 	}
@@ -2811,8 +2811,8 @@ static enum ndr_err_code ndr_pull_samr_UserInfo21(struct ndr_pull *ndr, int ndr_
 		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->workstations));
 		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->comment));
 		NDR_CHECK(ndr_pull_lsa_BinaryString(ndr, NDR_BUFFERS, &r->parameters));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->unknown1));
-		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->unknown2));
+		NDR_CHECK(ndr_pull_lsa_BinaryString(ndr, NDR_BUFFERS, &r->lm_owf_password));
+		NDR_CHECK(ndr_pull_lsa_BinaryString(ndr, NDR_BUFFERS, &r->nt_owf_password));
 		NDR_CHECK(ndr_pull_lsa_String(ndr, NDR_BUFFERS, &r->unknown3));
 		if (r->buffer) {
 			_mem_save_buffer_0 = NDR_PULL_GET_MEM_CTX(ndr);
@@ -2850,8 +2850,8 @@ _PUBLIC_ void ndr_print_samr_UserInfo21(struct ndr_print *ndr, const char *name,
 	ndr_print_lsa_String(ndr, "workstations", &r->workstations);
 	ndr_print_lsa_String(ndr, "comment", &r->comment);
 	ndr_print_lsa_BinaryString(ndr, "parameters", &r->parameters);
-	ndr_print_lsa_String(ndr, "unknown1", &r->unknown1);
-	ndr_print_lsa_String(ndr, "unknown2", &r->unknown2);
+	ndr_print_lsa_BinaryString(ndr, "lm_owf_password", &r->lm_owf_password);
+	ndr_print_lsa_BinaryString(ndr, "nt_owf_password", &r->nt_owf_password);
 	ndr_print_lsa_String(ndr, "unknown3", &r->unknown3);
 	ndr_print_uint32(ndr, "buf_count", r->buf_count);
 	ndr_print_ptr(ndr, "buffer", r->buffer);
@@ -2869,8 +2869,8 @@ _PUBLIC_ void ndr_print_samr_UserInfo21(struct ndr_print *ndr, const char *name,
 	ndr_print_uint16(ndr, "logon_count", r->logon_count);
 	ndr_print_uint16(ndr, "country_code", r->country_code);
 	ndr_print_uint16(ndr, "code_page", r->code_page);
-	ndr_print_uint8(ndr, "nt_password_set", r->nt_password_set);
 	ndr_print_uint8(ndr, "lm_password_set", r->lm_password_set);
+	ndr_print_uint8(ndr, "nt_password_set", r->nt_password_set);
 	ndr_print_uint8(ndr, "password_expired", r->password_expired);
 	ndr_print_uint8(ndr, "unknown4", r->unknown4);
 	ndr->depth--;
diff --git a/source/librpc/gen_ndr/samr.h b/source/librpc/gen_ndr/samr.h
index f3925d9..e7baf6a 100644
--- a/source/librpc/gen_ndr/samr.h
+++ b/source/librpc/gen_ndr/samr.h
@@ -209,8 +209,7 @@ struct samr_DomInfo12 {
 struct samr_DomInfo13 {
 	uint64_t sequence_num;
 	NTTIME domain_create_time;
-	uint32_t unknown1;
-	uint32_t unknown2;
+	uint64_t modified_count_at_last_promotion;
 };
 
 union samr_DomainInfo {
@@ -434,10 +433,11 @@ struct samr_Password {
 }/* [public,flag(LIBNDR_PRINT_ARRAY_HEX)] */;
 
 struct samr_UserInfo18 {
-	struct samr_Password lm_pwd;
 	struct samr_Password nt_pwd;
-	uint8_t lm_pwd_active;
+	struct samr_Password lm_pwd;
 	uint8_t nt_pwd_active;
+	uint8_t lm_pwd_active;
+	uint8_t password_expired;
 };
 
 struct samr_UserInfo20 {
@@ -469,8 +469,8 @@ struct samr_UserInfo20 {
 #define SAMR_FIELD_PARAMETERS ( 0x00200000 )
 #define SAMR_FIELD_COUNTRY_CODE ( 0x00400000 )
 #define SAMR_FIELD_CODE_PAGE ( 0x00800000 )
-#define SAMR_FIELD_PASSWORD ( 0x01000000 )
-#define SAMR_FIELD_PASSWORD2 ( 0x02000000 )
+#define SAMR_FIELD_NT_PASSWORD_PRESENT ( 0x01000000 )
+#define SAMR_FIELD_LM_PASSWORD_PRESENT ( 0x02000000 )
 #define SAMR_FIELD_PRIVATE_DATA ( 0x04000000 )
 #define SAMR_FIELD_EXPIRED_FLAG ( 0x08000000 )
 #define SAMR_FIELD_SEC_DESC ( 0x10000000 )
@@ -493,8 +493,8 @@ struct samr_UserInfo21 {
 	struct lsa_String workstations;
 	struct lsa_String comment;
 	struct lsa_BinaryString parameters;
-	struct lsa_String unknown1;
-	struct lsa_String unknown2;
+	struct lsa_BinaryString lm_owf_password;
+	struct lsa_BinaryString nt_owf_password;
 	struct lsa_String unknown3;
 	uint32_t buf_count;
 	uint8_t *buffer;/* [unique,size_is(buf_count)] */
@@ -507,8 +507,8 @@ struct samr_UserInfo21 {
 	uint16_t logon_count;
 	uint16_t country_code;
 	uint16_t code_page;
-	uint8_t nt_password_set;
 	uint8_t lm_password_set;
+	uint8_t nt_password_set;
 	uint8_t password_expired;
 	uint8_t unknown4;
 };
diff --git a/source/librpc/idl/samr.idl b/source/librpc/idl/samr.idl
index 4c70898..824a793 100644
--- a/source/librpc/idl/samr.idl
+++ b/source/librpc/idl/samr.idl
@@ -389,8 +389,7 @@ import "misc.idl", "lsa.idl", "security.idl";
 	typedef struct {
 		hyper sequence_num;
 		NTTIME domain_create_time;
-		uint32 unknown1;
-		uint32 unknown2;
+		hyper modified_count_at_last_promotion;
 	} samr_DomInfo13;
 
 	typedef [switch_type(uint16)] union {
@@ -863,10 +862,11 @@ import "misc.idl", "lsa.idl", "security.idl";
 	} samr_Password;
 
 	typedef struct {
-		samr_Password lm_pwd;
 		samr_Password nt_pwd;
-		boolean8 lm_pwd_active;
+		samr_Password lm_pwd;
 		boolean8 nt_pwd_active;
+		boolean8 lm_pwd_active;
+		uint8 password_expired;
 	} samr_UserInfo18;
 
 	typedef struct {
@@ -899,8 +899,8 @@ import "misc.idl", "lsa.idl", "security.idl";
 		SAMR_FIELD_PARAMETERS       = 0x00200000,
 		SAMR_FIELD_COUNTRY_CODE     = 0x00400000,
 		SAMR_FIELD_CODE_PAGE        = 0x00800000,
-		SAMR_FIELD_PASSWORD         = 0x01000000, /* either of these */
-		SAMR_FIELD_PASSWORD2        = 0x02000000, /* two bits seems to work */
+		SAMR_FIELD_NT_PASSWORD_PRESENT = 0x01000000, /* either of these */
+		SAMR_FIELD_LM_PASSWORD_PRESENT = 0x02000000, /* two bits seems to work */
 		SAMR_FIELD_PRIVATE_DATA     = 0x04000000,
 		SAMR_FIELD_EXPIRED_FLAG     = 0x08000000,
 		SAMR_FIELD_SEC_DESC         = 0x10000000,
@@ -928,8 +928,8 @@ import "misc.idl", "lsa.idl", "security.idl";
 		lsa_String workstations;
 		lsa_String comment;
 		lsa_BinaryString parameters;
-		lsa_String unknown1;
-		lsa_String unknown2;
+		lsa_BinaryString lm_owf_password;
+		lsa_BinaryString nt_owf_password;
 		lsa_String unknown3;
 		uint32 buf_count;
 		[size_is(buf_count)] uint8 *buffer;
diff --git a/source/rpc_client/init_samr.c b/source/rpc_client/init_samr.c
index 0e6c277..6c5dcfa 100644
--- a/source/rpc_client/init_samr.c
+++ b/source/rpc_client/init_samr.c
@@ -252,6 +252,53 @@ void init_samr_alias_info3(struct lsa_String *r,
 }
 
 /*******************************************************************
+ inits a samr_UserInfo5 structure.
+********************************************************************/
+
+void init_samr_user_info5(struct samr_UserInfo5 *r,
+			  const char *account_name,
+			  const char *full_name,
+			  uint32_t rid,
+			  uint32_t primary_gid,
+			  const char *home_directory,
+			  const char *home_drive,
+			  const char *logon_script,
+			  const char *profile_path,
+			  const char *description,
+			  const char *workstations,
+			  NTTIME last_logon,
+			  NTTIME last_logoff,
+			  struct samr_LogonHours logon_hours,
+			  uint16_t bad_password_count,
+			  uint16_t logon_count,
+			  NTTIME last_password_change,
+			  NTTIME acct_expiry,
+			  uint32_t acct_flags)
+{
+	DEBUG(5, ("init_samr_user_info5\n"));
+
+	init_lsa_String(&r->account_name, account_name);
+	init_lsa_String(&r->full_name, full_name);
+	r->rid = rid;
+	r->primary_gid = primary_gid;
+	init_lsa_String(&r->home_directory, home_directory);
+	init_lsa_String(&r->home_drive, home_drive);
+	init_lsa_String(&r->logon_script, logon_script);
+	init_lsa_String(&r->profile_path, profile_path);
+	init_lsa_String(&r->description, description);
+	init_lsa_String(&r->workstations, workstations);
+	r->last_logon = last_logon;
+	r->last_logoff = last_logoff;
+	r->logon_hours = logon_hours;
+	r->bad_password_count = bad_password_count;
+	r->logon_count = logon_count;
+	r->last_password_change = last_password_change;
+	r->acct_expiry = acct_expiry;
+	r->acct_flags = acct_flags;
+}
+
+
+/*******************************************************************
  inits a samr_UserInfo7 structure.
 ********************************************************************/
 
@@ -293,7 +340,8 @@ void init_samr_user_info16(struct samr_UserInfo16 *r,
 
 void init_samr_user_info18(struct samr_UserInfo18 *r,
 			   const uint8 lm_pwd[16],
-			   const uint8 nt_pwd[16])
+			   const uint8 nt_pwd[16],
+			   uint8_t password_expired)
 {
 	DEBUG(5, ("init_samr_user_info18\n"));
 
@@ -301,6 +349,7 @@ void init_samr_user_info18(struct samr_UserInfo18 *r,
 		memcpy(r->lm_pwd.hash, lm_pwd, sizeof(r->lm_pwd.hash)) ? true : false;
 	r->nt_pwd_active =
 		memcpy(r->nt_pwd.hash, nt_pwd, sizeof(r->nt_pwd.hash)) ? true : false;
+	r->password_expired = password_expired;
 }
 
 /*******************************************************************
@@ -343,8 +392,8 @@ void init_samr_user_info21(struct samr_UserInfo21 *r,
 			   uint16_t logon_count,
 			   uint16_t country_code,
 			   uint16_t code_page,
-			   uint8_t nt_password_set,
 			   uint8_t lm_password_set,
+			   uint8_t nt_password_set,
 			   uint8_t password_expired)
 {
 	r->last_logon = last_logon;
@@ -372,8 +421,8 @@ void init_samr_user_info21(struct samr_UserInfo21 *r,
 	r->logon_count = logon_count;
 	r->country_code = country_code;
 	r->code_page = code_page;
-	r->nt_password_set = nt_password_set;
 	r->lm_password_set = lm_password_set;
+	r->nt_password_set = nt_password_set;
 	r->password_expired = password_expired;
 }
 
@@ -407,8 +456,8 @@ void init_samr_user_info23(struct samr_UserInfo23 *r,
 			   uint16_t logon_count,
 			   uint16_t country_code,
 			   uint16_t code_page,
-			   uint8_t nt_password_set,
 			   uint8_t lm_password_set,
+			   uint8_t nt_password_set,
 			   uint8_t password_expired,
 			   struct samr_CryptPassword *pwd_buf)
 {
@@ -439,8 +488,8 @@ void init_samr_user_info23(struct samr_UserInfo23 *r,
 			      logon_count,
 			      country_code,
 			      code_page,
-			      nt_password_set,
 			      lm_password_set,
+			      nt_password_set,
 			      password_expired);
 
 	r->password = *pwd_buf;
@@ -490,8 +539,8 @@ void init_samr_user_info25(struct samr_UserInfo25 *r,
 			   uint16_t logon_count,
 			   uint16_t country_code,
 			   uint16_t code_page,
-			   uint8_t nt_password_set,
 			   uint8_t lm_password_set,
+			   uint8_t nt_password_set,
 			   uint8_t password_expired,
 			   struct samr_CryptPasswordEx *pwd_buf)
 {
@@ -524,8 +573,8 @@ void init_samr_user_info25(struct samr_UserInfo25 *r,
 			      logon_count,
 			      country_code,
 			      code_page,
-			      nt_password_set,
 			      lm_password_set,
+			      nt_password_set,
 			      password_expired);
 
 	r->password = *pwd_buf;
diff --git a/source/rpc_server/srv_samr_nt.c b/source/rpc_server/srv_samr_nt.c
index f3d0e1b..7f78e13 100644
--- a/source/rpc_server/srv_samr_nt.c
+++ b/source/rpc_server/srv_samr_nt.c
@@ -1009,6 +1009,7 @@ NTSTATUS _samr_EnumDomainUsers(pipes_struct *p,
 	if (!samr_array) {
 		return NT_STATUS_NO_MEMORY;
 	}
+	*r->out.sam = samr_array;
 
 	become_root();
 
@@ -1068,7 +1069,6 @@ NTSTATUS _samr_EnumDomainUsers(pipes_struct *p,
 	samr_array->entries = samr_entries;
 
 	*r->out.resume_handle = *r->in.resume_handle + num_account;
-	*r->out.sam = samr_array;
 	*r->out.num_entries = num_account;
 
 	DEBUG(5,("_samr_EnumDomainUsers: %d\n", __LINE__));
@@ -1481,6 +1481,11 @@ NTSTATUS _samr_QueryDisplayInfo(pipes_struct *p,
 	if (!find_policy_by_hnd(p, r->in.domain_handle, (void **)(void *)&info))
 		return NT_STATUS_INVALID_HANDLE;
 
+	if (info->builtin_domain) {
+		DEBUG(5,("_samr_QueryDisplayInfo: Nothing in BUILTIN\n"));
+		return NT_STATUS_OK;
+	}
+


-- 
Samba Shared Repository


More information about the samba-cvs mailing list