aboutsummaryrefslogtreecommitdiff
path: root/CLEAR-1.1.5.1-PATCHES/patch004
diff options
context:
space:
mode:
Diffstat (limited to 'CLEAR-1.1.5.1-PATCHES/patch004')
-rw-r--r--CLEAR-1.1.5.1-PATCHES/patch00489
1 files changed, 89 insertions, 0 deletions
diff --git a/CLEAR-1.1.5.1-PATCHES/patch004 b/CLEAR-1.1.5.1-PATCHES/patch004
new file mode 100644
index 000000000000..26bf7bc4e901
--- /dev/null
+++ b/CLEAR-1.1.5.1-PATCHES/patch004
@@ -0,0 +1,89 @@
+>From newsserv!kralizec.zeta.org.au!bde Sat Aug 20 01:50:59 1994
+From: Bruce Evans <newsserv!kralizec.zeta.org.au!bde>
+Newsgroups: stark.freebsd-bugs
+Subject: Re: uucp command fails with permission problems
+Date: Mon, 20 Jun 1994 15:13:31 +1000
+Organization: Gene Stark's home system
+Distribution: stark
+NNTP-Posting-Host: home.stark.cs.sunysb.edu
+To: FreeBSD-bugfiler@freefall.cdrom.com, gordon@sneaky.lonestar.org
+Precedence: bulk
+
+> The problem stems from the change the setreuid(). It
+> doesn't change the real uid any more, so uucp changes ids
+> back to the wrong id after opening the input file and
+> then tries to open a file in the spool directory with
+> the invoking user's permissions.
+>
+> The promised POSIX saved-setuid features don't work either,
+
+I fixed setuid() and setgid() to support saved ids. This fixes
+uucp (when it is configured with HAVE_BROKEN_SETREUID=1 and
+HAVE_SAVED_SETUID=1). I don't know if the change is really safe.
+
+Bruce
+
+*** sys1/kern/kern_prot.c Wed May 4 17:54:23 1994
+--- src/sys/kern/kern_prot.c Sun Jun 12 06:47:11 1994
+***************
+*** 270,274 ****
+
+ uid = uap->uid;
+! if (uid != pc->p_ruid &&
+ (error = suser(pc->pc_ucred, &p->p_acflag)))
+ return (error);
+--- 270,274 ----
+
+ uid = uap->uid;
+! if (uid != pc->p_ruid && uid != pc->p_svuid &&
+ (error = suser(pc->pc_ucred, &p->p_acflag)))
+ return (error);
+***************
+*** 277,284 ****
+ * not see our changes.
+ */
+ pc->pc_ucred = crcopy(pc->pc_ucred);
+ pc->pc_ucred->cr_uid = uid;
+- pc->p_ruid = uid;
+- pc->p_svuid = uid;
+ p->p_flag |= SUGID;
+ return (0);
+--- 277,286 ----
+ * not see our changes.
+ */
++ if (pc->pc_ucred->cr_uid == 0) {
++ pc->p_ruid = uid;
++ pc->p_svuid = uid;
++ }
+ pc->pc_ucred = crcopy(pc->pc_ucred);
+ pc->pc_ucred->cr_uid = uid;
+ p->p_flag |= SUGID;
+ return (0);
+***************
+*** 330,339 ****
+
+ gid = uap->gid;
+! if (gid != pc->p_rgid && (error = suser(pc->pc_ucred, &p->p_acflag)))
+ return (error);
+ pc->pc_ucred = crcopy(pc->pc_ucred);
+ pc->pc_ucred->cr_groups[0] = gid;
+! pc->p_rgid = gid;
+! pc->p_svgid = gid;
+ p->p_flag |= SUGID;
+ return (0);
+--- 332,344 ----
+
+ gid = uap->gid;
+! if (gid != pc->p_rgid && gid != pc->p_svgid &&
+! (error = suser(pc->pc_ucred, &p->p_acflag)))
+ return (error);
+ pc->pc_ucred = crcopy(pc->pc_ucred);
+ pc->pc_ucred->cr_groups[0] = gid;
+! if (pc->pc_ucred->cr_uid == 0) {
+! pc->p_rgid = gid;
+! pc->p_svgid = gid;
+! }
+ p->p_flag |= SUGID;
+ return (0);
+
+