svn commit: samba r2847 - in trunk/source/rpc_server: .
mimir at samba.org
mimir at samba.org
Thu Oct 7 14:03:58 GMT 2004
Author: mimir
Date: 2004-10-07 14:03:57 +0000 (Thu, 07 Oct 2004)
New Revision: 2847
WebSVN: http://websvn.samba.org/websvn/changeset.php?rep=samba&path=/trunk/source/rpc_server&rev=2847&nolog=1
Log:
Big patch. Switch from secrets_* functions to new trust passwords
api integrated with passdb interface.
- use pdb_* trust passwords interface instead of secrets_*
rafal
Modified:
trunk/source/rpc_server/srv_lsa_nt.c
Changeset:
Modified: trunk/source/rpc_server/srv_lsa_nt.c
===================================================================
--- trunk/source/rpc_server/srv_lsa_nt.c 2004-10-07 14:01:29 UTC (rev 2846)
+++ trunk/source/rpc_server/srv_lsa_nt.c 2004-10-07 14:03:57 UTC (rev 2847)
@@ -490,6 +490,7 @@
{
struct lsa_info *info;
uint32 enum_context = q_u->enum_context;
+ int i = 0;
/*
* preferred length is set to 5 as a "our" preferred length
@@ -498,6 +499,7 @@
* it needs further investigation how to optimally choose this value
*/
uint32 max_num_domains = q_u->preferred_len < 5 ? q_u->preferred_len : 10;
+ SAM_TRUST_PASSWD *trust = NULL;
TRUSTDOM **trust_doms;
uint32 num_domains;
NTSTATUS nt_status;
@@ -509,16 +511,48 @@
if (!(info->access & POLICY_VIEW_LOCAL_INFORMATION))
return NT_STATUS_ACCESS_DENIED;
- nt_status = secrets_get_trusted_domains(p->mem_ctx, (int *)&enum_context, max_num_domains, (int *)&num_domains, &trust_doms);
+ trust_doms = talloc_zero(p->mem_ctx, sizeof(*trust_doms) * max_num_domains);
- if (!NT_STATUS_IS_OK(nt_status) &&
- !NT_STATUS_EQUAL(nt_status, STATUS_MORE_ENTRIES) &&
- !NT_STATUS_EQUAL(nt_status, NT_STATUS_NO_MORE_ENTRIES)) {
+ /* Init trust password */
+ nt_status = pdb_init_trustpw_talloc(p->mem_ctx, &trust);
+ if (!NT_STATUS_IS_OK(nt_status)) {
+ DEBUG(0, ("Could not initialise trust password\n"));
return nt_status;
- } else {
- r_u->status = nt_status;
}
+ /* Accessing passdb requires root privileges */
+ become_root();
+
+ /* Start trust passwords enumeration */
+ nt_status = pdb_settrustpwent();
+ if (!NT_STATUS_IS_OK(nt_status)) {
+ DEBUG(0, ("Unable to start trusts enumeration\n"));
+ return nt_status;
+ }
+
+ nt_status = pdb_gettrustpwent(trust);
+ while ((NT_STATUS_IS_OK(nt_status) ||
+ NT_STATUS_EQUAL(nt_status, STATUS_MORE_ENTRIES)) &&
+ i < enum_context + max_num_domains) {
+
+ if (i >= enum_context && i < enum_context + max_num_domains) {
+ TRUSTDOM *trust_dom = talloc(p->mem_ctx, sizeof(TRUSTDOM));
+ trust_dom->name = talloc_strdup_w(p->mem_ctx, pdb_get_tp_domain_name(trust));
+ sid_copy(&trust_dom->sid, pdb_get_tp_domain_sid(trust));
+ trust_doms[i - enum_context] = trust_dom;
+ }
+ i++;
+ nt_status = pdb_gettrustpwent(trust);
+ }
+
+ /* End trust passwords enumeration */
+ pdb_endtrustpwent();
+
+ /* Become user back again */
+ unbecome_root();
+
+ num_domains = i;
+
/* set up the lsa_enum_trust_dom response */
init_r_enum_trust_dom(p->mem_ctx, r_u, enum_context, max_num_domains, num_domains, trust_doms);
More information about the samba-cvs
mailing list