Hi,
I recently (err, mid last year) setup a remote CVS server, running as a non-root
user, and using GSSAPI authentication (Kerberos V). I found that when changes
were committed, the server always attributed them to the user it was running as,
rather than the GSSAPI authenticated user.
I fixed this problem, and append the patch below. Sorry I didn't send it in
sooner.
Tim
cut here
--- ----
*** cvs-1.10/src/server.c Fri Aug 7 10:46:38 1998
--- cvs-1.10.patched/src/server.c Sat Jul 10 17:46:50 1999
***************
*** 4649,4654 ****
--- 4649,4666 ----
exit (EXIT_FAILURE);
}
+ /* [EMAIL PROTECTED] : the comment below seems to assume that the server
+ should always be run as root. I do not agree: I am running the server as
+ an unprivileged user in a chroot tree, because the info (2.9.3.3 Security
+ considerations with password authentication) says "there may be other
+ ways in which having access to CVS allows people to gain more general
+ access to the system; no one has done a careful audit". Besides that,
+ only the paranoid survive. The assumption that the server always runs as
+ root leads to bugs. In particular, the "system usernames" below are
+ currently irrelevant when using gssapi authentication. The call to setuid
+ should probably only be made if running as root. It is a bad idea to
+ require a server to run as root if not absolutely necessary */
+
/* FIXME? We don't check for errors from initgroups, setuid, &c.
I think this mainly would come up if someone is trying to run
the server as a non-root user. I think we should be checking for
***************
*** 4657,4663 ****
should continue to work right if all of the "system usernames"
in CVSROOT/passwd match the user which the server is being run
as (in inetd.conf), but fail otherwise. */
!
#if HAVE_INITGROUPS
initgroups (pw->pw_name, pw->pw_gid);
#endif /* HAVE_INITGROUPS */
--- 4669,4675 ----
should continue to work right if all of the "system usernames"
in CVSROOT/passwd match the user which the server is being run
as (in inetd.conf), but fail otherwise. */
!
#if HAVE_INITGROUPS
initgroups (pw->pw_name, pw->pw_gid);
#endif /* HAVE_INITGROUPS */
***************
*** 5319,5324 ****
--- 5331,5342 ----
}
switch_to_user (buf);
+
+ /* [EMAIL PROTECTED]: Set CVS_Username here (in allocated space) to the value
+obtained
+ from GSSAPI authentication. A (good) side-effect is that the gserver now pays
+attention
+ to the readers and writers files in CVSROOT */
+ CVS_Username = xmalloc (strlen (buf) + 1);
+ strcpy (CVS_Username, buf);
printf ("I LOVE YOU\n");
fflush (stdout);