r4713: Add initial support for QueryTrustedDomainInfo on LSA.
authorAndrew Bartlett <abartlet@samba.org>
Wed, 12 Jan 2005 11:54:11 +0000 (11:54 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 18:08:47 +0000 (13:08 -0500)
(more info levels to come)

Andrew Bartlett
(This used to be commit 175ae7599ee06d8856ffb8912c7fe4e68ebe5feb)

source4/rpc_server/lsa/dcesrv_lsa.c

index 6ea8d4b78c6aab11bff5774469409961c068a74b..2bef02be114292b8d27c3a43372837056ef3a638 100644 (file)
@@ -829,9 +829,54 @@ static NTSTATUS lsa_DeleteTrustDomain(struct dcesrv_call_state *dce_call, TALLOC
   lsa_QueryTrustedDomainInfo
 */
 static NTSTATUS lsa_QueryTrustedDomainInfo(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
-                      struct lsa_QueryTrustedDomainInfo *r)
+                                          struct lsa_QueryTrustedDomainInfo *r)
 {
-       DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
+       struct dcesrv_handle *h;
+       struct lsa_trusted_domain_state *trusted_domain_state;
+       struct ldb_message *msg;
+       int ret;
+       struct ldb_message **res;
+       const char *attrs[] = {
+               "cn",
+               "flatname",
+               "posixOffset",
+               "securityIdentifier",
+               NULL
+       };
+
+       DCESRV_PULL_HANDLE(h, r->in.trustdom_handle, LSA_HANDLE_TRUSTED_DOMAIN);
+
+       trusted_domain_state = h->data;
+
+       /* pull all the user attributes */
+       ret = samdb_search(trusted_domain_state->policy->sam_ctx, mem_ctx, NULL, &res, attrs,
+                          "dn=%s", trusted_domain_state->trusted_domain_dn);
+       if (ret != 1) {
+               return NT_STATUS_INTERNAL_DB_CORRUPTION;
+       }
+       msg = res[0];
+       
+       r->out.info = talloc(mem_ctx, union lsa_TrustedDomainInfo);
+       if (!r->out.info) {
+               return NT_STATUS_NO_MEMORY;
+       }
+       switch (r->in.level) {
+       case LSA_TRUSTED_DOMAIN_INFO_NAME:
+               r->out.info->name.netbios_name.string
+                       = samdb_result_string(msg, "flatname", NULL);                                      
+               break;
+       case LSA_TRUSTED_DOMAIN_INFO_POSIX_OFFSET:
+               r->out.info->posix_offset.posix_offset
+                       = samdb_result_uint(msg, "posixOffset", 0);                                        
+               break;
+       default:
+               /* oops, we don't want to return the info after all */
+               talloc_free(r->out.info);
+               r->out.info = NULL;
+               return NT_STATUS_INVALID_INFO_CLASS;
+       }
+
+       return NT_STATUS_OK;
 }
 
 
@@ -2070,10 +2115,6 @@ static NTSTATUS lsa_QuerySecret(struct dcesrv_call_state *dce_call, TALLOC_CTX *
 
        NTSTATUS nt_status;
 
-       time_t now = time(NULL);
-       NTTIME now_nt;
-       unix_to_nt_time(&now_nt, now);
-
        DCESRV_PULL_HANDLE(h, r->in.sec_handle, LSA_HANDLE_SECRET);
 
        secret_state = h->data;