xref: /illumos-gate/usr/src/lib/libbsm/common/devalloc.h (revision 4fe85d41bb4eb0db41934722f4b06c8acec2d25a)
1  /*
2   * CDDL HEADER START
3   *
4   * The contents of this file are subject to the terms of the
5   * Common Development and Distribution License (the "License").
6   * You may not use this file except in compliance with the License.
7   *
8   * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9   * or http://www.opensolaris.org/os/licensing.
10   * See the License for the specific language governing permissions
11   * and limitations under the License.
12   *
13   * When distributing Covered Code, include this CDDL HEADER in each
14   * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15   * If applicable, add the following below this CDDL HEADER, with the
16   * fields enclosed by brackets "[]" replaced with your own identifying
17   * information: Portions Copyright [yyyy] [name of copyright owner]
18   *
19   * CDDL HEADER END
20   */
21  
22  /*
23   * Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
24   * Use is subject to license terms.
25   */
26  
27  #ifndef	_DEVALLOC_H
28  #define	_DEVALLOC_H
29  
30  #pragma ident	"%Z%%M%	%I%	%E% SMI"
31  
32  #ifdef	__cplusplus
33  extern "C" {
34  #endif
35  
36  #include <stdio.h>
37  #include <fcntl.h>
38  #include <sys/param.h>
39  #include <secdb.h>
40  
41  /*
42   * These are unsupported, SUNWprivate interfaces.
43   */
44  
45  #define	DA_UID			(uid_t)0	/* root */
46  #define	DA_GID			(gid_t)3	/* sys */
47  #define	ALLOC_MODE		0600
48  #define	DEALLOC_MODE    	0000
49  
50  #define	LOGINDEVPERM		"/etc/logindevperm"
51  #define	DA_DB_LOCK		"/etc/security/.da_db_lock"
52  #define	DA_DEV_LOCK		"/etc/security/.da_dev_lock"
53  #define	DEVALLOC		"/etc/security/device_allocate"
54  #define	DEVMAP			"/etc/security/device_maps"
55  #define	DEFATTRS		"/etc/security/tsol/devalloc_defaults"
56  #define	TMPALLOC		"/etc/security/.device_allocate"
57  #define	TMPMAP			"/etc/security/.device_maps"
58  #define	TMPATTRS		"/etc/security/tsol/.devalloc_defaults"
59  
60  #define	DA_DEFAULT_MIN		"admin_low"
61  #define	DA_DEFAULT_MAX		"admin_high"
62  #define	DA_DEFAULT_CLEAN	"/bin/true"
63  #define	DA_DEFAULT_AUDIO_CLEAN	"/etc/security/lib/audio_clean_wrapper"
64  #define	DA_DEFAULT_DISK_CLEAN	"/etc/security/lib/disk_clean"
65  #define	DA_DEFAULT_TAPE_CLEAN	"/etc/security/lib/st_clean"
66  
67  #define	DA_ON_STR		"DEVICE_ALLOCATION=ON\n"
68  #define	DA_OFF_STR		"DEVICE_ALLOCATION=OFF\n"
69  #define	DA_IS_LABELED		"system_labeled"
70  #define	DA_DBMODE		0644
71  #define	DA_COUNT		5	/* allocatable devices suppported */
72  					/* audio, cd, floppy, rmdisk, tape */
73  #define	DA_AUTHLEN		MAX_CANON   /* approx. sum of strlen of all */
74  					    /* device auths in auth_list.h */
75  #define	DA_MAXNAME		80
76  #define	DA_BUFSIZE		4096
77  
78  #define	DA_RDWR			O_RDWR|O_CREAT|O_NONBLOCK
79  #define	DA_RDONLY		O_RDONLY|O_NONBLOCK
80  
81  #define	DA_ANYUSER		"*"
82  #define	DA_NOUSER		"@"
83  
84  #define	DA_SILENT		0x00000001
85  #define	DA_VERBOSE		0x00000002
86  #define	DA_ADD			0x00000004
87  #define	DA_REMOVE		0x00000008
88  #define	DA_UPDATE		0x00000010
89  #define	DA_ADD_ZONE		0x00000020
90  #define	DA_REMOVE_ZONE		0x00000040
91  #define	DA_FORCE		0x00000080
92  #define	DA_ALLOC_ONLY		0x00000100
93  #define	DA_MAPS_ONLY		0x00000200
94  #define	DA_ON			0x00000400
95  #define	DA_OFF			0x00000800
96  #define	DA_NO_OVERRIDE		0x00001000
97  #define	DA_DEFATTRS		0x00002000
98  
99  #define	DA_AUDIO		0x00001000
100  #define	DA_CD			0x00002000
101  #define	DA_FLOPPY		0x00004000
102  #define	DA_TAPE			0x00008000
103  #define	DA_RMDISK		0x00010000
104  
105  #define	DA_AUDIO_NAME		"audio"
106  #define	DA_SOUND_NAME		"sound"
107  #define	DA_AUDIO_TYPE		DA_AUDIO_NAME
108  #define	DA_AUDIO_DIR		"/dev/sound/"
109  
110  #define	DA_CD_NAME		"cdrom"
111  #define	DA_CD_TYPE		"sr"
112  
113  #define	DA_DISK_DIR		"/dev/dsk/"
114  #define	DA_DISK_DIRR		"/dev/rdsk/"
115  #define	DA_DISKR_DIR		"/dev/(r)dsk"
116  
117  #define	DA_FLOPPY_NAME		"floppy"
118  #define	DA_FLOPPY_TYPE		"fd"
119  
120  #define	DA_RMDISK_NAME		"rmdisk"
121  #define	DA_RMDISK_TYPE		DA_RMDISK_NAME
122  
123  #define	DA_TAPE_NAME		"tape"
124  #define	DA_TAPE_DIR		"/dev/rmt/"
125  #define	DA_TAPE_TYPE		"st"
126  
127  typedef struct _devinfo_t {
128  	char	*devname;
129  	char	*devtype;
130  	char	*devauths;
131  	char	*devexec;
132  	char	*devopts;
133  	char	*devlist;
134  	int	instance;
135  } devinfo_t;
136  
137  typedef struct _deventry_t {
138  	devinfo_t		devinfo;
139  	struct _deventry_t	*next;
140  } deventry_t;
141  
142  typedef struct _devlist_t {
143  	deventry_t	*audio;
144  	deventry_t	*cd;
145  	deventry_t	*floppy;
146  	deventry_t	*tape;
147  	deventry_t	*rmdisk;
148  } devlist_t;
149  
150  typedef struct _da_optargs {
151  	int		optflag;
152  	char		*rootdir;
153  	char		**devnames;
154  	devinfo_t	*devinfo;
155  } da_args;
156  
157  typedef struct _da_defs {
158  	char		*devtype;
159  	kva_t		*devopts;
160  } da_defs_t;
161  
162  da_defs_t *getdadefent(void);
163  da_defs_t *getdadeftype(char *);
164  void freedadefent(da_defs_t *);
165  void setdadefent(void);
166  void enddadefent(void);
167  int da_is_on(void);
168  int da_check_logindevperm(char *);
169  int da_open_devdb(char *, FILE **, FILE **, int);
170  int da_update_device(da_args *);
171  int da_update_defattrs(da_args *);
172  int da_add_list(devlist_t *, char *, int, int);
173  int da_remove_list(devlist_t *, char *, int, char *, int);
174  void da_print_device(int, devlist_t *);
175  
176  
177  #ifdef	__cplusplus
178  }
179  #endif
180  
181  #endif	/* _DEVALLOC_H */
182