The branch, master has been updated
       via  313a2bfa527796f6512b2589a8b567c86436cf12 (commit)
       via  f62d9f5b5774c6066229ce029bc7c96f8478a3b1 (commit)
      from  ebf0af0bc7647df3093a2d92767095114512bdd8 (commit)

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


- Log -----------------------------------------------------------------
commit 313a2bfa527796f6512b2589a8b567c86436cf12
Author: Günther Deschner <[email protected]>
Date:   Thu Jun 25 12:12:05 2009 +0200

    s3-netlogon: remove init_netr_SamInfo functions.
    
    Guenther

commit f62d9f5b5774c6066229ce029bc7c96f8478a3b1
Author: Günther Deschner <[email protected]>
Date:   Thu Jun 25 12:00:20 2009 +0200

    s3-netlogon: fix validation level 2 support in netr_SamLogon and friends.
    
    Guenther

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

Summary of changes:
 source3/include/proto.h            |   56 +---------------
 source3/rpc_client/init_netlogon.c |  117 ----------------------------------
 source3/rpc_server/srv_netlog_nt.c |   38 ++++++++---
 source3/rpc_server/srv_pipe_hnd.c  |  121 +++++++++++++++++++++++++-----------
 4 files changed, 116 insertions(+), 216 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source3/include/proto.h b/source3/include/proto.h
index d55d6c1..c40b4b6 100644
--- a/source3/include/proto.h
+++ b/source3/include/proto.h
@@ -5553,58 +5553,10 @@ void init_lsa_AsciiStringLarge(struct 
lsa_AsciiStringLarge *name, const char *s)
 
 /* The following definitions come from rpc_client/init_netlogon.c  */
 
