Tim Riker wrote:
It seems that --allow-root is not handled by cvs when using server.
I have found many FAQs on the net that indicate I should setup cvs over ssh using something like:
no-port-forwarding,no-X11-forwarding,no-agent-forwarding,command="/usr/bin/cvs --allow-root=/cvs/limited server" ssh-dss A...ys= timr@localhost
Which would then limit cvsroot to /cvs/limited. This is NOT the case. cvs silently accepts the --allow-root, but does not process it. It DOES process it if used with pserver.
Accepting the argument if it will not be handled is a bug.
Not handling the argument if it is accepted it also a bug.
As there are sites using this (or thinking they are using this) now, I would strongly recommend it get added as a feature.
Documenting the non-feature and correctly reporting the error would probably be tougher.
I would think a call to root_allow_ok() from server_root() and making the "error 0" clause in root_allow_ok() be conditional on Pserver_Repos would do the trick.
-- Tim Riker - http://rikers.org/ - [EMAIL PROTECTED] Lineo CTO - [EMAIL PROTECTED] - http://www.Lineo.com/ BZFlag maintainer - http://BZFlag.org/ - for fun!
diff -Naur cvs-1.11.1p1.orig/src/cvs.h cvs-1.11.1p1/src/cvs.h --- cvs-1.11.1p1.orig/src/cvs.h Tue Apr 24 12:14:53 2001 +++ cvs-1.11.1p1/src/cvs.h Wed Nov 20 22:15:40 2002 @@ -465,6 +465,7 @@ void Create_Root PROTO((char *dir, char *rootdir)); void root_allow_add PROTO ((char *)); void root_allow_free PROTO ((void)); +int root_allow_used PROTO ((void)); int root_allow_ok PROTO ((char *)); char *gca PROTO((const char *rev1, const char *rev2)); diff -Naur cvs-1.11.1p1.orig/src/root.c cvs-1.11.1p1/src/root.c --- cvs-1.11.1p1.orig/src/root.c Thu Apr 19 13:45:33 2001 +++ cvs-1.11.1p1/src/root.c Wed Nov 20 22:09:25 2002 @@ -238,6 +238,12 @@ } int +root_allow_used () +{ + return root_allow_count != 0; +} + +int root_allow_ok (arg) char *arg; { diff -Naur cvs-1.11.1p1.orig/src/server.c cvs-1.11.1p1/src/server.c --- cvs-1.11.1p1.orig/src/server.c Wed Nov 20 22:00:49 2002 +++ cvs-1.11.1p1/src/server.c Wed Nov 20 22:12:54 2002 @@ -760,6 +760,13 @@ "E Protocol error: Duplicate Root request, for %s", arg); return; } + if (root_allow_used() && !root_allow_ok(arg)) + { + if (alloc_pending (80 + strlen (arg))) + sprintf (pending_error_text, + "E Bad root %s", arg); + return; + } #ifdef AUTH_SERVER_SUPPORT if (Pserver_Repos != NULL)