r26238: Add a loadparm context parameter to torture_context, remove more uses of...
[jelmer/samba4-debian.git] / source / 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/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/utils.h"
28
29 #define TEST_GROUPNAME  "libnetgroupinfotest"
30
31
32 static bool test_groupinfo(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx,
33                            struct policy_handle *domain_handle,
34                            struct dom_sid2 *domain_sid, const char* group_name,
35                            uint32_t *rid)
36 {
37         const uint16_t level = 5;
38         NTSTATUS status;
39         struct libnet_rpc_groupinfo group;
40         struct dom_sid *group_sid;
41         
42         group_sid = dom_sid_add_rid(mem_ctx, domain_sid, *rid);
43         
44         group.in.domain_handle = *domain_handle;
45         group.in.sid           = dom_sid_string(mem_ctx, group_sid);
46         group.in.level         = level;       /* this should be extended */
47
48         printf("Testing sync libnet_rpc_groupinfo (SID argument)\n");
49         status = libnet_rpc_groupinfo(p, mem_ctx, &group);
50         if (!NT_STATUS_IS_OK(status)) {
51                 printf("Failed to call sync libnet_rpc_userinfo - %s\n", nt_errstr(status));
52                 return false;
53         }
54
55         ZERO_STRUCT(group);
56
57         group.in.domain_handle  = *domain_handle;
58         group.in.sid            = NULL;
59         group.in.groupname      = TEST_GROUPNAME;
60         group.in.level          = level;
61
62         printf("Testing sync libnet_rpc_groupinfo (groupname argument)\n");
63         status = libnet_rpc_groupinfo(p, mem_ctx, &group);
64         if (!NT_STATUS_IS_OK(status)) {
65                 printf("Failed to call sync libnet_rpc_groupinfo - %s\n", nt_errstr(status));
66                 return false;
67         }
68
69         return true;
70 }
71
72
73 bool torture_groupinfo(struct torture_context *torture)
74 {
75         NTSTATUS status;
76         struct dcerpc_pipe *p;
77         TALLOC_CTX *mem_ctx;
78         bool ret = true;
79         struct policy_handle h;
80         struct lsa_String name;
81         struct dom_sid2 sid;
82         uint32_t rid;
83
84         mem_ctx = talloc_init("test_userinfo");
85
86         status = torture_rpc_connection(torture, 
87                                         &p,
88                                         &ndr_table_samr);
89         
90         if (!NT_STATUS_IS_OK(status)) {
91                 return false;
92         }
93
94         name.string = lp_workgroup(torture->lp_ctx);
95
96         /*
97          * Testing synchronous version
98          */
99         if (!test_opendomain(p, mem_ctx, &h, &name, &sid)) {
100                 ret = false;
101                 goto done;
102         }
103
104         if (!test_group_create(p, mem_ctx, &h, TEST_GROUPNAME, &rid)) {
105                 ret = false;
106                 goto done;
107         }
108
109         if (!test_groupinfo(p, mem_ctx, &h, &sid, TEST_GROUPNAME, &rid)) {
110                 ret = false;
111                 goto done;
112         }
113
114         if (!test_group_cleanup(p, mem_ctx, &h, TEST_GROUPNAME)) {
115                 ret = false;
116                 goto done;
117         }
118
119 done:
120         talloc_free(mem_ctx);
121
122         return ret;
123 }