[SCM] Samba Shared Repository - branch master updated

Volker Lendecke vlendec at samba.org
Tue Feb 15 14:01:01 MST 2011


The branch, master has been updated
       via  ab85362 s3: Support "codePage" in pdb_ads
       via  9ef0e1e s3: Pass "code_page" through samr
       via  ead7ffa s3: Add "code_page" to struct samu
       via  8bbf0ad s3: Support "country_code" in pdb_ads
       via  63c556e s3: Pass "country_code" through samr
       via  d9d0fef s3: Add "country_code" to struct samu
       via  fbcdef8 s4: Fix a typo
       via  7a2cbda s3: Add userWorkstations and userParameters to pdb_ads
      from  4b354e6 s3-amend: Don't overwrite existing values

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit ab85362cffbf844f4783b4e82fe7db8f9d5067bc
Author: Volker Lendecke <vl at samba.org>
Date:   Tue Feb 15 19:15:17 2011 +0100

    s3: Support "codePage" in pdb_ads
    
    Autobuild-User: Volker Lendecke <vlendec at samba.org>
    Autobuild-Date: Tue Feb 15 22:00:27 CET 2011 on sn-devel-104

commit 9ef0e1ef221d9c9552a45a1e302d49f417cef1b5
Author: Volker Lendecke <vl at samba.org>
Date:   Tue Feb 15 19:13:52 2011 +0100

    s3: Pass "code_page" through samr

commit ead7ffa1a7f3ab04c5430f9a0b4223172772d46d
Author: Volker Lendecke <vl at samba.org>
Date:   Tue Feb 15 19:07:42 2011 +0100

    s3: Add "code_page" to struct samu

commit 8bbf0ad2a04ceabdbdf21bb157b3f0f3423cd43c
Author: Volker Lendecke <vl at samba.org>
Date:   Tue Feb 15 19:01:04 2011 +0100

    s3: Support "country_code" in pdb_ads

commit 63c556e306ca01a8f65d884275a530a8eced6b2c
Author: Volker Lendecke <vl at samba.org>
Date:   Tue Feb 15 19:09:51 2011 +0100

    s3: Pass "country_code" through samr

commit d9d0fef862b198f43ead20193fae8283a192af73
Author: Volker Lendecke <vl at samba.org>
Date:   Tue Feb 15 19:08:47 2011 +0100

    s3: Add "country_code" to struct samu

commit fbcdef82687ddcb7a1dc3d229d048ca005dc7c1b
Author: Volker Lendecke <vl at samba.org>
Date:   Tue Feb 15 19:02:29 2011 +0100

    s4: Fix a typo

commit 7a2cbdafa87cee0af41b07b6eb4a1ab2ff155b8b
Author: Volker Lendecke <vl at samba.org>
Date:   Tue Feb 15 19:09:10 2011 +0100

    s3: Add userWorkstations and userParameters to pdb_ads

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

Summary of changes:
 source3/include/passdb.h                |    5 ++++
 source3/include/proto.h                 |    6 +++++
 source3/passdb/pdb_ads.c                |   38 +++++++++++++++++++++++++++++++
 source3/passdb/pdb_get_set.c            |   24 +++++++++++++++++++
 source3/rpc_server/samr/srv_samr_nt.c   |    8 +++---
 source3/rpc_server/samr/srv_samr_util.c |   18 ++++++++++++++
 source4/torture/rpc/samr.c              |    2 +-
 7 files changed, 96 insertions(+), 5 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source3/include/passdb.h b/source3/include/passdb.h
