extern DOM_SID global_sid_S_1_1;
extern DOM_SID global_sid_S_1_5_20;
-extern rid_name domain_group_rids[];
-extern rid_name domain_alias_rids[];
-extern rid_name builtin_alias_rids[];
-
/*******************************************************************
This next function should be replaced with something that
dynamically returns the correct user info..... JRA.
/* skip the requested number of entries.
not very efficient, but hey...
*/
- start_idx--;
+ if (acb_mask == 0 || IS_BITS_SET_SOME(pwd->acct_ctrl, acb_mask))
+ {
+ start_idx--;
+ }
continue;
}
DEBUG(5,("samr_reply_enum_dom_users: %d\n", __LINE__));
become_root(True);
- get_sampwd_entries(pass, 0, &total_entries, &num_entries, MAX_SAM_ENTRIES, q_u->acb_mask);
+ get_sampwd_entries(pass, q_u->start_idx, &total_entries, &num_entries,
+ MAX_SAM_ENTRIES, q_u->acb_mask);
unbecome_root(True);
make_samr_r_enum_dom_users(&r_e,
- 0x00000000, num_entries,
+ q_u->start_idx + num_entries, num_entries,
pass, r_e.status);
/* store the response in the SMB stream */
DEBUG(10,("lookup on Domain SID\n"));
become_root(True);
- r_e.status = add_group_member(group_rid, q_u->rid) ? 0x0 : 0xC0000000 | NT_STATUS_ACCESS_DENIED;
+ r_e.status = add_group_member(group_rid, q_u->rid) ? 0x0 : (0xC0000000 | NT_STATUS_ACCESS_DENIED);
unbecome_root(True);
}
else
DEBUG(10,("lookup on Domain SID\n"));
become_root(True);
- r_e.status = del_group_member(group_rid, q_u->rid) ? 0x0 : 0xC0000000 | NT_STATUS_ACCESS_DENIED;
+ r_e.status = del_group_member(group_rid, q_u->rid) ? 0x0 : (0xC0000000 | NT_STATUS_ACCESS_DENIED);
unbecome_root(True);
}
else
DEBUG(10,("add member on Domain SID\n"));
become_root(True);
- r_e.status = add_alias_member(alias_rid, &q_u->sid.sid) ? 0x0 : 0xC0000000 | NT_STATUS_ACCESS_DENIED;
+ r_e.status = add_alias_member(alias_rid, &q_u->sid.sid) ? 0x0 : (0xC0000000 | NT_STATUS_ACCESS_DENIED);
unbecome_root(True);
}
else if (sid_equal(&alias_sid, &global_sid_S_1_5_20))
DEBUG(10,("add member on BUILTIN SID\n"));
become_root(True);
- r_e.status = add_builtin_member(alias_rid, &q_u->sid.sid) ? 0x0 : 0xC0000000 | NT_STATUS_ACCESS_DENIED;
+ r_e.status = add_builtin_member(alias_rid, &q_u->sid.sid) ? 0x0 : (0xC0000000 | NT_STATUS_ACCESS_DENIED);
unbecome_root(True);
}
else
DEBUG(10,("del member on Domain SID\n"));
become_root(True);
- r_e.status = del_alias_member(alias_rid, &q_u->sid.sid) ? 0x0 : 0xC0000000 | NT_STATUS_ACCESS_DENIED;
+ r_e.status = del_alias_member(alias_rid, &q_u->sid.sid) ? 0x0 : (0xC0000000 | NT_STATUS_ACCESS_DENIED);
unbecome_root(True);
}
else if (sid_equal(&alias_sid, &global_sid_S_1_5_20))
DEBUG(10,("del member on BUILTIN SID\n"));
become_root(True);
- r_e.status = del_builtin_member(alias_rid, &q_u->sid.sid) ? 0x0 : 0xC0000000 | NT_STATUS_ACCESS_DENIED;
+ r_e.status = del_builtin_member(alias_rid, &q_u->sid.sid) ? 0x0 : (0xC0000000 | NT_STATUS_ACCESS_DENIED);
unbecome_root(True);
}
else
}
}
- if (r_e.status == 0x0 &&
- (sid_equal(&sid, &global_sam_sid) ||
- sid_equal(&sid, &global_sid_S_1_5_20)))
- {
- char *name;
- int i = 0;
- got_grps = True;
-
- while (num_entries < MAX_SAM_ENTRIES && ((name = domain_group_rids[i].name) != NULL))
- {
- DOMAIN_GRP tmp_grp;
-
- fstrcpy(tmp_grp.name , name);
- fstrcpy(tmp_grp.comment, "");
- tmp_grp.rid = domain_group_rids[i].rid;
- tmp_grp.attr = 0x7;
-
- if (!add_domain_group(&grps, &num_entries, &tmp_grp))
- {
- r_e.status = 0xC0000000 | NT_STATUS_NO_MEMORY;
- break;
- }
-
- i++;
- }
- }
-
if (r_e.status == 0 && got_grps)
{
make_samr_r_enum_dom_groups(&r_e, q_u->start_idx, num_entries, grps, r_e.status);
/* well-known aliases */
if (sid_equal(&sid, &global_sid_S_1_5_20))
{
- char *name;
+ BOOL ret;
+ /* builtin aliases */
- while ((name = builtin_alias_rids[num_entries].name) != NULL)
+ become_root(True);
+ ret = enumdombuiltins(&alss, &num_entries);
+ unbecome_root(True);
+ if (!ret)
{
- LOCAL_GRP tmp_als;
-
- fstrcpy(tmp_als.name , name);
- fstrcpy(tmp_als.comment, "");
- tmp_als.rid = builtin_alias_rids[num_entries].rid;
-
- if (!add_domain_alias(&alss, &num_entries, &tmp_als))
- {
- r_e.status = 0xC0000000 | NT_STATUS_NO_MEMORY;
- break;
- }
+ r_e.status = 0xC0000000 | NT_STATUS_NO_MEMORY;
}
}
else if (sid_equal(&sid, &global_sam_sid))
{
BOOL ret;
/* local aliases */
- num_entries = 0;
become_root(True);
ret = enumdomaliases(&alss, &num_entries);
DEBUG(10,("lookup on Domain SID\n"));
become_root(True);
- status = del_group_entry(group_rid) ? 0x0 : 0xC0000000 | NT_STATUS_NO_SUCH_GROUP;
+ status = del_group_entry(group_rid) ? 0x0 : (0xC0000000 | NT_STATUS_NO_SUCH_GROUP);
unbecome_root(True);
}
else
{
- status = 0xC0000000 | NT_STATUS_NO_SUCH_USER;
+ status = 0xC0000000 | NT_STATUS_NO_SUCH_GROUP;
}
}
DEBUG(10,("lookup on Domain SID\n"));
become_root(True);
- status = getgrouprid(group_rid, &mem_grp, &num_rids) != NULL ? 0x0 : 0xC0000000 | NT_STATUS_NO_SUCH_GROUP;
+ status = getgrouprid(group_rid, &mem_grp, &num_rids) != NULL ? 0x0 : (0xC0000000 | NT_STATUS_NO_SUCH_GROUP);
unbecome_root(True);
}
else
{
- status = 0xC0000000 | NT_STATUS_NO_SUCH_USER;
+ status = 0xC0000000 | NT_STATUS_NO_SUCH_GROUP;
}
}
if (status == 0x0 && num_rids > 0)
{
- rid = malloc(num_rids * sizeof(uint32));
- if (mem_grp != NULL && rid != NULL)
+ rid = malloc(num_rids * sizeof(uint32));
+ if (mem_grp != NULL && rid != NULL)
+ {
+ int i;
+ for (i = 0; i < num_rids; i++)
{
- int i;
- for (i = 0; i < num_rids; i++)
- {
- rid[i] = mem_grp[i].rid;
- }
- free(mem_grp);
+ rid[i] = mem_grp[i].rid;
+ }
+ free(mem_grp);
}
}
DEBUG(10,("lookup on Domain SID\n"));
become_root(True);
- status = del_alias_entry(alias_rid) ? 0x0 : 0xC0000000 | NT_STATUS_NO_SUCH_ALIAS;
+ status = del_alias_entry(alias_rid) ? 0x0 : (0xC0000000 | NT_STATUS_NO_SUCH_ALIAS);
unbecome_root(True);
}
else
{
- status = 0xC0000000 | NT_STATUS_NO_SUCH_USER;
+ status = 0xC0000000 | NT_STATUS_NO_SUCH_ALIAS;
}
}
DEBUG(10,("lookup on S-1-5-20\n"));
become_root(True);
- status = getbuiltinrid(alias_rid, &mem_grp, &num_sids) != NULL ? 0x0 : 0xC0000000 | NT_STATUS_NO_SUCH_GROUP;
+ status = getbuiltinrid(alias_rid, &mem_grp, &num_sids) != NULL ? 0x0 : 0xC0000000 | NT_STATUS_NO_SUCH_ALIAS;
unbecome_root(True);
}
else if (sid_equal(&alias_sid, &global_sam_sid))
DEBUG(10,("lookup on Domain SID\n"));
become_root(True);
- status = getaliasrid(alias_rid, &mem_grp, &num_sids) != NULL ? 0x0 : 0xC0000000 | NT_STATUS_NO_SUCH_GROUP;
+ status = getaliasrid(alias_rid, &mem_grp, &num_sids) != NULL ? 0x0 : 0xC0000000 | NT_STATUS_NO_SUCH_ALIAS;
unbecome_root(True);
}
else
{
- status = 0xC0000000 | NT_STATUS_NO_SUCH_USER;
+ status = 0xC0000000 | NT_STATUS_NO_SUCH_ALIAS;
}
}
fstring user_name;
fstring wks;
- fstrcpy(user_name, unistrn2(q_u->uni_user_name.buffer, q_u->uni_user_name.uni_str_len));
- fstrcpy(wks , unistrn2(q_u->uni_dest_host.buffer, q_u->uni_dest_host.uni_str_len));
+ fstrcpy(user_name, unistr2_to_str(&q_u->uni_user_name));
+ fstrcpy(wks , unistr2_to_str(&q_u->uni_dest_host));
DEBUG(5,("samr_chgpasswd_user: user: %s wks: %s\n", user_name, wks));
case 0x10:
{
info = (void*)&id10;
- status = get_user_info_10(&id10, rid) ? 0 : NT_STATUS_NO_SUCH_USER;
+ status = get_user_info_10(&id10, rid) ? 0 : (0xC0000000 | NT_STATUS_NO_SUCH_USER);
break;
}
#if 0
case 21:
{
info = (void*)&id21;
- status = get_user_info_21(&id21, rid) ? 0 : NT_STATUS_NO_SUCH_USER;
+ status = get_user_info_21(&id21, rid) ? 0 : (0xC0000000 | NT_STATUS_NO_SUCH_USER);
break;
}
grp.rid = 0xffffffff;
become_root(True);
- status = add_alias_entry(&grp) ? 0 : 0xC0000000 | NT_STATUS_ACCESS_DENIED;
+ status = add_alias_entry(&grp) ? 0 : (0xC0000000 | NT_STATUS_ACCESS_DENIED);
unbecome_root(True);
}
grp.attr = 0x07;
become_root(True);
- status = add_group_entry(&grp) ? 0x0 : 0xC0000000 | NT_STATUS_ACCESS_DENIED;
+ status = add_group_entry(&grp) ? 0x0 : (0xC0000000 | NT_STATUS_ACCESS_DENIED);
unbecome_root(True);
}
reply if the account already exists...
*/
- fstrcpy(mach_acct, unistrn2(q_u.uni_mach_acct.buffer,
- q_u.uni_mach_acct.uni_str_len));
+ fstrcpy(mach_acct, unistr2_to_str(&q_u.uni_mach_acct));
become_root(True);
sam_pass = getsam21pwntnam(mach_acct);