+setreuid()
+{
+ struct a {
+ int ruid;
+ int euid;
+ } *uap;
+ register int ruid, euid;
+
+ uap = (struct a *)u.u_ap;
+ ruid = uap->ruid;
+ if (ruid == -1)
+ ruid = u.u_ruid;
+ if (u.u_ruid != ruid && u.u_uid != ruid && !suser())
+ return;
+ euid = uap->euid;
+ if (euid == -1)
+ euid = u.u_uid;
+ if (u.u_ruid != euid && u.u_uid != euid && !suser())
+ return;
+ /*
+ * Everything's okay, do it.
+ */
+#ifdef QUOTA
+ if (u.u_quota->q_uid != ruid) {
+ qclean();
+ qstart(getquota(ruid, 0, 0));
+ }
+#endif
+ u.u_procp->p_uid = ruid;
+ u.u_ruid = ruid;
+ u.u_uid = euid;
+}
+
+#ifndef NOCOMPAT
+osetuid()