r23785: use the GPLv3 boilerplate as recommended by the FSF and the license text
[samba.git] / testsuite / smbd / se_access_check_empty.c
1 /* 
2    Unix SMB/Netbios implementation.
3    Version 1.9.
4    Security context tests
5    Copyright (C) Tim Potter 2000
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 "se_access_check_utils.h"
23
24 /* Globals */
25
26 BOOL failed;
27 SEC_DESC *sd;
28
29 struct ace_entry acl_empty[] = {
30         { 0, 0, 0, NULL}
31 };
32
33 /* Check that access is always allowed for a NULL security descriptor */
34
35 BOOL emptysd_check(struct passwd *pw, int ngroups, gid_t *groups)
36 {
37         uint32 acc_granted, status;
38         BOOL result;
39
40         /* For no DACL, access is allowed and the desired access mask is
41            returned */
42
43         result = se_access_check(sd, pw->pw_uid, pw->pw_gid,
44                                  ngroups, groups, 
45                                  SEC_RIGHTS_MAXIMUM_ALLOWED,
46                                  &acc_granted, &status);
47         
48         if (!result || !(acc_granted == SEC_RIGHTS_MAXIMUM_ALLOWED)) {
49                 printf("FAIL: no dacl for %s (%d/%d)\n", pw->pw_name,
50                        pw->pw_uid, pw->pw_gid);
51                 failed = True;
52         }
53
54         result = se_access_check(sd, pw->pw_uid, pw->pw_gid,
55                                  ngroups, groups, 0x1234,
56                                  &acc_granted, &status);
57         
58         if (!result || !(acc_granted == 0x1234)) {
59                 printf("FAIL: no dacl2 for %s (%d/%d)\n", pw->pw_name,
60                        pw->pw_uid, pw->pw_gid);
61                 failed = True;
62         }
63
64         /* If desired access mask is empty then no access is allowed */
65
66         result = se_access_check(sd, pw->pw_uid, pw->pw_gid,
67                                  ngroups, groups, 0,
68                                  &acc_granted, &status);
69         
70         if (result) {
71                 printf("FAIL: zero desired access for %s (%d/%d)\n",
72                        pw->pw_name, pw->pw_uid, pw->pw_gid);
73                 failed = True;
74         }
75         
76         return True;
77 }
78
79 /* Main function */
80
81 int main(int argc, char **argv)
82 {
83         /* Initialisation */
84
85         generate_wellknown_sids();
86
87         /* Create security descriptor */
88
89         sd = build_sec_desc(acl_empty, NULL, NULL_SID, NULL_SID);
90
91         if (!sd) {
92                 printf("FAIL: could not build security descriptor\n");
93                 return 1;
94         }
95
96         /* Run test */
97
98         visit_pwdb(emptysd_check);
99
100         /* Return */
101
102         if (!failed) {
103                 printf("PASS\n");
104                 return 0;
105         } 
106
107         return 1;
108 }