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 <v...@samba.org> Date: Tue Feb 15 19:15:17 2011 +0100 s3: Support "codePage" in pdb_ads Autobuild-User: Volker Lendecke <vlen...@samba.org> Autobuild-Date: Tue Feb 15 22:00:27 CET 2011 on sn-devel-104 commit 9ef0e1ef221d9c9552a45a1e302d49f417cef1b5 Author: Volker Lendecke <v...@samba.org> Date: Tue Feb 15 19:13:52 2011 +0100 s3: Pass "code_page" through samr commit ead7ffa1a7f3ab04c5430f9a0b4223172772d46d Author: Volker Lendecke <v...@samba.org> Date: Tue Feb 15 19:07:42 2011 +0100 s3: Add "code_page" to struct samu commit 8bbf0ad2a04ceabdbdf21bb157b3f0f3423cd43c Author: Volker Lendecke <v...@samba.org> Date: Tue Feb 15 19:01:04 2011 +0100 s3: Support "country_code" in pdb_ads commit 63c556e306ca01a8f65d884275a530a8eced6b2c Author: Volker Lendecke <v...@samba.org> Date: Tue Feb 15 19:09:51 2011 +0100 s3: Pass "country_code" through samr commit d9d0fef862b198f43ead20193fae8283a192af73 Author: Volker Lendecke <v...@samba.org> Date: Tue Feb 15 19:08:47 2011 +0100 s3: Add "country_code" to struct samu commit fbcdef82687ddcb7a1dc3d229d048ca005dc7c1b Author: Volker Lendecke <v...@samba.org> Date: Tue Feb 15 19:02:29 2011 +0100 s4: Fix a typo commit 7a2cbdafa87cee0af41b07b6eb4a1ab2ff155b8b Author: Volker Lendecke <v...@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