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

#ifndef	_TSOL_USER_H
#define	_TSOL_USER_H

#pragma ident	"@(#)user.h	1.11	96/05/03 SMI; TSOL 2.x"

#ifdef	__cplusplus
extern "C" {
#endif

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

#define	TSOL_USER_FILENAME	"/etc/security/tsol/tsoluser"

#define	TSOL_USER_DB_NAME	"tsoluser.org_dir"
#define	TSOL_USER_DB_NCOL	15
#define	TSOL_USER_DB_TBLT	"user_tbl"

#define TSOL_USER_NAME_DEFAULT_KW	"nobody"

#define	TSOL_USER_LOCK_LOCKED		0
#define	TSOL_USER_LOCK_OPEN		1
#define	TSOL_USER_LOCK_FIXED		2
#define	TSOL_USER_LOCK_LOCKED_KW	"locked"
#define	TSOL_USER_LOCK_OPEN_KW		"open"
#define	TSOL_USER_LOCK_FIXED_KW		"fixed"
#define	TSOL_USER_LOCK_DEFAULT_KW	TSOL_USER_LOCK_LOCKED_KW

#define	TSOL_USER_GEN_AUTOMATIC		0
#define	TSOL_USER_GEN_MANUAL		1
#define	TSOL_USER_GEN_SYSDEF		2
#define	TSOL_USER_GEN_AUTOMATIC_KW	"automatic"
#define	TSOL_USER_GEN_MANUAL_KW		"manual"
#define	TSOL_USER_GEN_SYSDEF_KW		"sysdef"
#define	TSOL_USER_GEN_DEFAULT_KW	TSOL_USER_GEN_AUTOMATIC_KW

#define	TSOL_USER_PROFILES_NONE_KW	"none"
#define	TSOL_USER_PROFILES_DEFAULT_KW	TSOL_USER_PROFILES_NONE_KW

#define	TSOL_USER_ROLES_NONE_KW		"none"
#define	TSOL_USER_ROLES_DEFAULT_KW	TSOL_USER_ROLES_NONE_KW

#define	TSOL_USER_IDLETIME_DEFAULT_KW	"5"

#define	TSOL_USER_IDLE_LOCK_KW		"lock"
#define	TSOL_USER_IDLE_LOGOUT_KW	"logout"

#define	TSOL_USER_VIEW_INTERNAL		0
#define	TSOL_USER_VIEW_EXTERNAL		1
#define	TSOL_USER_VIEW_SYSDEF		2
#define	TSOL_USER_VIEW_INTERNAL_KW	"internal"
#define	TSOL_USER_VIEW_EXTERNAL_KW	"external"
#define	TSOL_USER_VIEW_SYSDEF_KW	"sysdef"
#define	TSOL_USER_VIEW_SHOWIL_KW	"showil"
#define	TSOL_USER_VIEW_HIDEIL_KW	"hideil"
#define	TSOL_USER_VIEW_SHOWSL_KW	"showsl"
#define	TSOL_USER_VIEW_HIDESL_KW	"hidesl"
#define	TSOL_USER_VIEW_DEFAULT_KW	"external,showil,showsl"

#define TSOL_USER_LABELMIN_DEFAULT_KW	"ADMIN_LOW"
#define TSOL_USER_LABELMAX_DEFAULT_KW	"ADMIN_HIGH"
#define TSOL_USER_LABELTRANS_DEFAULT_KW	"none"

#define	TSOL_USER_TYPE_NORMAL		0
#define	TSOL_USER_TYPE_ADMIN		1
#define	TSOL_USER_TYPE_NONADMIN		2
#define	TSOL_USER_TYPE_NORMAL_KW	"utnorm"
#define	TSOL_USER_TYPE_ADMIN_KW		"utadm"
#define	TSOL_USER_TYPE_NONADMIN_KW	"utrole"
#define	TSOL_USER_TYPE_DEFAULT_KW	TSOL_USER_TYPE_NORMAL_KW

#define	TSOL_USER_RES1_DEFAULT_KW	"res1"
#define	TSOL_USER_RES2_DEFAULT_KW	"res2"
#define	TSOL_USER_RES3_DEFAULT_KW	"res3"


/*
 * Some macros used internally by the nsswitch code
 */
#define	TSOL_USER_SUCCESS		0
#define	TSOL_USER_PARSE_ERANGE		1
#define TSOL_USER_NOT_FOUND		2

typedef struct userent_s {
	char *name;
	char *lock;
	char *gen;
	char *profiles;
	char *roles;
	char *idletime;
	char *idlecmd;
	char *labelview;
	char *labeltrans;
	char *labelmin;
	char *labelmax;
	char *usertype;
	char *res1;
	char *res2;
	char *res3;
} userent_t;

#ifdef	__STDC__

extern userent_t *getuserentbyname(char *, int);
extern userent_t *getuserentbyuid(uid_t, int);
extern userent_t *getuserent(int);
extern int putuserent(userent_t *, int);
extern void setuserent(int, int);
extern void enduserent(int);
extern void print_userent(userent_t *);
extern void free_userent(userent_t *);
extern char **getrolenames(int);

#else /* not __STDC__ */

extern userent_t *getuserentbyname();
extern userent_t *getuserent();
extern int putuserent();
extern int setuserent();
extern int enduserent();
extern void print_userent();
extern char **getrolenames();

#endif

#ifdef	__cplusplus
}
#endif

#endif /* _TSOL_USER_H */
