From aae7e621be59821127082a86856e0d0a2c2ace72 Mon Sep 17 00:00:00 2001 From: Oliver Lehmann Date: Wed, 21 May 2008 05:11:15 +0000 Subject: [PATCH] STATUS: 81% done 0000 T _gtime compatible 000e T _ftime compatible 00a4 T _stime compatible 00d2 T _setuid compatible 012e T _getuid compatible 0148 T _setgid compatible 019a T _getgid compatible 01b4 T _getpid compatible 01d0 T _setpgrp compatible 0206 T _sync compatible 020e T _nice compatible 027c T _unlink compatible 038e T _chdir compatible 0398 T _chroot compatible 03ac T _chdirec compatible 042a T _chmod compatible 04a0 T _chown compatible 04fa T _ssig not compatible 0612 T _kill not compatible 0722 T _times not compatible 077a T _profil compatible 07ac T _sprofil not existent 0872 T _alarm compatible 08aa T _pause compatible 08bc T _umask compatible 08e0 T _utime compatible 09ee T _nosys compatible 09f8 T _nullsys compatible 09fa T _bpt not existent 0a0a T _utssys not compatible 0b0a T _ulimit compatible --- WEGA/src/uts/sys/sys4.c | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/WEGA/src/uts/sys/sys4.c b/WEGA/src/uts/sys/sys4.c index cceeeae..ad48362 100644 --- a/WEGA/src/uts/sys/sys4.c +++ b/WEGA/src/uts/sys/sys4.c @@ -488,7 +488,8 @@ utime() time_t tv[2]; uap = (struct a *)u.u_ap; - if (uap->tptr != NULL) { + if ((!u.u_segmented && uap->tptr != (time_t *)0x3f000000) || + (u.u_segmented && uap->tptr != NULL)) { if (copyin((caddr_t)uap->tptr, (caddr_t)tv, sizeof(tv))) { u.u_error = EFAULT; return; @@ -501,10 +502,12 @@ utime() if (ip == NULL) return; if (u.u_uid != ip->i_uid && u.u_uid != 0) { - if (uap->tptr != NULL) + if ((!u.u_segmented && uap->tptr != (time_t *)0x3f000000) || + (u.u_segmented && uap->tptr != NULL)) { u.u_error = EPERM; - else + } else { access(ip, IWRITE); + } } if (!u.u_error) { ip->i_flag |= IACC|IUPD|ICHG; @@ -536,10 +539,16 @@ utssys() int mv; int type; } *uap; + register struct mount *mp; + register struct filsys *fp; + extern int Nmount; + +/* variable declarations missing probably used for case 2 */ uap = (struct a *)u.u_ap; switch(uap->type) { +/* case 0 should work - case 2 is not compatible */ case 0: /* uname */ if (copyout(&utsname, uap->cbuf, sizeof(struct utsname))) u.u_error = EFAULT; @@ -548,12 +557,10 @@ case 0: /* uname */ /* case 1 was umask */ case 2: /* ustat */ - for(i=0; im_flags == MINUSE && mp->m_dev==uap->mv) { - register struct filsys *fp; fp = mp->m_bufp->b_un.b_filsys; if(copyout(&fp->s_tfree, uap->cbuf, 18))