summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--source/rpc_parse/parse_samr_new.c263
1 files changed, 143 insertions, 120 deletions
diff --git a/source/rpc_parse/parse_samr_new.c b/source/rpc_parse/parse_samr_new.c
index ec2516d727c..b7baae10ba6 100644
--- a/source/rpc_parse/parse_samr_new.c
+++ b/source/rpc_parse/parse_samr_new.c
@@ -5295,119 +5295,143 @@ static BOOL sam_io_user_info23(char *desc, SAM_USER_INFO_23 * usr,
if(!prs_align(ps))
return False;
- smb_io_time("logon_time ", &(usr->logon_time), ps, depth);
- smb_io_time("logoff_time ", &(usr->logoff_time), ps, depth);
- smb_io_time("kickoff_time ", &(usr->kickoff_time), ps, depth);
- smb_io_time("pass_last_set_time ", &(usr->pass_last_set_time), ps,
- depth);
- smb_io_time("pass_can_change_time ", &(usr->pass_can_change_time), ps,
- depth);
- smb_io_time("pass_must_change_time", &(usr->pass_must_change_time),
- ps, depth);
+ if(!smb_io_time("logon_time ", &usr->logon_time, ps, depth))
+ return False;
+ if(!smb_io_time("logoff_time ", &usr->logoff_time, ps, depth))
+ return False;
+ if(!smb_io_time("kickoff_time ", &usr->kickoff_time), ps, depth))
+ return False;
+ if(!smb_io_time("pass_last_set_time ", &usr->pass_last_set_time, ps, depth))
+ return False;
+ if(!smb_io_time("pass_can_change_time ", &usr->pass_can_change_time, ps, depth))
+ return False;
+ if(!smb_io_time("pass_must_change_time", &usr->pass_must_change_time, ps, depth))
+ return False;
- smb_io_unihdr("hdr_user_name ", &(usr->hdr_user_name), ps, depth); /* username unicode string header */
- smb_io_unihdr("hdr_full_name ", &(usr->hdr_full_name), ps, depth); /* user's full name unicode string header */
- smb_io_unihdr("hdr_home_dir ", &(usr->hdr_home_dir), ps, depth); /* home directory unicode string header */
- smb_io_unihdr("hdr_dir_drive ", &(usr->hdr_dir_drive), ps, depth); /* home directory drive */
- smb_io_unihdr("hdr_logon_script", &(usr->hdr_logon_script), ps, depth); /* logon script unicode string header */
- smb_io_unihdr("hdr_profile_path", &(usr->hdr_profile_path), ps, depth); /* profile path unicode string header */
- smb_io_unihdr("hdr_acct_desc ", &(usr->hdr_acct_desc), ps, depth); /* account desc */
- smb_io_unihdr("hdr_workstations", &(usr->hdr_workstations), ps, depth); /* wkstas user can log on from */
- smb_io_unihdr("hdr_unknown_str ", &(usr->hdr_unknown_str), ps, depth); /* unknown string */
- smb_io_unihdr("hdr_munged_dial ", &(usr->hdr_munged_dial), ps, depth); /* wkstas user can log on from */
+ if(!smb_io_unihdr("hdr_user_name ", &usr->hdr_user_name, ps, depth)) /* username unicode string header */
+ return False;
+ if(!smb_io_unihdr("hdr_full_name ", &usr->hdr_full_name, ps, depth)) /* user's full name unicode string header */
+ return False;
+ if(!smb_io_unihdr("hdr_home_dir ", &usr->hdr_home_dir, ps, depth)) /* home directory unicode string header */
+ return False;
+ if(!smb_io_unihdr("hdr_dir_drive ", &usr->hdr_dir_drive, ps, depth)) /* home directory drive */
+ return False;
+ if(!smb_io_unihdr("hdr_logon_script", &usr->hdr_logon_script, ps, depth)) /* logon script unicode string header */
+ return False;
+ if(!smb_io_unihdr("hdr_profile_path", &usr->hdr_profile_path, ps, depth)) /* profile path unicode string header */
+ return False;
+ if(!smb_io_unihdr("hdr_acct_desc ", &usr->hdr_acct_desc, ps, depth)) /* account desc */
+ return False;
+ if(!smb_io_unihdr("hdr_workstations", &usr->hdr_workstations, ps, depth)) /* wkstas user can log on from */
+ return False;
+ if(!smb_io_unihdr("hdr_unknown_str ", &usr->hdr_unknown_str, ps, depth)) /* unknown string */
+ return False;
+ if(!smb_io_unihdr("hdr_munged_dial ", &usr->hdr_munged_dial, ps, depth)) /* wkstas user can log on from */
+ return False;
- if(!prs_uint8s(False, "lm_pwd ", ps, depth, usr->lm_pwd)
+ if(!prs_uint8s(False, "lm_pwd ", ps, depth, usr->lm_pwd, sizeof(usr->lm_pwd)))
return False;
- sizeof(usr->lm_pwd));
- if(!prs_uint8s(False, "nt_pwd ", ps, depth, usr->nt_pwd)
+ if(!prs_uint8s(False, "nt_pwd ", ps, depth, usr->nt_pwd, sizeof(usr->nt_pwd)))
return False;
- sizeof(usr->nt_pwd));
- if(!prs_uint32("user_rid ", ps, depth, &(usr->user_rid)); /* User ID *)
- return False;
- if(!prs_uint32("group_rid ", ps, depth, &(usr->group_rid)); /* Group ID *)
- return False;
- if(!prs_uint32("acb_info ", ps, depth, &(usr->acb_info)))
- return False;
+ if(!prs_uint32("user_rid ", ps, depth, &usr->user_rid)) /* User ID */
+ return False;
+ if(!prs_uint32("group_rid ", ps, depth, &usr->group_rid)) /* Group ID */
+ return False;
+ if(!prs_uint32("acb_info ", ps, depth, &usr->acb_info))
+ return False;
- if(!prs_uint32("unknown_3 ", ps, depth, &(usr->unknown_3)))
- return False;
- if(!prs_uint16("logon_divs ", ps, depth, &(usr->logon_divs)); /* logon divisions per week *)
- return False;
+ if(!prs_uint32("unknown_3 ", ps, depth, &usr->unknown_3))
+ return False;
+ if(!prs_uint16("logon_divs ", ps, depth, &usr->logon_divs)) /* logon divisions per week */
+ return False;
if(!prs_align(ps))
return False;
- if(!prs_uint32("ptr_logon_hrs ", ps, depth, &(usr->ptr_logon_hrs)))
- return False;
- if(!prs_uint8s(False, "padding1 ", ps, depth, usr->padding1)
- return False;
- sizeof(usr->padding1));
- if(!prs_uint32("unknown_5 ", ps, depth, &(usr->unknown_5)))
- return False;
+ if(!prs_uint32("ptr_logon_hrs ", ps, depth, &usr->ptr_logon_hrs))
+ return False;
+ if(!prs_uint8s(False, "padding1 ", ps, depth, usr->padding1, sizeof(usr->padding1)))
+ return False;
+ if(!prs_uint32("unknown_5 ", ps, depth, &usr->unknown_5))
+ return False;
- if(!prs_uint8s(False, "password ", ps, depth, usr->pass)
- return False;
- sizeof(usr->pass));
+ if(!prs_uint8s(False, "password ", ps, depth, usr->pass, sizeof(usr->pass)))
+ return False;
/* here begins pointed-to data */
- smb_io_unistr2("uni_user_name ", &(usr->uni_user_name),
- usr->hdr_user_name.buffer, ps, depth); /* username unicode string */
+ if(!smb_io_unistr2("uni_user_name ", &usr->uni_user_name, usr->hdr_user_name.buffer, ps, depth)) /* username unicode string */
+ return False;
+
if(!prs_align(ps))
- return False;
- smb_io_unistr2("uni_full_name ", &(usr->uni_full_name),
- usr->hdr_full_name.buffer, ps, depth); /* user's full name unicode string */
+ return False;
+ if(!smb_io_unistr2("uni_full_name ", &usr->uni_full_name, usr->hdr_full_name.buffer, ps, depth)) /* user's full name unicode string */
+ return False;
+
if(!prs_align(ps))
return False;
- smb_io_unistr2("uni_home_dir ", &(usr->uni_home_dir),
- usr->hdr_home_dir.buffer, ps, depth); /* home directory unicode string */
+
+ if(!smb_io_unistr2("uni_home_dir ", &usr->uni_home_dir, usr->hdr_home_dir.buffer, ps, depth)) /* home directory unicode string */
+ return False;
+
if(!prs_align(ps))
return False;
- smb_io_unistr2("uni_dir_drive ", &(usr->uni_dir_drive),
- usr->hdr_dir_drive.buffer, ps, depth); /* home directory drive unicode string */
+
+ if(!smb_io_unistr2("uni_dir_drive ", &usr->uni_dir_drive, usr->hdr_dir_drive.buffer, ps, depth)) /* home directory drive unicode string */
+ return False;
+
if(!prs_align(ps))
return False;
- smb_io_unistr2("uni_logon_script", &(usr->uni_logon_script),
- usr->hdr_logon_script.buffer, ps, depth); /* logon script unicode string */
+
+ if(!smb_io_unistr2("uni_logon_script", &usr->uni_logon_script, usr->hdr_logon_script.buffer, ps, depth)) /* logon script unicode string */
+ return False;
+
if(!prs_align(ps))
return False;
- smb_io_unistr2("uni_profile_path", &(usr->uni_profile_path),
- usr->hdr_profile_path.buffer, ps, depth); /* profile path unicode string */
+
+ if(!smb_io_unistr2("uni_profile_path", &usr->uni_profile_path, usr->hdr_profile_path.buffer, ps, depth)) /* profile path unicode string */
+ return False;
+
if(!prs_align(ps))
return False;
- smb_io_unistr2("uni_acct_desc ", &(usr->uni_acct_desc),
- usr->hdr_acct_desc.buffer, ps, depth); /* user desc unicode string */
+
+ if(!smb_io_unistr2("uni_acct_desc ", &usr->uni_acct_desc, usr->hdr_acct_desc.buffer, ps, depth)) /* user desc unicode string */
+ return False;
+
if(!prs_align(ps))
return False;
- smb_io_unistr2("uni_workstations", &(usr->uni_workstations),
- usr->hdr_workstations.buffer, ps, depth); /* worksations user can log on from */
+
+ if(!smb_io_unistr2("uni_workstations", &usr->uni_workstations, usr->hdr_workstations.buffer, ps, depth)) /* worksations user can log on from */
+ return False;
+
if(!prs_align(ps))
return False;
- smb_io_unistr2("uni_unknown_str ", &(usr->uni_unknown_str),
- usr->hdr_unknown_str.buffer, ps, depth); /* unknown string */
+
+ if(!smb_io_unistr2("uni_unknown_str ", &usr->uni_unknown_str, usr->hdr_unknown_str.buffer, ps, depth)) /* unknown string */
+ return False;
+
if(!prs_align(ps))
return False;
- smb_io_unistr2("uni_munged_dial ", &(usr->uni_munged_dial),
- usr->hdr_munged_dial.buffer, ps, depth); /* worksations user can log on from */
+
+ if(!smb_io_unistr2("uni_munged_dial ", &usr->uni_munged_dial, usr->hdr_munged_dial.buffer, ps, depth))
+ return False;
+
if(!prs_align(ps))
return False;
/* ok, this is only guess-work (as usual) */
- if (usr->unknown_3 != 0x0)
- {
- if(!prs_uint32("unknown_6 ", ps, depth, &(usr->unknown_6)))
+ if (usr->unknown_3 != 0x0) {
+ if(!prs_uint32("unknown_6 ", ps, depth, &usr->unknown_6))
return False;
- if(!prs_uint32("padding4 ", ps, depth, &(usr->padding4)))
+ if(!prs_uint32("padding4 ", ps, depth, &usr->padding4))
return False;
- }
- else if (UNMARSHALLING(ps))
- {
+ } else if (UNMARSHALLING(ps)) {
usr->unknown_6 = 0;
usr->padding4 = 0;
}
- if (usr->ptr_logon_hrs)
- {
- sam_io_logon_hrs("logon_hrs", &(usr->logon_hrs), ps, depth);
+ if (usr->ptr_logon_hrs) {
+ if(!sam_io_logon_hrs("logon_hrs", &usr->logon_hrs, ps, depth))
+ return False;
if(!prs_align(ps))
return False;
}
@@ -5424,6 +5448,7 @@ static BOOL sam_io_user_info23(char *desc, SAM_USER_INFO_23 * usr,
unknown_6 = 0x0000 04ec
*************************************************************************/
+
void init_sam_user_info21W(SAM_USER_INFO_21 * usr,
const NTTIME * logon_time,
const NTTIME * logoff_time,
@@ -5469,16 +5494,16 @@ void init_sam_user_info21W(SAM_USER_INFO_21 * usr,
usr->pass_can_change_time = *pass_can_change_time;
usr->pass_must_change_time = *pass_must_change_time;
- init_uni_hdr(&(usr->hdr_user_name), len_user_name);
- init_uni_hdr(&(usr->hdr_full_name), len_full_name);
- init_uni_hdr(&(usr->hdr_home_dir), len_home_dir);
- init_uni_hdr(&(usr->hdr_dir_drive), len_dir_drive);
- init_uni_hdr(&(usr->hdr_logon_script), len_logon_script);
- init_uni_hdr(&(usr->hdr_profile_path), len_profile_path);
- init_uni_hdr(&(usr->hdr_acct_desc), len_description);
- init_uni_hdr(&(usr->hdr_workstations), len_workstations);
- init_uni_hdr(&(usr->hdr_unknown_str), len_unknown_str);
- init_uni_hdr(&(usr->hdr_munged_dial), len_munged_dial);
+ init_uni_hdr(&usr->hdr_user_name, len_user_name);
+ init_uni_hdr(&usr->hdr_full_name, len_full_name);
+ init_uni_hdr(&usr->hdr_home_dir, len_home_dir);
+ init_uni_hdr(&usr->hdr_dir_drive, len_dir_drive);
+ init_uni_hdr(&usr->hdr_logon_script, len_logon_script);
+ init_uni_hdr(&usr->hdr_profile_path, len_profile_path);
+ init_uni_hdr(&usr->hdr_acct_desc, len_description);
+ init_uni_hdr(&usr->hdr_workstations, len_workstations);
+ init_uni_hdr(&usr->hdr_unknown_str, len_unknown_str);
+ init_uni_hdr(&usr->hdr_munged_dial, len_munged_dial);
memcpy_zero(usr->lm_pwd, lm_pwd, sizeof(usr->lm_pwd));
memcpy_zero(usr->nt_pwd, nt_pwd, sizeof(usr->nt_pwd));
@@ -5494,23 +5519,21 @@ void init_sam_user_info21W(SAM_USER_INFO_21 * usr,
ZERO_STRUCT(usr->padding1);
- copy_unistr2(&(usr->uni_user_name), user_name);
- copy_unistr2(&(usr->uni_full_name), full_name);
- copy_unistr2(&(usr->uni_home_dir), home_dir);
- copy_unistr2(&(usr->uni_dir_drive), dir_drive);
- copy_unistr2(&(usr->uni_logon_script), log_scr);
- copy_unistr2(&(usr->uni_profile_path), prof_path);
- copy_unistr2(&(usr->uni_acct_desc), desc);
- copy_unistr2(&(usr->uni_workstations), wkstas);
- copy_unistr2(&(usr->uni_unknown_str), unk_str);
- copy_unistr2(&(usr->uni_munged_dial), mung_dial);
+ copy_unistr2(&usr->uni_user_name, user_name);
+ copy_unistr2(&usr->uni_full_name, full_name);
+ copy_unistr2(&usr->uni_home_dir, home_dir);
+ copy_unistr2(&usr->uni_dir_drive, dir_drive);
+ copy_unistr2(&usr->uni_logon_script, log_scr);
+ copy_unistr2(&usr->uni_profile_path, prof_path);
+ copy_unistr2(&usr->uni_acct_desc, desc);
+ copy_unistr2(&usr->uni_workstations, wkstas);
+ copy_unistr2(&usr->uni_unknown_str, unk_str);
+ copy_unistr2(&usr->uni_munged_dial, mung_dial);
usr->unknown_6 = unknown_6; /* 0x0000 04ec */
usr->padding4 = 0;
- memcpy_zero(&(usr->logon_hrs), hrs, sizeof(usr->logon_hrs));
-
- return True;
+ memcpy_zero(&usr->logon_hrs, hrs, sizeof(usr->logon_hrs));
}
/*************************************************************************
@@ -5521,6 +5544,7 @@ void init_sam_user_info21W(SAM_USER_INFO_21 * usr,
unknown_6 = 0x0000 04ec
*************************************************************************/
+
void init_sam_user_info21A(SAM_USER_INFO_21 * usr,
NTTIME * logon_time,
NTTIME * logoff_time,
@@ -5564,16 +5588,16 @@ void init_sam_user_info21A(SAM_USER_INFO_21 * usr,
usr->pass_can_change_time = *pass_can_change_time;
usr->pass_must_change_time = *pass_must_change_time;
- init_uni_hdr(&(usr->hdr_user_name), len_user_name);
- init_uni_hdr(&(usr->hdr_full_name), len_full_name);
- init_uni_hdr(&(usr->hdr_home_dir), len_home_dir);
- init_uni_hdr(&(usr->hdr_dir_drive), len_dir_drive);
- init_uni_hdr(&(usr->hdr_logon_script), len_logon_script);
- init_uni_hdr(&(usr->hdr_profile_path), len_profile_path);
- init_uni_hdr(&(usr->hdr_acct_desc), len_description);
- init_uni_hdr(&(usr->hdr_workstations), len_workstations);
- init_uni_hdr(&(usr->hdr_unknown_str), len_unknown_str);
- init_uni_hdr(&(usr->hdr_munged_dial), len_munged_dial);
+ init_uni_hdr(&usr->hdr_user_name, len_user_name);
+ init_uni_hdr(&usr->hdr_full_name, len_full_name);
+ init_uni_hdr(&usr->hdr_home_dir, len_home_dir);
+ init_uni_hdr(&usr->hdr_dir_drive, len_dir_drive);
+ init_uni_hdr(&usr->hdr_logon_script, len_logon_script);
+ init_uni_hdr(&usr->hdr_profile_path, len_profile_path);
+ init_uni_hdr(&usr->hdr_acct_desc, len_description);
+ init_uni_hdr(&usr->hdr_workstations, len_workstations);
+ init_uni_hdr(&usr->hdr_unknown_str, len_unknown_str);
+ init_uni_hdr(&usr->hdr_munged_dial, len_munged_dial);
ZERO_STRUCT(usr->nt_pwd);
ZERO_STRUCT(usr->lm_pwd);
@@ -5589,28 +5613,27 @@ void init_sam_user_info21A(SAM_USER_INFO_21 * usr,
ZERO_STRUCT(usr->padding1);
- init_unistr2(&(usr->uni_user_name), user_name, len_user_name);
- init_unistr2(&(usr->uni_full_name), full_name, len_full_name);
- init_unistr2(&(usr->uni_home_dir), home_dir, len_home_dir);
- init_unistr2(&(usr->uni_dir_drive), dir_drive, len_dir_drive);
- init_unistr2(&(usr->uni_logon_script), log_scr, len_logon_script);
- init_unistr2(&(usr->uni_profile_path), prof_path, len_profile_path);
- init_unistr2(&(usr->uni_acct_desc), desc, len_description);
- init_unistr2(&(usr->uni_workstations), wkstas, len_workstations);
- init_unistr2(&(usr->uni_unknown_str), unk_str, len_unknown_str);
- init_unistr2(&(usr->uni_munged_dial), mung_dial, len_munged_dial);
+ init_unistr2(&usr->uni_user_name, user_name, len_user_name);
+ init_unistr2(&usr->uni_full_name, full_name, len_full_name);
+ init_unistr2(&usr->uni_home_dir, home_dir, len_home_dir);
+ init_unistr2(&usr->uni_dir_drive, dir_drive, len_dir_drive);
+ init_unistr2(&usr->uni_logon_script, log_scr, len_logon_script);
+ init_unistr2(&usr->uni_profile_path, prof_path, len_profile_path);
+ init_unistr2(&usr->uni_acct_desc, desc, len_description);
+ init_unistr2(&usr->uni_workstations, wkstas, len_workstations);
+ init_unistr2(&usr->uni_unknown_str, unk_str, len_unknown_str);
+ init_unistr2(&usr->uni_munged_dial, mung_dial, len_munged_dial);
usr->unknown_6 = unknown_6; /* 0x0000 04ec */
usr->padding4 = 0;
- memcpy_zero(&(usr->logon_hrs), hrs, sizeof(usr->logon_hrs));
-
- return True;
+ memcpy_zero(&usr->logon_hrs, hrs, sizeof(usr->logon_hrs));
}
/*******************************************************************
reads or writes a structure.
********************************************************************/
+HERE
static BOOL sam_io_user_info21(char *desc, SAM_USER_INFO_21 * usr,
prs_struct *ps, int depth)
{