📄 sys.c,v
字号:
head 1.2;branch ;access ;symbols ;locks ; strict;comment @ * @;1.2date 91.12.01.09.21.30; author tytso; state Exp;branches ;next 1.1;1.1date 91.11.21.09.18.36; author tytso; state Exp;branches ;next ;desc@@1.2log@Patches sent to linus@text@/* * linux/kernel/sys.c * * (C) 1991 Linus Torvalds */#include <errno.h>#include <linux/sched.h>#include <linux/tty.h>#include <linux/kernel.h>#include <asm/segment.h>#include <sys/times.h>#include <sys/utsname.h>int sys_ftime(){ return -ENOSYS;}int sys_break(){ return -ENOSYS;}int sys_ptrace(){ return -ENOSYS;}int sys_stty(){ return -ENOSYS;}int sys_gtty(){ return -ENOSYS;}int sys_rename(){ return -ENOSYS;}int sys_prof(){ return -ENOSYS;}int sys_setregid(int rgid, int egid){ if (rgid>0) { if ((current->gid == rgid) || suser()) current->gid = rgid; else return(-EPERM); } if (egid>0) { if ((current->gid == egid) || (current->egid == egid) || (current->sgid == egid) || suser()) current->egid = egid; else return(-EPERM); } return 0;}int sys_setgid(int gid){ return(sys_setregid(gid, gid));}int sys_acct(){ return -ENOSYS;}int sys_phys(){ return -ENOSYS;}int sys_lock(){ return -ENOSYS;}int sys_mpx(){ return -ENOSYS;}int sys_ulimit(){ return -ENOSYS;}int sys_time(long * tloc){ int i; i = CURRENT_TIME; if (tloc) { verify_area(tloc,4); put_fs_long(i,(unsigned long *)tloc); } return i;}/* * Unprivileged users may change the real user id to the effective uid * or vice versa. */int sys_setreuid(int ruid, int euid){ int old_ruid = current->uid; if (ruid>0) { if ((current->euid==ruid) || (old_ruid == ruid) || suser()) current->uid = ruid; else return(-EPERM); } if (euid>0) { if ((old_ruid == euid) || (current->euid == euid) || suser()) current->euid = euid; else { current->uid = old_ruid; return(-EPERM); } } return 0;}int sys_setuid(int uid){ return(sys_setreuid(uid, uid));}int sys_stime(long * tptr){ if (!suser()) return -EPERM; startup_time = get_fs_long((unsigned long *)tptr) - jiffies/HZ; return 0;}int sys_times(struct tms * tbuf){ if (tbuf) { verify_area(tbuf,sizeof *tbuf); put_fs_long(current->utime,(unsigned long *)&tbuf->tms_utime); put_fs_long(current->stime,(unsigned long *)&tbuf->tms_stime); put_fs_long(current->cutime,(unsigned long *)&tbuf->tms_cutime); put_fs_long(current->cstime,(unsigned long *)&tbuf->tms_cstime); } return jiffies;}int sys_brk(unsigned long end_data_seg){ if (end_data_seg >= current->end_code && end_data_seg < current->start_stack - 16384) current->brk = end_data_seg; return current->brk;}/* * This needs some heave checking ... * I just haven't get the stomach for it. I also don't fully * understand sessions/pgrp etc. Let somebody who does explain it. */int sys_setpgid(int pid, int pgid){ int i; if (!pid) pid = current->pid; if (!pgid) pgid = current->pid; for (i=0 ; i<NR_TASKS ; i++) if (task[i] && task[i]->pid==pid) { if (task[i]->leader) return -EPERM; if (task[i]->session != current->session) return -EPERM; task[i]->pgrp = pgid; return 0; } return -ESRCH;}int sys_getpgrp(void){ return current->pgrp;}int sys_setsid(void){ if (current->leader && !suser()) return -EPERM; current->leader = 1; current->session = current->pgrp = current->pid; current->tty = -1; return current->pgrp;}int sys_uname(struct utsname * name){ static struct utsname thisname = { "linux .0","nodename","release ","version ","machine " }; int i; if (!name) return -ERROR; verify_area(name,sizeof *name); for(i=0;i<sizeof *name;i++) put_fs_byte(((char *) &thisname)[i],i+(char *) name); return 0;}int sys_umask(int mask){ int old = current->umask; current->umask = mask & 0777; return (old);}@1.1log@Initial revision@text@d51 1a51 1int sys_setgid(int gid)d53 4a56 3 if (current->euid && current->uid) if (current->gid==gid || current->sgid==gid) current->egid = gid;d58 11a68 3 return -EPERM; else current->gid = current->egid = gid;d72 5d114 5a118 1int sys_setuid(int uid)d120 7a126 3 if (current->euid && current->uid) if (uid==current->uid || current->suid==current->uid) current->euid=uid;d128 12a139 3 return -EPERM; else current->euid=current->uid=uid;d143 5d150 1a150 1 if (current->euid && current->uid)d208 1a208 3 if (current->uid && current->euid) return -EPERM; if (current->leader)@
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -