s4:irpc: avoid c++ reserved word 'private'
[samba.git] / source4 / libnet / libnet_domain.c
index 500d5f817d355d06d70f0eebf354166bd423427f..eb6920d88ef62ac68c68a1ab58d5201e41b28110 100644 (file)
@@ -40,6 +40,7 @@ struct domain_open_samr_state {
        uint32_t                  access_mask;
        struct policy_handle      connect_handle;
        struct policy_handle      domain_handle;
+       struct dom_sid2           *domain_sid;
 
        /* information about the progress */
        void (*monitor_fn)(struct monitor_msg*);
@@ -159,6 +160,8 @@ static void continue_domain_open_connect(struct rpc_request *req)
        /* prepare for samr_LookupDomain call */
        r->in.connect_handle = &s->connect_handle;
        r->in.domain_name    = &s->domain_name;
+       r->out.sid           = talloc(s, struct dom_sid2 *);
+       if (composite_nomem(r->out.sid, c)) return;
 
        lookup_req = dcerpc_samr_LookupDomain_send(s->pipe, c, r);
        if (composite_nomem(lookup_req, c)) return;
@@ -209,7 +212,7 @@ static void continue_domain_open_lookup(struct rpc_request *req)
        /* prepare for samr_OpenDomain call */
        r->in.connect_handle = &s->connect_handle;
        r->in.access_mask    = SEC_FLAG_MAXIMUM_ALLOWED;
-       r->in.sid            = s->lookup.out.sid;
+       r->in.sid            = *s->lookup.out.sid;
        r->out.domain_handle = &s->domain_handle;
 
        opendom_req = dcerpc_samr_OpenDomain_send(s->pipe, c, r);
@@ -284,7 +287,7 @@ struct composite_context *libnet_DomainOpenSamr_send(struct libnet_context *ctx,
                /* attempting to connect a domain controller */
                s->rpcconn.level           = LIBNET_RPC_CONNECT_DC;
                s->rpcconn.in.name         = io->in.domain_name;
-               s->rpcconn.in.dcerpc_iface = &dcerpc_table_samr;
+               s->rpcconn.in.dcerpc_iface = &ndr_table_samr;
                
                /* send rpc pipe connect request */
                rpcconn_req = libnet_RpcConnect_send(ctx, c, &s->rpcconn, s->monitor_fn);
@@ -361,6 +364,7 @@ NTSTATUS libnet_DomainOpenSamr_recv(struct composite_context *c, struct libnet_c
                   libnet functions */
                ctx->samr.connect_handle = s->connect_handle;
                ctx->samr.handle      = s->domain_handle;
+               ctx->samr.sid         = talloc_steal(ctx, *s->lookup.out.sid);
                ctx->samr.name        = talloc_steal(ctx, s->domain_name.string);
                ctx->samr.access_mask = s->access_mask;
        }
@@ -426,7 +430,7 @@ struct composite_context* libnet_DomainOpenLsa_send(struct libnet_context *ctx,
                /* attempting to connect a domain controller */
                s->rpcconn.level           = LIBNET_RPC_CONNECT_DC;
                s->rpcconn.in.name         = talloc_strdup(c, io->in.domain_name);
-               s->rpcconn.in.dcerpc_iface = &dcerpc_table_lsarpc;
+               s->rpcconn.in.dcerpc_iface = &ndr_table_lsarpc;
                
                /* send rpc pipe connect request */
                rpcconn_req = libnet_RpcConnect_send(ctx, c, &s->rpcconn, s->monitor_fn);
@@ -844,7 +848,10 @@ NTSTATUS libnet_DomainCloseSamr_recv(struct composite_context *c, struct libnet_
                /* domain policy handle closed successfully */
 
                ZERO_STRUCT(ctx->samr.handle);
+               talloc_free(discard_const_p(char, ctx->samr.name));
+               talloc_free(ctx->samr.sid);
                ctx->samr.name = NULL;
+               ctx->samr.sid = NULL;
 
                io->out.error_string = talloc_asprintf(mem_ctx, "Success");
 
@@ -994,6 +1001,10 @@ static void continue_samr_connect(struct rpc_request *req)
        s->enumdom.in.resume_handle  = &s->resume_handle;
        s->enumdom.in.buf_size       = s->buf_size;
        s->enumdom.out.resume_handle = &s->resume_handle;
+       s->enumdom.out.num_entries   = talloc(s, uint32_t);
+       if (composite_nomem(s->enumdom.out.num_entries, c)) return;
+       s->enumdom.out.sam           = talloc(s, struct samr_SamArray *);
+       if (composite_nomem(s->enumdom.out.sam, c)) return;
 
        enumdom_req = dcerpc_samr_EnumDomains_send(s->ctx->samr.pipe, c, &s->enumdom);
        if (composite_nomem(enumdom_req, c)) return;
@@ -1109,16 +1120,16 @@ static struct domainlist* get_domain_list(TALLOC_CTX *mem_ctx, struct domain_lis
        /* prepare domains array */
        if (s->domains == NULL) {
                s->domains = talloc_array(mem_ctx, struct domainlist,
-                                         s->enumdom.out.num_entries);
+                                         *s->enumdom.out.num_entries);
        } else {
                s->domains = talloc_realloc(mem_ctx, s->domains, struct domainlist,
-                                           s->count + s->enumdom.out.num_entries);
+                                           s->count + *s->enumdom.out.num_entries);
        }
 
        /* copy domain names returned from samr_EnumDomains call */
-       for (i = s->count; i < s->count + s->enumdom.out.num_entries; i++)
+       for (i = s->count; i < s->count + *s->enumdom.out.num_entries; i++)
        {
-               struct lsa_String *domain_name = &s->enumdom.out.sam->entries[i - s->count].name;
+               struct lsa_String *domain_name = &(*s->enumdom.out.sam)->entries[i - s->count].name;
 
                /* strdup name as a child of allocated array to make it follow the array
                   in case of talloc_steal or talloc_free */
@@ -1127,7 +1138,7 @@ static struct domainlist* get_domain_list(TALLOC_CTX *mem_ctx, struct domain_lis
        }
 
        /* number of entries returned (domains enumerated) */
-       s->count += s->enumdom.out.num_entries;
+       s->count += *s->enumdom.out.num_entries;
        
        return s->domains;
 }
@@ -1171,7 +1182,7 @@ struct composite_context* libnet_DomainList_send(struct libnet_context *ctx,
                /* prepare rpc connect call */
                s->rpcconn.level           = LIBNET_RPC_CONNECT_SERVER;
                s->rpcconn.in.name         = s->hostname;
-               s->rpcconn.in.dcerpc_iface = &dcerpc_table_samr;
+               s->rpcconn.in.dcerpc_iface = &ndr_table_samr;
 
                rpcconn_req = libnet_RpcConnect_send(ctx, c, &s->rpcconn, s->monitor_fn);
                if (composite_nomem(rpcconn_req, c)) return c;