312e2bb9e0169a3f23611123505dc7bed8d285aa
/* kern_prot.c 5.6 82/09/06 */
* System calls related to processes and protection
u
.u_r
.r_val1
= u
.u_procp
->p_pid
;
u
.u_r
.r_val2
= u
.u_procp
->p_ppid
;
} *uap
= (struct a
*)u
.u_ap
;
uap
->pid
= u
.u_procp
->p_pid
;
u
.u_r
.r_val1
= p
->p_pgrp
;
} *uap
= (struct a
*)u
.u_ap
;
for (gp
= &u
.u_groups
[NGROUPS
]; gp
> u
.u_groups
; gp
--)
if (uap
->gidsetsize
< gp
- u
.u_groups
) {
uap
->gidsetsize
= gp
- u
.u_groups
;
if (copyout((caddr_t
)u
.u_groups
, (caddr_t
)uap
->gidset
,
uap
->gidsetsize
* sizeof (u
.u_groups
[0]))) {
u
.u_r
.r_val1
= uap
->gidsetsize
;
} *uap
= (struct a
*)u
.u_ap
;
uap
->pid
= u
.u_procp
->p_pid
;
/* need better control mechanisms for process groups */
if (p
->p_uid
!= u
.u_uid
&& u
.u_uid
&& !inferior(p
)) {
uap
= (struct a
*)u
.u_ap
;
if (u
.u_ruid
== uid
|| u
.u_uid
== uid
|| suser()) {
if (u
.u_quota
->q_uid
!= uid
) {
qstart(getquota(uid
, 0, 0));
uap
= (struct a
*)u
.u_ap
;
if (u
.u_rgid
== gid
|| u
.u_gid
== gid
|| suser()) {
leavegroup(u
.u_gid
); leavegroup(u
.u_rgid
);
} *uap
= (struct a
*)u
.u_ap
;
printf("gidsetsize %d, gidset %x\n", uap
->gidsetsize
, uap
->gidset
);
if (uap
->gidsetsize
> sizeof (u
.u_groups
) / sizeof (u
.u_groups
[0])) {
if (copyin((caddr_t
)uap
->gidset
, (caddr_t
)u
.u_groups
,
uap
->gidsetsize
* sizeof (u
.u_groups
[0]))) {
printf("copied in %d %d ... \n", u
.u_groups
[0], u
.u_groups
[1]);
for (gp
= &u
.u_groups
[uap
->gidsetsize
]; gp
< &u
.u_groups
[NGROUPS
]; gp
++)
* Pid of zero implies current process.
* Pgrp -1 is getpgrp system call returning
uap
= (struct a
*)u
.u_ap
;
u
.u_r
.r_val1
= p
->p_pgrp
;
if (p
->p_uid
!= u
.u_uid
&& u
.u_uid
&& !inferior(p
)) {
for (gp
= u
.u_groups
; gp
< &u
.u_groups
[NGROUPS
]; gp
++)
for (; gp
< &u
.u_groups
[NGROUPS
-1]; gp
++)
for (gp
= u
.u_groups
; gp
< &u
.u_groups
[NGROUPS
]; gp
++)
for (gp
= u
.u_groups
; gp
< &u
.u_groups
[NGROUPS
]; gp
++)