• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /asuswrt-rt-n18u-9.0.0.4.380.2695/release/src-rt-6.x.4708/router/samba-3.5.8/testsuite/smbd/
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
26BOOL failed;
27SEC_DESC *sd;
28
29struct ace_entry acl_empty[] = {
30	{ 0, 0, 0, NULL}
31};
32
33/* Check that access is always allowed for a NULL security descriptor */
34
35BOOL 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
81int 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}
109