Date: Wed, 14 Nov 2007 07:28:42 GMT From: Balwinder S Dheeman <bdheeman@gmail.com> To: freebsd-gnats-submit@FreeBSD.org Subject: ports/118033: [new port] devel/cvs-devel 1.12.13_8 Message-ID: <200711140728.lAE7SgAI012389@www.freebsd.org> Resent-Message-ID: <200711140730.lAE7U1kc029906@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
>Number: 118033 >Category: ports >Synopsis: [new port] devel/cvs-devel 1.12.13_8 >Confidential: no >Severity: non-critical >Priority: low >Responsible: freebsd-ports-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: maintainer-update >Submitter-Id: current-users >Arrival-Date: Wed Nov 14 07:30:00 UTC 2007 >Closed-Date: >Last-Modified: >Originator: Balwinder S Dheeman >Release: 8.0-CURRENT >Organization: Anu'z Linux@HOME >Environment: FreeBSD cto.homelinux.net 8.0-CURRENT FreeBSD 8.0-CURRENT #1: Mon Nov 12 21:32:24 IST 2007 bsd@cto.homelinux.net:/usr/obj/usr/src/sys/MYKERNEL i386 >Description: Latest upstream/feature release, similar to Debian, see the ChangeLog excerpts available at http://cto.homelinux.net/usr/ports/devel/cvs-devel/ChangeLog page. This feature release/version, I think, would be quite useful for all those users who want to share and, or transfer their existing CVS repositories from Linux to FreeBSD machines. >How-To-Repeat: NA >Fix: A shar file is attached herewith for you kind testing and, or commit. Patch attached with submission follows: # This is a shell archive. Save it in a file, remove anything before # this line, and then unpack it by entering "sh file". Note, it may # create directories; files and directories will be owned by you and # have default permissions. # # This archive contains: # # /usr/ports/devel/cvs-devel # /usr/ports/devel/cvs-devel/Makefile # /usr/ports/devel/cvs-devel/distinfo # /usr/ports/devel/cvs-devel/pkg-descr # /usr/ports/devel/cvs-devel/pkg-plist # /usr/ports/devel/cvs-devel/files # /usr/ports/devel/cvs-devel/files/missing # /usr/ports/devel/cvs-devel/files/patch-64bit_crashfix # /usr/ports/devel/cvs-devel/files/patch-DSA_external_passwd_file # /usr/ports/devel/cvs-devel/files/patch-PAM_support # /usr/ports/devel/cvs-devel/files/patch-PATH_MAX_check # /usr/ports/devel/cvs-devel/files/patch-check_method_crash # /usr/ports/devel/cvs-devel/files/patch-copyright # /usr/ports/devel/cvs-devel/files/patch-cvs-repouid-0.1 # /usr/ports/devel/cvs-devel/files/patch-cvs.info.typo # /usr/ports/devel/cvs-devel/files/patch-cvsbug_tmpfix # /usr/ports/devel/cvs-devel/files/patch-cvsrc_whitespace # /usr/ports/devel/cvs-devel/files/patch-ext_expansion # /usr/ports/devel/cvs-devel/files/patch-date_format_option # /usr/ports/devel/cvs-devel/files/patch-extra_tags # /usr/ports/devel/cvs-devel/files/patch-fix_-l # /usr/ports/devel/cvs-devel/files/patch-fix_sparc_sigbus # /usr/ports/devel/cvs-devel/files/patch-flag_conflicted_copies # /usr/ports/devel/cvs-devel/files/patch-history_val-tag_world_writeable # /usr/ports/devel/cvs-devel/files/patch-homedir # /usr/ports/devel/cvs-devel/files/patch-import-n-X # /usr/ports/devel/cvs-devel/files/patch-keyword_alphanumerics # /usr/ports/devel/cvs-devel/files/patch-login_cvspass_message # /usr/ports/devel/cvs-devel/files/patch-newlines_in_commit_template # /usr/ports/devel/cvs-devel/files/patch-normalize_correct_roots # /usr/ports/devel/cvs-devel/files/patch-parseopts # /usr/ports/devel/cvs-devel/files/patch-rcs2log_POSIX_sort # /usr/ports/devel/cvs-devel/files/patch-remove_-R_warning # /usr/ports/devel/cvs-devel/files/patch-rsc2log_fix # /usr/ports/devel/cvs-devel/files/patch-server_wrapper # /usr/ports/devel/cvs-devel/files/patch-zlib-read-compressed # echo c - /usr/ports/devel/cvs-devel mkdir -p /usr/ports/devel/cvs-devel > /dev/null 2>&1 echo x - /usr/ports/devel/cvs-devel/Makefile sed 's/^X//' >/usr/ports/devel/cvs-devel/Makefile << 'END-of-/usr/ports/devel/cvs-devel/Makefile' X# New ports collection makefile for: cvs-devel X# Date created: Wed, 14 Nov 2007 00:21:45 +0530 X# Whom: Balwinder S Dheeman <bdheeman@gmail.com> X# X# $FreeBSD$ X# X XPORTNAME= cvs XPORTVERSION= 1.12.13 XPORTREVISION= 8 XCATEGORIES= devel ipv6 XMASTER_SITES= ${MASTER_SITE_GNU} XMASTER_SITE_SUBDIR= non-gnu/${PORTNAME}/source/feature/${PORTVERSION} XPKGNAMESUFFIX= -devel X XMAINTAINER= bdheeman@gmail.com XCOMMENT= IPv6 enabled cvs. You can use IPv6 connection when using pserver X XCONFLICTS= cvsnt-[12]* cvs+ipv6-[12]* X XGNU_CONFIGURE= yes XUSE_BZIP2= yes XCONFIGURE_ARGS= --enable-ipv6 --without-gssapi \ X --with-editor="vi" \ X --with-tmpdir="/tmp" X XMAN1= cvs.1 XMAN5= cvs.5 XMAN8= cvsbug.8 XINFO= cvs cvsclient X XCVS_SITE?= :pserver:anoncvs@anoncvs.jp.FreeBSD.org:/home/ncvs XCVS_VER?= v${PORTVERSION:S//_/g} X Xpost-patch: X ${REINPLACE_CMD} 's/${PORTVERSION:S//\/g}/&+IPv6/g' ${WRKSRC}/configure X @${CP} ${FILESDIR}/missing ${WRKSRC} X Xpost-install: X.for f in cvs cvsbug X ${MV} ${PREFIX:S/\/local//}/bin/${f} ${PREFIX:S/\/local//}/bin/${f}.orig X ${CP} -p ${PREFIX}/bin/${f} ${PREFIX:S/\/local//}/bin X.endfor X Xgenerate-patch: X cvs -R -d ${CVS_SITE} rdiff -u -r ${CVS_VER} -r HEAD \ X src/contrib/cvs \ X | ${SED} \ X -e 's,^\+\+\+ src/contrib/cvs/,+++ ,' \ X -e 's,^Index: src/contrib/cvs/,Index: ,' \ X -e 's,\$$FreeBSD: ,FreeBSD: ,' \ X > ${FILESDIR}/patch-freebsdlocal X cvs -R -d ${CVS_SITE} rdiff -u -D 1999-12-01 -r HEAD \ X gnu/usr.bin/cvs/cvs/prepend_args.c \ X gnu/usr.bin/cvs/cvs/prepend_args.h \ X | ${SED} \ X -e 's,^\+\+\+ src/gnu/usr.bin/cvs/cvs/,+++ src/,' \ X -e 's,^Index: src/gnu/usr.bin/cvs/cvs/,Index: src/,' \ X -e 's,\$$FreeBSD: ,FreeBSD: ,' \ X >> ${FILESDIR}/patch-freebsdlocal X X.include <bsd.port.mk> END-of-/usr/ports/devel/cvs-devel/Makefile echo x - /usr/ports/devel/cvs-devel/distinfo sed 's/^X//' >/usr/ports/devel/cvs-devel/distinfo << 'END-of-/usr/ports/devel/cvs-devel/distinfo' XMD5 (cvs-1.12.13.tar.bz2) = 956ab476ce276c2d19d583e227dbdbea XSHA256 (cvs-1.12.13.tar.bz2) = 78853613b9a6873a30e1cc2417f738c330e75f887afdaf7b3d0800cb19ca515e XSIZE (cvs-1.12.13.tar.bz2) = 3911104 END-of-/usr/ports/devel/cvs-devel/distinfo echo x - /usr/ports/devel/cvs-devel/pkg-descr sed 's/^X//' >/usr/ports/devel/cvs-devel/pkg-descr << 'END-of-/usr/ports/devel/cvs-devel/pkg-descr' XThe latest and, or feature release CVS (Concurrent Version System). IPv6 Xenabled, you can use IPv6 connection when using pserver. X XWWW: http://www.cvshome.org/ END-of-/usr/ports/devel/cvs-devel/pkg-descr echo x - /usr/ports/devel/cvs-devel/pkg-plist sed 's/^X//' >/usr/ports/devel/cvs-devel/pkg-plist << 'END-of-/usr/ports/devel/cvs-devel/pkg-plist' X@comment $FreeBSD$ X@unexec if [ -x /usr/bin/cvs.orig ]; then mv -f /usr/bin/cvs.orig /usr/bin/cvs; fi Xbin/cvs X@exec if [ ! -x /usr/bin/cvs.orig ]; then mv /usr/bin/cvs /usr/bin/cvs.orig; cp -p %D/%F /usr/bin/%F; fi X@unexec if [ -x /usr/bin/cvsbug.orig ]; then mv -f /usr/bin/cvsbug.orig /usr/bin/cvsbug; fi Xbin/cvsbug X@exec if [ ! -x /usr/bin/cvsbug.orig ]; then mv /usr/bin/cvsbug /usr/bin/cvsbug.orig; cp -p %D/%F /usr/bin/%F; fi Xbin/rcs2log Xshare/cvs/contrib/README Xshare/cvs/contrib/clmerge Xshare/cvs/contrib/cln_hist Xshare/cvs/contrib/commit_prep Xshare/cvs/contrib/cvs2vendor Xshare/cvs/contrib/cvs_acls Xshare/cvs/contrib/debug_check_log Xshare/cvs/contrib/intro.doc Xshare/cvs/contrib/log Xshare/cvs/contrib/log_accum Xshare/cvs/contrib/mfpipe Xshare/cvs/contrib/newcvsroot Xshare/cvs/contrib/pvcs2rcs Xshare/cvs/contrib/rcs-5.7-commitid.patch Xshare/cvs/contrib/rcs-to-cvs Xshare/cvs/contrib/rcs2log Xshare/cvs/contrib/rcslock Xshare/cvs/contrib/sandbox_status Xshare/cvs/contrib/sccs2rcs Xshare/cvs/contrib/validate_repo X@dirrm share/cvs/contrib X@dirrm share/cvs END-of-/usr/ports/devel/cvs-devel/pkg-plist echo c - /usr/ports/devel/cvs-devel/files mkdir -p /usr/ports/devel/cvs-devel/files > /dev/null 2>&1 echo x - /usr/ports/devel/cvs-devel/files/missing sed 's/^X//' >/usr/ports/devel/cvs-devel/files/missing << 'END-of-/usr/ports/devel/cvs-devel/files/missing' X#! /bin/sh Xexit 0 END-of-/usr/ports/devel/cvs-devel/files/missing echo x - /usr/ports/devel/cvs-devel/files/patch-64bit_crashfix sed 's/^X//' >/usr/ports/devel/cvs-devel/files/patch-64bit_crashfix << 'END-of-/usr/ports/devel/cvs-devel/files/patch-64bit_crashfix' X# Fix a 64-bit crash in the entries_time() function and another bug in X# the diff code. Thanks to Gabor Gombas for the patch. Closes: X# #329127. Xdiff -Nur diff/util.c diff/util.c X--- diff/util.c 2003-02-03 03:52:38.000000000 +0800 X+++ diff/util.c 2006-02-26 21:32:22.000000000 +0800 X@@ -235,7 +235,7 @@ X close (pipes[0]); X } X X- execl (PR_PROGRAM, PR_PROGRAM, "-f", "-h", name, 0); X+ execl (PR_PROGRAM, PR_PROGRAM, "-f", "-h", name, NULL); X pfatal_with_name (PR_PROGRAM); X } X else END-of-/usr/ports/devel/cvs-devel/files/patch-64bit_crashfix echo x - /usr/ports/devel/cvs-devel/files/patch-DSA_external_passwd_file sed 's/^X//' >/usr/ports/devel/cvs-devel/files/patch-DSA_external_passwd_file << 'END-of-/usr/ports/devel/cvs-devel/files/patch-DSA_external_passwd_file' X# Add support for overriding lookups in CVSROOT/passwd X# Specify --password-file <file> on the pserver command line to use it X# Initial patch from the Debian DSA team, adapted by Steve McIntyre. X# See README.Debian for more details. Xdiff -Nur src/cvs.h src/cvs.h X--- src/cvs.h 2005-10-02 16:17:20.000000000 +0100 X+++ src/cvs.h 2006-08-19 01:20:33.000000000 +0100 X@@ -371,6 +371,7 @@ X extern int use_editor; X extern int cvswrite; X extern mode_t cvsumask; X+extern char *PasswordFileName; X X /* Temp dir abstraction. */ X /* From main.c. */ Xdiff -Nur src/main.c src/main.c X--- src/main.c 2006-08-17 00:25:16.000000000 +0100 X+++ src/main.c 2006-08-19 01:20:03.000000000 +0100 X@@ -43,8 +43,7 @@ X int noexec = 0; X int readonlyfs = 0; X int logoff = 0; X- X- X+char *PasswordFileName = NULL; X X /*** X *** X@@ -519,6 +518,7 @@ X {"help-commands", 0, NULL, 1}, X {"help-synonyms", 0, NULL, 2}, X {"help-options", 0, NULL, 4}, X+ {"password-file", required_argument, NULL, 5}, X #ifdef SERVER_SUPPORT X {"allow-root", required_argument, NULL, 3}, X #endif /* SERVER_SUPPORT */ X@@ -646,6 +646,10 @@ X root_allow_add (optarg, gConfigPath); X break; X #endif /* SERVER_SUPPORT */ X+ case 5: X+ /* --password-file */ X+ PasswordFileName = xstrdup(optarg); X+ break; X case 'Q': X really_quiet = 1; X /* FALL THROUGH */ Xdiff -Nur src/Makefile.in src/Makefile.in X--- src/Makefile.in 2005-10-03 14:37:18.000000000 +0100 X+++ src/Makefile.in 2006-08-17 00:28:35.000000000 +0100 X@@ -146,7 +146,7 @@ X ls.$(OBJEXT) main.$(OBJEXT) mkmodules.$(OBJEXT) \ X modules.$(OBJEXT) ms-buffer.$(OBJEXT) myndbm.$(OBJEXT) \ X no_diff.$(OBJEXT) parseinfo.$(OBJEXT) patch.$(OBJEXT) \ X- rcs.$(OBJEXT) rcscmds.$(OBJEXT) recurse.$(OBJEXT) \ X+ rcs.$(OBJEXT) rcscmds.$(OBJEXT) readpw.$(OBJEXT) recurse.$(OBJEXT) \ X release.$(OBJEXT) remove.$(OBJEXT) repos.$(OBJEXT) \ X root.$(OBJEXT) rsh-client.$(OBJEXT) run.$(OBJEXT) \ X scramble.$(OBJEXT) server.$(OBJEXT) stack.$(OBJEXT) \ X@@ -349,6 +349,7 @@ X patch.c \ X rcs.c \ X rcscmds.c \ X+ readpw.c \ X recurse.c \ X release.c \ X remove.c \ X@@ -543,6 +544,7 @@ X @AMDEP_TRUE@@am__include@ @am__quote@/$(DEPDIR)/patch.Po@am__quote@ X @AMDEP_TRUE@@am__include@ @am__quote@/$(DEPDIR)/rcs.Po@am__quote@ X @AMDEP_TRUE@@am__include@ @am__quote@/$(DEPDIR)/rcscmds.Po@am__quote@ X+@AMDEP_TRUE@@am__include@ @am__quote@/$(DEPDIR)/readpw.Po@am__quote@ X @AMDEP_TRUE@@am__include@ @am__quote@/$(DEPDIR)/recurse.Po@am__quote@ X @AMDEP_TRUE@@am__include@ @am__quote@/$(DEPDIR)/release.Po@am__quote@ X @AMDEP_TRUE@@am__include@ @am__quote@/$(DEPDIR)/remove.Po@am__quote@ Xdiff -Nur src/parseinfo.h src/parseinfo.h X--- src/parseinfo.h 2006-08-17 00:25:16.000000000 +0100 X+++ src/parseinfo.h 2006-08-17 00:58:25.000000000 +0100 X@@ -21,6 +21,7 @@ X char *HistoryLogPath; X char *HistorySearchPath; X char *TmpDir; X+ char *PasswordFileName; X X /* Should the logmsg be re-read during the do_verify phase? X * RereadLogAfterVerify=no|stat|yes Xdiff -Nur src/readpw.c src/readpw.c X--- src/readpw.c 1970-01-01 01:00:00.000000000 +0100 X+++ src/readpw.c 2006-08-19 01:45:26.000000000 +0100 X@@ -0,0 +1,158 @@ X+/* X+ readpw.c - read the CVS password from an external file X+ Copyright (c) 2006 Martin Schulze <joey@infodrom.org> X+ X+ This program is free software; you can redistribute it and/or modify X+ it under the terms of the GNU General Public License as published by X+ the Free Software Foundation; either version 2 of the License, or X+ (at your option) any later version. X+ X+ This program is distributed in the hope that it will be useful, X+ but WITHOUT ANY WARRANTY; without even the implied warranty of X+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the X+ GNU General Public License for more details. X+ X+ You should have received a copy of the GNU General Public License X+ along with this program; if not, write to the Free Software X+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. X+*/ X+ X+#include <string.h> X+#include <stdio.h> X+#include <errno.h> X+#include <syslog.h> X+ X+#define PWFILE "/tmp/work/cvs/cvs.passwd" X+ X+/* X+ * Source: control_nextline() in dtaus.c from dtaus X+ */ X+size_t readline (FILE *f, char **buf, unsigned int len) X+{ X+ char line[100]; X+ char tmp[100]; X+ char *cp; X+ int i; X+ X+ memset (line, 0, sizeof(line)); X+ memset (*buf, 0, len); X+ X+ cp = line; X+ X+ while (!strlen(line) && (cp = fgets(line, 100, f))) { X+ if (strlen(line)) { X+ if (line[0] != '#') { X+ if (line[strlen(line)-1] != '\n') { X+ strcpy(tmp, line); X+ while (tmp[strlen(tmp)-1] != '\n' && (cp = fgets(tmp, 100, f))); X+ } else X+ line[strlen(line)-1] = '\0'; X+ if (line[strlen(line)-1] == '\r') X+ line[strlen(line)-1] = '\0'; X+ for (i=strlen(line);(line[i-1] == ' '||line[i-1] == '\t')&&i>0; i--) X+ line[i-1] = '\0'; X+ } else X+ line[0] = '\0'; X+ } X+ } X+ for (cp=line; *cp==' '; cp++); X+ X+ if (strlen(cp)) { X+ memcpy(*buf, cp, strlen(cp) >= len ? len-1 : strlen(cp)); X+ return (strlen (cp)); X+ } else X+ return 0; X+} X+ X+#define MAXLINE 100 X+#define PWLEN 20 X+ X+char *getpwline (const char *fname, const char *repository, const char *logname) X+{ X+ FILE *f; X+ char buf[MAXLINE], *bp = buf; X+ static char line[MAXLINE]; X+ int inrepo = 0; X+ char *cp; X+ X+ memset (line, 0, sizeof (line)); X+ X+ if ((f = fopen (fname, "r")) == NULL) { X+ perror ("fopen"); X+ return line; X+ } X+ X+ while (readline (f, &bp, 50)) { X+ if (buf[0] == '/') { X+ syslog(LOG_ERR, "Looking for repo %s in %s\n", repository, buf); X+ if (!inrepo && !strcmp (buf, repository)) X+ { X+ syslog(LOG_ERR, "matched repository %s\n", repository); X+ inrepo = 1; X+ } X+ else if (inrepo) X+ inrepo = 0; X+ } else { X+ if (inrepo) { X+ if ((cp = strchr (buf, ':')) != NULL) { X+ if ( (cp - buf) == strlen (logname) X+ && !strncmp (buf, logname, strlen (logname))) { X+ memcpy (line, buf, strlen(buf) >= MAXLINE ? MAXLINE-1 : strlen(buf)); X+ } X+ } X+ } X+ } X+ } X+ X+ if (ferror (f)) X+ perror ("ferror"); X+ if (fclose (f) < 0) X+ perror ("fclose"); X+ X+ return line; X+} X+ X+/* X+***************************************************************** X+ */ X+#ifdef TEST_READPW X+ X+void getpasswd (const char *fname, const char *repository, const char *logname, char **pw, char **user) X+{ X+ char *line; X+ char *cp, *xp; X+ X+ memset (*pw, 0, PWLEN); X+ memset (*user, 0, PWLEN); X+ X+ line = getpwline(fname, repository, logname); X+ X+ if (line[0] == '\0') X+ return; X+ X+ cp = strchr (line, ':'); X+ cp++; X+ X+ if ((xp = strchr (cp, ':')) != NULL) { X+ memcpy (*pw, cp, xp-cp >= PWLEN ? PWLEN-1 : xp-cp); X+ X+ xp++; X+ X+ if (strlen (xp)) X+ memcpy (*user, xp, strlen(xp) >= PWLEN ? PWLEN-1 : strlen(xp)); X+ } X+} X+ X+int main () X+{ X+ char pw[PWLEN], *ppw = pw; X+ char cvsuser[PWLEN], *pcu = cvsuser; X+ X+ getpasswd (PWFILE, "/cvs/debian-doc", "jseidel", &ppw, &pcu); X+ X+ printf ("%s<:>%s\n", pw, cvsuser); X+ printf ("XXXXXXXXXXXXX\n"); X+ X+ return 0; X+} X+#endif /*TEST_READPW */ Xdiff -Nur src/server.c src/server.c X--- src/server.c 2006-08-17 00:25:16.000000000 +0100 X+++ src/server.c 2006-08-20 00:31:22.000000000 +0100 X@@ -22,6 +22,8 @@ X X int server_active = 0; X X+char *getpwline (const char *fname, const char *repository, const char *logname); X+ X #if defined (SERVER_SUPPORT) || defined (CLIENT_SUPPORT) X X # include "log-buffer.h" X@@ -6689,51 +6691,71 @@ X { X int retval = 0; X FILE *fp; X- char *filename; X+ char *filename = NULL; X+ char *cp; X char *linebuf = NULL; X size_t linebuf_len; X int found_it = 0; X int namelen; X X- /* We don't use current_parsed_root->directory because it hasn't been X- * set yet -- our `repository' argument came from the authentication X- * protocol, not the regular CVS protocol. X- */ X- X- filename = xmalloc (strlen (repository) X- + 1 X- + strlen (CVSROOTADM) X- + 1 X- + strlen (CVSROOTADM_PASSWD) X- + 1); X+ if (!PasswordFileName) X+ { X+ /* We don't use current_parsed_root->directory because it hasn't been X+ * set yet -- our `repository' argument came from the authentication X+ * protocol, not the regular CVS protocol. X+ */ X+ X+ filename = xmalloc (strlen (repository) X+ + 1 X+ + strlen (CVSROOTADM) X+ + 1 X+ + strlen (CVSROOTADM_PASSWD) X+ + 1); X X- (void) sprintf (filename, "%s/%s/%s", repository, X- CVSROOTADM, CVSROOTADM_PASSWD); X+ (void) sprintf (filename, "%s/%s/%s", repository, X+ CVSROOTADM, CVSROOTADM_PASSWD); X X- fp = CVS_FOPEN (filename, "r"); X- if (fp == NULL) X- { X- if (!existence_error (errno)) X- error (0, errno, "cannot open %s", filename); X- free (filename); X- return 0; X- } X+ fp = CVS_FOPEN (filename, "r"); X+ if (fp == NULL) X+ { X+ if (!existence_error (errno)) X+ error (0, errno, "cannot open %s", filename); X+ free (filename); X+ return 0; X+ } X X- /* Look for a relevant line -- one with this user's name. */ X- namelen = strlen (username); X- while (getline (&linebuf, &linebuf_len, fp) >= 0) X- { X- if ((strncmp (linebuf, username, namelen) == 0) X- && (linebuf[namelen] == ':')) X- { X- found_it = 1; X- break; X- } X+ /* Look for a relevant line -- one with this user's name. */ X+ namelen = strlen (username); X+ while (getline (&linebuf, &linebuf_len, fp) >= 0) X+ { X+ if ((strncmp (linebuf, username, namelen) == 0) X+ && (linebuf[namelen] == ':')) X+ { X+ found_it = 1; X+ break; X+ } X+ } X+ if (ferror (fp)) X+ error (0, errno, "cannot read %s", filename); X+ if (fclose (fp) < 0) X+ error (0, errno, "cannot close %s", filename); X+ } X+ else /* DSA_VERSION */ X+ { X+ namelen = strlen (username); X+ X+ cp = getpwline (PasswordFileName, repository, username); X+ /* syslog (LOG_NOTICE, "cp=%s", cp); */ X+ if (strlen (cp)) { X+ linebuf = xmalloc (strlen (cp) + 1); X+ memcpy (linebuf, cp, strlen(cp)+1); X+ /* syslog (LOG_NOTICE, "line=%s", linebuf); */ X+ found_it = 1; X+ } else X+ found_it = 0; X+ X+ /* syslog (LOG_NOTICE, "username=%s, password=%s, repository=%s", username, password, repository); */ X } X- if (ferror (fp)) X- error (0, errno, "cannot read %s", filename); X- if (fclose (fp) < 0) X- error (0, errno, "cannot close %s", filename); X X /* If found_it, then linebuf contains the information we need. */ X if (found_it) X@@ -6823,6 +6845,7 @@ X retval = 0; X } X X+ if (filename) X free (filename); X if (linebuf) X free (linebuf); X@@ -7043,7 +7066,10 @@ X letting you in if it won't say why, and I am not convinced X that the potential information disclosure to an attacker X outweighs this. */ X- printf ("error 0 no such user %s in CVSROOT/passwd\n", username); X+ if (PasswordFileName) X+ printf ("error 0 no such user %s in %s\n", username, PasswordFileName); X+ else X+ printf ("error 0 no such user %s in CVSROOT/passwd\n", username); X X exit (EXIT_FAILURE); X } END-of-/usr/ports/devel/cvs-devel/files/patch-DSA_external_passwd_file echo x - /usr/ports/devel/cvs-devel/files/patch-PAM_support sed 's/^X//' >/usr/ports/devel/cvs-devel/files/patch-PAM_support << 'END-of-/usr/ports/devel/cvs-devel/files/patch-PAM_support' X# X# Add in extra PAM options compared to upstream's own PAM code: X# * Add an extra option PamAuth to control use of PAM separately from X# SystemAuth X# * Add support for DefaultPamUser - try that if the specified X# user does not exist X# X# Patch by Steve McIntyre <steve@einval.com> Xdiff -Nur doc/cvs.texinfo doc/cvs.texinfo X--- doc/cvs.texinfo 2005-09-23 03:02:53.000000000 +0100 X+++ doc/cvs.texinfo 2006-05-19 23:50:10.000000000 +0100 X@@ -2662,8 +2662,18 @@ X system has PAM (Pluggable Authentication Modules) X and your @sc{cvs} server executable was configured to X use it at compile time (using @code{/configure --enable-pam} - see the X-INSTALL file for more). In this case, PAM will be consulted instead. X-This means that @sc{cvs} can be configured to use any password X+INSTALL file for more). In this case, PAM may be X+consulted first (or instead). The X+"fallback" behaviour can be controlled using the two X+variables @code{PamAuth} and @code{SystemAuth}. On a X+Debian system, @code{PamAuth} defaults to @code{yes} X+and @code{SystemAuth} to @code{no} - after all, PAM can X+supports passwd file lookups itself. Changing these is X+possible by setting @code{PamAuth=no} and X+@code{SystemAuth=yes} in the @sc{cvs} @file{config} X+file, @pxref{config}). X+ X+Use of PAM means that @sc{cvs} can be configured to use any password X authentication source PAM can be configured to use (possibilities X include a simple UNIX password, NIS, LDAP, and others) in its X global configuration file (usually @file{/etc/pam.conf} X@@ -2691,7 +2701,7 @@ X cvs session required pam_unix.so X @end example X X-The the equivalent @file{/etc/pam.d/cvs} would contain X+The equivalent @file{/etc/pam.d/cvs} would contain X X @example X auth required pam_unix.so X@@ -2715,6 +2725,13 @@ X feature should not be used if you may not have control of the name X @sc{cvs} will be invoked as. X X+If you wish to use PAM for authentication, and details X+of your users are not available using getpwnam(), you X+may set a default name for the account on the server X+that will be used after authentication. To do this, X+either set @code{DefaultPamUser=user} in the @sc{cvs} X+@file{config} file, @pxref{config}. X+ X Be aware, also, that falling back to system X authentication might be a security risk: @sc{cvs} X operations would then be authenticated with that user's Xdiff -Nur src/parseinfo.c src/parseinfo.c X--- src/parseinfo.c 2005-09-06 05:40:37.000000000 +0100 X+++ src/parseinfo.c 2006-05-19 22:46:00.000000000 +0100 X@@ -303,8 +303,12 @@ X */ X #endif /* PROXY_SUPPORT */ X #ifdef AUTH_SERVER_SUPPORT X- new->system_auth = true; X+ new->system_auth = false; X #endif /* AUTH_SERVER_SUPPORT */ X+#ifdef HAVE_PAM X+ new->PamAuth = true; X+ new->DefaultPamUser = NULL; X+#endif X X return new; X } X@@ -696,6 +700,13 @@ X readSizeT (infopath, "MaxCompressionLevel", p, X &retval->MaxCompressionLevel); X #endif /* SERVER_SUPPORT */ X+#ifdef HAVE_PAM X+ else if (!strcmp (line, "DefaultPamUser")) X+ retval->DefaultPamUser = xstrdup(p); X+ else if (!strcmp (line, "PamAuth")) X+ readBool (infopath, "PamAuth", p, X+ &retval->PamAuth); X+#endif X else X /* We may be dealing with a keyword which was added in a X subsequent version of CVS. In that case it is a good idea Xdiff -Nur src/parseinfo.h src/parseinfo.h X--- src/parseinfo.h 2005-09-05 04:03:38.000000000 +0100 X+++ src/parseinfo.h 2006-05-19 22:40:31.000000000 +0100 X@@ -59,6 +59,10 @@ X #ifdef PRESERVE_PERMISSIONS_SUPPORT X bool preserve_perms; X #endif /* PRESERVE_PERMISSIONS_SUPPORT */ X+#ifdef HAVE_PAM X+ char *DefaultPamUser; X+ bool PamAuth; X+#endif X }; X X bool parse_error (const char *, unsigned int); Xdiff -Nur src/server.c src/server.c X--- src/server.c 2005-09-28 16:25:59.000000000 +0100 X+++ src/server.c 2006-05-20 00:45:14.000000000 +0100 X@@ -6919,6 +6919,15 @@ X { X pam_stage = "get pam user"; X retval = pam_get_item (pamh, PAM_USER, (const void **)username); X+ if ((retval != PAM_SUCCESS) && (NULL != config->DefaultPamUser)) X+ { X+ /* An issue with using pam is that the host may well not have X+ a local user entry to match the authenticated user. If this X+ has failed, optionally fall back to a specified local X+ username */ X+ *username = xstrdup(config->DefaultPamUser); X+ retval = PAM_SUCCESS; X+ } X } X X if (retval != PAM_SUCCESS) X@@ -7022,7 +7031,11 @@ X X assert (rc == 0); X X+#ifdef HAVE_PAM X+ if (!config->system_auth && !config->PamAuth) X+#else X if (!config->system_auth) X+#endif X { X /* Note that the message _does_ distinguish between the case in X which we check for a system password and the case in which X@@ -7037,9 +7050,10 @@ X X /* No cvs password found, so try /etc/passwd. */ X #ifdef HAVE_PAM X- if (check_pam_password (&username, password)) X+ if ( (config->PamAuth && check_pam_password (&username, password)) || X+ (config->system_auth && check_system_password (username, password))) X #else /* !HAVE_PAM */ X- if (check_system_password (username, password)) X+ if (config->system_auth && check_system_password (username, password)) X #endif /* HAVE_PAM */ X host_user = xstrdup (username); X else END-of-/usr/ports/devel/cvs-devel/files/patch-PAM_support echo x - /usr/ports/devel/cvs-devel/files/patch-PATH_MAX_check sed 's/^X//' >/usr/ports/devel/cvs-devel/files/patch-PATH_MAX_check << 'END-of-/usr/ports/devel/cvs-devel/files/patch-PATH_MAX_check' X# Fix FTBFS in hurd-i386 regarding bad check of PATH_MAX. X# Closes: #378966 X# Thanks to Cyril Brulebois <cyril.brulebois@enst-bretagne.fr> Xdiff -Nur lib/chdir-long.c lib/chdir-long.c X--- lib/chdir-long.c 2005-09-19 21:12:18.000000000 +0000 X+++ lib/chdir-long.c 2006-07-20 02:47:32.000000000 +0000 X@@ -39,9 +39,7 @@ X # define O_DIRECTORY 0 X #endif X X-#ifndef PATH_MAX X-# error "compile this file only if your system defines PATH_MAX" X-#endif X+#ifdef PATH_MAX X X struct cd_buf X { X@@ -269,6 +267,8 @@ X } X #endif X X+#endif /* PATH_MAX */ X+ X /* X Local Variables: X compile-command: "gcc -DTEST_CHDIR=1 -DHAVE_CONFIG_H -I.. -g -O -W -Wall chdir-long.c libcoreutils.a" X END-of-/usr/ports/devel/cvs-devel/files/patch-PATH_MAX_check echo x - /usr/ports/devel/cvs-devel/files/patch-check_method_crash sed 's/^X//' >/usr/ports/devel/cvs-devel/files/patch-check_method_crash << 'END-of-/usr/ports/devel/cvs-devel/files/patch-check_method_crash' X# X# Do a basic sanity check on the method in the CVSROOT - don't crash X# if one is not specified! Bug#274020 X# X# Patch from Steve McIntyre <steve@einval.com> Xdiff -Nur src/root.c src/root.c X--- src/root.c 2005-09-25 08:38:29.000000000 +0800 X+++ src/root.c 2006-02-26 17:48:32.000000000 +0800 X@@ -535,6 +535,12 @@ X method = ""; X #endif /* defined (CLIENT_SUPPORT) || defined (SERVER_SUPPORT) */ X X+ if (NULL == method) X+ { X+ error (0, 0, "Missing method in CVSROOT."); X+ goto error_exit; X+ } X+ X /* Now we have an access method -- see if it's valid. */ X X if (!strcasecmp (method, "local")) END-of-/usr/ports/devel/cvs-devel/files/patch-check_method_crash echo x - /usr/ports/devel/cvs-devel/files/patch-copyright sed 's/^X//' >/usr/ports/devel/cvs-devel/files/patch-copyright << 'END-of-/usr/ports/devel/cvs-devel/files/patch-copyright' X# Change references from GNU Public License to GNU General Public X# License, where that is meant (closes: #102142) X# X# Patch by Tollef Fog Heen <tfheen@debian.org> Xdiff -Nur DEVEL-CVS DEVEL-CVS X--- DEVEL-CVS 2005-09-01 20:46:54.000000000 +0800 X+++ DEVEL-CVS 2006-02-26 22:40:36.000000000 +0800 X@@ -7,7 +7,8 @@ X Policies regarding the CVS source repository: X X By checking items into the repository, developers agree to permit X-distribution of such items under the terms of the GNU Public License. X+distribution of such items under the terms of the GNU General Public X+License. X X ---------------------------------------------------------------------- X Procedure for dealing with people who want to be developers: Xdiff -Nur doc/cvsclient.texi doc/cvsclient.texi X--- doc/cvsclient.texi 2006-02-26 22:40:35.000000000 +0800 X+++ doc/cvsclient.texi 2006-02-26 22:40:37.000000000 +0800 X@@ -54,7 +54,7 @@ X user documentation, @file{cvs.texinfo}, for that information. The X protocol is non-proprietary (anyone who wants to is encouraged to X implement it) and an implementation, known as CVS, is available under X-the GNU Public License. The CVS distribution, containing this X+the GNU General Public License. The CVS distribution, containing this X implementation, @file{cvs.texinfo}, and a copy (possibly more or less up X to date than what you are reading now) of this document, X @file{cvsclient.texi}, can be found at the usual GNU FTP sites, with a Xdiff -Nur HACKING HACKING X--- HACKING 2005-09-25 08:36:08.000000000 +0800 X+++ HACKING 2006-02-26 22:42:15.000000000 +0800 X@@ -403,8 +403,9 @@ X for each issue. Use context diffs or unidiffs for patches. X X Include words like "I grant permission to distribute this patch under X-the terms of the GNU Public License" with your patch. By sending a X-patch to bug-cvs@nongnu.org, you implicitly grant this permission. X+the terms of the GNU General Public License" with your patch. By X+sending a patch to bug-cvs@nongnu.org, you implicitly grant this X+permission. X X Submitting a patch to bug-cvs is the way to reach the people who have X signed up to receive such submissions (including CVS developers), but END-of-/usr/ports/devel/cvs-devel/files/patch-copyright echo x - /usr/ports/devel/cvs-devel/files/patch-cvs-repouid-0.1 sed 's/^X//' >/usr/ports/devel/cvs-devel/files/patch-cvs-repouid-0.1 << 'END-of-/usr/ports/devel/cvs-devel/files/patch-cvs-repouid-0.1' X# X# cvs-repouid patch for controlling pserver access. See X# README.Debian for details. X# X# Original patch by Wichert Akkerman <wakkerma@debian.org>, fixes by X# Steve McIntyre <steve@einval.com> with help from Alberto Garcia X# <agarcia@igalia.com> Xdiff -Nur src/cvs.h src/cvs.h X--- src/cvs.h 2005-10-02 23:17:20.000000000 +0800 X+++ src/cvs.h 2006-02-26 22:08:16.000000000 +0800 X@@ -145,6 +145,13 @@ X #define CVSADM_TEMPLATE "CVS/Template" X #endif /* USE_VMS_FILENAMES */ X X+/* Global configuration file mapping repositories to uids. This can be X+ used instead of getting the unix user. This is prevents a security X+ problem where anyone with commit access can basically become any X+ user on the machine. Combined with the insecure pserver that is a X+ problem waiting to happen. */ X+#define CVS_REPOUIDFILE "/etc/cvs-repouids" X+ X /* This is the special directory which we use to store various extra X per-directory information in the repository. It must be the same as X CVSADM to avoid creating a new reserved directory name which users cannot Xdiff -Nur src/server.c src/server.c X--- src/server.c 2005-09-28 23:25:59.000000000 +0800 X+++ src/server.c 2006-02-26 22:08:16.000000000 +0800 X@@ -6570,6 +6570,12 @@ X exit (EXIT_FAILURE); X } X X+ if (pw->pw_uid == 0) X+ { X+ printf("error 0: root not allowed\n"); X+ exit (EXIT_FAILURE); X+ } X+ X #if HAVE_INITGROUPS X if (initgroups (pw->pw_name, pw->pw_gid) < 0 X # ifdef EPERM X@@ -6667,6 +6673,51 @@ X } X #endif X X+static char* X+global_repo_uid(const char* repository) X+{ X+ FILE *fp; X+ char *linebuf = NULL; X+ size_t linebuf_len; X+ int found_it = 0; X+ size_t repolen = strlen (repository); X+ char *user; X+ X+ fp = fopen (CVS_REPOUIDFILE, "r"); X+ if (fp == NULL) X+ { X+ if (!existence_error (errno)) X+ error (0, errno, "cannot open %s", CVS_REPOUIDFILE); X+ return NULL; X+ } X+ X+ while (getline (&linebuf, &linebuf_len, fp) >= 0) X+ { X+ if ((strncmp (linebuf, repository, repolen) == 0) X+ && (linebuf[repolen] == ':')) X+ { X+ found_it = 1; X+ break; X+ } X+ } X+ X+ if (ferror (fp)) X+ error (0, errno, "cannot read %s", CVS_REPOUIDFILE); X+ if (fclose (fp) < 0) X+ error (0, errno, "cannot close %s", CVS_REPOUIDFILE); X+ X+ if (!found_it) { X+ free (linebuf); X+ return NULL; X+ } X+ X+ strtok (linebuf + repolen, "\n"); X+ user = xstrdup (linebuf + repolen + 1); X+ free (linebuf); X+ X+ return user; X+} X+ X #ifdef AUTH_SERVER_SUPPORT X X extern char *crypt (const char *, const char *); X@@ -6738,7 +6789,7 @@ X /* If found_it, then linebuf contains the information we need. */ X if (found_it) X { X- char *found_password, *host_user_tmp; X+ char *found_password, *host_user_tmp, *user_override; X char *non_cvsuser_portion; X X /* We need to make sure lines such as X@@ -6805,6 +6856,9 @@ X /* Give host_user_ptr permanent storage. */ X *host_user_ptr = xstrdup (host_user_tmp); X retval = 1; X+ user_override = global_repo_uid (repository); X+ if (user_override) X+ *host_user_ptr = user_override; X } X else X { END-of-/usr/ports/devel/cvs-devel/files/patch-cvs-repouid-0.1 echo x - /usr/ports/devel/cvs-devel/files/patch-cvs.info.typo sed 's/^X//' >/usr/ports/devel/cvs-devel/files/patch-cvs.info.typo << 'END-of-/usr/ports/devel/cvs-devel/files/patch-cvs.info.typo' X# Minor documentation changes X# X# Patch by Steve McIntyre <steve@einval.com> and Britton Leo Kerin <fsblk@aurora.uaf.edu> Xdiff -Nur doc/cvsclient.texi doc/cvsclient.texi X--- doc/cvsclient.texi 2005-07-20 18:39:59.000000000 +0800 X+++ doc/cvsclient.texi 2006-02-26 22:39:20.000000000 +0800 X@@ -3,9 +3,10 @@ X @setfilename cvsclient.info X @include version-client.texi X X-@dircategory Programming X+@dircategory Development X @direntry X-* cvsclient: (cvsclient). The CVS client/server protocol. X+* CVS client/server: (cvsclient). Describes the client/server protocol X+ used by CVS. X @end direntry X X @node Top Xdiff -Nur doc/cvs.texinfo doc/cvs.texinfo X--- doc/cvs.texinfo 2006-02-26 22:39:19.000000000 +0800 X+++ doc/cvs.texinfo 2006-02-26 22:39:20.000000000 +0800 X@@ -97,7 +97,7 @@ X @end macro X @end ifhtml X X-@dircategory GNU Packages X+@dircategory Development X @direntry X * CVS: (cvs). Concurrent Versions System X @end direntry X@@ -2385,13 +2385,16 @@ X There are two access methods that you use in @code{CVSROOT} X for rsh. @code{:server:} specifies an internal rsh X client, which is supported only by some @sc{cvs} ports. X+This is not supported on most Unix-style systems, X+including Debian. X @code{:ext:} specifies an external rsh program. By X default this is @code{rsh} (unless otherwise specified X by the @file{--with-rsh} flag to configure) but you may set the X @code{CVS_RSH} environment variable to invoke another X program which can access the remote server (for X example, @code{remsh} on HP-UX 9 because @code{rsh} is X-something different). It must be a program which can X+something different, or @code{ssh} to allow the use of X+secure and/or compressed connections). It must be a program which can X transmit data to and from the server without modifying X it; for example the Windows NT @code{rsh} is not X suitable since it by default translates between CRLF X@@ -12711,7 +12714,7 @@ X @item @var{mname} [ options ] @var{dir} [ @var{files}@dots{} ] X In the simplest case, this form of module definition X reduces to @samp{@var{mname} @var{dir}}. This defines X-all the files in directory @var{dir} as module mname. X+all the files in directory @var{dir} as module @var{mname}. X @var{dir} is a relative path (from @code{$CVSROOT}) to a X directory of source in the source repository. In this X case, on checkout, a single directory called END-of-/usr/ports/devel/cvs-devel/files/patch-cvs.info.typo echo x - /usr/ports/devel/cvs-devel/files/patch-cvsbug_tmpfix sed 's/^X//' >/usr/ports/devel/cvs-devel/files/patch-cvsbug_tmpfix << 'END-of-/usr/ports/devel/cvs-devel/files/patch-cvsbug_tmpfix' X# Patch for a tmp race in cvsbug (in the source package; we don't ship X# the script as part of the package). Closes: #325106 Xdiff -Nur src/cvsbug.in src/cvsbug.in X--- src/cvsbug.in 2003-02-26 05:31:33.000000000 +0800 X+++ src/cvsbug.in 2006-02-26 22:07:08.000000000 +0800 X@@ -109,14 +109,14 @@ X /usr/bin/ypcat passwd 2>/dev/null | cat - /etc/passwd | grep "^$LOGNAME:" | X cut -f5 -d':' | sed -e 's/,.*//' > $TEMP X ORIGINATOR="`cat $TEMP`" X- rm -f $TEMP X+ > $TEMP X fi X fi X X if [ "$ORIGINATOR" = "" ]; then X grep "^$LOGNAME:" /etc/passwd | cut -f5 -d':' | sed -e 's/,.*//' > $TEMP X ORIGINATOR="`cat $TEMP`" X- rm -f $TEMP X+ > $TEMP X fi X X if [ -n "$ORGANIZATION" ]; then END-of-/usr/ports/devel/cvs-devel/files/patch-cvsbug_tmpfix echo x - /usr/ports/devel/cvs-devel/files/patch-cvsrc_whitespace sed 's/^X//' >/usr/ports/devel/cvs-devel/files/patch-cvsrc_whitespace << 'END-of-/usr/ports/devel/cvs-devel/files/patch-cvsrc_whitespace' X# Ignore leading whitespace in .cvsrc files. Closes: #212415. Thanks X# to James R. Van Zandt for the patch. Xdiff -Nur src/cvsrc.c src/cvsrc.c X--- src/cvsrc.c 2005-03-16 23:52:14.000000000 +0800 X+++ src/cvsrc.c 2006-02-26 18:25:18.000000000 +0800 X@@ -41,6 +41,7 @@ X size_t line_chars_allocated; X X char *optstart; X+ int white_len; X X int command_len; X int found = 0; X@@ -96,9 +97,12 @@ X if (line[0] == '#') X continue; X X+ for (white_len=0; isspace(line[white_len]); white_len++) X+ ; X+ X /* stop if we match the current command */ X- if (!strncmp (line, cmdname, command_len) X- && isspace ((unsigned char) *(line + command_len))) X+ if (!strncmp (line + white_len, cmdname, command_len) X+ && isspace ((unsigned char) *(line + white_len + command_len))) X { X found = 1; X break; X@@ -120,7 +124,7 @@ X if (found) X { X /* skip over command in the options line */ X- for (optstart = strtok (line + command_len, "\t \n"); X+ for (optstart = strtok (line + white_len + command_len, "\t \n"); X optstart; X optstart = strtok (NULL, "\t \n")) X { END-of-/usr/ports/devel/cvs-devel/files/patch-cvsrc_whitespace echo x - /usr/ports/devel/cvs-devel/files/patch-ext_expansion sed 's/^X//' >/usr/ports/devel/cvs-devel/files/patch-ext_expansion << 'END-of-/usr/ports/devel/cvs-devel/files/patch-ext_expansion' X# X# Make the "ext" method more intelligent; allow specification of the X# "rsh" command using ext=<command>. Extended to recognise "extssh" the X# same way as "ext=ssh" X# X# Original patch by Inaky Perez-Gonzalez <inaky.perez-gonzalez@intel.com>, X# extension by Steve McIntyre <steve@einval.com>. Bugs #165432 and #276328 Xdiff -Nur src/root.c.orig src/root.c X--- src/root.c.orig 2006-05-05 23:35:40.000000000 +0800 X+++ src/root.c 2006-05-05 23:34:12.000000000 +0800 X@@ -553,6 +547,18 @@ X newroot->method = gserver_method; X else if (!strcasecmp (method, "server")) X newroot->method = server_method; X+ else if (strncmp (method, "ext=", 4) == 0) X+ { X+ const char *rsh = method + 4; X+ setenv ("CVS_RSH", rsh, 1); /* This is a hack, but simplifies */ X+ newroot->method = ext_method; X+ } X+ else if (strncmp (method, "extssh", 6) == 0) X+ { X+ const char *rsh = method + 3; X+ setenv ("CVS_RSH", rsh, 1); /* This is a hack, but simplifies */ X+ newroot->method = ext_method; X+ } X else if (!strcasecmp (method, "ext")) X newroot->method = ext_method; X else if (!strcasecmp (method, "fork")) END-of-/usr/ports/devel/cvs-devel/files/patch-ext_expansion echo x - /usr/ports/devel/cvs-devel/files/patch-date_format_option sed 's/^X//' >/usr/ports/devel/cvs-devel/files/patch-date_format_option << 'END-of-/usr/ports/devel/cvs-devel/files/patch-date_format_option' X# X# Add an extra option to set the DateFormat used in log output. X# X# Patch by Steve McIntyre <steve@einval.com> Xdiff -Nur doc/cvs.texinfo doc/cvs.texinfo X--- doc/cvs.texinfo 2005-09-23 10:02:53.000000000 +0800 X+++ doc/cvs.texinfo 2006-02-26 23:03:05.000000000 +0800 X@@ -14840,9 +14840,17 @@ X group to using @code{cvs admin} to change the default keyword X substitution mode, lock revisions, unlock revisions, and X replace the log message, use @samp{UserAdminOptions=klum}. X-@end table X- X X+@cindex DateFormat, in CVSROOT/config X+@item DateFormat=@var{value} X+Control the output format of dates from cvs. cvs version 1.12.x X+changed the default format to use ``iso8601'' dates, which are X+better for many reasons. However, old scripts/programs written to X+parse the output of various cvs commands (especially cvs log) may X+not cope with the change in date format (e.g. gcvs). The default X+value of DateFormat will be ``iso8601'', but if you need temporary X+backwards-compatibility set DateFormat=old. X+@end table X X @c --------------------------------------------------------------------- X @node Environment variables Xdiff -Nur src/log.c src/log.c X--- src/log.c 2005-03-22 21:19:57.000000000 +0800 X+++ src/log.c 2006-02-26 23:03:05.000000000 +0800 X@@ -1607,8 +1607,12 @@ X &sec); X if (year < 1900) X year += 1900; X- sprintf (buf, "%04d-%02d-%02d %02d:%02d:%02d +0000", year, mon, mday, X- hour, min, sec); X+ if ('-' == datesep) X+ sprintf (buf, "%04d%c%02d%c%02d %02d:%02d:%02d +0000", year, datesep, X+ mon, datesep, mday, hour, min, sec); X+ else X+ sprintf (buf, "%04d%c%02d%c%02d %02d:%02d:%02d", year, datesep, X+ mon, datesep, mday, hour, min, sec); X cvs_output_tagged ("date", buf); X X cvs_output_tagged ("text", "; author: "); Xdiff -Nur src/main.c src/main.c X--- src/main.c 2006-02-26 23:03:04.000000000 +0800 X+++ src/main.c 2006-02-26 23:10:12.000000000 +0800 X@@ -1371,9 +1371,19 @@ X static char buf[sizeof ("yyyy-mm-dd HH:MM:SS -HHMM")]; X /* Convert to a time in the local time zone. */ X struct tm ltm = *(localtime (&unixtime)); X- X- if (!my_strftime (buf, sizeof (buf), "%Y-%m-%d %H:%M:%S %z", <m, 0, 0)) X- return NULL; X+ char *format = NULL; X+ X+ switch (datesep) X+ { X+ case '/': X+ format = "%Y/%m/%d %H:%M:%S"; X+ break; X+ default: X+ format = "%Y-%m-%d %H:%M:%S %z"; X+ break; X+ } X+ if (my_strftime (buf, sizeof (buf), format, <m, 0, 0) == 0) X+ return NULL; X X return xstrdup (buf); X } X@@ -1388,9 +1398,19 @@ X static char buf[sizeof ("yyyy-mm-dd HH:MM:SS -HHMM")]; X /* Convert to a time in the local time zone. */ X struct tm ltm = *(gmtime (&unixtime)); X- X- if (!my_strftime (buf, sizeof (buf), "%Y-%m-%d %H:%M:%S %z", <m, 0, 0)) X- return NULL; X+ char *format = NULL; X+ X+ switch (datesep) X+ { X+ case '/': X+ format = "%Y/%m/%d %H:%M:%S"; X+ break; X+ default: X+ format = "%Y-%m-%d %H:%M:%S %z"; X+ break; X+ } X+ if (my_strftime (buf, sizeof (buf), format, <m, 0, 0) == 0) X+ return NULL; X X return xstrdup (buf); X } Xdiff -Nur src/parseinfo.c src/parseinfo.c X--- src/parseinfo.c 2005-09-06 12:40:37.000000000 +0800 X+++ src/parseinfo.c 2006-02-26 23:03:05.000000000 +0800 X@@ -626,6 +626,19 @@ X retval->logHistory = xstrdup (p); X } X } X+ /* grab FreeBSD date format idea */ X+ else if (strcmp (line, "DateFormat") == 0) X+ { X+ if (strcmp (p, "old") == 0) X+ { X+ datesep = '/'; X+ } X+ else if (strcmp (p, "iso8601") == 0) X+ { X+ datesep = '-'; X+ } X+ } X+ /* end grabbing */ X else if (strcmp (line, "RereadLogAfterVerify") == 0) X { X if (!strcasecmp (p, "never")) Xdiff -Nur src/rcs.c src/rcs.c X--- src/rcs.c 2006-02-26 23:03:04.000000000 +0800 X+++ src/rcs.c 2006-02-26 23:03:05.000000000 +0800 X@@ -33,6 +33,8 @@ X # endif X #endif X X+int datesep = '-'; X+ X /* The RCS -k options, and a set of enums that must match the array. X These come first so that we can use enum kflag in function X prototypes. */ X@@ -3537,8 +3539,8 @@ X &sec); X if (year < 1900) X year += 1900; X- sprintf (buf, "%04d/%02d/%02d %02d:%02d:%02d", year, mon, mday, X- hour, min, sec); X+ sprintf (buf, "%04d%c%02d%c%02d %02d:%02d:%02d", year, datesep, mon, X+ datesep, mday, hour, min, sec); X return xstrdup (buf); X } X Xdiff -Nur src/rcs.h src/rcs.h X--- src/rcs.h 2005-03-18 06:36:24.000000000 +0800 X+++ src/rcs.h 2006-02-26 23:03:05.000000000 +0800 X@@ -254,6 +254,7 @@ X void RCS_setlocalid (const char *, unsigned int, void **, const char *arg); X char *make_file_label (const char *, const char *, RCSNode *); X X+extern int datesep; X extern bool preserve_perms; X X /* From import.c. */ END-of-/usr/ports/devel/cvs-devel/files/patch-date_format_option echo x - /usr/ports/devel/cvs-devel/files/patch-extra_tags sed 's/^X//' >/usr/ports/devel/cvs-devel/files/patch-extra_tags << 'END-of-/usr/ports/devel/cvs-devel/files/patch-extra_tags' X# X# Add extra tag keyword expansion options X# X# Patch by Steve McIntyre <steve@einval.com> Xdiff -Nur src/logmsg.c src/logmsg.c X--- src/logmsg.c 2006-02-26 22:54:52.000000000 +0800 X+++ src/logmsg.c 2006-02-26 22:56:36.000000000 +0800 X@@ -642,7 +642,11 @@ X break; X case 'T': X li = p->data; X- arg = li->tag ? li->tag : ""; X+ arg = li->tag ? li->tag : "TRUNK"; X+ break; X+ case 'S': X+ arg = xmalloc(strlen(p->key) + 5); X+ sprintf(arg, "\\\"%s\\\"", p->key); X break; X case 'V': X li = p->data; X@@ -814,7 +818,7 @@ X #endif /* SERVER_SUPPORT */ X "p", "s", srepos, X "r", "s", current_parsed_root->directory, X- "sVv", ",", changes, X+ "SsTVv", ",", changes, X logmsg_list_to_args_proc, (void *) NULL, X (char *) NULL); X if (!cmdline || !strlen (cmdline)) END-of-/usr/ports/devel/cvs-devel/files/patch-extra_tags echo x - /usr/ports/devel/cvs-devel/files/patch-fix_-l sed 's/^X//' >/usr/ports/devel/cvs-devel/files/patch-fix_-l << 'END-of-/usr/ports/devel/cvs-devel/files/patch-fix_-l' X# Re-added -l option to the client. Does nothing, but stops X# warnings/errors. Will really fix #219950 and #224737, and also a X# differently-described bug (220379). Closes: #219950, #220379 X# X# Patch by Steve McIntyre <steve@einval.com> Xdiff -Nur src/main.c src/main.c X--- src/main.c 2006-02-26 22:09:42.000000000 +0800 X+++ src/main.c 2006-02-26 22:09:43.000000000 +0800 X@@ -511,7 +511,7 @@ X int help = 0; /* Has the user asked for help? This X lets us support the `cvs -H cmd' X convention to give help for cmd. */ X- static const char short_options[] = "+QqrwtnRvb:T:e:d:Hfz:s:xa"; X+ static const char short_options[] = "+QqrwtnRvb:T:e:d:Hfz:s:xal"; X static struct option long_options[] = X { X {"help", 0, NULL, 'H'}, X@@ -669,6 +669,8 @@ X noexec = 1; X logoff = 1; X break; X+ case 'l': /* no-op to simply ignore the old -l option */ X+ break; X case 'v': X (void) fputs ("\n", stdout); X version (0, NULL); END-of-/usr/ports/devel/cvs-devel/files/patch-fix_-l echo x - /usr/ports/devel/cvs-devel/files/patch-fix_sparc_sigbus sed 's/^X//' >/usr/ports/devel/cvs-devel/files/patch-fix_sparc_sigbus << 'END-of-/usr/ports/devel/cvs-devel/files/patch-fix_sparc_sigbus' Xdiff -Nur src/update.c src/update.c X--- src/update.c 2005-09-22 20:49:17.000000000 +0200 X+++ src/update.c 2006-12-15 01:35:54.000000000 +0100 X@@ -58,7 +58,7 @@ X static int patch_file (struct file_info *finfo, X Vers_TS *vers_ts, X int *docheckout, struct stat *file_info, X- unsigned char *checksum); X+ md5_uint32 *checksum); X static void patch_file_write (void *, const char *, size_t); X #endif X static int merge_file (struct file_info *finfo, Vers_TS *vers); X@@ -723,7 +723,7 @@ X { X int docheckout; X struct stat file_info; X- unsigned char checksum[16]; X+ md5_uint32 checksum[4]; X X retval = patch_file (finfo, X vers, &docheckout, X@@ -1511,7 +1511,7 @@ X */ X static int X patch_file (struct file_info *finfo, Vers_TS *vers_ts, int *docheckout, X- struct stat *file_info, unsigned char *checksum) X+ struct stat *file_info, md5_uint32 *checksum) X { X char *backup; X char *file1; END-of-/usr/ports/devel/cvs-devel/files/patch-fix_sparc_sigbus echo x - /usr/ports/devel/cvs-devel/files/patch-flag_conflicted_copies sed 's/^X//' >/usr/ports/devel/cvs-devel/files/patch-flag_conflicted_copies << 'END-of-/usr/ports/devel/cvs-devel/files/patch-flag_conflicted_copies' X# Undo not flagging conflicted copies anymore, as reported by X# Henrique de Moraes Holschuh <hmh@debian.org> X# Closes: #368681 X# Fix as described in message to the CVS mailing list at X# http://lists.gnu.org/archive/html/info-cvs/2006-06/msg00050.html X--- src/client.c~ 2005-10-02 16:17:20.000000000 +0100 X+++ src/client.c 2006-06-09 20:12:06.000000000 +0100 X@@ -4533,10 +4533,9 @@ X /* File no longer exists. Don't do anything, missing files X just happen. */ X } X- else if (!vers->ts_rcs || args->force X- || strcmp (vers->ts_conflict X- ? vers->ts_conflict : vers->ts_rcs, vers->ts_user) X- || (vers->ts_conflict && !strcmp (cvs_cmd_name, "diff"))) X+ else if (vers->ts_rcs == NULL X+ || args->force X+ || strcmp (vers->ts_user, vers->ts_rcs) != 0) X { X if (args->no_contents X && supported_request ("Is-modified")) END-of-/usr/ports/devel/cvs-devel/files/patch-flag_conflicted_copies echo x - /usr/ports/devel/cvs-devel/files/patch-history_val-tag_world_writeable sed 's/^X//' >/usr/ports/devel/cvs-devel/files/patch-history_val-tag_world_writeable << 'END-of-/usr/ports/devel/cvs-devel/files/patch-history_val-tag_world_writeable' X# Don't make history and val-tags files world-writable when creating a X# new repository. (Closes: #125892) X# X# Author unknown, probably Eric Gillespie, Jr. <epg@debian.org> Xdiff -Nur src/mkmodules.c src/mkmodules.c X--- src/mkmodules.c 2005-05-25 04:59:01.000000000 +0800 X+++ src/mkmodules.c 2006-02-26 22:27:55.000000000 +0800 X@@ -1249,11 +1249,6 @@ X fp = xfopen (info, "w"); X if (fclose (fp) < 0) X error (1, errno, "cannot close %s", info); X- X- /* Make the new history file world-writeable, since every CVS X- user will need to be able to write to it. We use chmod() X- because xchmod() is too shy. */ X- chmod (info, 0666); X } X X /* Make an empty val-tags file to prevent problems creating it later. */ X@@ -1267,11 +1262,6 @@ X fp = xfopen (info, "w"); X if (fclose (fp) < 0) X error (1, errno, "cannot close %s", info); X- X- /* Make the new val-tags file world-writeable, since every CVS X- user will need to be able to write to it. We use chmod() X- because xchmod() is too shy. */ X- chmod (info, 0666); X } X X free (info); END-of-/usr/ports/devel/cvs-devel/files/patch-history_val-tag_world_writeable echo x - /usr/ports/devel/cvs-devel/files/patch-homedir sed 's/^X//' >/usr/ports/devel/cvs-devel/files/patch-homedir << 'END-of-/usr/ports/devel/cvs-devel/files/patch-homedir' X# Fix handling of homedirectory for pserver, patch from X# Jim Studt <jim@federated.com>. Closes: Bug#51234 Xdiff -Nur src/filesubr.c src/filesubr.c X--- src/filesubr.c 2005-09-28 23:25:59.000000000 +0800 X+++ src/filesubr.c 2006-02-26 22:31:57.000000000 +0800 X@@ -795,6 +795,11 @@ X The workaround is to put -f in inetd.conf which means that X get_homedir won't get called until after the switch in user ID. X X+ NOTE: the above paragraph is not sufficient if the HOME environment X+ variable is set, it overrides the uid based password lookup, hence X+ the change_uid logic path that blocks the HOME environment variable X+ when the uid gets changed. X+ X The whole concept of a "home directory" on the server is pretty X iffy, although I suppose some people probably are relying on it for X .cvsrc and such, in the cases where it works. */ X@@ -802,15 +807,24 @@ X get_homedir (void) X { X static char *home = NULL; X+ static uid_t home_uid = 0; X+ static int changed_uid = 0; X char *env; X+ uid_t uid = getuid(); X struct passwd *pw; X X+ if ( home && home_uid != uid) { X+ home = 0; X+ home_uid = uid; X+ changed_uid = 1; X+ } X+ X if (home != NULL) X return home; X X- if (!server_active && (env = getenv ("HOME")) != NULL) X+ if (!server_active && ((env = getenv ("HOME")) != NULL) && !changed_uid) X home = env; X- else if ((pw = (struct passwd *) getpwuid (getuid ())) X+ else if ((pw = (struct passwd *) getpwuid (uid)) X && pw->pw_dir) X home = xstrdup (pw->pw_dir); X else END-of-/usr/ports/devel/cvs-devel/files/patch-homedir echo x - /usr/ports/devel/cvs-devel/files/patch-import-n-X sed 's/^X//' >/usr/ports/devel/cvs-devel/files/patch-import-n-X << 'END-of-/usr/ports/devel/cvs-devel/files/patch-import-n-X' X# Fix `cvs import -X' failure X# Fixes: #374964 X# Patch by Florian Zschocke <zschocke@gmx.net> Xdiff -Nur src/import.c src/import.c X--- src/import.c 2005-09-04 02:27:44.000000000 +0200 X+++ src/import.c 2006-06-19 19:41:57.000000000 +0200 X@@ -595,7 +595,7 @@ X /* Attempt to make the Attic directory, in case it X does not exist. */ X (void) sprintf (rcs, "%s/%s", repository, CVSATTIC); X- if (CVS_MKDIR (rcs, 0777 ) != 0 && errno != EEXIST) X+ if (noexec == 0 && CVS_MKDIR (rcs, 0777 ) != 0 && errno != EEXIST) X error (1, errno, "cannot make directory `%s'", rcs); X X /* Note that the above clobbered the path name, so we END-of-/usr/ports/devel/cvs-devel/files/patch-import-n-X echo x - /usr/ports/devel/cvs-devel/files/patch-keyword_alphanumerics sed 's/^X//' >/usr/ports/devel/cvs-devel/files/patch-keyword_alphanumerics << 'END-of-/usr/ports/devel/cvs-devel/files/patch-keyword_alphanumerics' X# Fix keyword handling to accept alphanumerics, not just alphabetics. X# Thanks to Branden Robinson for this fix. Xdiff -Nur src/rcs.c src/rcs.c X--- src/rcs.c 2005-09-28 23:25:59.000000000 +0800 X+++ src/rcs.c 2006-02-26 17:58:32.000000000 +0800 X@@ -3680,13 +3680,18 @@ X srch_len -= (srch_next + 1) - srch; X srch = srch_next + 1; X X- /* Look for the first non alphabetic character after the '$'. */ X+ /* X+ * Accept alphanumerics, not just alphabetics. XFree86, anyone? X+ * Branden Robinson Sat, 7 Sep 2002 02:04:59 -0500 X+ */ X+ X+ /* Look for the first non alphanumeric character after the '$'. */ X send = srch + srch_len; X for (s = srch; s < send; s++) X- if (! isalpha ((unsigned char) *s)) X+ if (! isalnum ((unsigned char) *s)) X break; X X- /* If the first non alphabetic character is not '$' or ':', X+ /* If the first non alphanumeric character is not '$' or ':', X then this is not an RCS keyword. */ X if (s == send || (*s != '$' && *s != ':')) X continue; END-of-/usr/ports/devel/cvs-devel/files/patch-keyword_alphanumerics echo x - /usr/ports/devel/cvs-devel/files/patch-login_cvspass_message sed 's/^X//' >/usr/ports/devel/cvs-devel/files/patch-login_cvspass_message << 'END-of-/usr/ports/devel/cvs-devel/files/patch-login_cvspass_message' X# Print a clearer message if ~/.cvspass does not exist when cvs login is X# called. Closes: #168163. X# X# Patch by Steve McIntyre <steve@einval.com> Xdiff -Nur src/login.c src/login.c X--- src/login.c 2005-05-14 05:47:28.000000000 +0800 X+++ src/login.c 2006-02-26 21:31:17.000000000 +0800 X@@ -309,7 +309,10 @@ X fp = CVS_FOPEN (passfile, "r"); X if (fp == NULL) X { X- error (0, errno, "warning: failed to open %s for reading", passfile); X+ if (errno == ENOENT) X+ error (0, 0, "CVS password file %s does not exist - creating a new file", passfile); X+ else X+ error (0, errno, "warning: failed to open %s for reading", passfile); X goto process; X } X END-of-/usr/ports/devel/cvs-devel/files/patch-login_cvspass_message echo x - /usr/ports/devel/cvs-devel/files/patch-newlines_in_commit_template sed 's/^X//' >/usr/ports/devel/cvs-devel/files/patch-newlines_in_commit_template << 'END-of-/usr/ports/devel/cvs-devel/files/patch-newlines_in_commit_template' X# Change commit template so that there are two newlines at the X# beginning. (closes: #102624) X# X# Patch from Tollef Fog Heen <tfheen@debian.org> Xdiff -Nur src/logmsg.c src/logmsg.c X--- src/logmsg.c 2005-09-04 08:27:44.000000000 +0800 X+++ src/logmsg.c 2006-02-26 17:57:28.000000000 +0800 X@@ -264,6 +264,11 @@ X } X } X X+ if (!*messagep) X+ { X+ (void) fprintf (fp, "\n"); X+ } X+ X (void) fprintf (fp, X "%s----------------------------------------------------------------------\n", X CVSEDITPREFIX); X@@ -349,7 +354,11 @@ X *messagep = NULL; X } X X- if (pre_stbuf.st_mtime == post_stbuf.st_mtime || *messagep == NULL) X+ if (pre_stbuf.st_mtime == post_stbuf.st_mtime || X+ *messagep == NULL || X+ (*messagep)[0] == '\0' || X+ strcmp (*messagep, "\n") == 0 || X+ strcmp (*messagep, "\n\n") == 0) X { X for (;;) X { END-of-/usr/ports/devel/cvs-devel/files/patch-newlines_in_commit_template echo x - /usr/ports/devel/cvs-devel/files/patch-normalize_correct_roots sed 's/^X//' >/usr/ports/devel/cvs-devel/files/patch-normalize_correct_roots << 'END-of-/usr/ports/devel/cvs-devel/files/patch-normalize_correct_roots' X# Apply patch from 120042, which only tries to parse pserver, gserver X# and kserver methods when doing cvs login. (closes: #120042). X# X# Patch from Horms <horms@vergenet.net> Xdiff -Nur src/login.c src/login.c X--- src/login.c 2006-02-26 22:10:42.000000000 +0800 X+++ src/login.c 2006-02-26 22:25:14.000000000 +0800 X@@ -200,11 +200,21 @@ X return NULL; X } X *p = ' '; X- tmp_root_canonical = normalize_cvsroot (tmp_root); X- if (strcmp (cvsroot_canonical, tmp_root_canonical) == 0) X- password = p + 1; X- X- free (tmp_root_canonical); X+ switch (tmp_root->method) X+ { X+ case gserver_method: X+ case pserver_method: X+#ifdef HAVE_KERBEROS X+ case kserver_method: X+#endif /* HAVE_KERBEROS */ X+ tmp_root_canonical = normalize_cvsroot (tmp_root); X+ if (strcmp (cvsroot_canonical, tmp_root_canonical) == 0) X+ password = p + 1; X+ free (tmp_root_canonical); X+ break; X+ default: X+ break; X+ } X } X X return password; END-of-/usr/ports/devel/cvs-devel/files/patch-normalize_correct_roots echo x - /usr/ports/devel/cvs-devel/files/patch-parseopts sed 's/^X//' >/usr/ports/devel/cvs-devel/files/patch-parseopts << 'END-of-/usr/ports/devel/cvs-devel/files/patch-parseopts' Xdiff -Nur src/cvs.h src/cvs.h X--- src/cvs.h 2006-08-19 00:05:38.000000000 +0100 X+++ src/cvs.h 2006-08-19 00:05:41.000000000 +0100 X@@ -177,6 +177,7 @@ X #define CVSROOTADM_LOGINFO "loginfo" X #define CVSROOTADM_MODULES "modules" X #define CVSROOTADM_NOTIFY "notify" X+#define CVSROOTADM_OPTIONS "options" X #define CVSROOTADM_PASSWD "passwd" X #define CVSROOTADM_POSTADMIN "postadmin" X #define CVSROOTADM_POSTPROXY "postproxy" X@@ -506,6 +507,7 @@ X char *strcat_filename_onto_homedir (const char *, const char *); X char *cvs_temp_name (void); X FILE *cvs_temp_file (char **filename); X+void parseopts (const char *root); X X int ls (int argc, char *argv[]); X int unlink_file (const char *f); Xdiff -Nur src/main.c src/main.c X--- src/main.c 2006-08-19 00:05:38.000000000 +0100 X+++ src/main.c 2006-08-19 00:08:14.000000000 +0100 X@@ -1108,6 +1108,8 @@ X CVSROOT/config file to fix the broken one! */ X if (config) free_config (config); X config = parse_config (current_parsed_root->directory, NULL); X+ /* Now is a convenient time to read CVSROOT/options */ X+ parseopts(current_parsed_root->directory); X X /* Can set TMPDIR in the environment if necessary now, since X * if it was set in config, we now know it. X@@ -1482,5 +1484,63 @@ X exit (EXIT_FAILURE); X } X X+void X+parseopts(root) X+ const char *root; X+{ X+ char path[PATH_MAX]; X+ int save_errno; X+ char buf[1024]; X+ const char *p; X+ char *q; X+ FILE *fp; X+ X+ if (root == NULL) { X+ printf("no CVSROOT in parseopts\n"); X+ return; X+ } X+ p = strchr (root, ':'); X+ if (p) X+ p++; X+ else X+ p = root; X+ if (p == NULL) { X+ printf("mangled CVSROOT in parseopts\n"); X+ return; X+ } X+ (void) sprintf (path, "%s/%s/%s", p, CVSROOTADM, CVSROOTADM_OPTIONS); X+ if ((fp = fopen(path, "r")) != NULL) { X+ while (fgets(buf, sizeof buf, fp) != NULL) { X+ if (buf[0] == '#') X+ continue; X+ q = strrchr(buf, '\n'); X+ if (q) X+ *q = '\0'; X+ X+ if (!strncmp(buf, "tag=", 4)) { X+ char *what; X+ char *rcs_localid; X+ X+ rcs_localid = buf + 4; X+ RCS_setlocalid(path, 0, &config->keywords, rcs_localid); X+ } X+ if (!strncmp(buf, "tagexpand=", 10)) { X+ char *what; X+ char *rcs_incexc; X+ X+ rcs_incexc = buf + 10; X+ RCS_setincexc(&config->keywords, rcs_incexc); X+ } X+ /* X+ * OpenBSD has a "umask=" and "dlimit=" command, we silently X+ * ignore them here since they are not much use to us. cvsumask X+ * defaults to 002 already, and the dlimit (data size limit) X+ * should really be handled elsewhere (eg: login.conf). X+ */ X+ } X+ fclose(fp); X+ } X+} X+ X /* vim:tabstop=8:shiftwidth=4 X */ Xdiff -Nur src/server.c src/server.c X--- src/server.c 2006-08-19 00:05:38.000000000 +0100 X+++ src/server.c 2006-08-19 00:05:41.000000000 +0100 X@@ -985,6 +985,9 @@ X config->MaxCompressionLevel); X } X X+ /* Now is a good time to read CVSROOT/options too. */ X+ parseopts(current_parsed_root->directory); X+ X path = xmalloc (strlen (current_parsed_root->directory) X + sizeof (CVSROOTADM) X + 2); END-of-/usr/ports/devel/cvs-devel/files/patch-parseopts echo x - /usr/ports/devel/cvs-devel/files/patch-rcs2log_POSIX_sort sed 's/^X//' >/usr/ports/devel/cvs-devel/files/patch-rcs2log_POSIX_sort << 'END-of-/usr/ports/devel/cvs-devel/files/patch-rcs2log_POSIX_sort' X# Make rcs2log use POSIX 1003.1-2001 compliant `sort'. Closes: #368909 X# Patch taken from http://cvs.pld.org.pl/SOURCES/cvs-POSIX.patch?rev=1.1 , X# Thanks to the PLD Team. Xdiff -Nur contrib/rcs2log.sh.orig contrib/rcs2log.sh X--- contrib/rcs2log.sh.orig 2006-05-26 15:16:54.000000000 +0800 X+++ contrib/rcs2log.sh 2006-05-26 15:16:35.000000000 +0800 X@@ -649,7 +649,7 @@ X # Sort the log entries, first by date+time (in reverse order), X # then by author, then by log entry, and finally by file name and revision X # (just in case). X-sort -t"$SOH" +2 -4r +4 +0 | X+sort -t"$SOH" -k 3,4r -k 5 -k 1 | X X # Finally, reformat the sorted log entries. X $AWK -F"$SOH" ' END-of-/usr/ports/devel/cvs-devel/files/patch-rcs2log_POSIX_sort echo x - /usr/ports/devel/cvs-devel/files/patch-remove_-R_warning sed 's/^X//' >/usr/ports/devel/cvs-devel/files/patch-remove_-R_warning << 'END-of-/usr/ports/devel/cvs-devel/files/patch-remove_-R_warning' X# X# Turn off read-only warning that breaks pserver client access. Doh! X# Closes: #319467, #264019 X# Patch by Steve McIntyre <steve@einval.com> Xdiff -Nur src/main.c src/main.c X--- src/main.c 2005-10-02 23:17:21.000000000 +0800 X+++ src/main.c 2006-02-26 18:23:04.000000000 +0800 X@@ -764,13 +764,6 @@ X if (argc < 1) X usage (usg); X X- if (readonlyfs && !really_quiet) { X- error (0, 0, X- "WARNING: Read-only repository access mode selected via `cvs -R'.\n\ X-Using this option to access a repository which some users write to may\n\ X-cause intermittent sandbox corruption."); X- } X- X /* Calculate the cvs global session ID */ X X { END-of-/usr/ports/devel/cvs-devel/files/patch-remove_-R_warning echo x - /usr/ports/devel/cvs-devel/files/patch-rsc2log_fix sed 's/^X//' >/usr/ports/devel/cvs-devel/files/patch-rsc2log_fix << 'END-of-/usr/ports/devel/cvs-devel/files/patch-rsc2log_fix' X# X# Patch to make the rcs2log script cope with old-format (5 parameter) X# and new-format (6 parameter) log output. Bug#258140 X# X# Patch from Ludovic Rousseau <rousseau@debian.org> Xdiff -Nur contrib/rcs2log.sh contrib/rcs2log.sh X--- contrib/rcs2log.sh 2005-07-12 22:12:55.000000000 +0800 X+++ contrib/rcs2log.sh 2006-02-26 17:43:11.000000000 +0800 X@@ -416,11 +416,24 @@ X : ;; X esac >$llogout || exit X X+# the date format in 'cvs -q log' changed X+# it was X+# date: 2003/05/06 21:23:30; author: rousseau; state: Exp; lines: +29 -31 X+# it is now X+# date: 2003-05-06 21:23:30 +0000; author: rousseau; state: Exp; lines: +29 -31 X output_authors='/^date: / { X- if ($2 ~ /^[0-9]*[-\/][0-9][0-9][-\/][0-9][0-9]$/ && $3 ~ /^[0-9][0-9]:[0-9][0-9]:[0-9][0-9][-+0-9:]*;$/ && $4 == "author:" && $5 ~ /^[^;]*;$/) { X- print substr($5, 1, length($5)-1) X- } X+ # old date format X+ if ($2 ~ /^[0-9]*[-\/][0-9][0-9][-\/][0-9][0-9]$/ && $3 ~ /^[0-9][0-9]:[0-9][0-9]:[0-9][0-9][-+0-9:]*;$/ && $4 == "author:" && $5 ~ /^[^;]*;$/) { X+ print substr($5, 1, length($5)-1) X+ } X+ else { X+ # new date format X+ if ($2 ~ /^[0-9]*[-\/][0-9][0-9][-\/][0-9][0-9]$/ && $3 ~ /^[0-9][0-9]:[0-9][0-9]:[0-9][0-9][-+0-9:]*$/ && $5 == "author:" && $6 ~ /^[^;]*;$/) { X+ print substr($6, 1, length($6)-1) X+ } X+ } X }' X+ X authors=` X $AWK "$output_authors" <"$rlogfile" | sort -u | comm -23 - $llogout X ` X@@ -611,7 +624,11 @@ X date = newdate date X } X time = substr($3, 1, length($3) - 1) X- author = substr($5, 1, length($5)-1) X+ author = substr($5, 1, length($5)-1) X+ if (author ~ /author/) { X+ # new date format X+ author = substr($6, 1, length($6)-1) X+ } X printf "%s%s%s%s%s%s%s%s%s%s", filename, SOH, rev, SOH, date, SOH, time, SOH, author, SOH X rev = "?" X next END-of-/usr/ports/devel/cvs-devel/files/patch-rsc2log_fix echo x - /usr/ports/devel/cvs-devel/files/patch-server_wrapper sed 's/^X//' >/usr/ports/devel/cvs-devel/files/patch-server_wrapper << 'END-of-/usr/ports/devel/cvs-devel/files/patch-server_wrapper' X# X# Added patch to support cvs -W ! - clears all wrappers (patch also X# forwarded to CVS people) #3374 X# X# Patch by Michael Alan Dorman <mdorman@lot49.med.miami.edu> Xdiff -Nur src/wrapper.c src/wrapper.c X--- src/wrapper.c 2005-09-04 08:27:44.000000000 +0800 X+++ src/wrapper.c 2006-02-26 22:26:53.000000000 +0800 X@@ -86,7 +86,7 @@ X move this to a per-connection data structure, or better yet X think about a cleaner solution. */ X static int wrap_setup_already_done = 0; X- char *homedir; X+ char *homedir = NULL; X X if (wrap_setup_already_done != 0) X return; X@@ -107,6 +107,11 @@ X free (file); X } X X+#ifdef SERVER_SUPPORT X+ if (!server_active) X+#endif X+ { X+ X /* Then add entries found in home dir, (if user has one) and file X exists. */ X homedir = get_homedir (); X@@ -115,6 +120,8 @@ X hand it might be obnoxious to complain when CVS will function X just fine without .cvswrappers (and many users won't even know what X .cvswrappers is). */ X+ } X+ X if (homedir != NULL) X { X char *file = strcat_filename_onto_homedir (homedir, CVSDOTWRAPPER); X@@ -339,6 +346,12 @@ X if (!line || line[0] == '#') X return; X X+ /* Allows user to declare all wrappers null and void */ X+ if ( line[0] == '!') { X+ wrap_kill ( ); X+ return; X+ } X+ X memset (&e, 0, sizeof(e)); X X /* Search for the wild card */ END-of-/usr/ports/devel/cvs-devel/files/patch-server_wrapper echo x - /usr/ports/devel/cvs-devel/files/patch-zlib-read-compressed sed 's/^X//' >/usr/ports/devel/cvs-devel/files/patch-zlib-read-compressed << 'END-of-/usr/ports/devel/cvs-devel/files/patch-zlib-read-compressed' X--- src/zlib.c~ 3 Jun 2005 18:26:09 -0000 1.31 X+++ src/zlib.c 27 Oct 2005 17:59:49 -0000 X@@ -229,7 +229,7 @@ compress_buffer_input (void *closure, ch X would fetch all the available bytes, and at least one byte. */ X X status = (*cb->buf->input) (cb->buf->closure, bd->text, X- need, BUFFER_DATA_SIZE, &nread); X+ need ? 1 : 0, BUFFER_DATA_SIZE, &nread); X X if (status == -2) X /* Don't try to recover from memory allcoation errors. */ END-of-/usr/ports/devel/cvs-devel/files/patch-zlib-read-compressed exit >Release-Note: >Audit-Trail: >Unformatted:
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200711140728.lAE7SgAI012389>