s4-loadparm: 2nd half of lp_ to lpcfg_ conversion
[sfrench/samba-autobuild/.git] / source4 / torture / libnet / groupinfo.c
1 /*
2    Unix SMB/CIFS implementation.
3    Test suite for libnet calls.
4
5    Copyright (C) Rafal Szczesniak 2007
6
7    This program is free software; you can redistribute it and/or modify
8    it under the terms of the GNU General Public License as published by
9    the Free Software Foundation; either version 3 of the License, or
10    (at your option) any later version.
11
12    This program is distributed in the hope that it will be useful,
13    but WITHOUT ANY WARRANTY; without even the implied warranty of
14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15    GNU General Public License for more details.
16
17    You should have received a copy of the GNU General Public License
18    along with this program.  If not, see <http://www.gnu.org/licenses/>.
19 */
20
21 #include "includes.h"
22 #include "torture/rpc/torture_rpc.h"
23 #include "libnet/libnet.h"
24 #include "libcli/security/security.h"
25 #include "librpc/gen_ndr/ndr_samr_c.h"
26 #include "param/param.h"
27 #include "torture/libnet/proto.h"
28
29 #define TEST_GROUPNAME  "libnetgroupinfotest"
30
31
32 static bool test_groupinfo(struct torture_context *tctx,
33                            struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx,
34                            struct policy_handle *domain_handle,
35                            struct dom_sid2 *domain_sid, const char* group_name,
36                            uint32_t *rid)
37 {
38         const uint16_t level = 5;
39         NTSTATUS status;
40         struct libnet_rpc_groupinfo group;
41         struct dom_sid *group_sid;
42
43         group_sid = dom_sid_add_rid(mem_ctx, domain_sid, *rid);
44
45         group.in.domain_handle = *domain_handle;
46         group.in.sid           = dom_sid_string(mem_ctx, group_sid);
47         group.in.level         = level;       /* this should be extended */
48
49         torture_comment(tctx, "Testing sync libnet_rpc_groupinfo (SID argument)\n");
50         status = libnet_rpc_groupinfo(p, mem_ctx, &group);
51         if (!NT_STATUS_IS_OK(status)) {
52                 torture_comment(tctx, "Failed to call sync libnet_rpc_userinfo - %s\n", nt_errstr(status));
53                 return false;
54         }
55
56         ZERO_STRUCT(group);
57
58         group.in.domain_handle  = *domain_handle;
59         group.in.sid            = NULL;
60         group.in.groupname      = TEST_GROUPNAME;
61         group.in.level          = level;
62
63         printf("Testing sync libnet_rpc_groupinfo (groupname argument)\n");
64         status = libnet_rpc_groupinfo(p, mem_ctx, &group);
65         if (!NT_STATUS_IS_OK(status)) {
66                 torture_comment(tctx, "Failed to call sync libnet_rpc_groupinfo - %s\n", nt_errstr(status));
67                 return false;
68         }
69
70         return true;
71 }
72
73
74 bool torture_groupinfo(struct torture_context *torture)
75 {
76         NTSTATUS status;
77         struct dcerpc_pipe *p;
78         TALLOC_CTX *mem_ctx;
79         bool ret = true;
80         struct policy_handle h;
81         struct lsa_String name;
82         struct dom_sid2 sid;
83         uint32_t rid;
84         struct dcerpc_binding_handle *b;
85
86         mem_ctx = talloc_init("test_userinfo");
87
88         status = torture_rpc_connection(torture,
89                                         &p,
90                                         &ndr_table_samr);
91
92         if (!NT_STATUS_IS_OK(status)) {
93                 return false;
94         }
95         b = p->binding_handle;
96
97         name.string = lpcfg_workgroup(torture->lp_ctx);
98
99         /*
100          * Testing synchronous version
101          */
102         if (!test_domain_open(torture, b, &name, mem_ctx, &h, &sid)) {
103                 ret = false;
104                 goto done;
105         }
106
107         if (!test_group_create(torture, b, mem_ctx, &h, TEST_GROUPNAME, &rid)) {
108                 ret = false;
109                 goto done;
110         }
111
112         if (!test_groupinfo(torture, p, mem_ctx, &h, &sid, TEST_GROUPNAME, &rid)) {
113                 ret = false;
114                 goto done;
115         }
116
117         if (!test_group_cleanup(torture, b, mem_ctx, &h, TEST_GROUPNAME)) {
118                 ret = false;
119                 goto done;
120         }
121
122 done:
123         talloc_free(mem_ctx);
124
125         return ret;
126 }