non-super user can do `kill -1 1' to kill all processes run by them,
return ESRCH instaed of EINVAL for `kill 0 1' when not in a process group
SCCS-vsn: sys/kern/kern_sig.c 6.15
-/* kern_sig.c 6.14 85/03/19 */
+/* kern_sig.c 6.15 85/05/22 */
#include "../machine/reg.h"
#include "../machine/pte.h"
#include "../machine/reg.h"
#include "../machine/pte.h"
}
switch (uap->pid) {
case -1: /* broadcast signal */
}
switch (uap->pid) {
case -1: /* broadcast signal */
- if (suser())
- u.u_error = killpg1(uap->signo, 0, 1);
+ u.u_error = killpg1(uap->signo, 0, 1);
break;
case 0: /* signal own process group */
u.u_error = killpg1(uap->signo, 0, 0);
break;
case 0: /* signal own process group */
u.u_error = killpg1(uap->signo, 0, 0);
*/
pgrp = u.u_procp->p_pgrp;
if (pgrp == 0)
*/
pgrp = u.u_procp->p_pgrp;
if (pgrp == 0)
}
for (f = 0, p = allproc; p != NULL; p = p->p_nxt) {
if ((p->p_pgrp != pgrp && !all) || p->p_ppid == 0 ||
(p->p_flag&SSYS) || (all && p == u.u_procp))
continue;
}
for (f = 0, p = allproc; p != NULL; p = p->p_nxt) {
if ((p->p_pgrp != pgrp && !all) || p->p_ppid == 0 ||
(p->p_flag&SSYS) || (all && p == u.u_procp))
continue;
if (u.u_uid != 0 && u.u_uid != p->p_uid &&
(signo != SIGCONT || !inferior(p))) {
if (u.u_uid != 0 && u.u_uid != p->p_uid &&
(signo != SIGCONT || !inferior(p))) {
+ if (!all)
+ error = EPERM;
if (signo)
psignal(p, signo);
}
if (signo)
psignal(p, signo);
}