Home | History | Annotate | Download | only in rpcsvc
      1  0  stevel /*
      2  0  stevel  * CDDL HEADER START
      3  0  stevel  *
      4  0  stevel  * The contents of this file are subject to the terms of the
      5  0  stevel  * Common Development and Distribution License, Version 1.0 only
      6  0  stevel  * (the "License").  You may not use this file except in compliance
      7  0  stevel  * with the License.
      8  0  stevel  *
      9  0  stevel  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
     10  0  stevel  * or http://www.opensolaris.org/os/licensing.
     11  0  stevel  * See the License for the specific language governing permissions
     12  0  stevel  * and limitations under the License.
     13  0  stevel  *
     14  0  stevel  * When distributing Covered Code, include this CDDL HEADER in each
     15  0  stevel  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
     16  0  stevel  * If applicable, add the following below this CDDL HEADER, with the
     17  0  stevel  * fields enclosed by brackets "[]" replaced with your own identifying
     18  0  stevel  * information: Portions Copyright [yyyy] [name of copyright owner]
     19  0  stevel  *
     20  0  stevel  * CDDL HEADER END
     21  0  stevel  */
     22  0  stevel /*
     23  0  stevel  *	Copyright 1994,2001-2003 Sun Microsystems, Inc.
     24  0  stevel  *	All rights reserved.
     25  0  stevel  *	Use is subject to license terms.
     26  0  stevel  */
     27  0  stevel 
     28  0  stevel /*
     29  0  stevel  * ident	"%Z%%M%	%I%	%E% SMI"
     30  0  stevel  */
     31  0  stevel 
     32  0  stevel const NFS_ACL_MAX_ENTRIES = 1024;
     33  0  stevel 
     34  0  stevel typedef int uid;
     35  0  stevel typedef unsigned short o_mode;
     36  0  stevel 
     37  0  stevel /*
     38  0  stevel  * This is the format of an ACL which is passed over the network.
     39  0  stevel  */
     40  0  stevel struct aclent {
     41  0  stevel 	int type;
     42  0  stevel 	uid id;
     43  0  stevel 	o_mode perm;
     44  0  stevel };
     45  0  stevel 
     46  0  stevel /*
     47  0  stevel  * The values for the type element of the aclent structure.
     48  0  stevel  */
     49  0  stevel const NA_USER_OBJ = 0x1;	/* object owner */
     50  0  stevel const NA_USER = 0x2;		/* additional users */
     51  0  stevel const NA_GROUP_OBJ = 0x4;	/* owning group of the object */
     52  0  stevel const NA_GROUP = 0x8;		/* additional groups */
     53  0  stevel const NA_CLASS_OBJ = 0x10;	/* file group class and mask entry */
     54  0  stevel const NA_OTHER_OBJ = 0x20;	/* other entry for the object */
     55  0  stevel const NA_ACL_DEFAULT = 0x1000;	/* default flag */
     56  0  stevel 
     57  0  stevel /*
     58  0  stevel  * The bit field values for the perm element of the aclent
     59  0  stevel  * structure.  The three values can be combined to form any
     60  0  stevel  * of the 8 combinations.
     61  0  stevel  */
     62  0  stevel const NA_READ = 0x4;		/* read permission */
     63  0  stevel const NA_WRITE = 0x2;		/* write permission */
     64  0  stevel const NA_EXEC = 0x1;		/* exec permission */
     65  0  stevel 
     66  0  stevel /*
     67  0  stevel  * This is the structure which contains the ACL entries for a
     68  0  stevel  * particular entity.  It contains the ACL entries which apply
     69  0  stevel  * to this object plus any default ACL entries which are
     70  0  stevel  * inherited by its children.
     71  0  stevel  *
     72  0  stevel  * The values for the mask field are defined below.
     73  0  stevel  */
     74  0  stevel struct secattr {
     75  0  stevel 	u_int mask;
     76  0  stevel 	int aclcnt;
     77  0  stevel 	aclent aclent<NFS_ACL_MAX_ENTRIES>;
     78  0  stevel 	int dfaclcnt;
     79  0  stevel 	aclent dfaclent<NFS_ACL_MAX_ENTRIES>;
     80  0  stevel };
     81  0  stevel 
     82  0  stevel /*
     83  0  stevel  * The values for the mask element of the secattr struct as well
     84  0  stevel  * as for the mask element in the arguments in the GETACL2 and
     85  0  stevel  * GETACL3 procedures.
     86  0  stevel  */
     87  0  stevel const NA_ACL = 0x1;		/* aclent contains a valid list */
     88  0  stevel const NA_ACLCNT = 0x2;		/* the number of entries in the aclent list */
     89  0  stevel const NA_DFACL = 0x4;		/* dfaclent contains a valid list */
     90  0  stevel const NA_DFACLCNT = 0x8;	/* the number of entries in the dfaclent list */
     91  0  stevel 
     92  0  stevel /*
     93  0  stevel  * This the definition for the GETACL procedure which applies to
     94  0  stevel  * NFS Version 2.
     95  0  stevel  */
     96  0  stevel struct GETACL2args {
     97  0  stevel 	fhandle_t fh;
     98  0  stevel 	u_int mask;
     99  0  stevel };
    100  0  stevel 
    101  0  stevel struct GETACL2resok {
    102  0  stevel 	struct nfsfattr attr;
    103  0  stevel 	secattr acl;
    104  0  stevel };
    105  0  stevel 
    106  0  stevel union GETACL2res switch (enum nfsstat status) {
    107  0  stevel case ACL2_OK:
    108  0  stevel 	GETACL2resok resok;
    109  0  stevel default:
    110  0  stevel 	void;
    111  0  stevel };
    112  0  stevel 
    113  0  stevel /*
    114  0  stevel  * This is the definition for the SETACL procedure which applies
    115  0  stevel  * NFS Version 2.
    116  0  stevel  */
    117  0  stevel struct SETACL2args {
    118  0  stevel 	fhandle_t fh;
    119  0  stevel 	secattr acl;
    120  0  stevel };
    121  0  stevel 
    122  0  stevel struct SETACL2resok {
    123  0  stevel 	struct nfsfattr attr;
    124  0  stevel };
    125  0  stevel 
    126  0  stevel union SETACL2res switch (enum nfsstat status) {
    127  0  stevel case ACL2_OK:
    128  0  stevel 	SETACL2resok resok;
    129  0  stevel default:
    130  0  stevel 	void;
    131  0  stevel };
    132  0  stevel 
    133  0  stevel /*
    134  0  stevel  * This is the definition for the GETATTR procedure which can be
    135  0  stevel  * used as an alternative to the GETATTR in NFS Version 2.  The
    136  0  stevel  * main difference between this GETATTR and the NFS GETATTR is
    137  0  stevel  * that this GETATTR returns the mode of the file without it being
    138  0  stevel  * changed to match the min/max permissions mapping that the NFS
    139  0  stevel  * Version 2 server does.
    140  0  stevel  */
    141  0  stevel struct GETATTR2args {
    142  0  stevel 	fhandle_t fh;
    143  0  stevel };
    144  0  stevel 
    145  0  stevel struct GETATTR2resok {
    146  0  stevel 	struct nfsfattr attr;
    147  0  stevel };
    148  0  stevel 
    149  0  stevel union GETATTR2res switch (enum nfsstat status) {
    150  0  stevel case ACL2_OK:
    151  0  stevel 	GETATTR2resok resok;
    152  0  stevel default:
    153  0  stevel 	void;
    154  0  stevel };
    155  0  stevel 
    156  0  stevel /*
    157  0  stevel  * This is the definition for the ACCESS procedure which applies
    158  0  stevel  * to NFS Version 2.
    159  0  stevel  */
    160  0  stevel struct ACCESS2args {
    161  0  stevel 	fhandle_t fh;
    162  0  stevel 	uint32 access;
    163  0  stevel };
    164  0  stevel 
    165  0  stevel /*
    166  0  stevel  * The following access permissions may be requested:
    167  0  stevel  */
    168  0  stevel const ACCESS2_READ = 0x1;	/* read data or readdir a directory */
    169  0  stevel const ACCESS2_LOOKUP = 0x2;	/* lookup a name in a directory */
    170  0  stevel const ACCESS2_MODIFY = 0x4;	/* rewrite existing file data or */
    171  0  stevel 				/* modify existing directory entries */
    172  0  stevel const ACCESS2_EXTEND = 0x8;	/* write new data or add directory entries */
    173  0  stevel const ACCESS2_DELETE = 0x10;	/* delete existing directory entry */
    174  0  stevel const ACCESS2_EXECUTE = 0x20;	/* execute file (no meaning for a directory) */
    175  0  stevel 
    176  0  stevel struct ACCESS2resok {
    177  0  stevel 	struct nfsfattr attr;
    178  0  stevel 	uint32 access;
    179  0  stevel };
    180  0  stevel 
    181  0  stevel union ACCESS2res switch (enum nfsstat status) {
    182  0  stevel case ACL2_OK:
    183  0  stevel 	ACCESS2resok resok;
    184  0  stevel default:
    185  0  stevel 	void;
    186  0  stevel };
    187  0  stevel 
    188  0  stevel /*
    189  0  stevel  * This is the definition for the GETXATTRDIR procedure which applies
    190  0  stevel  * to NFS Version 2 files.
    191  0  stevel  */
    192  0  stevel struct GETXATTRDIR2args {
    193  0  stevel 	fhandle_t fh;
    194  0  stevel 	bool create;
    195  0  stevel };
    196  0  stevel 
    197  0  stevel struct GETXATTRDIR2resok {
    198  0  stevel 	fhandle_t fh;
    199  0  stevel 	struct nfsfattr attr;
    200  0  stevel };
    201  0  stevel 
    202  0  stevel union GETXATTRDIR2res switch (enum nfsstat status) {
    203  0  stevel case ACL2_OK:
    204  0  stevel 	GETXATTRDIR2resok resok;
    205  0  stevel default:
    206  0  stevel 	void;
    207  0  stevel };
    208  0  stevel 
    209  0  stevel /*
    210  0  stevel  * This is the definition for the GETACL procedure which applies
    211  0  stevel  * to NFS Version 3 files.
    212  0  stevel  */
    213  0  stevel struct GETACL3args {
    214  0  stevel 	nfs_fh3 fh;
    215  0  stevel 	u_int mask;
    216  0  stevel };
    217  0  stevel 
    218  0  stevel struct GETACL3resok {
    219  0  stevel 	post_op_attr attr;
    220  0  stevel 	secattr acl;
    221  0  stevel };
    222  0  stevel 
    223  0  stevel struct GETACL3resfail {
    224  0  stevel 	post_op_attr attr;
    225  0  stevel };
    226  0  stevel 
    227  0  stevel union GETACL3res switch (nfsstat3 status) {
    228  0  stevel case ACL3_OK:
    229  0  stevel 	GETACL3resok resok;
    230  0  stevel default:
    231  0  stevel 	GETACL3resfail resfail;
    232  0  stevel };
    233  0  stevel 
    234  0  stevel /*
    235  0  stevel  * This is the definition for the SETACL procedure which applies
    236  0  stevel  * to NFS Version 3 files.
    237  0  stevel  */
    238  0  stevel struct SETACL3args {
    239  0  stevel 	nfs_fh3 fh;
    240  0  stevel 	secattr acl;
    241  0  stevel };
    242  0  stevel 
    243  0  stevel struct SETACL3resok {
    244  0  stevel 	post_op_attr attr;
    245  0  stevel };
    246  0  stevel 
    247  0  stevel struct SETACL3resfail {
    248  0  stevel 	post_op_attr attr;
    249  0  stevel };
    250  0  stevel 
    251  0  stevel union SETACL3res switch (nfsstat3 status) {
    252  0  stevel case ACL3_OK:
    253  0  stevel 	SETACL3resok resok;
    254  0  stevel default:
    255  0  stevel 	SETACL3resfail resfail;
    256  0  stevel };
    257  0  stevel 
    258  0  stevel /*
    259  0  stevel  * This is the definition for the GETXATTRDIR procedure which applies
    260  0  stevel  * to NFS Version 3 files.
    261  0  stevel  */
    262  0  stevel struct GETXATTRDIR3args {
    263  0  stevel 	nfs_fh3 fh;
    264  0  stevel 	bool create;
    265  0  stevel };
    266  0  stevel 
    267  0  stevel struct GETXATTRDIR3resok {
    268  0  stevel 	nfs_fh3 fh;
    269  0  stevel 	post_op_attr attr;
    270  0  stevel };
    271  0  stevel 
    272  0  stevel union GETXATTRDIR3res switch (nfsstat3 status) {
    273  0  stevel case ACL3_OK:
    274  0  stevel 	GETXATTRDIR3resok resok;
    275  0  stevel default:
    276  0  stevel 	void;
    277  0  stevel };
    278  0  stevel 
    279  0  stevel /*
    280  0  stevel  * XXX {
    281  0  stevel  * This is a transitional interface to enable Solaris NFSv4
    282  0  stevel  * clients to manipulate ACLs on Solaris servers until the
    283  0  stevel  * spec is complete enough to implement this inside the
    284  0  stevel  * NFSv4 protocol itself.  NFSv4 does handle extended
    285  0  stevel  * attributes in-band.
    286  0  stevel  */
    287  0  stevel 
    288  0  stevel /*
    289  0  stevel  * This is the definition for the GETACL procedure which applies
    290  0  stevel  * to NFS Version 4 files.
    291  0  stevel  */
    292  0  stevel struct GETACL4args {
    293  0  stevel 	nfs_fh4 fh;
    294  0  stevel 	u_int mask;
    295  0  stevel };
    296  0  stevel 
    297  0  stevel struct GETACL4resok {
    298  0  stevel 	post_op_attr attr;
    299  0  stevel 	secattr acl;
    300  0  stevel };
    301  0  stevel 
    302  0  stevel struct GETACL4resfail {
    303  0  stevel 	post_op_attr attr;
    304  0  stevel };
    305  0  stevel 
    306  0  stevel union GETACL4res switch (nfsstat3 status) {
    307  0  stevel case ACL4_OK:
    308  0  stevel 	GETACL4resok resok;
    309  0  stevel default:
    310  0  stevel 	GETACL4resfail resfail;
    311  0  stevel };
    312  0  stevel 
    313  0  stevel /*
    314  0  stevel  * This is the definition for the SETACL procedure which applies
    315  0  stevel  * to NFS Version 4 files.
    316  0  stevel  */
    317  0  stevel struct SETACL4args {
    318  0  stevel 	nfs_fh4 fh;
    319  0  stevel 	secattr acl;
    320  0  stevel };
    321  0  stevel 
    322  0  stevel struct SETACL4resok {
    323  0  stevel 	post_op_attr attr;
    324  0  stevel };
    325  0  stevel 
    326  0  stevel struct SETACL4resfail {
    327  0  stevel 	post_op_attr attr;
    328  0  stevel };
    329  0  stevel 
    330  0  stevel union SETACL4res switch (nfsstat3 status) {
    331  0  stevel case ACL4_OK:
    332  0  stevel 	SETACL4resok resok;
    333  0  stevel default:
    334  0  stevel 	SETACL4resfail resfail;
    335  0  stevel };
    336  0  stevel 
    337  0  stevel /* XXX } */
    338  0  stevel 
    339  0  stevel /*
    340  0  stevel  * Share the port with the NFS service.  NFS has to be running
    341  0  stevel  * in order for this service to be useful anyway.
    342  0  stevel  */
    343  0  stevel const NFS_ACL_PORT = 2049;
    344  0  stevel 
    345  0  stevel /*
    346  0  stevel  * This is the definition for the ACL network protocol which is used
    347  0  stevel  * to provide support for Solaris ACLs for files which are accessed
    348  0  stevel  * via NFS Version 2 and NFS Version 3.
    349  0  stevel  */
    350  0  stevel program NFS_ACL_PROGRAM {
    351  0  stevel 	version NFS_ACL_V2 {
    352  0  stevel 		void
    353  0  stevel 		 ACLPROC2_NULL(void) = 0;
    354  0  stevel 		GETACL2res
    355  0  stevel 		 ACLPROC2_GETACL(GETACL2args) = 1;
    356  0  stevel 		SETACL2res
    357  0  stevel 		 ACLPROC2_SETACL(SETACL2args) = 2;
    358  0  stevel 		GETATTR2res
    359  0  stevel 		 ACLPROC2_GETATTR(GETATTR2args) = 3;
    360  0  stevel 		ACCESS2res
    361  0  stevel 		 ACLPROC2_ACCESS(ACCESS2args) = 4;
    362  0  stevel 		GETXATTRDIR2res
    363  0  stevel 		 ACLPROC2_GETXATTRDIR(GETXATTRDIR2args) = 5;
    364  0  stevel 	} = 2;
    365  0  stevel 	version NFS_ACL_V3 {
    366  0  stevel 		void
    367  0  stevel 		 ACLPROC3_NULL(void) = 0;
    368  0  stevel 		GETACL3res
    369  0  stevel 		 ACLPROC3_GETACL(GETACL3args) = 1;
    370  0  stevel 		SETACL3res
    371  0  stevel 		 ACLPROC3_SETACL(SETACL3args) = 2;
    372  0  stevel 		GETXATTRDIR3res
    373  0  stevel 		 ACLPROC3_GETXATTRDIR(GETXATTRDIR3args) = 3;
    374  0  stevel 	} = 3;
    375  0  stevel 	version NFS_ACL_V4 {
    376  0  stevel 		void
    377  0  stevel 		 ACLPROC4_NULL(void) = 0;
    378  0  stevel 		GETACL4res
    379  0  stevel 		 ACLPROC4_GETACL(GETACL4args) = 1;
    380  0  stevel 		SETACL4res
    381  0  stevel 		 ACLPROC4_SETACL(SETACL4args) = 2;
    382  0  stevel 	} = 4;
    383  0  stevel } = 100227;
    384