1
0
mirror of https://github.com/samba-team/samba.git synced 2025-11-28 12:23:49 +03:00

Use pidl for _samr_QueryDomainInfo() and _samr_QueryDomainInfo2().

Guenther
This commit is contained in:
Günther Deschner
2008-02-05 15:03:54 +01:00
parent 0e1386f748
commit 1ac767b0d8
2 changed files with 76 additions and 114 deletions

View File

@@ -2276,15 +2276,18 @@ NTSTATUS _samr_query_usergroups(pipes_struct *p, SAMR_Q_QUERY_USERGROUPS *q_u, S
}
/*******************************************************************
_samr_query_domain_info
samr_QueryDomainInfo_internal
********************************************************************/
NTSTATUS _samr_query_domain_info(pipes_struct *p,
SAMR_Q_QUERY_DOMAIN_INFO *q_u,
SAMR_R_QUERY_DOMAIN_INFO *r_u)
static NTSTATUS samr_QueryDomainInfo_internal(const char *fn_name,
pipes_struct *p,
struct policy_handle *handle,
uint32_t level,
union samr_DomainInfo **dom_info_ptr)
{
NTSTATUS status = NT_STATUS_OK;
struct samr_info *info = NULL;
SAM_UNK_CTR *ctr;
union samr_DomainInfo *dom_info;
uint32 min_pass_len,pass_hist,password_properties;
time_t u_expire, u_min_age;
NTTIME nt_expire, nt_min_age;
@@ -2302,22 +2305,21 @@ NTSTATUS _samr_query_domain_info(pipes_struct *p,
uint32 num_users=0, num_groups=0, num_aliases=0;
if ((ctr = TALLOC_ZERO_P(p->mem_ctx, SAM_UNK_CTR)) == NULL) {
DEBUG(5,("%s: %d\n", fn_name, __LINE__));
dom_info = TALLOC_ZERO_P(p->mem_ctx, union samr_DomainInfo);
if (!dom_info) {
return NT_STATUS_NO_MEMORY;
}
ZERO_STRUCTP(ctr);
r_u->status = NT_STATUS_OK;
DEBUG(5,("_samr_query_domain_info: %d\n", __LINE__));
*dom_info_ptr = dom_info;
/* find the policy handle. open a policy on it. */
if (!find_policy_by_hnd(p, &q_u->domain_pol, (void **)(void *)&info)) {
if (!find_policy_by_hnd(p, handle, (void **)(void *)&info)) {
return NT_STATUS_INVALID_HANDLE;
}
switch (q_u->switch_value) {
switch (level) {
case 0x01:
become_root();
@@ -2346,8 +2348,12 @@ NTSTATUS _samr_query_domain_info(pipes_struct *p,
unix_to_nt_time_abs(&nt_expire, u_expire);
unix_to_nt_time_abs(&nt_min_age, u_min_age);
init_unk_info1(&ctr->info.inf1, (uint16)min_pass_len, (uint16)pass_hist,
password_properties, nt_expire, nt_min_age);
init_samr_DomInfo1(&dom_info->info1,
(uint16)min_pass_len,
(uint16)pass_hist,
password_properties,
nt_expire,
nt_min_age);
break;
case 0x02:
@@ -2375,8 +2381,18 @@ NTSTATUS _samr_query_domain_info(pipes_struct *p,
if (lp_server_role() == ROLE_DOMAIN_BDC)
server_role = ROLE_DOMAIN_BDC;
init_unk_info2(&ctr->info.inf2, lp_serverstring(), lp_workgroup(), global_myname(), seq_num,
num_users, num_groups, num_aliases, nt_logout, server_role);
init_samr_DomInfo2(&dom_info->info2,
nt_logout,
lp_serverstring(),
lp_workgroup(),
global_myname(),
seq_num,
1,
server_role,
1,
num_users,
num_groups,
num_aliases);
break;
case 0x03:
@@ -2396,26 +2412,32 @@ NTSTATUS _samr_query_domain_info(pipes_struct *p,
unix_to_nt_time_abs(&nt_logout, u_logout);
init_unk_info3(&ctr->info.inf3, nt_logout);
init_samr_DomInfo3(&dom_info->info3,
nt_logout);
break;
case 0x04:
init_unk_info4(&ctr->info.inf4, lp_serverstring());
init_samr_DomInfo4(&dom_info->info4,
lp_serverstring());
break;
case 0x05:
init_unk_info5(&ctr->info.inf5, get_global_sam_name());
init_samr_DomInfo5(&dom_info->info5,
get_global_sam_name());
break;
case 0x06:
/* NT returns its own name when a PDC. win2k and later
* only the name of the PDC if itself is a BDC (samba4
* idl) */
init_unk_info6(&ctr->info.inf6, global_myname());
init_samr_DomInfo6(&dom_info->info6,
global_myname());
break;
case 0x07:
server_role = ROLE_DOMAIN_PDC;
if (lp_server_role() == ROLE_DOMAIN_BDC)
server_role = ROLE_DOMAIN_BDC;
init_unk_info7(&ctr->info.inf7, server_role);
init_samr_DomInfo7(&dom_info->info7,
server_role);
break;
case 0x08:
@@ -2431,7 +2453,9 @@ NTSTATUS _samr_query_domain_info(pipes_struct *p,
unbecome_root();
init_unk_info8(&ctr->info.inf8, (uint32) seq_num);
init_samr_DomInfo8(&dom_info->info8,
seq_num,
0);
break;
case 0x0c:
@@ -2458,18 +2482,32 @@ NTSTATUS _samr_query_domain_info(pipes_struct *p,
unix_to_nt_time_abs(&nt_lock_duration, u_lock_duration);
unix_to_nt_time_abs(&nt_reset_time, u_reset_time);
init_unk_info12(&ctr->info.inf12, nt_lock_duration, nt_reset_time, (uint16)lockout);
init_samr_DomInfo12(&dom_info->info12,
nt_lock_duration,
nt_reset_time,
(uint16)lockout);
break;
default:
return NT_STATUS_INVALID_INFO_CLASS;
}
}
DEBUG(5,("%s: %d\n", fn_name, __LINE__));
init_samr_r_query_domain_info(r_u, q_u->switch_value, ctr, NT_STATUS_OK);
return status;
}
DEBUG(5,("_samr_query_domain_info: %d\n", __LINE__));
/*******************************************************************
_samr_QueryDomainInfo
********************************************************************/
return r_u->status;
NTSTATUS _samr_QueryDomainInfo(pipes_struct *p,
struct samr_QueryDomainInfo *r)
{
return samr_QueryDomainInfo_internal("_samr_QueryDomainInfo",
p,
r->in.domain_handle,
r->in.level,
r->out.info);
}
/* W2k3 seems to use the same check for all 3 objects that can be created via
@@ -4993,31 +5031,17 @@ NTSTATUS _samr_RemoveMemberFromForeignDomain(pipes_struct *p,
}
/*******************************************************************
_samr_query_domain_info2
_samr_QueryDomainInfo2
********************************************************************/
NTSTATUS _samr_query_domain_info2(pipes_struct *p,
SAMR_Q_QUERY_DOMAIN_INFO2 *q_u,
SAMR_R_QUERY_DOMAIN_INFO2 *r_u)
NTSTATUS _samr_QueryDomainInfo2(pipes_struct *p,
struct samr_QueryDomainInfo2 *r)
{
SAMR_Q_QUERY_DOMAIN_INFO q;
SAMR_R_QUERY_DOMAIN_INFO r;
ZERO_STRUCT(q);
ZERO_STRUCT(r);
DEBUG(5,("_samr_query_domain_info2: %d\n", __LINE__));
q.domain_pol = q_u->domain_pol;
q.switch_value = q_u->switch_value;
r_u->status = _samr_query_domain_info(p, &q, &r);
r_u->ptr_0 = r.ptr_0;
r_u->switch_value = r.switch_value;
r_u->ctr = r.ctr;
return r_u->status;
return samr_QueryDomainInfo_internal("_samr_QueryDomainInfo2",
p,
r->in.domain_handle,
r->in.level,
r->out.info);
}
/*******************************************************************
@@ -5108,16 +5132,6 @@ NTSTATUS _samr_EnumDomains(pipes_struct *p,
/****************************************************************
****************************************************************/
NTSTATUS _samr_QueryDomainInfo(pipes_struct *p,
struct samr_QueryDomainInfo *r)
{
p->rng_fault_state = true;
return NT_STATUS_NOT_IMPLEMENTED;
}
/****************************************************************
****************************************************************/
NTSTATUS _samr_SetDomainInfo(pipes_struct *p,
struct samr_SetDomainInfo *r)
{
@@ -5318,16 +5332,6 @@ NTSTATUS _samr_TestPrivateFunctionsUser(pipes_struct *p,
/****************************************************************
****************************************************************/
NTSTATUS _samr_QueryDomainInfo2(pipes_struct *p,
struct samr_QueryDomainInfo2 *r)
{
p->rng_fault_state = true;
return NT_STATUS_NOT_IMPLEMENTED;
}
/****************************************************************
****************************************************************/
NTSTATUS _samr_QueryUserInfo2(pipes_struct *p,
struct samr_QueryUserInfo2 *r)
{