Home | History | Annotate | Download | only in common
      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  2694       gww  * Common Development and Distribution License (the "License").
      6  2694       gww  * You may not use this file except in compliance with the License.
      7     0    stevel  *
      8     0    stevel  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
      9     0    stevel  * or http://www.opensolaris.org/os/licensing.
     10     0    stevel  * See the License for the specific language governing permissions
     11     0    stevel  * and limitations under the License.
     12     0    stevel  *
     13     0    stevel  * When distributing Covered Code, include this CDDL HEADER in each
     14     0    stevel  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
     15     0    stevel  * If applicable, add the following below this CDDL HEADER, with the
     16     0    stevel  * fields enclosed by brackets "[]" replaced with your own identifying
     17     0    stevel  * information: Portions Copyright [yyyy] [name of copyright owner]
     18     0    stevel  *
     19     0    stevel  * CDDL HEADER END
     20     0    stevel  */
     21     0    stevel /*
     22  9083       Jan  * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
     23     0    stevel  * Use is subject to license terms.
     24     0    stevel  */
     25     0    stevel 
     26     0    stevel #ifndef _BSM_LIBBSM_H
     27     0    stevel #define	_BSM_LIBBSM_H
     28     0    stevel 
     29     0    stevel 
     30     0    stevel #include <secdb.h>
     31     0    stevel #include <stdio.h>
     32     0    stevel #include <errno.h>
     33     0    stevel #include <sys/types.h>
     34     0    stevel #include <bsm/audit.h>
     35     0    stevel #include <bsm/audit_record.h>
     36     0    stevel 
     37     0    stevel #ifdef	__cplusplus
     38     0    stevel extern "C" {
     39     0    stevel #endif
     40     0    stevel 
     41     0    stevel #ifndef TEXT_DOMAIN
     42     0    stevel #define	TEXT_DOMAIN	"SUNW_OST_OSLIB"
     43     0    stevel #endif
     44     0    stevel 
     45     0    stevel extern const char *bsm_dom;
     46     0    stevel 
     47     0    stevel /*
     48     0    stevel  * For audit_event(5)
     49     0    stevel  */
     50     0    stevel struct au_event_ent {
     51     0    stevel 	au_event_t ae_number;
     52     0    stevel 	char	*ae_name;
     53     0    stevel 	char	*ae_desc;
     54     0    stevel 	au_class_t ae_class;
     55     0    stevel };
     56     0    stevel typedef struct au_event_ent au_event_ent_t;
     57     0    stevel 
     58     0    stevel /*
     59     0    stevel  * For audit_class(5)
     60     0    stevel  */
     61     0    stevel struct au_class_ent {
     62     0    stevel 	char	*ac_name;
     63     0    stevel 	au_class_t ac_class;
     64     0    stevel 	char	*ac_desc;
     65     0    stevel };
     66     0    stevel typedef struct au_class_ent au_class_ent_t;
     67     0    stevel 
     68     0    stevel /*
     69     0    stevel  * For audit_user(5)
     70     0    stevel  */
     71     0    stevel struct au_user_ent {
     72     0    stevel 	char	*au_name;
     73     0    stevel 	au_mask_t au_always;
     74     0    stevel 	au_mask_t au_never;
     75     0    stevel };
     76     0    stevel typedef struct au_user_ent au_user_ent_t;
     77     0    stevel 
     78     0    stevel /*
     79     0    stevel  * Internal representation of audit user in libnsl
     80     0    stevel  */
     81     0    stevel typedef struct au_user_str_s {
     82     0    stevel 	char	*au_name;
     83     0    stevel 	char	*au_always;
     84     0    stevel 	char	*au_never;
     85     0    stevel } au_user_str_t;
     86     0    stevel 
     87     0    stevel /*
     88     0    stevel  * opaque context value for getacval.c
     89     0    stevel  */
     90     0    stevel typedef struct au_acinfo au_acinfo_t;
     91     0    stevel 
     92     0    stevel /*
     93     0    stevel  * adrf's version of adr_t
     94     0    stevel  */
     95     0    stevel typedef struct adrf_s {
     96     0    stevel 	adr_t	*adrf_adr;
     97     0    stevel 	FILE	*adrf_fp;
     98     0    stevel } adrf_t;
     99     0    stevel 
    100     0    stevel /*
    101     0    stevel  * Functions that manipulate bytes from an audit file
    102     0    stevel  */
    103     0    stevel 
    104     0    stevel extern void	adr_char(adr_t *, char *, int);
    105     0    stevel extern int	adr_count(adr_t *);
    106     0    stevel extern void	adr_int32(adr_t *, int32_t *, int);
    107  5012       gww extern void	adr_uid(adr_t *, uid_t *, int);
    108     0    stevel extern void	adr_int64(adr_t *, int64_t *, int);
    109     0    stevel extern void	adr_short(adr_t *, short *, int);
    110  7753       Ton extern void	adr_ushort(adr_t *, ushort_t *, int);
    111     0    stevel extern void	adr_start(adr_t *, char *);
    112     0    stevel 
    113     0    stevel extern int	adrf_char(adrf_t *, char *, int);
    114     0    stevel extern int	adrf_int32(adrf_t *, int32_t *, int);
    115     0    stevel extern int	adrf_int64(adrf_t *, int64_t *, int);
    116     0    stevel extern int	adrf_short(adrf_t *, short *, int);
    117     0    stevel extern void	adrf_start(adrf_t *, adr_t *, FILE *);
    118     0    stevel extern int	adrf_u_char(adrf_t *, uchar_t *, int);
    119     0    stevel extern int	adrf_u_int32(adrf_t *, uint32_t *, int);
    120     0    stevel extern int	adrf_u_int64(adrf_t *, uint64_t *, int);
    121     0    stevel extern int	adrf_u_short(adrf_t *, ushort_t *, int);
    122     0    stevel 
    123     0    stevel /*
    124     0    stevel  * Functions that manipulate bytes from an audit character stream.
    125     0    stevel  */
    126     0    stevel 
    127     0    stevel extern void	adrm_start(adr_t *, char *);
    128     0    stevel extern void	adrm_char(adr_t *, char *, int);
    129     0    stevel extern void	adrm_short(adr_t *, short *, int);
    130     0    stevel extern void	adrm_int64(adr_t *, int64_t *, int);
    131     0    stevel extern void	adrm_int32(adr_t *, int32_t *, int);
    132  5344  tz204579 extern void	adrm_uid(adr_t *, uid_t *, int);
    133     0    stevel extern void	adrm_u_int32(adr_t *, uint32_t *, int);
    134     0    stevel extern void	adrm_u_char(adr_t *, uchar_t *, int);
    135     0    stevel extern void	adrm_u_int64(adr_t *, uint64_t *, int);
    136     0    stevel extern void	adrm_u_short(adr_t *, ushort_t *, int);
    137     0    stevel extern void	adrm_putint32(adr_t *, int32_t *, int);
    138     0    stevel 
    139     0    stevel /*
    140     0    stevel  * Functions that do I/O for audit files
    141     0    stevel  */
    142     0    stevel 
    143  7753       Ton extern int	au_close(int, int, au_event_t);
    144     0    stevel extern int	au_open(void);
    145     0    stevel extern int	au_write(int, token_t *);
    146     0    stevel 
    147     0    stevel /*
    148     0    stevel  * Functions than manipulate audit events
    149     0    stevel  */
    150     0    stevel 
    151     0    stevel extern void	setauevent(void);
    152     0    stevel extern void	endauevent(void);
    153     0    stevel 
    154     0    stevel extern au_event_ent_t	*getauevent(void);
    155     0    stevel extern au_event_ent_t	*getauevent_r(au_event_ent_t *);
    156     0    stevel extern au_event_ent_t	*getauevnam(char *);
    157     0    stevel extern au_event_ent_t	*getauevnam_r(au_event_ent_t *, char *);
    158     0    stevel extern au_event_ent_t	*getauevnum(au_event_t);
    159     0    stevel extern au_event_ent_t	*getauevnum_r(au_event_ent_t *, au_event_t);
    160     0    stevel extern au_event_t	getauevnonam(char *);
    161     0    stevel extern int		au_preselect(au_event_t, au_mask_t *, int, int);
    162     0    stevel extern int		cacheauevent(au_event_ent_t **, au_event_t);
    163     0    stevel 
    164     0    stevel /*
    165     0    stevel  * Functions that manipulate audit classes
    166     0    stevel  */
    167     0    stevel 
    168     0    stevel extern void	setauclass(void);
    169     0    stevel extern void	endauclass(void);
    170     0    stevel 
    171     0    stevel extern int	cacheauclass(au_class_ent_t **, au_class_t);
    172     0    stevel extern int	cacheauclassnam(au_class_ent_t **, char *);
    173     0    stevel extern au_class_ent_t *getauclassent(void);
    174     0    stevel extern au_class_ent_t *getauclassent_r(au_class_ent_t *);
    175     0    stevel extern au_class_ent_t *getauclassnam(char *);
    176     0    stevel extern au_class_ent_t *getauclassnam_r(au_class_ent_t *, char *);
    177     0    stevel 
    178     0    stevel /*
    179     0    stevel  * Functions that manipulate audit attributes of users
    180     0    stevel  */
    181     0    stevel 
    182     0    stevel void	setauuser(void);
    183     0    stevel void	endauuser(void);
    184     0    stevel 
    185     0    stevel au_user_ent_t *getauuserent(void);
    186     0    stevel au_user_ent_t *getauuserent_r(au_user_ent_t *);
    187     0    stevel au_user_ent_t *getauusernam(char *);
    188     0    stevel au_user_ent_t *getauusernam_r(au_user_ent_t *, char *);
    189     0    stevel 
    190     0    stevel /*
    191     0    stevel  * Functions that manipulate the audit control file
    192     0    stevel  */
    193     0    stevel 
    194     0    stevel void	endac(void);
    195     0    stevel void	setac(void);
    196     0    stevel 
    197     0    stevel int	getacdir(char *, int);
    198     0    stevel int	getacmin(int *);
    199     0    stevel int	getacna(char *, int);
    200     0    stevel int	getacflg(char *, int);
    201     0    stevel 
    202     0    stevel /*
    203     0    stevel  * Functions that manipulate the audit control file
    204     0    stevel  */
    205     0    stevel 
    206     0    stevel 
    207     0    stevel au_acinfo_t	*_openac(char *);
    208     0    stevel void		_endac(au_acinfo_t *);
    209     0    stevel void		_rewindac(au_acinfo_t *);
    210     0    stevel 
    211     0    stevel int		_getacdir(au_acinfo_t *, char *, int);
    212     0    stevel int		_getaclib(au_acinfo_t *, kva_t **);
    213     0    stevel int		_getacmin(au_acinfo_t *, int *);
    214     0    stevel int		_getacna(au_acinfo_t *, char *, int);
    215     0    stevel int		_getacflg(au_acinfo_t *, char *, int);
    216     0    stevel int		_getacplug(au_acinfo_t *, kva_t **);
    217     0    stevel 
    218     0    stevel /*
    219     0    stevel  * Functions that manipulate audit masks
    220     0    stevel  */
    221     0    stevel 
    222     0    stevel extern int	au_user_mask(char *, au_mask_t *);
    223     0    stevel extern int	getauditflagsbin(char *, au_mask_t *);
    224     0    stevel extern int	getauditflagschar(char *, au_mask_t *, int);
    225     0    stevel extern int	getfauditflags(au_mask_t *, au_mask_t *, au_mask_t *);
    226     0    stevel 
    227     0    stevel /*
    228     0    stevel  * Functions that do system calls
    229     0    stevel  */
    230     0    stevel 
    231     0    stevel extern int	audit(char *, int);
    232     0    stevel extern int	auditon(int, caddr_t, int);
    233     0    stevel extern int	auditdoor(int);
    234     0    stevel extern int	getaudit(auditinfo_t *);
    235     0    stevel extern int	getaudit_addr(auditinfo_addr_t *, int);
    236     0    stevel extern int	getauid(au_id_t *);
    237     0    stevel extern int	setaudit(auditinfo_t *);
    238     0    stevel extern int	setaudit_addr(auditinfo_addr_t *, int);
    239     0    stevel extern int	setauid(au_id_t *);
    240     0    stevel 
    241     0    stevel #define	BSM_TEXTBUFSZ	256 /* size of string for generic text token */
    242     0    stevel 
    243     0    stevel /*
    244     0    stevel  * Defines for au_preselect(3)
    245     0    stevel  */
    246     0    stevel #define	AU_PRS_SUCCESS	1
    247     0    stevel #define	AU_PRS_FAILURE	2
    248     0    stevel #define	AU_PRS_BOTH	(AU_PRS_SUCCESS|AU_PRS_FAILURE)
    249     0    stevel 
    250     0    stevel #define	AU_PRS_USECACHE	0
    251     0    stevel #define	AU_PRS_REREAD	1
    252     0    stevel 
    253     0    stevel /*
    254     0    stevel  * Defines for cacheauclass and cacheauevent
    255     0    stevel  */
    256     0    stevel #define	AU_CACHE_FREE	0x0000
    257     0    stevel #define	AU_CACHE_NAME	0x0001
    258     0    stevel #define	AU_CACHE_NUMBER	0x0002
    259     0    stevel 
    260     0    stevel /* Flags for user-level audit routines: au_open, au_close, au_to_ */
    261     0    stevel #define	AU_TO_NO_WRITE	0
    262     0    stevel #define	AU_TO_WRITE	1
    263     0    stevel 
    264     0    stevel /* system audit files for auditd */
    265     0    stevel #define	AUDITCLASSFILE		"/etc/security/audit_class"
    266     0    stevel #define	AUDITCONTROLFILE	"/etc/security/audit_control"
    267     0    stevel #define	AUDITDATAFILE		"/etc/security/audit_data"
    268     0    stevel #define	AUDITEVENTFILE		"/etc/security/audit_event"
    269     0    stevel #define	AUDITUSERFILE		"/etc/security/audit_user"
    270     0    stevel 
    271     0    stevel /* array sizes for audit library structures */
    272     0    stevel #define	AU_CLASS_NAME_MAX	8
    273     0    stevel #define	AU_CLASS_DESC_MAX	72
    274     0    stevel #define	AU_EVENT_NAME_MAX	30
    275     0    stevel #define	AU_EVENT_DESC_MAX	50
    276     0    stevel #define	AU_EVENT_LINE_MAX	256
    277     0    stevel 
    278     0    stevel /*
    279     0    stevel  * Some macros used internally by the nsswitch code
    280     0    stevel  */
    281     0    stevel #define	AUDITUSER_FILENAME		"/etc/security/audit_user"
    282     0    stevel #define	AUDITUSER_DB_NAME		"audit_user.org_dir"
    283     0    stevel #define	AUDITUSER_DB_NCOL		3	/* total columns */
    284     0    stevel #define	AUDITUSER_DB_NKEYCOL		1	/* total searchable columns */
    285     0    stevel #define	AUDITUSER_DB_TBLT		"audit_user_tbl"
    286     0    stevel #define	AUDITUSER_SUCCESS		0
    287     0    stevel #define	AUDITUSER_PARSE_ERANGE		1
    288     0    stevel #define	AUDITUSER_NOT_FOUND		2
    289     0    stevel 
    290     0    stevel #define	AUDITUSER_COL0_KW		"name"
    291     0    stevel #define	AUDITUSER_COL1_KW		"always"
    292     0    stevel #define	AUDITUSER_COL2_KW		"never"
    293     0    stevel 
    294     0    stevel /*
    295     0    stevel  * indices of searchable columns
    296     0    stevel  */
    297     0    stevel #define	AUDITUSER_KEYCOL0		0	/* name */
    298     0    stevel 
    299     0    stevel 
    300     0    stevel #ifdef	__cplusplus
    301     0    stevel }
    302     0    stevel #endif
    303     0    stevel 
    304     0    stevel #endif	/* _BSM_LIBBSM_H */
    305