summaryrefslogtreecommitdiff
path: root/source3/rpc_server/rpc_server.c
diff options
context:
space:
mode:
authorAndrew Bartlett <abartlet@samba.org>2011-07-18 12:58:25 +1000
committerAndrew Bartlett <abartlet@samba.org>2011-07-20 09:17:13 +1000
commit128ae06a619b2c50cc9379053abb18277e814747 (patch)
treef3c7c0639a4adcbcff13cbfb1322cee0b08cba1a /source3/rpc_server/rpc_server.c
parent8d72e612ac2845cd873c4fd614456fe8749db130 (diff)
downloadsamba-128ae06a619b2c50cc9379053abb18277e814747.tar.gz
samba-128ae06a619b2c50cc9379053abb18277e814747.tar.bz2
samba-128ae06a619b2c50cc9379053abb18277e814747.zip
s3-auth use auth_user_info not netr_SamInfo3 in auth3_session_info
This makes auth3_session_info identical to auth_session_info The logic to convert the info3 to a struct auth_user_info is essentially moved up the stack from the named pipe proxy in source3/rpc_server to create_local_token(). Andrew Bartlett Signed-off-by: Andrew Tridgell <tridge@samba.org>
Diffstat (limited to 'source3/rpc_server/rpc_server.c')
-rw-r--r--source3/rpc_server/rpc_server.c71
1 files changed, 28 insertions, 43 deletions
diff --git a/source3/rpc_server/rpc_server.c b/source3/rpc_server/rpc_server.c
index 7e383e84c1..eb9def9a9a 100644
--- a/source3/rpc_server/rpc_server.c
+++ b/source3/rpc_server/rpc_server.c
@@ -40,8 +40,6 @@ static NTSTATUS auth_anonymous_session_info(TALLOC_CTX *mem_ctx,
{
struct auth_session_info *i;
struct auth3_session_info *s;
- struct auth_user_info_dc *u;
- union netr_Validation val;
NTSTATUS status;
i = talloc_zero(mem_ctx, struct auth_session_info);
@@ -56,20 +54,7 @@ static NTSTATUS auth_anonymous_session_info(TALLOC_CTX *mem_ctx,
i->security_token = s->security_token;
i->session_key = s->session_key;
-
- val.sam3 = s->info3;
-
- status = make_user_info_dc_netlogon_validation(mem_ctx,
- "",
- 3,
- &val,
- &u);
- if (!NT_STATUS_IS_OK(status)) {
- DEBUG(0, ("conversion of info3 into user_info_dc failed!\n"));
- return status;
- }
- i->info = talloc_move(i, &u->info);
- talloc_free(u);
+ i->info = s->info;
*session_info = i;
@@ -88,8 +73,6 @@ static int make_server_pipes_struct(TALLOC_CTX *mem_ctx,
struct pipes_struct **_p,
int *perrno)
{
- struct netr_SamInfo3 *info3;
- struct auth_user_info_dc *auth_user_info_dc;
struct pipes_struct *p;
NTSTATUS status;
@@ -114,30 +97,6 @@ static int make_server_pipes_struct(TALLOC_CTX *mem_ctx,
p->endian = RPC_LITTLE_ENDIAN;
- /* Fake up an auth_user_info_dc for now, to make an info3, to make the session_info structure */
- auth_user_info_dc = talloc_zero(p, struct auth_user_info_dc);
- if (!auth_user_info_dc) {
- TALLOC_FREE(p);
- *perrno = ENOMEM;
- return -1;
- }
-
- auth_user_info_dc->num_sids = session_info->security_token->num_sids;
- auth_user_info_dc->sids = session_info->security_token->sids;
- auth_user_info_dc->info = session_info->info;
- auth_user_info_dc->user_session_key = session_info->session_key;
-
- /* This creates the input structure that make_server_info_info3 is looking for */
- status = auth_convert_user_info_dc_saminfo3(p, auth_user_info_dc,
- &info3);
-
- if (!NT_STATUS_IS_OK(status)) {
- DEBUG(1, ("Failed to convert auth_user_info_dc into netr_SamInfo3\n"));
- TALLOC_FREE(p);
- *perrno = EINVAL;
- return -1;
- }
-
if (session_info->unix_token && session_info->unix_info && session_info->security_token) {
/* Don't call create_local_token(), we already have the full details here */
p->session_info = talloc_zero(p, struct auth3_session_info);
@@ -149,12 +108,38 @@ static int make_server_pipes_struct(TALLOC_CTX *mem_ctx,
p->session_info->security_token = talloc_move(p->session_info, &session_info->security_token);
p->session_info->unix_token = talloc_move(p->session_info, &session_info->unix_token);
p->session_info->unix_info = talloc_move(p->session_info, &session_info->unix_info);
- p->session_info->info3 = talloc_move(p->session_info, &info3);
+ p->session_info->info = talloc_move(p->session_info, &session_info->info);
p->session_info->session_key = session_info->session_key;
p->session_info->session_key.data = talloc_move(p->session_info, &session_info->session_key.data);
} else {
+ struct auth_user_info_dc *auth_user_info_dc;
struct auth_serversupplied_info *server_info;
+ struct netr_SamInfo3 *info3;
+
+ /* Fake up an auth_user_info_dc for now, to make an info3, to make the session_info structure */
+ auth_user_info_dc = talloc_zero(p, struct auth_user_info_dc);
+ if (!auth_user_info_dc) {
+ TALLOC_FREE(p);
+ *perrno = ENOMEM;
+ return -1;
+ }
+
+ auth_user_info_dc->num_sids = session_info->security_token->num_sids;
+ auth_user_info_dc->sids = session_info->security_token->sids;
+ auth_user_info_dc->info = session_info->info;
+ auth_user_info_dc->user_session_key = session_info->session_key;
+
+ /* This creates the input structure that make_server_info_info3 is looking for */
+ status = auth_convert_user_info_dc_saminfo3(p, auth_user_info_dc,
+ &info3);
+
+ if (!NT_STATUS_IS_OK(status)) {
+ DEBUG(1, ("Failed to convert auth_user_info_dc into netr_SamInfo3\n"));
+ TALLOC_FREE(p);
+ *perrno = EINVAL;
+ return -1;
+ }
status = make_server_info_info3(p,
info3->base.account_name.string,