summaryrefslogtreecommitdiff
path: root/librpc/idl/smb_acl.idl
blob: f7332d9ac71292f6ed7b7a93bb5df118a7596e87 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
/* 
   Unix SMB/CIFS implementation.
   Portable SMB ACL interface
   Copyright (C) Jeremy Allison 2000
   Copyright (C) Andrew Bartlett 2012
   
   This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation; either version 3 of the License, or
   (at your option) any later version.
   
   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.
   
   You should have received a copy of the GNU General Public License
   along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/


/* Allow the smb_acl interface to be pushed into an NDR blob and read/written in python */
[
	pointer_default(unique)
]
interface smb_acl
{

	const int SMB_ACL_READ 				= 4;
	const int SMB_ACL_WRITE 			= 2;
	const int SMB_ACL_EXECUTE			= 1;

	/* Types of ACLs. */
	typedef enum {
		SMB_ACL_TAG_INVALID = 0,
		SMB_ACL_USER        = 1,
		SMB_ACL_USER_OBJ    = 2,
		SMB_ACL_GROUP       = 3,
		SMB_ACL_GROUP_OBJ   = 4,
		SMB_ACL_OTHER       = 5,
		SMB_ACL_MASK        = 6
	} smb_acl_tag_t;

	typedef struct {
		uid_t uid;
	} smb_acl_user;

	typedef struct {
		gid_t gid;
	} smb_acl_group;

	typedef [switch_type(uint16)] union {
		[case (SMB_ACL_USER)] smb_acl_user user;
		[case (SMB_ACL_USER_OBJ)];
		[case (SMB_ACL_GROUP)] smb_acl_group group;
		[case (SMB_ACL_GROUP_OBJ)];
		[case (SMB_ACL_OTHER)];
		[case (SMB_ACL_MASK)];		
	} smb_acl_entry_info;

	typedef struct {
		smb_acl_tag_t a_type;
		[switch_is(a_type)] smb_acl_entry_info info;
		mode_t a_perm;
	} smb_acl_entry;
	
	[public] typedef struct {
		int	count;
		[value(0)] int	next;
		[size_is(count)] smb_acl_entry acl[*];
	} smb_acl_t;
	
	const int SMB_ACL_FIRST_ENTRY		= 0;
	const int SMB_ACL_NEXT_ENTRY		= 1;
		
	const int SMB_ACL_TYPE_ACCESS		= 0;
	const int SMB_ACL_TYPE_DEFAULT		= 1;
}