if (dom_name != NULL) {
for (num = 0; num < ref->num_ref_doms_1; num++) {
fstring domname;
- fstrcpy(domname, dos_unistr2_to_str(&ref->ref_dom[num].uni_dom_name));
+ rpcstr_pull(domname, &ref->ref_dom[num].uni_dom_name, sizeof(domname), -1, 0);
if (strequal(domname, dom_name))
return num;
}
***************************************************************************/
static void init_lsa_rid2s(DOM_R_REF *ref, DOM_RID2 *rid2,
- int num_entries, UNISTR2 name[MAX_LOOKUP_SIDS],
+ int num_entries, UNISTR2 *name,
uint32 *mapped_count, BOOL endian)
{
int i;
/* Split name into domain and user component */
- pstrcpy(full_name, dos_unistr2_to_str(&name[i]));
+ rpcstr_pull(full_name, &name[i], sizeof(full_name), -1, 0);
split_domain_name(full_name, dom_name, user);
/* Lookup name */
}
/***************************************************************************
- _lsa_query_info
+ _lsa_query_info. See the POLICY_INFOMATION_CLASS docs at msdn.
***************************************************************************/
uint32 _lsa_query_info(pipes_struct *p, LSA_Q_QUERY_INFO *q_u, LSA_R_QUERY_INFO *r_u)
break;
}
case 0x03:
- switch (lp_server_role())
- {
+ /* Request PolicyPrimaryDomainInformation. */
+ switch (lp_server_role()) {
case ROLE_DOMAIN_PDC:
case ROLE_DOMAIN_BDC:
name = global_myworkgroup;
sid = &global_sam_sid;
break;
case ROLE_DOMAIN_MEMBER:
+ name = global_myworkgroup;
+ /* We need to return the Domain SID here. */
if (secrets_fetch_domain_sid(global_myworkgroup,
- &domain_sid))
- {
- /* I'm sure this should be myname, not myworkgroup. JRA. */
- name = global_myname;
+ &domain_sid))
sid = &domain_sid;
- }
else
return NT_STATUS_CANT_ACCESS_DOMAIN_INFO;
break;
case ROLE_STANDALONE:
- name = global_myname;
- sid = &global_sam_sid;
+ name = global_myworkgroup;
+ sid = NULL; /* Tell it we're not in a domain. */
break;
default:
return NT_STATUS_CANT_ACCESS_DOMAIN_INFO;
init_dom_query(&r_u->dom.id3, name, sid);
break;
case 0x05:
- /* AS/U shows this needs to be the same as level 3. JRA. */
- switch (lp_server_role())
- {
+ /* Request PolicyAccountDomainInformation. */
+ switch (lp_server_role()) {
case ROLE_DOMAIN_PDC:
case ROLE_DOMAIN_BDC:
name = global_myworkgroup;
sid = &global_sam_sid;
break;
case ROLE_DOMAIN_MEMBER:
- if (secrets_fetch_domain_sid(global_myworkgroup,
- &domain_sid))
- {
- name = global_myname;
- sid = &domain_sid;
- }
- else
- return NT_STATUS_CANT_ACCESS_DOMAIN_INFO;
+ name = global_myworkgroup;
+ sid = &global_sam_sid;
break;
case ROLE_STANDALONE:
- name = global_myname;
+ name = global_myworkgroup;
sid = &global_sam_sid;
break;
default:
init_dom_query(&r_u->dom.id5, name, sid);
break;
case 0x06:
- switch (lp_server_role())
- {
+ switch (lp_server_role()) {
case ROLE_DOMAIN_BDC:
/*
* only a BDC is a backup controller
{
return NT_STATUS_OBJECT_NAME_NOT_FOUND;
}
+
+uint32 _lsa_unk_get_connuser(pipes_struct *p, LSA_Q_UNK_GET_CONNUSER *q_u, LSA_R_UNK_GET_CONNUSER *r_u)
+{
+ fstring username, domname;
+ int ulen, dlen;
+ user_struct *vuser = get_valid_user_struct(p->vuid);
+
+ if (vuser == NULL)
+ return NT_STATUS_CANT_ACCESS_DOMAIN_INFO;
+
+ fstrcpy(username, vuser->user.smb_name);
+ fstrcpy(domname, vuser->user.domain);
+
+ ulen = strlen(username);
+ dlen = strlen(domname);
+
+ init_uni_hdr(&r_u->hdr_user_name, ulen);
+ r_u->ptr_user_name = 1;
+ init_unistr2(&r_u->uni2_user_name, username, ulen);
+
+ r_u->unk1 = 1;
+
+ init_uni_hdr(&r_u->hdr_dom_name, dlen);
+ r_u->ptr_dom_name = 1;
+ init_unistr2(&r_u->uni2_dom_name, domname, dlen);
+
+ r_u->status = NT_STATUS_NO_PROBLEMO;
+
+ return r_u->status;
+}