/* * This file contains all the definitions and declarations to be included * with all the password management routines. * * It should be noted that these routines leave one file descriptor * open after the initial call. This may need to be closed. */ /* * various file names */ #define ETCPASSWD "/etc/passwd" /* the passwd file name */ /* * Various things to do with the passwd file */ /* elements of the string array */ #define LNAME 0 /* the login name element in "pw_strings" */ #define DIRPATH 1 /* the initial directory path name in ditto */ #define SHELLPATH 2 /* the initial shell pathname in ditto */ #define FIRSTNAME 3 /* the users firstname element in ditto */ #define LASTNAME 4 /* the users lastname element in ditto */ #define OTHER 5 /* the other element in ditto */ /* various handy values */ #define LOGLEN 100 /* max size of login name checked */ #define PWTABENTLEN 4 /* the size of a table entry */ #define PWSLENCNT 6 /* the number of var len string ptrs */ #define PWTABSIZE 2000 /* the total possible number of users */ #define PWHASHSIZE 511 /* the hashing function range */ #define PWTABLEN ((PWTABSIZE+PWHASHSIZE)*PWTABENTLEN) #define PWENTNULL 0l /* password null entry signifier */ #define USAGEK 1.00964 /* decay parameter for usage */ #define IWEIGHT 2 /* weight factor for inodes */ #define PASSWDZ 133 /* max size of passwd for routines that do not alloc */ #define SYSUSERS 20 /* the max uid for system type uids */ #define COMMONUSERS 99 /* the max uid for inter system validated users */ /* the actual shape of a passwd entry */ struct pwent { long pw_next; /* seek address of next entry in list */ long pw_last; /* seek address of previous entry in list */ /* * The following will be part of a limits structure */ unsigned pw_uid; /* integer uid */ unsigned pw_shares; /* number of shares held */ long pw_usage; /* accumulated usage figure */ unsigned pw_cmask[CMASKSIZE]; /* class mask of this user */ unsigned pw_flags; /* some handy flags */ unsigned pw_dlimit; /* users disc limit in blocks */ unsigned pw_doverflw; /* amount disc limit may be exceeded before encountering masonary */ char pw_plimit; /* users process count limit */ char pw_climit; /* users core limit in K bytes */ /* * The rest does not reside in core */ unsigned pw_tmask; /* user terminal group mask */ char pw_pword[8]; /* encrypted password */ long pw_contime; /* total accumulated connect time */ long pw_cputime; /* total accumulated cpu time */ long pw_extime; /* time at which last limit struct freed */ /* ie the last time the user did anything */ char pw_warn; /* number of warnings, eg re disc space */ char pw_pages; /* line printer pages limit in 10s */ /* * The super user will need to have limits of -1 (maximum). * * In UNSWDCS's case the LA180s run approx. 4 times slower than our larger * printer. The pages limit could therefore be right shifted 2 places * when used as an LA180 limit. * * * Now some handy terminal booking things * */ #ifdef TERMBOOK char pw_tblim; /* usage limit ,sets transient booking limit */ /* 0..250 */ char pw_tbrate; /* rate of penalty for booking */ /* 0..14 */ #define TBCREDIT 2 /* credit for 1 period off , thank you ! */ #endif TERMBOOK /* Now follow a set of counts relating to the lengths of character strings. * The strings, all null terminated, follow sequentially immediately * after the last count. "char *"s are used so that they may be converted * to string pointers in core. */ char *pw_strings[PWSLENCNT]; /* variable length string pointers */ /* * The pointer array elements point to the following: * * 0 login name * 1 initial directory pathname * 2 initial shell pathname * 3 users first name * 4 users last name * 5 "other" general data field * * * A good sized string buffer (say 200 bytes) * should be provided for "getpwuid" and "getpwlog". */ #define SSIZ 200 /* a goodly size */ /* * * Data item Notes and routines which create or modify entry * * pw_next *pwent routines and pwedit * pw_last *pwent routines and pwedit * pw_pword[8] pwedit and passwd * pw_uid *pwent routines and pwedit * pw_shares pwedit * pw_usage init and pwedit * pw_flags init, login and pwedit * * flags have uses as follow * * 01 DAWARN one warning given during term. sess. * 02 DLIMIT no further disc output allowed * 04 ASYNCKILL kill all async procs at logoff time * 010 ASYNCNICE force async procs to background at log off * 020 CLASSACC this entry regarded as a class account * 040 NOEVICT this bloke can't be evicted off his terminal * . * . spares * . * 0100000 * * pw_dlimit pwedit * pw_contime init and pwedit * pw_cputime init and pwedit * pw_extime init and pwedit * pw_climit pwedit * pw_plimit pwedit * pw_warn login and pwedit * pw_pages pwedit * pw_strings[] *pwent routines * * */ }; /* some useful 'passwd' defines */ #define NDLIMWARN 3 /* * Define and declaration needed to know the size of a pwentry */ struct { struct pwent _pw_sizefinder; }; #define PWENTLEN (sizeof 0->_pw_sizefinder)