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 * Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved.
23 */
24
25 #ifndef _USER_ATTR_H
26 #define _USER_ATTR_H
27
28 #ifdef __cplusplus
29 extern "C" {
30 #endif
31
32
33 #include <sys/types.h>
34 #include <secdb.h>
35
36
37 struct __FILE; /* structure tag for type FILE defined in stdio.h */
38
39 /*
40 * Some macros used internally by the nsswitch code
41 */
42 #define USERATTR_FILENAME "/etc/user_attr"
43 #define USERATTR_DB_NAME "user_attr.org_dir"
44 #define USERATTR_DB_NCOL 5 /* total columns */
45 #define USERATTR_DB_NKEYCOL 2 /* total searchable columns */
46 #define USERATTR_DB_TBL "user_attr_tbl"
47 #define USERATTR_NAME_DEFAULT_KW "nobody"
48
49 #define USERATTR_COL0_KW "name"
50 #define USERATTR_COL1_KW "qualifier"
51 #define USERATTR_COL2_KW "res1"
52 #define USERATTR_COL3_KW "res2"
53 #define USERATTR_COL4_KW "attr"
54
55 #define DEF_LIMITPRIV "PRIV_LIMIT="
56 #define DEF_DFLTPRIV "PRIV_DEFAULT="
57
58 /*
59 * indices of searchable columns
60 */
61 #define USERATTR_KEYCOL0 0 /* name */
62 #define USERATTR_KEYCOL1 1 /* qualifier */
63
64 /*
65 * Key words used in the user_attr database
66 */
67 #define USERATTR_LOCK_KW "lock"
68 #define USERATTR_LOCK_LOCKED_KW "locked"
69 #define USERATTR_LOCK_OPEN_KW "open"
70 #define USERATTR_LOCK_FIXED_KW "fixed"
71 #define USERATTR_GEN_KW "gen"
72 #define USERATTR_GEN_AUTOMATIC_KW "automatic"
73 #define USERATTR_GEN_MANUAL_KW "manual"
74 #define USERATTR_GEN_SYSDEF_KW "sysdef"
75 #define USERATTR_PROFILES_KW "profiles"
76 #define USERATTR_PROFILES_NONE_KW "none"
77 #define USERATTR_ROLES_KW "roles"
78 #define USERATTR_ROLES_NONE_KW "none"
79 #define USERATTR_DEFAULTPROJ_KW "project"
80 #define USERATTR_IDLETIME_KW "idletime"
81 #define USERATTR_IDLECMD_KW "idlecmd"
82 #define USERATTR_IDLECMD_LOCK_KW "lock"
83 #define USERATTR_IDLECMD_LOGOUT_KW "logout"
84 #define USERATTR_TYPE_KW "type"
85 #define USERATTR_TYPE_NORMAL_KW "normal"
86 #define USERATTR_TYPE_ADMIN_KW "admin"
87 #define USERATTR_TYPE_NONADMIN_KW "role"
88 #define USERATTR_AUTHS_KW "auths"
89 #define USERATTR_LIMPRIV_KW "limitpriv"
90 #define USERATTR_DFLTPRIV_KW "defaultpriv"
91 #define USERATTR_LOCK_AFTER_RETRIES_KW "lock_after_retries"
92 #define USERATTR_CLEARANCE "clearance"
93 #define USERATTR_LABELVIEW "labelview"
94 #define USERATTR_LABELVIEW_EXTERNAL "external"
95 #define USERATTR_LABELVIEW_HIDESL "hidesl"
96 #define USERATTR_HIDESL USERATTR_LABELVIEW_HIDESL
97 #define USERATTR_LABELVIEW_INTERNAL "internal"
98 #define USERATTR_LABELVIEW_SHOWSL "showsl"
99 #define USERATTR_LABELTRANS "labeltrans"
100 #define USERATTR_LOCK_NO "no"
101 #define USERATTR_LOCK_YES "yes"
102 #define USERATTR_MINLABEL "min_label"
103 #define USERATTR_PASSWD "password"
104 #define USERATTR_PASSWD_AUTOMATIC "automatic"
105 #define USERATTR_PASSWD_MANUAL "manual"
106 #define USERATTR_TYPE_ROLE USERATTR_TYPE_NONADMIN_KW
107 #define USERATTR_AUDIT_FLAGS_KW "audit_flags"
108
109
110 /*
111 * Nsswitch representation of user attributes.
112 */
113 typedef struct userstr_s {
114 char *name; /* user name */
115 char *qualifier; /* reserved for future use */
116 char *res1; /* reserved for future use */
117 char *res2; /* reserved for future use */
118 char *attr; /* string of key-value pair attributes */
119 } userstr_t;
120
121 /*
122 * API representation of user attributes.
123 */
124 typedef struct userattr_s {
125 char *name; /* user name */
126 char *qualifier; /* reserved for future use */
127 char *res1; /* reserved for future use */
128 char *res2; /* reserved for future use */
129 kva_t *attr; /* array of key-value pair attributes */
130 } userattr_t;
131
132 #ifdef __STDC__
133 extern userattr_t *getusernam(const char *);
134 extern userattr_t *getuseruid(uid_t uid);
135 extern userattr_t *getuserattr(void);
136 extern userattr_t *fgetuserattr(struct __FILE *);
137 extern void setuserattr(void);
138 extern void enduserattr(void);
139 extern void free_userattr(userattr_t *);
140
141 #else /* not __STDC__ */
142
143 extern userattr_t *getusernam();
144 extern userattr_t *getuseruid();
145 extern userattr_t *getuserattr();
146 extern userattr_t *fgetuserattr();
147 extern void setuserattr();
148 extern void enduserattr();
149 extern void free_userattr();
150 #endif
151
152 #ifdef __cplusplus
153 }
154 #endif
155
156 #endif /* _USER_ATTR_H */