This source file includes following definitions.
- sys_ftime
- sys_break
- sys_ptrace
- sys_stty
- sys_gtty
- sys_rename
- sys_prof
- sys_setregid
- sys_setgid
- sys_acct
- sys_phys
- sys_lock
- sys_mpx
- sys_ulimit
- sys_time
- sys_setreuid
- sys_setuid
- sys_stime
- sys_times
- sys_brk
- sys_setpgid
- sys_getpgrp
- sys_setsid
- sys_uname
- sys_umask
1
2
3
4
5
6
7 #include <errno.h>
8
9 #include <linux/sched.h>
10 #include <linux/tty.h>
11 #include <linux/kernel.h>
12 #include <asm/segment.h>
13 #include <sys/times.h>
14 #include <sys/utsname.h>
15
16 int sys_ftime()
17 {
18 return -ENOSYS;
19 }
20
21 int sys_break()
22 {
23 return -ENOSYS;
24 }
25
26 int sys_ptrace()
27 {
28 return -ENOSYS;
29 }
30
31 int sys_stty()
32 {
33 return -ENOSYS;
34 }
35
36 int sys_gtty()
37 {
38 return -ENOSYS;
39 }
40
41 int sys_rename()
42 {
43 return -ENOSYS;
44 }
45
46 int sys_prof()
47 {
48 return -ENOSYS;
49 }
50
51 int sys_setregid(int rgid, int egid)
52 {
53 if (rgid>0) {
54 if ((current->gid == rgid) ||
55 suser())
56 current->gid = rgid;
57 else
58 return(-EPERM);
59 }
60 if (egid>0) {
61 if ((current->gid == egid) ||
62 (current->egid == egid) ||
63 (current->sgid == egid) ||
64 suser())
65 current->egid = egid;
66 else
67 return(-EPERM);
68 }
69 return 0;
70 }
71
72 int sys_setgid(int gid)
73 {
74 return(sys_setregid(gid, gid));
75 }
76
77 int sys_acct()
78 {
79 return -ENOSYS;
80 }
81
82 int sys_phys()
83 {
84 return -ENOSYS;
85 }
86
87 int sys_lock()
88 {
89 return -ENOSYS;
90 }
91
92 int sys_mpx()
93 {
94 return -ENOSYS;
95 }
96
97 int sys_ulimit()
98 {
99 return -ENOSYS;
100 }
101
102 int sys_time(long * tloc)
103 {
104 int i;
105
106 i = CURRENT_TIME;
107 if (tloc) {
108 verify_area(tloc,4);
109 put_fs_long(i,(unsigned long *)tloc);
110 }
111 return i;
112 }
113
114
115
116
117
118 int sys_setreuid(int ruid, int euid)
119 {
120 int old_ruid = current->uid;
121
122 if (ruid>0) {
123 if ((current->euid==ruid) ||
124 (old_ruid == ruid) ||
125 suser())
126 current->uid = ruid;
127 else
128 return(-EPERM);
129 }
130 if (euid>0) {
131 if ((old_ruid == euid) ||
132 (current->euid == euid) ||
133 suser())
134 current->euid = euid;
135 else {
136 current->uid = old_ruid;
137 return(-EPERM);
138 }
139 }
140 return 0;
141 }
142
143 int sys_setuid(int uid)
144 {
145 return(sys_setreuid(uid, uid));
146 }
147
148 int sys_stime(long * tptr)
149 {
150 if (!suser())
151 return -EPERM;
152 startup_time = get_fs_long((unsigned long *)tptr) - jiffies/HZ;
153 return 0;
154 }
155
156 int sys_times(struct tms * tbuf)
157 {
158 if (tbuf) {
159 verify_area(tbuf,sizeof *tbuf);
160 put_fs_long(current->utime,(unsigned long *)&tbuf->tms_utime);
161 put_fs_long(current->stime,(unsigned long *)&tbuf->tms_stime);
162 put_fs_long(current->cutime,(unsigned long *)&tbuf->tms_cutime);
163 put_fs_long(current->cstime,(unsigned long *)&tbuf->tms_cstime);
164 }
165 return jiffies;
166 }
167
168 int sys_brk(unsigned long end_data_seg)
169 {
170 if (end_data_seg >= current->end_code &&
171 end_data_seg < current->start_stack - 16384)
172 current->brk = end_data_seg;
173 return current->brk;
174 }
175
176
177
178
179
180
181 int sys_setpgid(int pid, int pgid)
182 {
183 int i;
184
185 if (!pid)
186 pid = current->pid;
187 if (!pgid)
188 pgid = current->pid;
189 for (i=0 ; i<NR_TASKS ; i++)
190 if (task[i] && task[i]->pid==pid) {
191 if (task[i]->leader)
192 return -EPERM;
193 if (task[i]->session != current->session)
194 return -EPERM;
195 task[i]->pgrp = pgid;
196 return 0;
197 }
198 return -ESRCH;
199 }
200
201 int sys_getpgrp(void)
202 {
203 return current->pgrp;
204 }
205
206 int sys_setsid(void)
207 {
208 if (current->leader && !suser())
209 return -EPERM;
210 current->leader = 1;
211 current->session = current->pgrp = current->pid;
212 current->tty = -1;
213 return current->pgrp;
214 }
215
216 int sys_uname(struct utsname * name)
217 {
218 static struct utsname thisname = {
219 "linux .0","nodename","release ","version ","machine "
220 };
221 int i;
222
223 if (!name) return -ERROR;
224 verify_area(name,sizeof *name);
225 for(i=0;i<sizeof *name;i++)
226 put_fs_byte(((char *) &thisname)[i],i+(char *) name);
227 return 0;
228 }
229
230 int sys_umask(int mask)
231 {
232 int old = current->umask;
233
234 current->umask = mask & 0777;
235 return (old);
236 }