Author: abartlet Date: 2007-08-02 13:08:39 +0000 (Thu, 02 Aug 2007) New Revision: 24127
WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=24127 Log: Set the Domain SID into the libnet context, and have libnet_UserInfo return full SIDs for the user SID and primary group sid. This should help kai with his getpwnam work in winbind. Andrew Bartlett Modified: branches/SAMBA_4_0/source/libnet/libnet.h branches/SAMBA_4_0/source/libnet/libnet_domain.c branches/SAMBA_4_0/source/libnet/libnet_user.c branches/SAMBA_4_0/source/libnet/libnet_user.h branches/SAMBA_4_0/source/torture/libnet/libnet_domain.c branches/SAMBA_4_0/source/winbind/wb_init_domain.c Changeset: Modified: branches/SAMBA_4_0/source/libnet/libnet.h =================================================================== --- branches/SAMBA_4_0/source/libnet/libnet.h 2007-08-02 09:23:16 UTC (rev 24126) +++ branches/SAMBA_4_0/source/libnet/libnet.h 2007-08-02 13:08:39 UTC (rev 24127) @@ -28,7 +28,8 @@ /* samr connection parameters - opened handles and related properties */ struct { struct dcerpc_pipe *pipe; - const char *name; + char *name; + struct dom_sid *sid; uint32_t access_mask; struct policy_handle handle; struct policy_handle connect_handle; @@ -38,7 +39,7 @@ /* lsa connection parameters - opened handles and related properties */ struct { struct dcerpc_pipe *pipe; - const char *name; + char *name; uint32_t access_mask; struct policy_handle handle; } lsa; Modified: branches/SAMBA_4_0/source/libnet/libnet_domain.c =================================================================== --- branches/SAMBA_4_0/source/libnet/libnet_domain.c 2007-08-02 09:23:16 UTC (rev 24126) +++ branches/SAMBA_4_0/source/libnet/libnet_domain.c 2007-08-02 13:08:39 UTC (rev 24127) @@ -361,6 +361,7 @@ 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; } @@ -844,7 +845,10 @@ /* domain policy handle closed successfully */ ZERO_STRUCT(ctx->samr.handle); + talloc_free(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"); Modified: branches/SAMBA_4_0/source/libnet/libnet_user.c =================================================================== --- branches/SAMBA_4_0/source/libnet/libnet_user.c 2007-08-02 09:23:16 UTC (rev 24126) +++ branches/SAMBA_4_0/source/libnet/libnet_user.c 2007-08-02 13:08:39 UTC (rev 24127) @@ -773,6 +773,9 @@ s = talloc_get_type(c->private_data, struct user_info_state); info = &s->userinfo.out.info.info21; + r->out.user_sid = dom_sid_add_rid(mem_ctx, s->ctx->samr.sid, info->rid); + r->out.primary_group_sid = dom_sid_add_rid(mem_ctx, s->ctx->samr.sid, info->primary_gid); + /* string fields */ r->out.account_name = talloc_steal(mem_ctx, info->account_name.string); r->out.full_name = talloc_steal(mem_ctx, info->full_name.string); Modified: branches/SAMBA_4_0/source/libnet/libnet_user.h =================================================================== --- branches/SAMBA_4_0/source/libnet/libnet_user.h 2007-08-02 09:23:16 UTC (rev 24126) +++ branches/SAMBA_4_0/source/libnet/libnet_user.h 2007-08-02 13:08:39 UTC (rev 24127) @@ -92,6 +92,8 @@ const char *domain_name; } in; struct { + struct dom_sid *user_sid; + struct dom_sid *primary_group_sid; const char *account_name; const char *full_name; const char *description; Modified: branches/SAMBA_4_0/source/torture/libnet/libnet_domain.c =================================================================== --- branches/SAMBA_4_0/source/torture/libnet/libnet_domain.c 2007-08-02 09:23:16 UTC (rev 24126) +++ branches/SAMBA_4_0/source/torture/libnet/libnet_domain.c 2007-08-02 13:08:39 UTC (rev 24127) @@ -34,7 +34,7 @@ static BOOL test_opendomain_samr(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx, struct policy_handle *handle, struct lsa_String *domname, - uint32_t *access_mask) + uint32_t *access_mask, struct dom_sid **sid) { NTSTATUS status; struct policy_handle h, domain_handle; @@ -69,7 +69,7 @@ r3.in.connect_handle = &h; r3.in.access_mask = *access_mask; - r3.in.sid = r2.out.sid; + r3.in.sid = *sid = r2.out.sid; r3.out.domain_handle = &domain_handle; printf("opening domain\n"); @@ -320,6 +320,7 @@ struct policy_handle h; struct dcerpc_pipe *p; struct libnet_DomainClose r; + struct dom_sid *sid; bindstr = torture_setting_string(torture, "binding", NULL); status = dcerpc_parse_binding(torture, bindstr, &binding); @@ -347,18 +348,19 @@ goto done; } - domain_name.string = lp_workgroup(); + domain_name.string = talloc_strdup(mem_ctx, lp_workgroup()); - if (!test_opendomain_samr(p, torture, &h, &domain_name, &access_mask)) { + if (!test_opendomain_samr(p, torture, &h, &domain_name, &access_mask, &sid)) { d_printf("failed to open domain on samr service\n"); ret = False; goto done; } ctx->samr.pipe = p; - ctx->samr.name = domain_name.string; + ctx->samr.name = talloc_steal(ctx, domain_name.string); ctx->samr.access_mask = access_mask; ctx->samr.handle = h; + ctx->samr.sid = talloc_steal(ctx, sid); /* we have to use pipe's event context, otherwise the call will hang indefinitely - this wouldn't be the case if pipe was opened by means of libnet call */ Modified: branches/SAMBA_4_0/source/winbind/wb_init_domain.c =================================================================== --- branches/SAMBA_4_0/source/winbind/wb_init_domain.c 2007-08-02 09:23:16 UTC (rev 24126) +++ branches/SAMBA_4_0/source/winbind/wb_init_domain.c 2007-08-02 13:08:39 UTC (rev 24127) @@ -396,6 +396,7 @@ talloc_steal(state->domain->libnet_ctx->samr.pipe, state->domain->samr_binding); state->domain->libnet_ctx->samr.access_mask = SEC_FLAG_MAXIMUM_ALLOWED; state->domain->libnet_ctx->samr.name = state->domain->info->name; + state->domain->libnet_ctx->samr.sid = state->domain->info->sid; state->domain->ldap_conn = ldap4_new_connection(state->domain, state->ctx->event_ctx);
