--- src/server.c.orig	Tue Oct 31 09:37:57 2000
+++ src/server.c	Mon Apr 23 16:49:24 2001
@@ -794,6 +794,19 @@
 	}
     }
 #endif
+    if (!root_allow_ok_or_unspecified(arg)) {
+	if (alloc_pending (80 + strlen (arg)))
+	     /* If cvs server was run with --allow-root, we ensure
+		that the root given is a valid one.
+		Useful for using :ext: communication to
+		a cvs server via ssh with
+		    Command "cvs --allow-root=/blah server"
+		in the ssh config. */
+		sprintf (pending_error_text, "\
+E Protocol error: Root cannot be \"%s\"",
+			 arg);
+	return;
+    }
     set_local_cvsroot (arg);
 
     /* For pserver, this will already have happened, and the call will do
@@ -4656,8 +4669,8 @@
   REQ_LINE("Max-dotdot", serve_max_dotdot, 0),
   REQ_LINE("Static-directory", serve_static_directory, 0),
   REQ_LINE("Sticky", serve_sticky, 0),
-  REQ_LINE("Checkin-prog", serve_checkin_prog, 0),
-  REQ_LINE("Update-prog", serve_update_prog, 0),
+  REQ_LINE("Checkin-prog", serve_checkin_prog, 0), /**/
+  REQ_LINE("Update-prog", serve_update_prog, 0), /**/
   REQ_LINE("Entry", serve_entry, RQ_ESSENTIAL),
   REQ_LINE("Kopt", serve_kopt, 0),
   REQ_LINE("Checkin-time", serve_checkin_time, 0),
*** src/root.c.orig	Mon Apr  2 15:36:56 2001
--- src/root.c	Mon Apr  2 15:38:27 2001
***************
*** 265,270 ****
--- 265,284 ----
      return 0;
  }
  
+ int
+ root_allow_ok_or_unspecified (arg)
+     char *arg;
+ {
+     int i;
+ 
+     if (root_allow_count == 0) return 1;
+ 
+     for (i = 0; i < root_allow_count; ++i)
+ 	if (strcmp (root_allow_vector[i], arg) == 0)
+ 	    return 1;
+     return 0;
+ }
+ 
  /* This global variable holds the global -d option.  It is NULL if -d
     was not used, which means that we must get the CVSroot information
     from the CVSROOT environment variable or from a CVS/Root file.  */
*** src/cvs.h.orig	Mon Apr  2 15:37:18 2001
--- src/cvs.h	Mon Apr  2 15:37:46 2001
***************
*** 463,468 ****
--- 463,469 ----
  void root_allow_add PROTO ((char *));
  void root_allow_free PROTO ((void));
  int root_allow_ok PROTO ((char *));
+ int root_allow_ok_or_unspecified PROTO ((char *));
  
  char *gca PROTO((const char *rev1, const char *rev2));
  extern void check_numeric PROTO ((const char *, int, char **));

