root/usr/src/head/prof_attr.h
/*
 * CDDL HEADER START
 *
 * The contents of this file are subject to the terms of the
 * Common Development and Distribution License (the "License").
 * You may not use this file except in compliance with the License.
 *
 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
 * or http://www.opensolaris.org/os/licensing.
 * See the License for the specific language governing permissions
 * and limitations under the License.
 *
 * When distributing Covered Code, include this CDDL HEADER in each
 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
 * If applicable, add the following below this CDDL HEADER, with the
 * fields enclosed by brackets "[]" replaced with your own identifying
 * information: Portions Copyright [yyyy] [name of copyright owner]
 *
 * CDDL HEADER END
 */
/*
 * Copyright 2014 Garrett D'Amore <garrett@damore.org>
 * Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved.
 */

#ifndef _PROF_ATTR_H
#define _PROF_ATTR_H

#ifdef  __cplusplus
extern "C" {
#endif


#include <sys/types.h>
#include <secdb.h>


#define PROFATTR_FILENAME               "/etc/security/prof_attr"
#define PROFATTR_DB_NAME                "prof_attr.org_dir"
#define PROFATTR_DB_NCOL                5       /* total columns */
#define PROFATTR_DB_NKEYCOL             1       /* total searchable columns */
#define PROFATTR_DB_TBLT                "prof_attr_tbl"
#define PROFATTR_NAME_DEFAULT_KW        "nobody"

#define PROFATTR_COL0_KW                "name"
#define PROFATTR_COL1_KW                "res1"
#define PROFATTR_COL2_KW                "res2"
#define PROFATTR_COL3_KW                "desc"
#define PROFATTR_COL4_KW                "attr"

#define PROFILE_STOP                    "Stop"

#define DEF_PROF                        "PROFS_GRANTED="
#define DEF_CONSUSER                    "CONSOLE_USER="

#define MAXPROFS                        4096

/*
 * indices of searchable columns
 */
#define PROFATTR_KEYCOL0                0       /* name */


/*
 * Key words used in the prof_attr database
 */
#define PROFATTR_AUTHS_KW               "auths"
#define PROFATTR_PROFS_KW               "profiles"
#define PROFATTR_PRIVS_KW               "privs"


/*
 * Nsswitch representation of profile attributes.
 */

typedef struct profstr_s {
        char   *name;   /* proforization name */
        char   *res1;   /* RESERVED */
        char   *res2;   /* RESERVED */
        char   *desc;   /* description */
        char   *attr;   /* string of key-value pair attributes */
} profstr_t;

typedef struct profattr_s {
        char   *name;   /* proforization name */
        char   *res1;   /* RESERVED */
        char   *res2;   /* RESERVED */
        char   *desc;   /* description */
        kva_t  *attr;   /* array of key-value pair attributes */
} profattr_t;

extern profattr_t *getprofnam(const char *);
extern profattr_t *getprofattr(void);
extern void getproflist(const char *, char **, int *);
extern void setprofattr(void);
extern void endprofattr(void);
extern void free_profattr(profattr_t *);
extern void free_proflist(char **, int);

#ifdef __cplusplus
}
#endif

#endif  /* _PROF_ATTR_H */