[SCM] Samba Shared Repository - branch master updated -
release-4-0-0alpha8-61-g313a2bf
Günther Deschner
gd at samba.org
Thu Jun 25 10:21:06 GMT 2009
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 <gd at samba.org>
Date: Thu Jun 25 12:12:05 2009 +0200
s3-netlogon: remove init_netr_SamInfo functions.
Guenther
commit f62d9f5b5774c6066229ce029bc7c96f8478a3b1
Author: Günther Deschner <gd at samba.org>
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
More information about the samba-cvs
mailing list