diff options
author | Luke Leighton <lkcl@samba.org> | 1998-09-24 20:02:56 +0000 |
---|---|---|
committer | Luke Leighton <lkcl@samba.org> | 1998-09-24 20:02:56 +0000 |
commit | f650b65800c6d6c09cc2d59d7afe728fcb819a5f (patch) | |
tree | 11db7b86fe69a29e00f2aa22ec6aa9fd84bf4ddd /source3/rpc_server/srv_samr.c | |
parent | 50beafdf22e54399af4b3dd841c53bfd6dd6de33 (diff) | |
download | samba-f650b65800c6d6c09cc2d59d7afe728fcb819a5f.tar.gz samba-f650b65800c6d6c09cc2d59d7afe728fcb819a5f.tar.bz2 samba-f650b65800c6d6c09cc2d59d7afe728fcb819a5f.zip |
this fixes the last of the issues where USRMGR.EXE and SRVMGR.EXE were
failing. running these two programs on a samba pdc now work.
parse_samr.c:
- removed __LINE__ from debug macros.
- removed call to SMB_ASSERT_ARRAY() in samr_r_query_usergroups. the
DOM_GID array is a malloc'd array (by make_dom_gids) not a static
array.
srv_samr.c:
- replaced all "struct smb_passwd"s with sam_passwds instead. there
were uid to rid confusion issues (assumptions that uids were equal
to rids).
- #if 0'd the pdb_rid_is_user() call which, given the above corrections,
would probably work now.
srv_util.c:
- replaced "struct smb_passwd" with sam_passwd in lookup_user_rid, as
assumptions were being made that uids were equal to rids.
(This used to be commit 3f98697cd5203fba07518d7c777ba19644e35b45)
Diffstat (limited to 'source3/rpc_server/srv_samr.c')
-rw-r--r-- | source3/rpc_server/srv_samr.c | 57 |
1 files changed, 33 insertions, 24 deletions
diff --git a/source3/rpc_server/srv_samr.c b/source3/rpc_server/srv_samr.c index 95b0a413c7..2c6e34801a 100644 --- a/source3/rpc_server/srv_samr.c +++ b/source3/rpc_server/srv_samr.c @@ -46,7 +46,7 @@ static BOOL get_sampwd_entries(SAM_USER_INFO_21 *pw_buf, uint16 acb_mask) { void *vp = NULL; - struct smb_passwd *pwd = NULL; + struct sam_passwd *pwd = NULL; (*num_entries) = 0; (*total_entries) = 0; @@ -60,13 +60,13 @@ static BOOL get_sampwd_entries(SAM_USER_INFO_21 *pw_buf, return False; } - while (((pwd = getsmbpwent(vp)) != NULL) && (*num_entries) < max_num_entries) + while (((pwd = getsam21pwent(vp)) != NULL) && (*num_entries) < max_num_entries) { int user_name_len = strlen(pwd->smb_name); make_unistr2(&(pw_buf[(*num_entries)].uni_user_name), pwd->smb_name, user_name_len-1); make_uni_hdr(&(pw_buf[(*num_entries)].hdr_user_name), user_name_len-1, user_name_len-1, 1); - pw_buf[(*num_entries)].user_rid = pwd->smb_userid; + pw_buf[(*num_entries)].user_rid = pwd->user_rid; bzero( pw_buf[(*num_entries)].nt_pwd , 16); /* Now check if the NT compatible password is available. */ @@ -77,8 +77,8 @@ static BOOL get_sampwd_entries(SAM_USER_INFO_21 *pw_buf, pw_buf[(*num_entries)].acb_info = (uint16)pwd->acct_ctrl; - DEBUG(5, ("get_smbpwd_entries: idx: %d user %s, uid %d, acb %x", - (*num_entries), pwd->smb_name, pwd->smb_userid, pwd->acct_ctrl)); + DEBUG(5, ("entry idx: %d user %s, rid 0x%x, acb %x", + (*num_entries), pwd->smb_name, pwd->user_rid, pwd->acct_ctrl)); if (acb_mask == 0 || IS_BITS_SET_SOME(pwd->acct_ctrl, acb_mask)) { @@ -617,27 +617,26 @@ static void samr_reply_lookup_ids(SAMR_Q_LOOKUP_IDS *q_u, for (i = 0; i < num_rids && status == 0; i++) { - struct smb_passwd *smb_pass; + struct sam_passwd *sam_pass; fstring user_name; fstrcpy(user_name, unistrn2(q_u->uni_user_name[i].buffer, - q_u->uni_user_name[i].uni_str_len)); + q_u->uni_user_name[i].uni_str_len)); /* find the user account */ become_root(True); - smb_pass = get_sampwd_entry(user_name, 0); + sam_pass = get_smb21pwd_entry(user_name, 0); unbecome_root(True); - if (smb_pass == NULL) + if (sam_pass == NULL) { status = 0xC0000000 | NT_STATUS_NO_SUCH_USER; rid[i] = 0; } else { - /* lkclXXXX SHOULD use name_to_rid() here! */ - rid[i] = smb_pass->smb_userid; + rid[i] = sam_pass->user_rid; } } #endif @@ -798,7 +797,7 @@ static void samr_reply_open_user(SAMR_Q_OPEN_USER *q_u, int status) { SAMR_R_OPEN_USER r_u; - struct smb_passwd *smb_pass; + struct sam_passwd *sam_pass; int pol_idx; BOOL pol_open = False; @@ -820,11 +819,11 @@ static void samr_reply_open_user(SAMR_Q_OPEN_USER *q_u, } become_root(True); - smb_pass = getsmbpwuid(q_u->user_rid); + sam_pass = getsam21pwrid(q_u->user_rid); unbecome_root(True); /* check that the RID exists in our domain. */ - if (r_u.status == 0x0 && smb_pass == NULL) + if (r_u.status == 0x0 && sam_pass == NULL) { r_u.status = 0xC0000000 | NT_STATUS_NO_SUCH_USER; } @@ -853,7 +852,7 @@ static void samr_reply_open_user(SAMR_Q_OPEN_USER *q_u, /******************************************************************* api_samr_open_user ********************************************************************/ -static void api_samr_open_user( int uid, prs_struct *data, prs_struct *rdata) +static void api_samr_open_user( int rid, prs_struct *data, prs_struct *rdata) { SAMR_Q_OPEN_USER q_u; @@ -875,10 +874,13 @@ static BOOL get_user_info_21(SAM_USER_INFO_21 *id21, uint32 user_rid) LOGON_HRS hrs; int i; +#ifdef DONT_CHECK_THIS_FOR_NOW if (!pdb_rid_is_user(user_rid)) { + DEBUG(4,("RID 0x%x is not a user RID\n", user_rid)); return False; } +#endif become_root(True); sam_pass = getsam21pwrid(user_rid); @@ -886,6 +888,7 @@ static BOOL get_user_info_21(SAM_USER_INFO_21 *id21, uint32 user_rid) if (sam_pass == NULL) { + DEBUG(4,("User 0x%x not found\n", user_rid)); return False; } @@ -968,6 +971,8 @@ static void samr_reply_query_userinfo(SAMR_Q_QUERY_USERINFO *q_u, status = NT_STATUS_OBJECT_TYPE_MISMATCH; } + DEBUG(5,("samr_reply_query_userinfo: rid:0x%x\n", rid)); + /* ok! user info levels (there are lots: see MSDEV help), off we go... */ if (status == 0x0) { @@ -1037,7 +1042,7 @@ static void samr_reply_query_usergroups(SAMR_Q_QUERY_USERGROUPS *q_u, SAMR_R_QUERY_USERGROUPS r_u; uint32 status = 0x0; - struct smb_passwd *smb_pass; + struct sam_passwd *sam_pass; DOM_GID *gids = NULL; int num_groups = 0; int pol_idx; @@ -1060,10 +1065,10 @@ static void samr_reply_query_usergroups(SAMR_Q_QUERY_USERGROUPS *q_u, if (status == 0x0) { become_root(True); - smb_pass = getsmbpwuid(rid); + sam_pass = getsam21pwrid(rid); unbecome_root(True); - if (smb_pass == NULL) + if (sam_pass == NULL) { status = 0xC0000000 | NT_STATUS_NO_SUCH_USER; } @@ -1072,7 +1077,7 @@ static void samr_reply_query_usergroups(SAMR_Q_QUERY_USERGROUPS *q_u, if (status == 0x0) { pstring groups; - get_domain_user_groups(groups, smb_pass->smb_name); + get_domain_user_groups(groups, sam_pass->smb_name); gids = NULL; num_groups = make_dom_gids(groups, &gids); } @@ -1083,8 +1088,11 @@ static void samr_reply_query_usergroups(SAMR_Q_QUERY_USERGROUPS *q_u, /* store the response in the SMB stream */ samr_io_r_query_usergroups("", &r_u, rdata, 0); - if(gids) - free((char *)gids); + if (gids) + { + free((char *)gids); + } + DEBUG(5,("samr_query_usergroups: %d\n", __LINE__)); } @@ -1141,7 +1149,7 @@ static void samr_reply_unknown_32(SAMR_Q_UNKNOWN_32 *q_u, static void api_samr_unknown_32( int uid, prs_struct *data, prs_struct *rdata) { uint32 status = 0; - struct smb_passwd *smb_pass; + struct sam_passwd *sam_pass; fstring mach_acct; SAMR_Q_UNKNOWN_32 q_u; @@ -1159,10 +1167,10 @@ static void api_samr_unknown_32( int uid, prs_struct *data, prs_struct *rdata) q_u.uni_mach_acct.uni_str_len)); become_root(True); - smb_pass = getsmbpwnam(mach_acct); + sam_pass = getsam21pwnam(mach_acct); unbecome_root(True); - if (smb_pass != NULL) + if (sam_pass != NULL) { /* machine account exists: say so */ status = 0xC0000000 | NT_STATUS_USER_EXISTS; @@ -1170,6 +1178,7 @@ static void api_samr_unknown_32( int uid, prs_struct *data, prs_struct *rdata) else { /* this could cause trouble... */ + DEBUG(0,("trouble!\n")); status = 0; } |