-void init_netr_SamBaseInfo(struct netr_SamBaseInfo *r,
-                          NTTIME last_logon,
-                          NTTIME last_logoff,
-                          NTTIME acct_expiry,
-                          NTTIME last_password_change,
-                          NTTIME allow_password_change,
-                          NTTIME force_password_change,
-                          const char *account_name,
-                          const char *full_name,
-                          const char *logon_script,
-                          const char *profile_path,
-                          const char *home_directory,
-                          const char *home_drive,
-                          uint16_t logon_count,
-                          uint16_t bad_password_count,
-                          uint32_t rid,
-                          uint32_t primary_gid,
-                          struct samr_RidWithAttributeArray groups,
-                          uint32_t user_flags,
-                          struct netr_UserSessionKey key,
-                          const char *logon_server,
-                          const char *domain,
-                          struct dom_sid2 *domain_sid,
-                          struct netr_LMSessionKey LMSessKey,
-                          uint32_t acct_flags);
-void init_netr_SamInfo3(struct netr_SamInfo3 *r,
-                       NTTIME last_logon,
-                       NTTIME last_logoff,
-                       NTTIME acct_expiry,
-                       NTTIME last_password_change,
-                       NTTIME allow_password_change,
-                       NTTIME force_password_change,
-                       const char *account_name,
-                       const char *full_name,
-                       const char *logon_script,
-                       const char *profile_path,
-                       const char *home_directory,
-                       const char *home_drive,
-                       uint16_t logon_count,
-                       uint16_t bad_password_count,
-                       uint32_t rid,
-                       uint32_t primary_gid,
-                       struct samr_RidWithAttributeArray groups,
-                       uint32_t user_flags,
-                       struct netr_UserSessionKey key,
-                       const char *logon_server,
-                       const char *domain,
-                       struct dom_sid2 *domain_sid,
-                       struct netr_LMSessionKey LMSessKey,
-                       uint32_t acct_flags,
-                       uint32_t sidcount,
-                       struct netr_SidAttr *sids);
+NTSTATUS serverinfo_to_SamInfo2(struct auth_serversupplied_info *server_info,
+                               uint8_t *pipe_session_key,
+                               size_t pipe_session_key_len,
+                               struct netr_SamInfo2 *sam2);
 NTSTATUS serverinfo_to_SamInfo3(struct auth_serversupplied_info *server_info,
                                uint8_t *pipe_session_key,
                                size_t pipe_session_key_len,
diff --git a/source3/rpc_client/init_netlogon.c 
b/source3/rpc_client/init_netlogon.c
index 99803aa..88a18de 100644
--- a/source3/rpc_client/init_netlogon.c
+++ b/source3/rpc_client/init_netlogon.c
@@ -24,123 +24,6 @@
  inits a structure.
 ********************************************************************/
 
-void init_netr_SamBaseInfo(struct netr_SamBaseInfo *r,
-                          NTTIME last_logon,
-                          NTTIME last_logoff,
-                          NTTIME acct_expiry,
-                          NTTIME last_password_change,
-                          NTTIME allow_password_change,
-                          NTTIME force_password_change,
-                          const char *account_name,
-                          const char *full_name,
-                          const char *logon_script,
-                          const char *profile_path,
-                          const char *home_directory,
-                          const char *home_drive,
-                          uint16_t logon_count,
-                          uint16_t bad_password_count,
-                          uint32_t rid,
-                          uint32_t primary_gid,
-                          struct samr_RidWithAttributeArray groups,
-                          uint32_t user_flags,
-                          struct netr_UserSessionKey key,
-                          const char *logon_server,
-                          const char *domain,
-                          struct dom_sid2 *domain_sid,
-                          struct netr_LMSessionKey LMSessKey,
-                          uint32_t acct_flags)
-{
-       r->last_logon = last_logon;
-       r->last_logoff = last_logoff;
-       r->acct_expiry = acct_expiry;
-       r->last_password_change = last_password_change;
-       r->allow_password_change = allow_password_change;
-       r->force_password_change = force_password_change;
-       init_lsa_String(&r->account_name, account_name);
-       init_lsa_String(&r->full_name, full_name);
-       init_lsa_String(&r->logon_script, logon_script);
-       init_lsa_String(&r->profile_path, profile_path);
-       init_lsa_String(&r->home_directory, home_directory);
-       init_lsa_String(&r->home_drive, home_drive);
-       r->logon_count = logon_count;
-       r->bad_password_count = bad_password_count;
-       r->rid = rid;
-       r->primary_gid = primary_gid;
-       r->groups = groups;
-       r->user_flags = user_flags;
-       r->key = key;
-       init_lsa_StringLarge(&r->logon_server, logon_server);
-       init_lsa_StringLarge(&r->domain, domain);
-       r->domain_sid = domain_sid;
-       r->LMSessKey = LMSessKey;
-       r->acct_flags = acct_flags;
-}
-
-/*******************************************************************
- inits a structure.
-********************************************************************/
-
-void init_netr_SamInfo3(struct netr_SamInfo3 *r,
-                       NTTIME last_logon,
-                       NTTIME last_logoff,
-                       NTTIME acct_expiry,
-                       NTTIME last_password_change,
-                       NTTIME allow_password_change,
-                       NTTIME force_password_change,
-                       const char *account_name,
-                       const char *full_name,
-                       const char *logon_script,
-                       const char *profile_path,
-                       const char *home_directory,
-                       const char *home_drive,
-                       uint16_t logon_count,
-                       uint16_t bad_password_count,
-                       uint32_t rid,
-                       uint32_t primary_gid,
-                       struct samr_RidWithAttributeArray groups,
-                       uint32_t user_flags,
-                       struct netr_UserSessionKey key,
-                       const char *logon_server,
-                       const char *domain,
-                       struct dom_sid2 *domain_sid,
-                       struct netr_LMSessionKey LMSessKey,
-                       uint32_t acct_flags,
-                       uint32_t sidcount,
-                       struct netr_SidAttr *sids)
-{
-       init_netr_SamBaseInfo(&r->base,
-                             last_logon,
-                             last_logoff,
-                             acct_expiry,
-                             last_password_change,
-                             allow_password_change,
-                             force_password_change,
-                             account_name,
-                             full_name,
-                             logon_script,
-                             profile_path,
-                             home_directory,
-                             home_drive,
-                             logon_count,
-                             bad_password_count,
-                             rid,
-                             primary_gid,
-                             groups,
-                             user_flags,
-                             key,
-                             logon_server,
-                             domain,
-                             domain_sid,
-                             LMSessKey,
-                             acct_flags);
-       r->sidcount = sidcount;
-       r->sids = sids;
-}
-
-/*******************************************************************
- inits a structure.
-********************************************************************/
-
 void init_netr_IdentityInfo(struct netr_IdentityInfo *r,
                            const char *domain_name,
                            uint32_t parameter_control,
diff --git a/source3/rpc_server/srv_netlog_nt.c 
b/source3/rpc_server/srv_netlog_nt.c
index 906de04..c74d2ac 100644
--- a/source3/rpc_server/srv_netlog_nt.c
+++ b/source3/rpc_server/srv_netlog_nt.c
@@ -851,7 +851,6 @@ NTSTATUS _netr_LogonSamLogon(pipes_struct *p,
                             struct netr_LogonSamLogon *r)
 {
        NTSTATUS status = NT_STATUS_OK;
-       struct netr_SamInfo3 *sam3 = NULL;
        union netr_LogonLevel *logon = r->in.logon;
        fstring nt_username, nt_domain, nt_workstation;
        auth_usersupplied_info *user_info = NULL;
@@ -883,20 +882,26 @@ NTSTATUS _netr_LogonSamLogon(pipes_struct *p,
        }
 
        *r->out.authoritative = true; /* authoritative response */
-       if (r->in.validation_level != 2 && r->in.validation_level != 3) {
+
+       switch (r->in.validation_level) {
+       case 2:
+               r->out.validation->sam2 = TALLOC_ZERO_P(p->mem_ctx, struct 
netr_SamInfo2);
+               if (!r->out.validation->sam2) {
+                       return NT_STATUS_NO_MEMORY;
+               }
+               break;
+       case 3:
+               r->out.validation->sam3 = TALLOC_ZERO_P(p->mem_ctx, struct 
netr_SamInfo3);
+               if (!r->out.validation->sam3) {
+                       return NT_STATUS_NO_MEMORY;
+               }
+               break;
+       default:
                DEBUG(0,("%s: bad validation_level value %d.\n",
                        fn, (int)r->in.validation_level));
                return NT_STATUS_INVALID_INFO_CLASS;
        }
 
-       sam3 = TALLOC_ZERO_P(p->mem_ctx, struct netr_SamInfo3);
-       if (!sam3) {
-               return NT_STATUS_NO_MEMORY;
-       }
-
-       /* store the user information, if there is any. */
-       r->out.validation->sam3 = sam3;
-
        if (process_creds) {
 
                /* Get the remote machine name for the creds store. */
@@ -1082,8 +1087,19 @@ NTSTATUS _netr_LogonSamLogon(pipes_struct *p,
                memcpy(pipe_session_key, p->auth.a_u.schannel_auth->sess_key, 
16);
        }
 
-       status = serverinfo_to_SamInfo3(server_info, pipe_session_key, 16, 
sam3);
+       switch (r->in.validation_level) {
+       case 2:
+               status = serverinfo_to_SamInfo2(server_info, pipe_session_key, 
16,
+                                               r->out.validation->sam2);
+               break;
+       case 3:
+               status = serverinfo_to_SamInfo3(server_info, pipe_session_key, 
16,
+                                               r->out.validation->sam3);
+               break;
+       }
+
        TALLOC_FREE(server_info);
+
        return status;
 }
 
diff --git a/source3/rpc_server/srv_pipe_hnd.c 
b/source3/rpc_server/srv_pipe_hnd.c
index a17adfb..2f3d763 100644
--- a/source3/rpc_server/srv_pipe_hnd.c
+++ b/source3/rpc_server/srv_pipe_hnd.c
@@ -1514,14 +1514,14 @@ static NTSTATUS nt_token_to_group_list(TALLOC_CTX 
*mem_ctx,
 }
 
 /****************************************************************************
- inits a netr_SamInfo3 structure from an auth_serversupplied_info. sam3 must
- already be initialized and is used as the talloc parent for its members.
+ inits a netr_SamBaseInfo structure from an auth_serversupplied_info.
 *****************************************************************************/
 
-NTSTATUS serverinfo_to_SamInfo3(struct auth_serversupplied_info *server_info,
-                               uint8_t *pipe_session_key,
-                               size_t pipe_session_key_len,
-                               struct netr_SamInfo3 *sam3)
+static NTSTATUS serverinfo_to_SamInfo_base(TALLOC_CTX *mem_ctx,
+                                          struct auth_serversupplied_info 
*server_info,
+                                          uint8_t *pipe_session_key,
+                                          size_t pipe_session_key_len,
+                                          struct netr_SamBaseInfo *base)
 {
        struct samu *sampw;
        struct samr_RidWithAttribute *gids = NULL;
@@ -1566,7 +1566,7 @@ NTSTATUS serverinfo_to_SamInfo3(struct 
auth_serversupplied_info *server_info,
        sid_copy(&domain_sid, user_sid);
        sid_split_rid(&domain_sid, &user_rid);
 
-       sid = sid_dup_talloc(sam3, &domain_sid);
+       sid = sid_dup_talloc(mem_ctx, &domain_sid);
        if (!sid) {
                return NT_STATUS_NO_MEMORY;
        }
@@ -1589,7 +1589,7 @@ NTSTATUS serverinfo_to_SamInfo3(struct 
auth_serversupplied_info *server_info,
                my_name = global_myname();
        }
 
-       status = nt_token_to_group_list(sam3, &domain_sid,
+       status = nt_token_to_group_list(mem_ctx, &domain_sid,
                                        server_info->num_sids,
                                        server_info->sids,
                                        &num_gids, &gids);
@@ -1618,7 +1618,7 @@ NTSTATUS serverinfo_to_SamInfo3(struct 
auth_serversupplied_info *server_info,
        }
 
        groups.count = num_gids;
-       groups.rids = TALLOC_ARRAY(sam3, struct samr_RidWithAttribute, 
groups.count);
+       groups.rids = TALLOC_ARRAY(mem_ctx, struct samr_RidWithAttribute, 
groups.count);
        if (!groups.rids) {
                return NT_STATUS_NO_MEMORY;
        }
@@ -1635,35 +1635,84 @@ NTSTATUS serverinfo_to_SamInfo3(struct 
auth_serversupplied_info *server_info,
        unix_to_nt_time(&allow_password_change, 
pdb_get_pass_can_change_time(sampw));
        unix_to_nt_time(&force_password_change, 
pdb_get_pass_must_change_time(sampw));
 
-       init_netr_SamInfo3(sam3,
-                          last_logon,
-                          last_logoff,
-                          acct_expiry,
-                          last_password_change,
-                          allow_password_change,
-                          force_password_change,
-                          talloc_strdup(sam3, pdb_get_username(sampw)),
-                          talloc_strdup(sam3, pdb_get_fullname(sampw)),
-                          talloc_strdup(sam3, pdb_get_logon_script(sampw)),
-                          talloc_strdup(sam3, pdb_get_profile_path(sampw)),
-                          talloc_strdup(sam3, pdb_get_homedir(sampw)),
-                          talloc_strdup(sam3, pdb_get_dir_drive(sampw)),
-                          0, /* logon_count */
-                          0, /* bad_password_count */
-                          user_rid,
-                          group_rid,
-                          groups,
-                          NETLOGON_EXTRA_SIDS,
-                          user_session_key,
-                          my_name,
-                          talloc_strdup(sam3, pdb_get_domain(sampw)),
-                          sid,
-                          lm_session_key,
-                          pdb_get_acct_ctrl(sampw),
-                          0, /* sidcount */
-                          NULL); /* struct netr_SidAttr *sids */
+       base->last_logon                = last_logon;
+       base->last_logoff               = last_logoff;
+       base->acct_expiry               = acct_expiry;
+       base->last_password_change      = last_password_change;
+       base->allow_password_change     = allow_password_change;
+       base->force_password_change     = force_password_change;
+       base->account_name.string       = talloc_strdup(mem_ctx, 
pdb_get_username(sampw));
+       base->full_name.string          = talloc_strdup(mem_ctx, 
pdb_get_fullname(sampw));
+       base->logon_script.string       = talloc_strdup(mem_ctx, 
pdb_get_logon_script(sampw));
+       base->profile_path.string       = talloc_strdup(mem_ctx, 
pdb_get_profile_path(sampw));
+       base->home_directory.string     = talloc_strdup(mem_ctx, 
pdb_get_homedir(sampw));
+       base->home_drive.string         = talloc_strdup(mem_ctx, 
pdb_get_dir_drive(sampw));
+       base->logon_count               = 0; /* ?? */
+       base->bad_password_count        = 0; /* ?? */
+       base->rid                       = user_rid;
+       base->primary_gid               = group_rid;
+       base->groups                    = groups;
+       base->user_flags                = NETLOGON_EXTRA_SIDS;
+       base->key                       = user_session_key;
+       base->logon_server.string       = my_name;
+       base->domain.string             = talloc_strdup(mem_ctx, 
pdb_get_domain(sampw));
+       base->domain_sid                = sid;
+       base->LMSessKey                 = lm_session_key;
+       base->acct_flags                = pdb_get_acct_ctrl(sampw);
+
        ZERO_STRUCT(user_session_key);
        ZERO_STRUCT(lm_session_key);
 
        return NT_STATUS_OK;
 }
+
+/****************************************************************************
+ inits a netr_SamInfo2 structure from an auth_serversupplied_info. sam2 must
+ already be initialized and is used as the talloc parent for its members.
+*****************************************************************************/
+
+NTSTATUS serverinfo_to_SamInfo2(struct auth_serversupplied_info *server_info,
+                               uint8_t *pipe_session_key,
+                               size_t pipe_session_key_len,
+                               struct netr_SamInfo2 *sam2)
+{
+       NTSTATUS status;
+
+       status = serverinfo_to_SamInfo_base(sam2,
+                                           server_info,
+                                           pipe_session_key,
+                                           pipe_session_key_len,
+                                           &sam2->base);
+       if (!NT_STATUS_IS_OK(status)) {
+               return status;
+       }
+
+       return NT_STATUS_OK;
+}
+
+/****************************************************************************
+ inits a netr_SamInfo3 structure from an auth_serversupplied_info. sam3 must
+ already be initialized and is used as the talloc parent for its members.
+*****************************************************************************/
+
+NTSTATUS serverinfo_to_SamInfo3(struct auth_serversupplied_info *server_info,
+                               uint8_t *pipe_session_key,
+                               size_t pipe_session_key_len,
+                               struct netr_SamInfo3 *sam3)
+{
+       NTSTATUS status;
+
+       status = serverinfo_to_SamInfo_base(sam3,
+                                           server_info,
+                                           pipe_session_key,
+                                           pipe_session_key_len,
+                                           &sam3->base);
+       if (!NT_STATUS_IS_OK(status)) {
+               return status;
+       }
+
+       sam3->sidcount          = 0;
+       sam3->sids              = NULL;
+
+       return NT_STATUS_OK;
+}


-- 
Samba Shared Repository

Reply via email to