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, Version 1.0 only 6 * (the "License"). You may not use this file except in compliance 7 * with the License. 8 * 9 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 10 * or http://www.opensolaris.org/os/licensing. 11 * See the License for the specific language governing permissions 12 * and limitations under the License. 13 * 14 * When distributing Covered Code, include this CDDL HEADER in each 15 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 16 * If applicable, add the following below this CDDL HEADER, with the 17 * fields enclosed by brackets "[]" replaced with your own identifying 18 * information: Portions Copyright [yyyy] [name of copyright owner] 19 * 20 * CDDL HEADER END 21 */ 22 /* 23 * Copyright 2016 Gordon W. Ross 24 * 25 * Copyright 2004 Sun Microsystems, Inc. All rights reserved. 26 * Use is subject to license terms. 27 */ 28 29 /* Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */ 30 /* All Rights Reserved */ 31 32 33 #ifndef _USERDEFS_H 34 #define _USERDEFS_H 35 36 #include <project.h> 37 #include <stdio_tag.h> 38 39 #ifdef __cplusplus 40 extern "C" { 41 #endif 42 43 /* 44 * The definitions in this file are local to the OA&M subsystem. General 45 * use is not encouraged. 46 * 47 * Default values are taken from (in precedence order) 48 * /etc/default/add{user,role} 49 * /usr/sadm/defadd{user,role} 50 * (compiled-in values) 51 * 52 * Note that the "old" default locations may be used as a 53 * "vendor" (or distro.) override of the compiled-in defaults. 54 * If an administrator runs "useradd -D ...", those values are 55 * stored in /etc/default/add*, which overrides all others. 56 */ 57 58 /* Defaults files */ 59 #define DEFFILE "/etc/default/adduser" 60 #define DEFROLEFILE "/etc/default/addrole" 61 62 /* Old defaults files */ 63 #define ODEFFILE "/usr/sadm/defadduser" 64 #define ODEFROLEFILE "/usr/sadm/defaddrole" 65 66 #define GROUP "/etc/group" 67 68 /* various limits */ 69 #define MAXGLEN 9 /* max length of group name */ 70 #define MAXDLEN 80 /* max length of a date string */ 71 72 /* Defaults file keywords */ 73 #define RIDSTR "defrid=" 74 #define GIDSTR "defgroup=" 75 #define GNAMSTR "defgname=" 76 #define PARSTR "defparent=" 77 #define SKLSTR "defskel=" 78 #define SHELLSTR "defshell=" 79 #define INACTSTR "definact=" 80 #define EXPIRESTR "defexpire=" 81 #define AUTHSTR "defauthorization=" 82 #define PROFSTR "defprofile=" 83 #define ROLESTR "defrole=" 84 #define PROJSTR "defproj=" 85 #define PROJNMSTR "defprojname=" 86 #define LIMPRSTR "deflimitpriv=" 87 #define DFLTPRSTR "defdefaultpriv=" 88 #define FHEADER "# Default values for useradd. Changed " 89 #define FHEADER_ROLE "# Default values for roleadd. Changed " 90 #define LOCK_AFTER_RETRIESSTR "deflock_after_retries=" 91 92 /* defaults structure */ 93 struct userdefs { 94 int defrid; /* highest reserved uid */ 95 int defgroup; /* default group id */ 96 char *defgname; /* default group name */ 97 char *defparent; /* default base directory for new logins */ 98 char *defskel; /* default skel directory */ 99 char *defshell; /* default shell */ 100 int definact; /* default inactive */ 101 char *defexpire; /* default expire date */ 102 char *defauth; /* default authorization */ 103 char *defprof; /* default profile */ 104 char *defrole; /* default role */ 105 projid_t defproj; /* default project id */ 106 char *defprojname; /* default project name */ 107 char *deflimpriv; /* default limitpriv */ 108 char *defdfltpriv; /* default defaultpriv */ 109 char *deflock_after_retries; /* default lock_after_retries */ 110 }; 111 112 extern struct userdefs *_get_userdefs(void); 113 extern struct userdefs *_get_roledefs(void); 114 115 extern void fread_defs(FILE *fp, struct userdefs *, boolean_t); 116 extern int fwrite_roledefs(struct __FILE *, struct userdefs *); 117 extern int fwrite_userdefs(struct __FILE *, struct userdefs *); 118 119 extern char *userdef_get_by_uakey(struct userdefs *, const char *); 120 void userdef_set_by_uakey(struct userdefs *, const char *, char *); 121 122 /* 123 * User/group default values 124 * These are constants _only_ when compiling libuserdefs 125 */ 126 #ifdef _USERDEFS_INTERNAL 127 #define DEFRID 99 /* max reserved group id */ 128 #define DEFGROUP 1 129 #define DEFGNAME "other" 130 #define DEFPARENT "/home" 131 #define DEFSKL "/etc/skel" 132 #define DEFSHL "/bin/sh" 133 #define DEFROLESHL "/bin/pfsh" 134 #define DEFINACT 0 135 #define DEFEXPIRE "" 136 #define DEFAUTH "" 137 #define DEFPROF "" 138 #define DEFROLEPROF "All" 139 #define DEFROLE "" 140 #define DEFPROJ 3 141 #define DEFPROJNAME "default" 142 #define DEFLIMPRIV "" 143 #define DEFDFLTPRIV "" 144 #define DEFLOCK_AFTER_RETRIES "" 145 #else /* _USERDEFS_INTERNAL */ 146 /* Get these from libuserdefs */ 147 #define DEFRID (_get_userdefs()->defrid) 148 #define DEFGROUP (_get_userdefs()->defgroup) 149 #define DEFGNAME (_get_userdefs()->defgname) 150 #define DEFPARENT (_get_userdefs()->defparent) 151 #define DEFSKL (_get_userdefs()->defskel) 152 #define DEFSHL (_get_userdefs()->defshell) 153 #define DEFROLESHL (_get_roledefs()->defshell) /* ROLE */ 154 #define DEFINACT (_get_userdefs()->definact) 155 #define DEFEXPIRE (_get_userdefs()->defexpire) 156 #define DEFAUTH (_get_userdefs()->defauth) 157 #define DEFPROF (_get_userdefs()->defprof 158 #define DEFROLEPROF (_get_roledefs()->defprof) /* ROLE */ 159 #define DEFROLE (_get_userdefs()->defrole) 160 #define DEFPROJ (_get_userdefs()->defproj) 161 #define DEFPROJNAME (_get_userdefs()->defprogname) 162 #define DEFLIMPRIV (_get_userdefs()->deflimpriv) 163 #define DEFDFLTPRIV (_get_userdefs()->defdfltpriv) 164 #define DEFLOCK_AFTER_RETRIES (_get_userdefs()->deflock_after_retries) 165 #endif /* _USERDEFS_INTERNAL */ 166 167 /* DEFGID is an alias for DEFRID. Misleading... (!= DEFGROUP) */ 168 #define DEFGID DEFRID /* XXX delete this? */ 169 170 /* exit() values for user/group commands */ 171 172 /* Everything succeeded */ 173 #define EX_SUCCESS 0 174 175 /* No permission */ 176 #define EX_NO_PERM 1 177 178 /* Command syntax error */ 179 #define EX_SYNTAX 2 180 181 /* Invalid argument given */ 182 #define EX_BADARG 3 183 184 /* A gid or uid already exists */ 185 #define EX_ID_EXISTS 4 186 187 /* PASSWD and SHADOW are inconsistent with each other */ 188 #define EX_INCONSISTENT 5 189 190 /* A group or user name doesn't exist */ 191 #define EX_NAME_NOT_EXIST 6 192 193 /* GROUP, PASSWD, or SHADOW file missing */ 194 #define EX_MISSING 7 195 196 /* GROUP, PASSWD, or SHAWOW file is busy */ 197 #define EX_BUSY 8 198 199 /* A group or user name already exists */ 200 #define EX_NAME_EXISTS 9 201 202 /* Unable to update GROUP, PASSWD, or SHADOW file */ 203 #define EX_UPDATE 10 204 205 /* Not enough space */ 206 #define EX_NOSPACE 11 207 208 /* Unable to create/remove/move home directory */ 209 #define EX_HOMEDIR 12 210 211 /* new login already in use */ 212 #define EX_NL_USED 13 213 214 /* Unexpected failure */ 215 #define EX_FAILURE 14 216 217 /* A user name is in a non-local name service */ 218 #define EX_NOT_LOCAL 15 219 220 #ifdef __cplusplus 221 } 222 #endif 223 224 #endif /* _USERDEFS_H */