/*
 * Copyright (c) 1995, 1996 by Sun Microsystems, Inc.
 * All rights reserved.
 */

#ifndef	_TSOL_PROF_H
#define	_TSOL_PROF_H

#pragma ident	"@(#)prof.h	1.8	96/03/12 SMI; TSOL 2.x"

#ifdef	__cplusplus
extern "C" {
#endif

#include <sys/types.h>
#include <tsol/tsol.h>
#include <tsol/priv.h>

#define	TSOL_PROF_FILENAME	"/etc/security/tsol/tsolprof"
#define	TSOL_PROF_DFLTFILE	"/etc/default/libtsoldb"

#define	TSOL_PROF_DB_NAME	"tsolprof.org_dir"
#define	TSOL_PROF_DB_NCOL	7
#define	TSOL_PROF_DB_TBLT	"prof_tbl"

#define	TSOL_PROF_APPEND_CHAR	'^'

/*
 * Some macros used internally by the nsswitch code
 */
#define TSOL_PROF_SUCCESS               0
#define TSOL_PROF_PARSE_ERANGE          1
#define TSOL_PROF_NOT_FOUND             2

typedef struct profcmd_s {
	char *dir;
	char *file;
	char *privs;
	char *euid;
	char *egid;
	char *min;
	char *max;
	struct profcmd_s *p_next;
} profcmd_t;

typedef struct profact_s {
	char *actname;
	char *argclass;
	char *argtype;
	char *argmode;
	char *argcount;
	char *privs;
	char *euid;
	char *egid;
	char *min;
	char *max;
	struct profact_s *p_next;
} profact_t;

typedef struct profent_s {
	char *name;
	char *desc;
	char *auths;
	profact_t *actions;
	profcmd_t *cmds;
	char *links;	/* Sun only */
	char *flags;	/* Sun only */
} profent_t;

typedef struct profstr_s {
	char *name;
	char *desc;
	char *auths;
	char *actions;
	char *cmds;
	char *links;	/* Sun only */
	char *flags;	/* Sun only */
} profstr_t;

typedef struct proflist_s {
	profstr_t *profstr;
	struct proflist_s *next;
} proflist_t;


#ifdef	__STDC__

extern profent_t *getprofentbyname(char *, int);
extern profent_t *getprofent(int);
extern int putprofent(profent_t *, int);
extern void setprofent(int, int);
extern void endprofent(int);
extern void print_profent(profent_t *);
extern void free_profent(profent_t *);

extern profstr_t *getprofstrbyname(char *, int);
extern profstr_t *getprofstr(int);
extern int putprofstr(profstr_t *, int);
extern void setprofstr(int, int);
extern void endprofstr(int);
extern void print_profstr(profstr_t *);
extern void print_profstr(profstr_t *);
extern void free_profstr(profstr_t *);

extern profent_t *prof_str_to_ent(profstr_t *);
extern profstr_t *prof_ent_to_str(profent_t *);
extern proflist_t *prof_str_to_list(profstr_t *, int);
extern profstr_t *prof_list_to_str(proflist_t *);
extern void print_proflist(proflist_t *);

extern char **getprofilenames(int);

#else /* not __STDC__ */

extern profent_t *getprofentbyname();
extern profent_t *getprofent();
extern int putprofent();
extern int setprofent();
extern int endprofent();
extern void print_profent();

extern profstr_t *getprofstrbyname();
extern profstr_t *getprofstr();
extern int putprofstr();
extern int setprofstr();
extern int endprofstr();
extern void print_profstr();

extern profent_t *prof_str_to_ent();
extern profstr_t *prof_ent_to_str();
extern proflist_t *prof_str_to_list();
extern void print_proflist();

extern char **getprofilenames();

#endif

#ifdef	__cplusplus
}
#endif

#endif /* _TSOL_PROF_H */
