File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / rsync / lib / sysacls.h
Revision 1.1.1.2 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Tue Nov 1 09:54:32 2016 UTC (7 years, 8 months ago) by misho
Branches: rsync, MAIN
CVS tags: v3_1_2p5, HEAD
rsync 3.1.2

    1: /*
    2:  * Unix SMB/Netbios implementation.
    3:  * Version 2.2.x
    4:  * Portable SMB ACL interface
    5:  * Copyright (C) Jeremy Allison 2000
    6:  * Copyright (C) 2007-2015 Wayne Davison
    7:  *
    8:  * This program is free software; you can redistribute it and/or modify
    9:  * it under the terms of the GNU General Public License as published by
   10:  * the Free Software Foundation; either version 3 of the License, or
   11:  * (at your option) any later version.
   12:  *
   13:  * This program is distributed in the hope that it will be useful,
   14:  * but WITHOUT ANY WARRANTY; without even the implied warranty of
   15:  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   16:  * GNU General Public License for more details.
   17:  *
   18:  * You should have received a copy of the GNU General Public License
   19:  * with this program; if not, visit the http://fsf.org website.
   20:  */
   21: 
   22: #ifdef SUPPORT_ACLS
   23: 
   24: #ifdef HAVE_SYS_ACL_H
   25: #include <sys/acl.h>
   26: #endif
   27: #ifdef HAVE_ACL_LIBACL_H
   28: #include <acl/libacl.h>
   29: #endif
   30: 
   31: #define SMB_MALLOC(cnt) new_array(char, cnt)
   32: #define SMB_MALLOC_P(obj) new_array(obj, 1)
   33: #define SMB_MALLOC_ARRAY(obj, cnt) new_array(obj, cnt)
   34: #define SMB_REALLOC(mem, cnt) realloc_array(mem, char, cnt)
   35: #define slprintf snprintf
   36: 
   37: #if defined HAVE_POSIX_ACLS /*-----------------------------------------------*/
   38: 
   39: /* This is an identity mapping (just remove the SMB_). */
   40: 
   41: #define SMB_ACL_TAG_T		acl_tag_t
   42: #define SMB_ACL_TYPE_T		acl_type_t
   43: 
   44: /* Types of ACLs. */
   45: #define SMB_ACL_USER		ACL_USER
   46: #define SMB_ACL_USER_OBJ	ACL_USER_OBJ
   47: #define SMB_ACL_GROUP		ACL_GROUP
   48: #define SMB_ACL_GROUP_OBJ	ACL_GROUP_OBJ
   49: #define SMB_ACL_OTHER		ACL_OTHER
   50: #define SMB_ACL_MASK		ACL_MASK
   51: #define SMB_ACL_EVERYONE	ACL_EVERYONE
   52: 
   53: #define SMB_ACL_T		acl_t
   54: 
   55: #define SMB_ACL_ENTRY_T		acl_entry_t
   56: 
   57: #define SMB_ACL_FIRST_ENTRY	ACL_FIRST_ENTRY
   58: #define SMB_ACL_NEXT_ENTRY	ACL_NEXT_ENTRY
   59: 
   60: #define SMB_ACL_TYPE_ACCESS	ACL_TYPE_ACCESS
   61: #define SMB_ACL_TYPE_DEFAULT	ACL_TYPE_DEFAULT
   62: #define	SMB_ACL_TYPE_NFS4	ACL_TYPE_NFS4
   63: 
   64: #define	SMB_ACL_BRAND_UNKNOWN	ACL_BRAND_UNKNOWN
   65: #define	SMB_ACL_BRAND_POSIX	ACL_BRAND_POSIX
   66: #define	SMB_ACL_BRAND_NFS4	ACL_BRAND_NFS4
   67: 
   68: #define SMB_ACL_VALID_NAME_BITS	(4 | 2 | 1)
   69: #define SMB_ACL_VALID_OBJ_BITS	(4 | 2 | 1)
   70: 
   71: #define SMB_ACL_NEED_SORT
   72: 
   73: #elif defined HAVE_TRU64_ACLS /*---------------------------------------------*/
   74: 
   75: /* This is for DEC/Compaq Tru64 UNIX */
   76: 
   77: #define SMB_ACL_TAG_T		acl_tag_t
   78: #define SMB_ACL_TYPE_T		acl_type_t
   79: 
   80: /* Types of ACLs. */
   81: #define SMB_ACL_USER		ACL_USER
   82: #define SMB_ACL_USER_OBJ	ACL_USER_OBJ
   83: #define SMB_ACL_GROUP		ACL_GROUP
   84: #define SMB_ACL_GROUP_OBJ	ACL_GROUP_OBJ
   85: #define SMB_ACL_OTHER		ACL_OTHER
   86: #define SMB_ACL_MASK		ACL_MASK
   87: 
   88: #define SMB_ACL_T		acl_t
   89: 
   90: #define SMB_ACL_ENTRY_T		acl_entry_t
   91: 
   92: #define SMB_ACL_FIRST_ENTRY	0
   93: #define SMB_ACL_NEXT_ENTRY	1
   94: 
   95: #define SMB_ACL_TYPE_ACCESS	ACL_TYPE_ACCESS
   96: #define SMB_ACL_TYPE_DEFAULT	ACL_TYPE_DEFAULT
   97: 
   98: #define SMB_ACL_VALID_NAME_BITS	(4 | 2 | 1)
   99: #define SMB_ACL_VALID_OBJ_BITS	(4 | 2 | 1)
  100: 
  101: #define SMB_ACL_NEED_SORT
  102: 
  103: #elif defined HAVE_UNIXWARE_ACLS || defined HAVE_SOLARIS_ACLS /*-------------*/
  104: 
  105: /* Donated by Michael Davidson <md@sco.COM> for UnixWare / OpenUNIX.
  106:  * Modified by Toomas Soome <tsoome@ut.ee> for Solaris.  */
  107: 
  108: /* SVR4.2 ES/MP ACLs */
  109: typedef int SMB_ACL_TAG_T;
  110: typedef int SMB_ACL_TYPE_T;
  111: 
  112: /* Types of ACLs. */
  113: #define SMB_ACL_USER		USER
  114: #define SMB_ACL_USER_OBJ	USER_OBJ
  115: #define SMB_ACL_GROUP		GROUP
  116: #define SMB_ACL_GROUP_OBJ	GROUP_OBJ
  117: #define SMB_ACL_OTHER		OTHER_OBJ
  118: #define SMB_ACL_MASK		CLASS_OBJ
  119: 
  120: typedef struct SMB_ACL_T {
  121: 	int size;
  122: 	int count;
  123: 	int next;
  124: 	struct acl acl[1];
  125: } *SMB_ACL_T;
  126: 
  127: typedef struct acl *SMB_ACL_ENTRY_T;
  128: 
  129: #define SMB_ACL_FIRST_ENTRY	0
  130: #define SMB_ACL_NEXT_ENTRY	1
  131: 
  132: #define SMB_ACL_TYPE_ACCESS	0
  133: #define SMB_ACL_TYPE_DEFAULT	1
  134: 
  135: #define SMB_ACL_VALID_NAME_BITS	(4 | 2 | 1)
  136: #define SMB_ACL_VALID_OBJ_BITS	(4 | 2 | 1)
  137: 
  138: #define SMB_ACL_NEED_SORT
  139: 
  140: #ifdef __CYGWIN__
  141: #define SMB_ACL_LOSES_SPECIAL_MODE_BITS
  142: #endif
  143: 
  144: #elif defined HAVE_HPUX_ACLS /*----------------------------------------------*/
  145: 
  146: /* Based on the Solaris & UnixWare code. */
  147: 
  148: #undef GROUP
  149: #include <sys/aclv.h>
  150: 
  151: /* SVR4.2 ES/MP ACLs */
  152: typedef int SMB_ACL_TAG_T;
  153: typedef int SMB_ACL_TYPE_T;
  154: 
  155: /* Types of ACLs. */
  156: #define SMB_ACL_USER		USER
  157: #define SMB_ACL_USER_OBJ	USER_OBJ
  158: #define SMB_ACL_GROUP		GROUP
  159: #define SMB_ACL_GROUP_OBJ	GROUP_OBJ
  160: #define SMB_ACL_OTHER		OTHER_OBJ
  161: #define SMB_ACL_MASK		CLASS_OBJ
  162: 
  163: typedef struct SMB_ACL_T {
  164: 	int size;
  165: 	int count;
  166: 	int next;
  167: 	struct acl acl[1];
  168: } *SMB_ACL_T;
  169: 
  170: typedef struct acl *SMB_ACL_ENTRY_T;
  171: 
  172: #define SMB_ACL_FIRST_ENTRY	0
  173: #define SMB_ACL_NEXT_ENTRY	1
  174: 
  175: #define SMB_ACL_TYPE_ACCESS	0
  176: #define SMB_ACL_TYPE_DEFAULT	1
  177: 
  178: #define SMB_ACL_VALID_NAME_BITS	(4 | 2 | 1)
  179: #define SMB_ACL_VALID_OBJ_BITS	(4 | 2 | 1)
  180: 
  181: #define SMB_ACL_NEED_SORT
  182: 
  183: #elif defined HAVE_IRIX_ACLS /*----------------------------------------------*/
  184: 
  185: /* IRIX ACLs */
  186: 
  187: #define SMB_ACL_TAG_T		acl_tag_t
  188: #define SMB_ACL_TYPE_T		acl_type_t
  189: 
  190: /* Types of ACLs. */
  191: #define SMB_ACL_USER		ACL_USER
  192: #define SMB_ACL_USER_OBJ	ACL_USER_OBJ
  193: #define SMB_ACL_GROUP		ACL_GROUP
  194: #define SMB_ACL_GROUP_OBJ	ACL_GROUP_OBJ
  195: #define SMB_ACL_OTHER		ACL_OTHER_OBJ
  196: #define SMB_ACL_MASK		ACL_MASK
  197: 
  198: typedef struct SMB_ACL_T {
  199: 	int next;
  200: 	BOOL freeaclp;
  201: 	struct acl *aclp;
  202: } *SMB_ACL_T;
  203: 
  204: #define SMB_ACL_ENTRY_T		acl_entry_t
  205: 
  206: #define SMB_ACL_FIRST_ENTRY	0
  207: #define SMB_ACL_NEXT_ENTRY	1
  208: 
  209: #define SMB_ACL_TYPE_ACCESS	ACL_TYPE_ACCESS
  210: #define SMB_ACL_TYPE_DEFAULT	ACL_TYPE_DEFAULT
  211: 
  212: #define SMB_ACL_VALID_NAME_BITS	(4 | 2 | 1)
  213: #define SMB_ACL_VALID_OBJ_BITS	(4 | 2 | 1)
  214: 
  215: #define SMB_ACL_NEED_SORT
  216: 
  217: #elif defined HAVE_AIX_ACLS /*-----------------------------------------------*/
  218: 
  219: /* Donated by Medha Date, mdate@austin.ibm.com, for IBM */
  220: 
  221: #include "/usr/include/acl.h"
  222: 
  223: struct acl_entry_link{
  224: 	struct acl_entry_link *prevp;
  225: 	struct new_acl_entry *entryp;
  226: 	struct acl_entry_link *nextp;
  227: 	int count;
  228: };
  229: 
  230: struct new_acl_entry{
  231: 	unsigned short ace_len;
  232: 	unsigned short ace_type;
  233: 	unsigned int ace_access;
  234: 	struct ace_id ace_id[1];
  235: };
  236: 
  237: #define SMB_ACL_ENTRY_T		struct new_acl_entry*
  238: #define SMB_ACL_T		struct acl_entry_link*
  239:  
  240: #define SMB_ACL_TAG_T		unsigned short
  241: #define SMB_ACL_TYPE_T		int
  242: 
  243: /* Types of ACLs. */
  244: #define SMB_ACL_USER		ACEID_USER
  245: #define SMB_ACL_USER_OBJ	3
  246: #define SMB_ACL_GROUP		ACEID_GROUP
  247: #define SMB_ACL_GROUP_OBJ	4
  248: #define SMB_ACL_OTHER		5
  249: #define SMB_ACL_MASK		6
  250: 
  251: #define SMB_ACL_FIRST_ENTRY	1
  252: #define SMB_ACL_NEXT_ENTRY	2
  253: 
  254: #define SMB_ACL_TYPE_ACCESS	0
  255: #define SMB_ACL_TYPE_DEFAULT	1
  256: 
  257: #define SMB_ACL_VALID_NAME_BITS	(4 | 2 | 1)
  258: #define SMB_ACL_VALID_OBJ_BITS	(4 | 2 | 1)
  259: 
  260: #define SMB_ACL_NEED_SORT
  261: 
  262: #elif defined(HAVE_OSX_ACLS) /*----------------------------------------------*/
  263: 
  264: /* Special handling for OS X ACLs */
  265: 
  266: #define SMB_ACL_TAG_T		acl_tag_t
  267: #define SMB_ACL_TYPE_T		acl_type_t
  268: 
  269: #define SMB_ACL_T		acl_t
  270: 
  271: #define SMB_ACL_ENTRY_T		acl_entry_t
  272: 
  273: #define SMB_ACL_USER		1
  274: #define SMB_ACL_GROUP		2
  275: 
  276: #define SMB_ACL_FIRST_ENTRY	ACL_FIRST_ENTRY
  277: #define SMB_ACL_NEXT_ENTRY	ACL_NEXT_ENTRY
  278: 
  279: #define SMB_ACL_TYPE_ACCESS	ACL_TYPE_EXTENDED
  280: #define SMB_ACL_TYPE_DEFAULT	ACL_TYPE_DEFAULT
  281: 
  282: #define SMB_ACL_VALID_NAME_BITS	((1<<25)-1)
  283: #define SMB_ACL_VALID_OBJ_BITS	0
  284: 
  285: /*#undef SMB_ACL_NEED_SORT*/
  286: 
  287: #else /*---------------------------------------------------------------------*/
  288: 
  289: /* Unknown platform. */
  290: 
  291: #error Cannot handle ACLs on this platform!
  292: 
  293: #endif
  294: 
  295: int sys_acl_get_entry(SMB_ACL_T the_acl, int entry_id, SMB_ACL_ENTRY_T *entry_p);
  296: int sys_acl_get_tag_type(SMB_ACL_ENTRY_T entry_d, SMB_ACL_TAG_T *tag_type_p);
  297: int sys_acl_get_info(SMB_ACL_ENTRY_T entry, SMB_ACL_TAG_T *tag_type_p, uint32 *bits_p, id_t *u_g_id_p);
  298: SMB_ACL_T sys_acl_get_file(const char *path_p, SMB_ACL_TYPE_T type);
  299: SMB_ACL_T sys_acl_get_fd(int fd);
  300: SMB_ACL_T sys_acl_init(int count);
  301: int sys_acl_get_brand( SMB_ACL_T the_acl, int *brand_p);
  302: int sys_acl_get_brand_file( const char *path_p, int *brand_p);
  303: int sys_acl_create_entry(SMB_ACL_T *pacl, SMB_ACL_ENTRY_T *pentry);
  304: int sys_acl_set_info(SMB_ACL_ENTRY_T entry, SMB_ACL_TAG_T tagtype, uint32 bits, id_t u_g_id);
  305: int sys_acl_set_access_bits(SMB_ACL_ENTRY_T entry, uint32 bits);
  306: int sys_acl_valid(SMB_ACL_T theacl);
  307: int sys_acl_set_file(const char *name, SMB_ACL_TYPE_T acltype, SMB_ACL_T theacl);
  308: int sys_acl_set_fd(int fd, SMB_ACL_T theacl);
  309: int sys_acl_delete_def_file(const char *name);
  310: int sys_acl_free_acl(SMB_ACL_T the_acl);
  311: int no_acl_syscall_error(int err);
  312: 
  313: #endif /* SUPPORT_ACLS */

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>