/* @(#)wrtprivf.c 4.9 (Melbourne) 82/07/17 */
static struct udata udata
;
static struct mushmuck mm
;
static struct lpquota lpdq
;
static struct dquot dqb
[16];
static char dqfn
[16][32];
int psval(), plval(), psecs(), pmins(), pdate(), pbits(), pflags(), pgrps(),
psflags(), pchar(), pdquot(), praise(), pmem(), psoct(), pnolog();
"shares", psval
, "", (char *)&mm
.mm_qu
.qu_shares
,
"plimit", psval
, "max number of processes",(char *)&mm
.mm_qu
.qu_plim
,
"class", pbits
, "user classes", (char *)&mm
.mm_qu
.qu_class
,
"groups", pgrps
, "system file access groups", (char *)&udata
.ud_grps
,
"umask", psoct
, "initial umask", (char *)&udata
.ud_umask
,
"syflags", psflags
, "system flags", (char *)&mm
.mm_qu
.qu_syflags
,
"flags", pflags
, "other flags", (char *)&udata
.ud_flags
[0],
"ttyclass", pbits
, "permitted terminal classes", (char *)&udata
.ud_ttys
,
"expires", pdate
, "Account expiry date", (char *)&udata
.ud_expires
,
"nologins", pnolog
, "", (char *)0,
"maxsimul", pchar
, "maximum simultaneous logins", (char *)&udata
.ud_maxlogin
,
"maxlogin", psecs
, "maximum login time (hr:min:sec)", (char *)&mm
.mm_maxuse
,
"maxlsess", pmins
, "maximum login session (hr:min)", (char *)&mm
.mm_smax
,
"sessgap", pmins
, "gap between sessions (hr:min)", (char *)&mm
.mm_lgap
,
"sessleft", pmins
, "time left in current session (hr:min)", (char *)&mm
.mm_left
,
"weeklmax", pmins
, "max week's login time (hr:min)", (char *)&mm
.mm_wmax
,
"weeklinc", pmins
, "weekly login allowance (hr:min)", (char *)&mm
.mm_winc
,
"weeklrem", pmins
, "weekly allowance remaining (hr:min)", (char *)&mm
.mm_wrem
,
"daylmax", pmins
, "Max day's login time (hr:min)", (char *)&mm
.mm_dmax
,
"daylinc", pmins
, "daily login allowance (hr:min)", (char *)&mm
.mm_dinc
,
"daylrem", pmins
, "daily allowance remaining (hr:min)", (char *)&mm
.mm_drem
,
"prclass", pbits
, "permitted printer classes", (char *)&lpdq
.lpq_prclass
,
"lpdwmax", psval
, "maximum pages in a week", (char *)&lpdq
.lpq_wmax
,
"lpdwinc", psval
, "weekly page allowance", (char *)&lpdq
.lpq_allow
,
"lpdwrem", psval
, "pages left this week", (char *)&lpdq
.lpq_week
,
"lpddmax", psval
, "maximum pages in a day", (char *)&lpdq
.lpq_dmax
,
"lpddinc", psval
, "daily page allowance", (char *)&lpdq
.lpq_daily
,
"lpddrem", psval
, "pages left today", (char *)&lpdq
.lpq_today
,
"lpdlimit", plval
, "absolute page limit", (char *)&lpdq
.lpq_limit
,
"maxrss", pmem
, "expected largest proc size", (char *)&udata
.ud_maxrss
,
"maxdata", pmem
, "maximum data segment", (char *)&udata
.ud_maxdata
,
"maxstack", pmem
, "maximum stack segment", (char *)&udata
.ud_maxstack
,
"maxcore", pmem
, "largest core file generated", (char *)&udata
.ud_maxcore
,
"maxfile", pmem
, "largest file allowed", (char *)&udata
.ud_maxfile
,
"maxcpu", psecs
, "cpu time limit (hr:min:sec)", (char *)&udata
.ud_maxcpu
,
"noraise", praise
, "can't raise maximums", (char *)&udata
.ud_raise
,
"disc", pdquot
, "", (char *)0,
"modtty", "modify terminals other than login tty", QF_MODTTY
,
"ttyfast", "increase tty speed > 1200 baud", QF_FASTTY
,
"nasync", "remaining procs niced at logout", QF_NASYNC
,
"kasync", "remaining procs killed at logout", QF_KASYNC
,
"noumask", "not permitted to alter umask", QF_UMASK
,
"usecu", "use 'cu' to connect to remote machine", USE_REMOTE
,
"useuucp", "use 'uucp' to transfer files", USE_UUCP
,
"tutor", "various tutor priveleges", TUTOR
,
"supertute", "special tutor privs (incl modify privs)", SUPER_TUTE
,
"student", "account is a student (misc restrictions)", STUDENT
,
"stumail", "students permitted to send mail to user", GET_STU_MAIL
,
"mailstu", "permitted to send mail to students", SEND_STU_MAIL
,
"uucpmail", "permitted to mail to remote machines", UUCP_MAIL
,
"nonewgrp", "not permitted to alter login group", NO_NEWGRP
,
"studsu", "students can 'su' to this account", STUD_SU
,
/* char data */ /* short data */ /* long data */
"unlimited", INFINITY
>>24, INFINITY
>>16, 0, INFINITY
,
wrtprivf(name
, mp
, lp
, dp
, dnp
, up
)
register struct kwtab
*k
;
for (n
= 0; n
< 16; n
++) {
if ((fd
= fopen(name
, "w")) != NULL
) {
for (k
= kwtab
; k
->kwname
; k
++)
if (nameval(k
, *(long *)k
->kwptr
, sizeof(long)))
if (nameval(k
, (long)*(short *)k
->kwptr
, sizeof(short)))
if (nameval(k
, (long)*(char *)k
->kwptr
, sizeof(char)))
if (nameval(k
, (long)*(short *)k
->kwptr
, sizeof(short)))
if (nameval(k
, n
, sizeof(long)))
fprintf(fd
, "%s ", k
->kwname
);
if (n
&& (n
& (1 << 20)-1) == 0)
fprintf(fd
, "%ldM", n
>>20);
else if (n
&& (n
& (1 << 10)-1) == 0)
fprintf(fd
, "%ldK", n
>>10);
fprintf(fd
, " /* %s */\n", k
->kwcmt
);
secs
= *(long *)k
->kwptr
;
if (nameval(k
, secs
, sizeof(long)))
"%s %ld:%02ld:%02ld /* %s */\n"
mins
= *(short *)k
->kwptr
;
if (nameval(k
, (long)mins
, sizeof(short)))
register unsigned long bits
;
bits
= *(long *)k
->kwptr
;
fprintf(fd
, "%s ", k
->kwname
);
fprintf(fd
, " /* %s */\n", k
->kwcmt
);
register t_range
*rp
= udata
.ud_logon
;
"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", ""
if (rp
->tr_low
.xt_ok
== rp
->tr_high
.xt_ok
)
fprintf(fd
, "%s ", k
->kwname
);
if (rp
->tr_low
.xt_ok
!= ok
)
fprintf(fd
, "%s ", dofw
[rp
->tr_low
.xt_day
]);
if (rp
->tr_low
.xt_day
!= rp
->tr_high
.xt_day
)
fprintf(fd
, "- %s ", dofw
[rp
->tr_high
.xt_day
]);
if (rp
->tr_low
.xt_min
!= 0 || rp
->tr_high
.xt_min
!= 24*60)
fprintf(fd
, "%02d:%02d-%02d:%02d "
, rp
->tr_high
.xt_min
% 60
if (++rp
>= &udata
.ud_logon
[4] ||
rp
->tr_low
.xt_ok
== rp
->tr_high
.xt_ok
)
fprintf(fd
, " /* %s */\n", k
->kwcmt
);
date
= *(long *)k
->kwptr
;
, date
? ctime(&date
)+4 : "never"
register struct dquot
*dqp
= dqb
;
for (fs
= dqfn
; fs
[0][0]; fs
++) {
"disc %.32s blks = %d blim = %d iq = %d ilim = %d\n"
for (fp
= flg
; fp
->flgname
; fp
++)
if (f
& (1 << (int)fp
->flgval
))
fprintf(fd
, "%s %s", n
++ ? "," : "", fp
->flgname
);
fprintf(fd
, " /* %s */\n", k
->kwcmt
);
for (fp
= syf
; fp
->syfname
; fp
++)
fprintf(fd
, "%s %s", n
++ ? "," : "", fp
->syfname
);
fprintf(fd
, " /* %s */\n", k
->kwcmt
);
for (vp
= vnm
; vp
->valname
; vp
++)
if (val
== vp
->valval
[size
-1]) {
fprintf(fd
, "%s %s /* %s */\n"
register struct group
*gp
;
grps
= *(long *)k
->kwptr
;
fprintf(fd
, "%s", k
->kwname
);
for (n
= 128; n
< 128+32; n
++) { /* much magic here */
fprintf(fd
, "%s %s", sep
, gp
->gr_name
);
grps
>>= 1; /* any sort of shift will do */
fprintf(fd
, " /* %s */\n", k
->kwcmt
);