--- 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 **));