index ac6dd21..dc50533 100644
--- a/source3/include/passdb.h
+++ b/source3/include/passdb.h
@@ -70,6 +70,8 @@ enum pdb_elements {
 	PDB_FIELDS_PRESENT,
 	PDB_BAD_PASSWORD_COUNT,
 	PDB_LOGON_COUNT,
+	PDB_COUNTRY_CODE,
+	PDB_CODE_PAGE,
 	PDB_UNKNOWN6,
 	PDB_LMPASSWD,
 	PDB_NTPASSWD,
@@ -166,6 +168,9 @@ struct samu {
 	uint16_t bad_password_count;
 	uint16_t logon_count;
 
+	uint16_t country_code;
+	uint16_t code_page;
+
 	uint32_t unknown_6; /* 0x0000 04ec */
 
 	/* a tag for who added the private methods */
diff --git a/source3/include/proto.h b/source3/include/proto.h
index f584216..83ac33a 100644
--- a/source3/include/proto.h
+++ b/source3/include/proto.h
@@ -3735,6 +3735,8 @@ const char *pdb_get_comment(const struct samu *sampass);
 const char *pdb_get_munged_dial(const struct samu *sampass);
 uint16_t pdb_get_bad_password_count(const struct samu *sampass);
 uint16_t pdb_get_logon_count(const struct samu *sampass);
+uint16_t pdb_get_country_code(const struct samu *sampass);
+uint16_t pdb_get_code_page(const struct samu *sampass);
 uint32_t pdb_get_unknown_6(const struct samu *sampass);
 void *pdb_get_backend_private_data(const struct samu *sampass, const struct pdb_methods *my_methods);
 bool pdb_set_acct_ctrl(struct samu *sampass, uint32_t acct_ctrl, enum pdb_value_state flag);
@@ -3769,6 +3771,10 @@ bool pdb_set_pw_history(struct samu *sampass, const uint8_t *pwd, uint32_t histo
 bool pdb_set_plaintext_pw_only(struct samu *sampass, const char *password, enum pdb_value_state flag);
 bool pdb_set_bad_password_count(struct samu *sampass, uint16_t bad_password_count, enum pdb_value_state flag);
 bool pdb_set_logon_count(struct samu *sampass, uint16_t logon_count, enum pdb_value_state flag);
+bool pdb_set_country_code(struct samu *sampass, uint16_t country_code,
+			  enum pdb_value_state flag);
+bool pdb_set_code_page(struct samu *sampass, uint16_t code_page,
+		       enum pdb_value_state flag);
 bool pdb_set_unknown_6(struct samu *sampass, uint32_t unkn, enum pdb_value_state flag);
 bool pdb_set_hours(struct samu *sampass, const uint8_t *hours, enum pdb_value_state flag);
 bool pdb_set_backend_private_data(struct samu *sampass, void *private_data, 
diff --git a/source3/passdb/pdb_ads.c b/source3/passdb/pdb_ads.c
index 58e30a1..1dcf5ad 100644
--- a/source3/passdb/pdb_ads.c
+++ b/source3/passdb/pdb_ads.c
@@ -188,6 +188,7 @@ static NTSTATUS pdb_ads_init_sam_from_priv(struct pdb_methods *m,
 	time_t tmp_time;
 	struct dom_sid sid;
 	uint64_t n;
+	uint32_t i;
 	DATA_BLOB blob;
 
 	str = tldap_talloc_single_attribute(entry, "samAccountName", sam);
@@ -256,6 +257,18 @@ static NTSTATUS pdb_ads_init_sam_from_priv(struct pdb_methods *m,
 		pdb_set_acct_desc(sam, str, PDB_SET);
 	}
 
+	str = tldap_talloc_single_attribute(entry, "userWorkstations",
+					    talloc_tos());
+	if (str != NULL) {
+		pdb_set_workstations(sam, str, PDB_SET);
+	}
+
+	str = tldap_talloc_single_attribute(entry, "userParameters",
+					    talloc_tos());
+	if (str != NULL) {
+		pdb_set_munged_dial(sam, str, PDB_SET);
+	}
+
 	if (!tldap_pull_binsid(entry, "objectSid", &sid)) {
 		DEBUG(10, ("Could not pull SID\n"));
 		goto fail;
@@ -291,6 +304,15 @@ static NTSTATUS pdb_ads_init_sam_from_priv(struct pdb_methods *m,
 		pdb_set_group_sid(sam, &sid, PDB_SET);
 
 	}
+
+	if (tldap_pull_uint32(entry, "countryCode", &i)) {
+		pdb_set_country_code(sam, i, PDB_SET);
+	}
+
+	if (tldap_pull_uint32(entry, "codePage", &i)) {
+		pdb_set_code_page(sam, i, PDB_SET);
+	}
+
 	status = NT_STATUS_OK;
 fail:
 	TALLOC_FREE(frame);
@@ -374,6 +396,22 @@ static bool pdb_ads_init_ads_from_sam(struct pdb_ads_state *state,
 		existing, mem_ctx, pmods, pnum_mods, "description",
 		"%s", pdb_get_acct_desc(sam));
 
+	ret &= tldap_make_mod_fmt(
+		existing, mem_ctx, pmods, pnum_mods, "userWorkstations",
+		"%s", pdb_get_workstations(sam));
+
+	ret &= tldap_make_mod_fmt(
+		existing, mem_ctx, pmods, pnum_mods, "userParameters",
+		"%s", pdb_get_munged_dial(sam));
+
+	ret &= tldap_make_mod_fmt(
+		existing, mem_ctx, pmods, pnum_mods, "countryCode",
+		"%i", (int)pdb_get_country_code(sam));
+
+	ret &= tldap_make_mod_fmt(
+		existing, mem_ctx, pmods, pnum_mods, "codePage",
+		"%i", (int)pdb_get_code_page(sam));
+
 fail:
 	return ret;
 }
diff --git a/source3/passdb/pdb_get_set.c b/source3/passdb/pdb_get_set.c
index 762c23f..07a63e2 100644
--- a/source3/passdb/pdb_get_set.c
+++ b/source3/passdb/pdb_get_set.c
@@ -305,6 +305,16 @@ uint16_t pdb_get_logon_count(const struct samu *sampass)
 	return sampass->logon_count;
 }
 
+uint16_t pdb_get_country_code(const struct samu *sampass)
+{
+	return sampass->country_code;
+}
+
+uint16_t pdb_get_code_page(const struct samu *sampass)
+{
+	return sampass->code_page;
+}
+
 uint32_t pdb_get_unknown_6(const struct samu *sampass)
 {
 	return sampass->unknown_6;
@@ -888,6 +898,20 @@ bool pdb_set_logon_count(struct samu *sampass, uint16_t logon_count, enum pdb_va
 	return pdb_set_init_flags(sampass, PDB_LOGON_COUNT, flag);
 }
 
+bool pdb_set_country_code(struct samu *sampass, uint16_t country_code,
+			  enum pdb_value_state flag)
+{
+	sampass->country_code = country_code;
+	return pdb_set_init_flags(sampass, PDB_COUNTRY_CODE, flag);
+}
+
+bool pdb_set_code_page(struct samu *sampass, uint16_t code_page,
+		       enum pdb_value_state flag)
+{
+	sampass->code_page = code_page;
+	return pdb_set_init_flags(sampass, PDB_CODE_PAGE, flag);
+}
+
 bool pdb_set_unknown_6(struct samu *sampass, uint32_t unkn, enum pdb_value_state flag)
 {
 	sampass->unknown_6 = unkn;
diff --git a/source3/rpc_server/samr/srv_samr_nt.c b/source3/rpc_server/samr/srv_samr_nt.c
index 7a69894..7a07643 100644
--- a/source3/rpc_server/samr/srv_samr_nt.c
+++ b/source3/rpc_server/samr/srv_samr_nt.c
@@ -2488,8 +2488,8 @@ static NTSTATUS get_user_info_2(TALLOC_CTX *mem_ctx,
 {
 	r->comment.string		= talloc_strdup(mem_ctx, pdb_get_comment(pw));
 	r->reserved.string		= NULL;
-	r->country_code			= 0;
-	r->code_page			= 0;
+	r->country_code			= pdb_get_country_code(pw);
+	r->code_page			= pdb_get_code_page(pw);
 
 	return NT_STATUS_OK;
 }
@@ -2974,8 +2974,8 @@ static NTSTATUS get_user_info_21(TALLOC_CTX *mem_ctx,
 	r->fields_present		= pdb_build_fields_present(pw);
 	r->password_expired		= (pdb_get_pass_must_change_time(pw) == 0) ?
 						PASS_MUST_CHANGE_AT_NEXT_LOGON : 0;
-	r->country_code			= 0;
-	r->code_page			= 0;
+	r->country_code			= pdb_get_country_code(pw);
+	r->code_page			= pdb_get_code_page(pw);
 	r->lm_password_set		= 0;
 	r->nt_password_set		= 0;
 
diff --git a/source3/rpc_server/samr/srv_samr_util.c b/source3/rpc_server/samr/srv_samr_util.c
index 6fc4ade..0bab127 100644
--- a/source3/rpc_server/samr/srv_samr_util.c
+++ b/source3/rpc_server/samr/srv_samr_util.c
@@ -640,6 +640,24 @@ void copy_id21_to_sam_passwd(const char *log_prefix,
 			}
 		}
 	}
+
+	if (from->fields_present & SAMR_FIELD_COUNTRY_CODE) {
+		DEBUG(10,("%s SAMR_FIELD_COUNTRY_CODE: %08X -> %08X\n", l,
+			pdb_get_country_code(to), from->country_code));
+		if (from->country_code != pdb_get_country_code(to)) {
+			pdb_set_country_code(to,
+				from->country_code, PDB_CHANGED);
+		}
+	}
+
+	if (from->fields_present & SAMR_FIELD_CODE_PAGE) {
+		DEBUG(10,("%s SAMR_FIELD_CODE_PAGE: %08X -> %08X\n", l,
+			pdb_get_code_page(to), from->code_page));
+		if (from->code_page != pdb_get_code_page(to)) {
+			pdb_set_code_page(to,
+				from->code_page, PDB_CHANGED);
+		}
+	}
 }
 
 
diff --git a/source4/torture/rpc/samr.c b/source4/torture/rpc/samr.c
index 0e1500e..f83cc02 100644
--- a/source4/torture/rpc/samr.c
+++ b/source4/torture/rpc/samr.c
@@ -456,7 +456,7 @@ static bool test_SetUserInfo(struct dcerpc_binding_handle *b, struct torture_con
 	TEST_USERINFO_BINARYSTRING(21, parameters, 20, parameters, "",
 			   SAMR_FIELD_PARAMETERS);
 
-	/* Samba 3 cannot store country_code and copy_page atm. - gd */
+	/* Samba 3 cannot store country_code and code_page atm. - gd */
 	if (!torture_setting_bool(tctx, "samba3", false)) {
 		TEST_USERINFO_INT(2, country_code, 2, country_code, __LINE__, 0);
 		TEST_USERINFO_INT(2, country_code, 21, country_code, __LINE__, 0);


-- 
Samba Shared Repository


More information about the samba-cvs mailing list