summaryrefslogtreecommitdiffstats
path: root/source/rpc_parse/parse_net.c
diff options
context:
space:
mode:
Diffstat (limited to 'source/rpc_parse/parse_net.c')
-rw-r--r--source/rpc_parse/parse_net.c133
1 files changed, 65 insertions, 68 deletions
diff --git a/source/rpc_parse/parse_net.c b/source/rpc_parse/parse_net.c
index e5b4c3dd73f..1204806f977 100644
--- a/source/rpc_parse/parse_net.c
+++ b/source/rpc_parse/parse_net.c
@@ -1024,8 +1024,6 @@ BOOL make_net_user_info3W(NET_USER_INFO_3 *usr,
int len_logon_srv = logon_srv != NULL ? logon_srv ->uni_str_len : 0;
int len_logon_dom = logon_dom != NULL ? logon_dom ->uni_str_len : 0;
- usr->ptr_user_info = 1; /* yes, we're bothering to put USER_INFO data here */
-
usr->logon_time = *logon_time;
usr->logoff_time = *logoff_time;
usr->kickoff_time = *kickoff_time;
@@ -1096,6 +1094,8 @@ BOOL make_net_user_info3W(NET_USER_INFO_3 *usr,
make_dom_sid2(&(usr->dom_sid), dom_sid);
/* "other" sids are set up above */
+ usr->auth_resp = 1;
+
return True;
}
@@ -1152,8 +1152,6 @@ BOOL make_net_user_info3(NET_USER_INFO_3 *usr,
int len_logon_srv = strlen(logon_srv);
int len_logon_dom = strlen(logon_dom);
- usr->ptr_user_info = 1; /* yes, we're bothering to put USER_INFO data here */
-
usr->logon_time = *logon_time;
usr->logoff_time = *logoff_time;
usr->kickoff_time = *kickoff_time;
@@ -1224,6 +1222,8 @@ BOOL make_net_user_info3(NET_USER_INFO_3 *usr,
make_dom_sid2(&(usr->dom_sid), dom_sid);
/* "other" sids are set up above */
+ usr->auth_resp = 1;
+
return True;
}
@@ -1242,72 +1242,69 @@ BOOL net_io_user_info3(char *desc, NET_USER_INFO_3 *usr, prs_struct *ps, int de
prs_align(ps);
- prs_uint32("ptr_user_info ", ps, depth, &(usr->ptr_user_info));
+ smb_io_time("time", &(usr->logon_time) , ps, depth); /* logon time */
+ smb_io_time("time", &(usr->logoff_time) , ps, depth); /* logoff time */
+ smb_io_time("time", &(usr->kickoff_time) , ps, depth); /* kickoff time */
+ smb_io_time("time", &(usr->pass_last_set_time) , ps, depth); /* password last set time */
+ smb_io_time("time", &(usr->pass_can_change_time) , ps, depth); /* password can change time */
+ smb_io_time("time", &(usr->pass_must_change_time), ps, depth); /* password must change time */
+
+ smb_io_unihdr("unihdr", &(usr->hdr_user_name) , ps, depth); /* username unicode string header */
+ smb_io_unihdr("unihdr", &(usr->hdr_full_name) , ps, depth); /* user's full name unicode string header */
+ smb_io_unihdr("unihdr", &(usr->hdr_logon_script), ps, depth); /* logon script unicode string header */
+ smb_io_unihdr("unihdr", &(usr->hdr_profile_path), ps, depth); /* profile path unicode string header */
+ smb_io_unihdr("unihdr", &(usr->hdr_home_dir) , ps, depth); /* home directory unicode string header */
+ smb_io_unihdr("unihdr", &(usr->hdr_dir_drive) , ps, depth); /* home directory drive unicode string header */
+
+ prs_uint16("logon_count ", ps, depth, &(usr->logon_count )); /* logon count */
+ prs_uint16("bad_pw_count ", ps, depth, &(usr->bad_pw_count)); /* bad password count */
+
+ prs_uint32("user_id ", ps, depth, &(usr->user_id )); /* User ID */
+ prs_uint32("group_id ", ps, depth, &(usr->group_id )); /* Group ID */
+ prs_uint32("num_groups ", ps, depth, &(usr->num_groups )); /* num groups */
+ prs_uint32("buffer_groups ", ps, depth, &(usr->buffer_groups)); /* undocumented buffer pointer to groups. */
+ prs_uint32("user_flgs ", ps, depth, &(usr->user_flgs )); /* user flags */
+
+ prs_uint8s (False, "user_sess_key", ps, depth, usr->user_sess_key, 16); /* unused user session key */
+
+ smb_io_unihdr("unihdr", &(usr->hdr_logon_srv), ps, depth); /* logon server unicode string header */
+ smb_io_unihdr("unihdr", &(usr->hdr_logon_dom), ps, depth); /* logon domain unicode string header */
+
+ prs_uint32("buffer_dom_id ", ps, depth, &(usr->buffer_dom_id)); /* undocumented logon domain id pointer */
+ prs_uint8s (False, "padding ", ps, depth, usr->padding, 40); /* unused padding bytes? */
+
+ prs_uint32("num_other_sids", ps, depth, &(usr->num_other_sids)); /* 0 - num_sids */
+ prs_uint32("buffer_other_sids", ps, depth, &(usr->buffer_other_sids)); /* NULL - undocumented pointer to SIDs. */
+
+ smb_io_unistr2("unistr2", &(usr->uni_user_name) , usr->hdr_user_name .buffer, ps, depth); /* username unicode string */
+ smb_io_unistr2("unistr2", &(usr->uni_full_name) , usr->hdr_full_name .buffer, ps, depth); /* user's full name unicode string */
+ smb_io_unistr2("unistr2", &(usr->uni_logon_script), usr->hdr_logon_script.buffer, ps, depth); /* logon script unicode string */
+ smb_io_unistr2("unistr2", &(usr->uni_profile_path), usr->hdr_profile_path.buffer, ps, depth); /* profile path unicode string */
+ smb_io_unistr2("unistr2", &(usr->uni_home_dir) , usr->hdr_home_dir .buffer, ps, depth); /* home directory unicode string */
+ smb_io_unistr2("unistr2", &(usr->uni_dir_drive) , usr->hdr_dir_drive .buffer, ps, depth); /* home directory drive unicode string */
- if (usr->ptr_user_info != 0)
+ prs_align(ps);
+ prs_uint32("num_groups2 ", ps, depth, &(usr->num_groups2)); /* num groups */
+ SMB_ASSERT_ARRAY(usr->gids, usr->num_groups2);
+ for (i = 0; i < usr->num_groups2; i++)
{
- smb_io_time("time", &(usr->logon_time) , ps, depth); /* logon time */
- smb_io_time("time", &(usr->logoff_time) , ps, depth); /* logoff time */
- smb_io_time("time", &(usr->kickoff_time) , ps, depth); /* kickoff time */
- smb_io_time("time", &(usr->pass_last_set_time) , ps, depth); /* password last set time */
- smb_io_time("time", &(usr->pass_can_change_time) , ps, depth); /* password can change time */
- smb_io_time("time", &(usr->pass_must_change_time), ps, depth); /* password must change time */
-
- smb_io_unihdr("unihdr", &(usr->hdr_user_name) , ps, depth); /* username unicode string header */
- smb_io_unihdr("unihdr", &(usr->hdr_full_name) , ps, depth); /* user's full name unicode string header */
- smb_io_unihdr("unihdr", &(usr->hdr_logon_script), ps, depth); /* logon script unicode string header */
- smb_io_unihdr("unihdr", &(usr->hdr_profile_path), ps, depth); /* profile path unicode string header */
- smb_io_unihdr("unihdr", &(usr->hdr_home_dir) , ps, depth); /* home directory unicode string header */
- smb_io_unihdr("unihdr", &(usr->hdr_dir_drive) , ps, depth); /* home directory drive unicode string header */
-
- prs_uint16("logon_count ", ps, depth, &(usr->logon_count )); /* logon count */
- prs_uint16("bad_pw_count ", ps, depth, &(usr->bad_pw_count)); /* bad password count */
-
- prs_uint32("user_id ", ps, depth, &(usr->user_id )); /* User ID */
- prs_uint32("group_id ", ps, depth, &(usr->group_id )); /* Group ID */
- prs_uint32("num_groups ", ps, depth, &(usr->num_groups )); /* num groups */
- prs_uint32("buffer_groups ", ps, depth, &(usr->buffer_groups)); /* undocumented buffer pointer to groups. */
- prs_uint32("user_flgs ", ps, depth, &(usr->user_flgs )); /* user flags */
-
- prs_uint8s (False, "user_sess_key", ps, depth, usr->user_sess_key, 16); /* unused user session key */
-
- smb_io_unihdr("unihdr", &(usr->hdr_logon_srv), ps, depth); /* logon server unicode string header */
- smb_io_unihdr("unihdr", &(usr->hdr_logon_dom), ps, depth); /* logon domain unicode string header */
-
- prs_uint32("buffer_dom_id ", ps, depth, &(usr->buffer_dom_id)); /* undocumented logon domain id pointer */
- prs_uint8s (False, "padding ", ps, depth, usr->padding, 40); /* unused padding bytes? */
-
- prs_uint32("num_other_sids", ps, depth, &(usr->num_other_sids)); /* 0 - num_sids */
- prs_uint32("buffer_other_sids", ps, depth, &(usr->buffer_other_sids)); /* NULL - undocumented pointer to SIDs. */
-
- smb_io_unistr2("unistr2", &(usr->uni_user_name) , usr->hdr_user_name .buffer, ps, depth); /* username unicode string */
- smb_io_unistr2("unistr2", &(usr->uni_full_name) , usr->hdr_full_name .buffer, ps, depth); /* user's full name unicode string */
- smb_io_unistr2("unistr2", &(usr->uni_logon_script), usr->hdr_logon_script.buffer, ps, depth); /* logon script unicode string */
- smb_io_unistr2("unistr2", &(usr->uni_profile_path), usr->hdr_profile_path.buffer, ps, depth); /* profile path unicode string */
- smb_io_unistr2("unistr2", &(usr->uni_home_dir) , usr->hdr_home_dir .buffer, ps, depth); /* home directory unicode string */
- smb_io_unistr2("unistr2", &(usr->uni_dir_drive) , usr->hdr_dir_drive .buffer, ps, depth); /* home directory drive unicode string */
-
- prs_align(ps);
- prs_uint32("num_groups2 ", ps, depth, &(usr->num_groups2)); /* num groups */
- SMB_ASSERT_ARRAY(usr->gids, usr->num_groups2);
- for (i = 0; i < usr->num_groups2; i++)
- {
- smb_io_gid("", &(usr->gids[i]), ps, depth); /* group info */
- }
+ smb_io_gid("", &(usr->gids[i]), ps, depth); /* group info */
+ }
- smb_io_unistr2("unistr2", &( usr->uni_logon_srv), usr->hdr_logon_srv.buffer, ps, depth); /* logon server unicode string */
- smb_io_unistr2("unistr2", &( usr->uni_logon_dom), usr->hdr_logon_srv.buffer, ps, depth); /* logon domain unicode string */
+ smb_io_unistr2("unistr2", &( usr->uni_logon_srv), usr->hdr_logon_srv.buffer, ps, depth); /* logon server unicode string */
+ smb_io_unistr2("unistr2", &( usr->uni_logon_dom), usr->hdr_logon_srv.buffer, ps, depth); /* logon domain unicode string */
- smb_io_dom_sid2("", &(usr->dom_sid), ps, depth); /* domain SID */
+ smb_io_dom_sid2("", &(usr->dom_sid), ps, depth); /* domain SID */
- SMB_ASSERT_ARRAY(usr->other_sids, usr->num_other_sids);
+ SMB_ASSERT_ARRAY(usr->other_sids, usr->num_other_sids);
- for (i = 0; i < usr->num_other_sids; i++)
- {
- smb_io_dom_sid2("", &(usr->other_sids[i]), ps, depth); /* other domain SIDs */
- }
+ for (i = 0; i < usr->num_other_sids; i++)
+ {
+ smb_io_dom_sid2("", &(usr->other_sids[i]), ps, depth); /* other domain SIDs */
}
+ prs_uint32("auth_resp ", ps, depth, &usr->auth_resp); /* 1 - Authoritative response; 0 - Non-Auth? */
+
return True;
}
@@ -1336,7 +1333,6 @@ BOOL make_r_sam_logon(NET_R_SAM_LOGON *r_s,
const DOM_CRED *srv_creds,
uint16 switch_value,
NET_USER_INFO_3 *user_info,
- uint32 auth_resp,
uint32 status)
{
if (r_s == NULL) return False;
@@ -1353,12 +1349,14 @@ BOOL make_r_sam_logon(NET_R_SAM_LOGON *r_s,
memcpy(&(r_s->srv_creds), srv_creds, sizeof(r_s->srv_creds));
/* store the user information, if there is any. */
r_s->user = user_info;
- if (user_info != NULL && user_info->ptr_user_info != 0)
+ if (user_info != NULL)
{
+ r_s->ptr_user_info = 1;
r_s->switch_value = 3; /* indicates type of validation user info */
}
else
{
+ r_s->ptr_user_info = 0;
r_s->switch_value = 0; /* indicates no info */
}
}
@@ -1367,12 +1365,12 @@ BOOL make_r_sam_logon(NET_R_SAM_LOGON *r_s,
/* XXXX we may want this behaviour:
r_s->buffer_creds = 0;
*/
+ r_s->ptr_user_info = 0;
r_s->switch_value = 0;
r_s->user = NULL;
}
r_s->status = status;
- r_s->auth_resp = auth_resp;
return True;
}
@@ -1392,14 +1390,13 @@ BOOL net_io_r_sam_logon(char *desc, NET_R_SAM_LOGON *r_l, prs_struct *ps, int d
prs_uint16("switch_value", ps, depth, &(r_l->switch_value));
prs_align(ps);
+ prs_uint32("ptr_user_info ", ps, depth, &r_l->ptr_user_info);
- if (r_l->switch_value != 0)
+ if (r_l->switch_value != 0 && r_l->ptr_user_info != 0)
{
net_io_user_info3("", r_l->user, ps, depth);
}
- prs_uint32("auth_resp ", ps, depth, &(r_l->auth_resp)); /* 1 - Authoritative response; 0 - Non-Auth? */
-
prs_uint32("status ", ps, depth, &(r_l->status));
prs_align(ps);