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

Reply via email to