X-Git-Url: https://git.subgeniuskitty.com/unix-history/.git/blobdiff_plain/21b31a065422c250758922cd3da03564e9e09f87..a937f8567ba9375553a85507f18042a6faaffaab:/usr/src/sys/kern/kern_xxx.c diff --git a/usr/src/sys/kern/kern_xxx.c b/usr/src/sys/kern/kern_xxx.c index 3fb635ae85..94b655b5df 100644 --- a/usr/src/sys/kern/kern_xxx.c +++ b/usr/src/sys/kern/kern_xxx.c @@ -1,14 +1,24 @@ /* - * Copyright (c) 1982 Regents of the University of California. - * All rights reserved. The Berkeley software License Agreement - * specifies the terms and conditions for redistribution. + * Copyright (c) 1982, 1986, 1989 Regents of the University of California. + * All rights reserved. * - * @(#)kern_xxx.c 6.6 (Berkeley) %G% + * Redistribution and use in source and binary forms are permitted + * provided that the above copyright notice and this paragraph are + * duplicated in all such forms and that any documentation, + * advertising materials, and other materials related to such + * distribution and use acknowledge that the software was developed + * by the University of California, Berkeley. The name of the + * University may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + * + * @(#)kern_xxx.c 7.7 (Berkeley) %G% */ #include "param.h" #include "systm.h" -#include "dir.h" #include "user.h" #include "kernel.h" #include "proc.h" @@ -26,22 +36,19 @@ sethostid() long hostid; } *uap = (struct a *)u.u_ap; - if (suser()) - hostid = uap->hostid; } gethostname() { register struct a { char *hostname; - int len; + u_int len; } *uap = (struct a *)u.u_ap; - register u_int len; - len = uap->len; - if (len > hostnamelen + 1) - len = hostnamelen + 1; - u.u_error = copyout((caddr_t)hostname, (caddr_t)uap->hostname, len); + if (uap->len > hostnamelen + 1) + uap->len = hostnamelen + 1; + u.u_error = copyout((caddr_t)hostname, (caddr_t)uap->hostname, + uap->len); } sethostname() @@ -51,7 +58,6 @@ sethostname() u_int len; } *uap = (struct a *)u.u_ap; - if (!suser()) return; if (uap->len > sizeof (hostname) - 1) { u.u_error = EINVAL; @@ -68,289 +74,4 @@ reboot() int opt; }; - if (suser()) - boot(RB_BOOT, ((struct a *)u.u_ap)->opt); -} - -#ifdef COMPAT -#include "../h/quota.h" - -osetuid() -{ - register uid; - register struct a { - int uid; - } *uap; - - uap = (struct a *)u.u_ap; - uid = uap->uid; - if (u.u_ruid == uid || u.u_uid == uid || suser()) { -#ifdef QUOTA - if (u.u_quota->q_uid != uid) { - qclean(); - qstart(getquota(uid, 0, 0)); - } -#endif - u.u_uid = uid; - u.u_procp->p_uid = uid; - u.u_ruid = uid; - } -} - -osetgid() -{ - register gid; - register struct a { - int gid; - } *uap; - - uap = (struct a *)u.u_ap; - gid = uap->gid; - if (u.u_rgid == gid || u.u_gid == gid || suser()) { - leavegroup(u.u_rgid); - (void) entergroup(gid); - u.u_gid = gid; - u.u_rgid = gid; - } -} - -/* - * Pid of zero implies current process. - * Pgrp -1 is getpgrp system call returning - * current process group. - */ -osetpgrp() -{ - register struct proc *p; - register struct a { - int pid; - int pgrp; - } *uap; - - uap = (struct a *)u.u_ap; - if (uap->pid == 0) - p = u.u_procp; - else { - p = pfind(uap->pid); - if (p == 0) { - u.u_error = ESRCH; - return; - } - } - if (uap->pgrp <= 0) { - u.u_r.r_val1 = p->p_pgrp; - return; - } - if (p->p_uid != u.u_uid && u.u_uid && !inferior(p)) { - u.u_error = EPERM; - return; - } - p->p_pgrp = uap->pgrp; -} - -otime() -{ - - u.u_r.r_time = time.tv_sec; -} - -ostime() -{ - register struct a { - int time; - } *uap = (struct a *)u.u_ap; - struct timeval tv; - - tv.tv_sec = uap->time; - tv.tv_usec = 0; - setthetime(&tv); -} - -/* from old timeb.h */ -struct timeb { - time_t time; - u_short millitm; - short timezone; - short dstflag; -}; - -oftime() -{ - register struct a { - struct timeb *tp; - } *uap; - struct timeb tb; - int s; - - uap = (struct a *)u.u_ap; - s = splhigh(); - tb.time = time.tv_sec; - tb.millitm = time.tv_usec / 1000; - splx(s); - tb.timezone = tz.tz_minuteswest; - tb.dstflag = tz.tz_dsttime; - u.u_error = copyout((caddr_t)&tb, (caddr_t)uap->tp, sizeof (tb)); -} - -oalarm() -{ - register struct a { - int deltat; - } *uap = (struct a *)u.u_ap; - register struct proc *p = u.u_procp; - int s = splhigh(); - - untimeout(realitexpire, (caddr_t)p); - timerclear(&p->p_realtimer.it_interval); - u.u_r.r_val1 = 0; - if (timerisset(&p->p_realtimer.it_value) && - timercmp(&p->p_realtimer.it_value, &time, >)) - u.u_r.r_val1 = p->p_realtimer.it_value.tv_sec - time.tv_sec; - if (uap->deltat == 0) { - timerclear(&p->p_realtimer.it_value); - splx(s); - return; - } - p->p_realtimer.it_value = time; - p->p_realtimer.it_value.tv_sec += uap->deltat; - timeout(realitexpire, (caddr_t)p, hzto(&p->p_realtimer.it_value)); - splx(s); -} - -onice() -{ - register struct a { - int niceness; - } *uap = (struct a *)u.u_ap; - register struct proc *p = u.u_procp; - - donice(p, (p->p_nice-NZERO)+uap->niceness); -} - -#include "../h/times.h" - -otimes() -{ - register struct a { - struct tms *tmsb; - } *uap = (struct a *)u.u_ap; - struct tms atms; - - atms.tms_utime = scale60(&u.u_ru.ru_utime); - atms.tms_stime = scale60(&u.u_ru.ru_stime); - atms.tms_cutime = scale60(&u.u_cru.ru_utime); - atms.tms_cstime = scale60(&u.u_cru.ru_stime); - u.u_error = copyout((caddr_t)&atms, (caddr_t)uap->tmsb, sizeof (atms)); -} - -scale60(tvp) - register struct timeval *tvp; -{ - - return (tvp->tv_sec * 60 + tvp->tv_usec / 16667); -} - -#include "../h/vtimes.h" - -ovtimes() -{ - register struct a { - struct vtimes *par; - struct vtimes *chi; - } *uap = (struct a *)u.u_ap; - struct vtimes avt; - - if (uap->par) { - getvtimes(&u.u_ru, &avt); - u.u_error = copyout((caddr_t)&avt, (caddr_t)uap->par, - sizeof (avt)); - if (u.u_error) - return; - } - if (uap->chi) { - getvtimes(&u.u_cru, &avt); - u.u_error = copyout((caddr_t)&avt, (caddr_t)uap->chi, - sizeof (avt)); - if (u.u_error) - return; - } -} - -#include "../machine/psl.h" -#include "../machine/reg.h" - -owait() -{ - struct rusage ru; - struct vtimes *vtp, avt; - - if ((u.u_ar0[PS] & PSL_ALLCC) != PSL_ALLCC) { - u.u_error = wait1(0, (struct rusage *)0); - return; - } - vtp = (struct vtimes *)u.u_ar0[R1]; - u.u_error = wait1(u.u_ar0[R0], &ru); - if (u.u_error) - return; - getvtimes(&ru, &avt); - (void) copyout((caddr_t)&avt, (caddr_t)vtp, sizeof (struct vtimes)); -} - -getvtimes(aru, avt) - register struct rusage *aru; - register struct vtimes *avt; -{ - - avt->vm_utime = scale60(&aru->ru_utime); - avt->vm_stime = scale60(&aru->ru_stime); - avt->vm_idsrss = ((aru->ru_idrss+aru->ru_isrss) / hz) * 60; - avt->vm_ixrss = aru->ru_ixrss / hz * 60; - avt->vm_maxrss = aru->ru_maxrss; - avt->vm_majflt = aru->ru_majflt; - avt->vm_minflt = aru->ru_minflt; - avt->vm_nswap = aru->ru_nswap; - avt->vm_inblk = aru->ru_inblock; - avt->vm_oublk = aru->ru_oublock; -} - -ovlimit() -{ - - u.u_error = EACCES; -} - -ossig() -{ - struct a { - int signo; - int (*fun)(); - } *uap = (struct a *)u.u_ap; - register int a; - struct sigvec vec; - register struct sigvec *sv = &vec; - struct proc *p = u.u_procp; - - a = uap->signo; - sv->sv_handler = uap->fun; - /* - * Kill processes trying to use job control facilities - * (this'll help us find any vestiges of the old stuff). - */ - if ((a &~ 0377) || - (sv->sv_handler != SIG_DFL && sv->sv_handler != SIG_IGN && - ((int)sv->sv_handler) & 1)) { - psignal(p, SIGSYS); - return; - } - if (a <= 0 || a >= NSIG || a == SIGKILL || a == SIGSTOP || - a == SIGCONT && sv->sv_handler == SIG_IGN) { - u.u_error = EINVAL; - return; - } - sv->sv_mask = 0; - sv->sv_flags = SV_INTERRUPT; - u.u_r.r_val1 = (int)u.u_signal[a]; - setsigvec(a, sv); - p->p_flag |= SOUSIG; /* mark as simulating old stuff */ } -#endif