We use the stock versions of these files.
This commit is contained in:
parent
134c02a9d4
commit
4f8541364a
@ -164,15 +164,22 @@ import (argc, argv)
|
||||
* Could abstract this to valid_module_path, but I don't think we'll need
|
||||
* to call it from anywhere else.
|
||||
*/
|
||||
if ((cp = strstr(argv[0], "CVS")) && /* path contains "CVS" AND ... */
|
||||
((cp == argv[0]) || ISDIRSEP(*(cp-1))) && /* /^CVS/ OR m#/CVS# AND ... */
|
||||
((*(cp+3) == '\0') || ISDIRSEP(*(cp+3))) /* /CVS$/ OR m#CVS/# */
|
||||
/* for each "CVS" in path... */
|
||||
cp = argv[0];
|
||||
while ((cp = strstr(cp, "CVS")) != NULL)
|
||||
{
|
||||
if ( /* /^CVS/ OR m#/CVS#... */
|
||||
(cp == argv[0] || ISDIRSEP(*(cp-1)))
|
||||
/* ...AND /CVS$/ OR m#CVS/# */
|
||||
&& (*(cp+3) == '\0' || ISDIRSEP(*(cp+3)))
|
||||
)
|
||||
{
|
||||
error (0, 0,
|
||||
"The word `CVS' is reserved by CVS and may not be used");
|
||||
error (1, 0, "as a directory in a path or as a file name.");
|
||||
}
|
||||
cp += 3;
|
||||
}
|
||||
|
||||
for (i = 1; i < argc; i++) /* check the tags for validity */
|
||||
{
|
||||
@ -1603,8 +1610,8 @@ import_descend_dir (message, dir, vtag, targc, targv)
|
||||
if ( CVS_CHDIR (dir) < 0)
|
||||
{
|
||||
ierrno = errno;
|
||||
fperrmsg (logfp, 0, ierrno, "ERROR: cannot chdir to %s", repository);
|
||||
error (0, ierrno, "ERROR: cannot chdir to %s", repository);
|
||||
fperrmsg (logfp, 0, ierrno, "ERROR: cannot chdir to %s", dir);
|
||||
error (0, ierrno, "ERROR: cannot chdir to %s", dir);
|
||||
err = 1;
|
||||
goto out;
|
||||
}
|
||||
|
@ -117,20 +117,20 @@ password_entry_parseline (cvsroot_canonical, warn, linenumber, linebuf)
|
||||
{
|
||||
/* Yes: slurp '^/\d+\D' and parse the rest of the line according to version number */
|
||||
char *q;
|
||||
unsigned long int entry_version;
|
||||
unsigned long int entry_version = 0;
|
||||
|
||||
if (isspace(*(linebuf + 1)))
|
||||
{
|
||||
/* special case since strtoul ignores leading white space */
|
||||
q = linebuf + 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
entry_version = strtoul (linebuf + 1, &q, 10);
|
||||
|
||||
if (q == linebuf + 1)
|
||||
/* no valid digits found by strtoul */
|
||||
entry_version = 0;
|
||||
else
|
||||
if (q != linebuf + 1)
|
||||
/* assume a delimiting seperator */
|
||||
q++;
|
||||
}
|
||||
|
||||
switch (entry_version)
|
||||
{
|
||||
@ -568,21 +568,40 @@ login (argc, argv)
|
||||
password_entry_operation (password_entry_add, current_parsed_root,
|
||||
typed_password);
|
||||
|
||||
memset (typed_password, 0, strlen (typed_password));
|
||||
free (typed_password);
|
||||
|
||||
free (cvs_password);
|
||||
free_cvs_password (typed_password);
|
||||
free (cvsroot_canonical);
|
||||
cvs_password = NULL;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* Returns the _scrambled_ password. The server must descramble
|
||||
before hashing and comparing. If password file not found, or
|
||||
password not found in the file, just return NULL. */
|
||||
/* Free the password returned by get_cvs_password() and also free the
|
||||
* saved cvs_password if they are different pointers. Be paranoid
|
||||
* about the in-memory copy of the password and overwrite it with zero
|
||||
* bytes before doing the free().
|
||||
*/
|
||||
void
|
||||
free_cvs_password (char *password)
|
||||
{
|
||||
if (password && password != cvs_password)
|
||||
{
|
||||
memset (password, 0, strlen (password));
|
||||
free (password);
|
||||
}
|
||||
|
||||
if (cvs_password)
|
||||
{
|
||||
memset (cvs_password, 0, strlen (cvs_password));
|
||||
free (cvs_password);
|
||||
cvs_password = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
/* Returns the _scrambled_ password in freshly allocated memory. The server
|
||||
* must descramble before hashing and comparing. If password file not found,
|
||||
* or password not found in the file, just return NULL.
|
||||
*/
|
||||
char *
|
||||
get_cvs_password ()
|
||||
{
|
||||
@ -593,7 +612,7 @@ get_cvs_password ()
|
||||
context, then assume they have supplied the correct, scrambled
|
||||
password. */
|
||||
if (cvs_password)
|
||||
return cvs_password;
|
||||
return xstrdup (cvs_password);
|
||||
|
||||
if (getenv ("CVS_PASSWORD") != NULL)
|
||||
{
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 1986-2005 The Free Software Foundation, Inc.
|
||||
* Copyright (C) 1986-2008 The Free Software Foundation, Inc.
|
||||
*
|
||||
* Portions Copyright (C) 1998-2005 Derek Price, Ximbiot <http://ximbiot.com>,
|
||||
* and others.
|
||||
@ -13,6 +13,7 @@
|
||||
* $FreeBSD$
|
||||
*/
|
||||
|
||||
#include <assert.h>
|
||||
#include "cvs.h"
|
||||
#include "getline.h"
|
||||
#include "history.h"
|
||||
@ -264,7 +265,6 @@ static const char *const modules_contents[] = {
|
||||
"# key [options] directory files...\n",
|
||||
"#\n",
|
||||
"# Where \"options\" are composed of:\n",
|
||||
"# -i prog Run \"prog\" on \"cvs commit\" from top-level of module.\n",
|
||||
"# -o prog Run \"prog\" on \"cvs checkout\" of module.\n",
|
||||
"# -e prog Run \"prog\" on \"cvs export\" of module.\n",
|
||||
"# -t prog Run \"prog\" on \"cvs rtag\" of module.\n",
|
||||
@ -291,6 +291,13 @@ static const char *const config_contents[] = {
|
||||
"# Set this to \"no\" if pserver shouldn't check system users/passwords\n",
|
||||
"#SystemAuth=yes\n",
|
||||
"\n",
|
||||
"# Set `IgnoreUnknownConfigKeys' to `yes' to ignore unknown config\n",
|
||||
"# keys which are supported in a future version of CVS.\n",
|
||||
"# This option is intended to be useful as a transition for read-only\n",
|
||||
"# mirror sites when sites may need to be updated later than the\n",
|
||||
"# primary CVS repository.\n",
|
||||
"#IgnoreUnknownConfigKeys=no\n",
|
||||
"\n",
|
||||
"# Put CVS lock files in this directory rather than directly in the repository.\n",
|
||||
"#LockDir=/var/lock/cvs\n",
|
||||
"\n",
|
||||
@ -849,6 +856,41 @@ rename_rcsfile (temp, real)
|
||||
|
||||
free (bak);
|
||||
}
|
||||
|
||||
/*
|
||||
* Walk PATH backwards to the root directory looking for the root of a
|
||||
* repository.
|
||||
*/
|
||||
static char *
|
||||
in_repository (const char *path)
|
||||
{
|
||||
char *cp = xstrdup (path);
|
||||
|
||||
for (;;)
|
||||
{
|
||||
if (isdir (cp))
|
||||
{
|
||||
int foundit;
|
||||
char *adm = xmalloc (strlen(cp) + strlen(CVSROOTADM) + 2);
|
||||
sprintf (adm, "%s/%s", cp, CVSROOTADM);
|
||||
foundit = isdir (adm);
|
||||
free (adm);
|
||||
if (foundit) return cp;
|
||||
}
|
||||
|
||||
/* If last_component() returns the empty string, then cp either
|
||||
* points at the system root or is the empty string itself.
|
||||
*/
|
||||
if (!*last_component (cp) || !strcmp (cp, ".")
|
||||
|| last_component(cp) == cp)
|
||||
break;
|
||||
|
||||
cp[strlen(cp) - strlen(last_component(cp)) - 1] = '\0';
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
const char *const init_usage[] = {
|
||||
"Usage: %s %s\n",
|
||||
@ -870,8 +912,11 @@ init (argc, argv)
|
||||
/* Exit status. */
|
||||
int err = 0;
|
||||
|
||||
char *root_dir;
|
||||
const struct admin_file *fileptr;
|
||||
|
||||
assert (!server_active);
|
||||
|
||||
umask (cvsumask);
|
||||
|
||||
if (argc == -1 || argc > 1)
|
||||
@ -888,6 +933,14 @@ init (argc, argv)
|
||||
}
|
||||
#endif /* CLIENT_SUPPORT */
|
||||
|
||||
root_dir = in_repository (current_parsed_root->directory);
|
||||
|
||||
if (root_dir && strcmp (root_dir, current_parsed_root->directory))
|
||||
error (1, 0,
|
||||
"Cannot initialize repository under existing CVSROOT: `%s'",
|
||||
root_dir);
|
||||
free (root_dir);
|
||||
|
||||
/* Note: we do *not* create parent directories as needed like the
|
||||
old cvsinit.sh script did. Few utilities do that, and a
|
||||
non-existent parent directory is as likely to be a typo as something
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 1986-2005 The Free Software Foundation, Inc.
|
||||
* Copyright (C) 1986-2008 The Free Software Foundation, Inc.
|
||||
*
|
||||
* Portions Copyright (C) 1998-2005 Derek Price, Ximbiot <http://ximbiot.com>,
|
||||
* and others.
|
||||
@ -663,7 +663,6 @@ do_recursion (frame)
|
||||
{
|
||||
repository = frame->repository;
|
||||
assert (repository != NULL);
|
||||
assert (strstr (repository, "/./") == NULL);
|
||||
}
|
||||
|
||||
fileattr_startdir (repository);
|
||||
@ -766,7 +765,7 @@ do_recursion (frame)
|
||||
have writelocks in place, and there is no way to get writelocks
|
||||
here. */
|
||||
if (current_parsed_root->isremote)
|
||||
notify_check (repository, update_dir);
|
||||
cvs_notify_check (repository, update_dir);
|
||||
#endif /* CLIENT_SUPPORT */
|
||||
|
||||
finfo_struct.repository = repository;
|
||||
|
Loading…
Reference in New Issue
Block a user