play viking, swing axe, remove deadwood..
authorRobert Garrett <rob@dragonflybsd.org>
Wed, 20 Aug 2003 02:45:43 +0000 (02:45 +0000)
committerRobert Garrett <rob@dragonflybsd.org>
Wed, 20 Aug 2003 02:45:43 +0000 (02:45 +0000)
12 files changed:
usr.sbin/ctm/ctm/Makefile [deleted file]
usr.sbin/ctm/ctm/ctm.1 [deleted file]
usr.sbin/ctm/ctm/ctm.5 [deleted file]
usr.sbin/ctm/ctm/ctm.c [deleted file]
usr.sbin/ctm/ctm/ctm.h [deleted file]
usr.sbin/ctm/ctm/ctm_ed.c [deleted file]
usr.sbin/ctm/ctm/ctm_input.c [deleted file]
usr.sbin/ctm/ctm/ctm_pass1.c [deleted file]
usr.sbin/ctm/ctm/ctm_pass2.c [deleted file]
usr.sbin/ctm/ctm/ctm_pass3.c [deleted file]
usr.sbin/ctm/ctm/ctm_passb.c [deleted file]
usr.sbin/ctm/ctm/ctm_syntax.c [deleted file]

diff --git a/usr.sbin/ctm/ctm/Makefile b/usr.sbin/ctm/ctm/Makefile
deleted file mode 100644 (file)
index f9f2c73..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-#
-# ----------------------------------------------------------------------------
-# "THE BEER-WARE LICENSE" (Revision 42):
-# <phk@login.dknet.dk> wrote this file.  As long as you retain this notice you
-# can do whatever you want with this stuff. If we meet some day, and you think
-# this stuff is worth it, you can buy me a beer in return.   Poul-Henning Kamp
-# ----------------------------------------------------------------------------
-#
-# $FreeBSD: src/usr.sbin/ctm/ctm/Makefile,v 1.13.2.1 2001/04/25 12:09:24 ru Exp $
-# $DragonFly: src/usr.sbin/ctm/ctm/Attic/Makefile,v 1.2 2003/06/17 04:29:53 dillon Exp $
-#
-
-PROG=          ctm
-NOTYET=                ctm_ed.c
-SRCS=          ctm.c ctm_input.c ctm_pass1.c ctm_pass2.c ctm_pass3.c \
-               ctm_passb.c ctm_syntax.c ctm_ed.c
-LDADD+=                -lmd
-DPADD+=                ${LIBMD}
-MAN=           ctm.1 ctm.5
-CFLAGS+=       -Wall
-
-.if exists(${.CURDIR}/../../Makefile.inc)
-.include "${.CURDIR}/../../Makefile.inc"
-.endif
-.include <bsd.prog.mk>
diff --git a/usr.sbin/ctm/ctm/ctm.1 b/usr.sbin/ctm/ctm/ctm.1
deleted file mode 100644 (file)
index 5efed2c..0000000
+++ /dev/null
@@ -1,302 +0,0 @@
-.\"----------------------------------------------------------------------------
-.\""THE BEER-WARE LICENSE" (Revision 42):
-.\"<joerg@FreeBSD.org> wrote this file.  As long as you retain this notice you
-.\"can do whatever you want with this stuff. If we meet some day, and you think
-.\"this stuff is worth it, you can buy me a beer in return.       Joerg Wunsch
-.\"----------------------------------------------------------------------------
-.\"
-.\" This manual page is partially obtained from Poul-Hennings CTM README
-.\" file.
-.\"
-.\" CTM and ctm(1) by <phk@FreeBSD.org>
-.\"
-.\" $FreeBSD: src/usr.sbin/ctm/ctm/ctm.1,v 1.17.2.9 2003/03/12 22:08:14 trhodes Exp $
-.\" $DragonFly: src/usr.sbin/ctm/ctm/Attic/ctm.1,v 1.2 2003/06/17 04:29:53 dillon Exp $
-.\"
-.Dd March 25, 1995
-.Os
-.Dt CTM 1
-.Sh NAME
-.Nm ctm
-.Nd source code mirror program
-.Sh SYNOPSIS
-.Nm
-.Op Fl cFklquv
-.Op Fl b Ar basedir
-.Op Fl B Ar backup-file
-.Op Fl e Ar include-regex
-.Op Fl t Ar tar-command
-.Op Fl T Ar tmpdir
-.Op Fl V Ar level
-.Op Fl x Ar exclude-regex
-.Ar
-.Sh DESCRIPTION
-The
-.Nm
-utility was originally
-.Dq Cvs Through eMail ,
-but now instead it seems more fitting to call it
-.Dq Current Through eMail .
-.Pp
-The
-.Nm
-utility is now meant to be the definitive way to make and apply a delta between
-two versions of a directory tree.
-.Pp
-There are two parts to this, making the delta and applying it.  These are two
-entirely different things.
-.Ss Usage
-To apply a CTM delta, you pass it to the
-.Nm
-command.  You can pass a CTM delta on stdin, or you can give the
-filename as an argument.  If you do the latter, you make life a lot
-easier for your self, since the program can accept gzip'ed files and
-since it will not have to make a temporary copy of your file.  You can
-specify multiple deltas at one time, they will be processed one at a
-time.  Deltas that are already applied will be ignored.
-.Pp
-The
-.Nm
-command runs in a number of passes.  It will process the entire
-input file in each pass, before commencing with the next pass.
-.Pp
-Before working on a file
-.Ar name
-.Nm
-first checks for the existence of the file
-.Ar name.ctm .
-If this file exists,
-.Nm
-works on it instead.
-.Pp
-Pass 1 will verify that the input file is OK.  The syntax, the data
-and the global MD5 checksum will be checked.  If any of these fail,
-.Nm
-will simply reject the input file.
-.Pp
-Pass 2 will validate that the directory tree is in the state expected by
-the CTM delta.  This is done by looking for files and directories which
-should/should not exist and by checking the MD5 checksums of files.
-.Pp
-If a
-.Ar backup-file
-had been specified using the
-.Fl B
-option, all files that would be modified by this
-.Nm
-invocation are backed up
-to this file using the archiver command specified by the
-.Fl t
-option.  The default archiver command is
-.Nm "tar -rf %s -T -" .
-.Pp
-Pass 3 will actually apply the delta.
-.Pp
-The list of files that would be modified by
-.Nm
-is subject to filtering regular expressions specified
-using the
-.Fl e
-and
-.Fl x
-options.
-The
-.Fl e
-and
-.Fl x
-options are applied in order of appearance on the command line.  The last
-filter that matched a given file name determines whether the file would be
-operated on or left alone by
-.Nm .
-.Pp
-The
-.Nm
-utility
-will extract the file hierarchy below its working directory.  Absolute
-filenames or filenames containing references through
-.Sq Pa .\&
-and
-.Sq Pa ..\&
-are explicitly prohibited as a security measure.
-.Ss Options
-.Bl -tag -width indent
-.It Fl b Ar basedir
-Prepend the path
-.Ar basedir
-to every filename.
-.It Fl B Ar backup-file
-Backup all files that would be modified by this CTM run to
-.Ar backup-file .
-If any filters are specified using the
-.Fl e
-and
-.Fl x
-options, then the final set of files backed up are those that would be
-modified by CTM after the filters are applied.
-.It Fl c
-Check it out, don't do anything.
-.It Fl e Ar regular_expression
-Match each name in the CTM file against
-.Ar regular_expression ,
-and if it matches process the file, otherwise leave it alone.  There may be
-any number of these options.  Use of this option disables the
-.Pa .ctm_status
-sequence number checks.  For example, the expression
-.Ic ^usr.sbin/ctm
-for example, will select the
-.Pa usr.sbin/ctm
-source directory and all pathnames under it.
-.Pp
-Pathnames can be disabled from being considered by CTM using the
-.Fl x
-option.
-.It Fl F
-Force.
-.It Fl k
-Keep files and directories and don't remove them even if the CTM file
-specifies they are to be removed.  If the
-.Fl B
-option is specified, these files and directories will not be backed up.
-.It Fl l
-List files that would be modified by this invocation of CTM and the
-actions that would be performed on them.  Use of the
-.Fl l
-option disables the
-.Pa .ctm_status
-checks and integrity checks on the source tree being operated on.  The
-.Fl l
-option can be combined with the
-.Fl e
-and
-.Fl x
-options to determine which files would be modified by the given set of
-command line options.
-.It Fl q
-Tell us less.
-.It Fl t Ar tar-command
-Use
-.Ar tar-command
-instead of the default archiver
-.Nm tar .
-This option takes effect only if a backup file had been specified using the
-.Fl B
-option.  A %s in the tar command will be replaced by the name of the backup
-file.
-.It Fl T Ar tmpdir
-Put temporary files under
-.Ar tmpdir .
-.It Fl u
-Set modification time of created and modified files to the CTM delta
-creation time.
-.It Fl v
-Tell us more.
-.It Fl V Ar level
-Tell us more.
-.Ar Level
-is the level of verbosity.
-.It Fl x Ar regular_expression
-Match each name in the CTM file against
-.Ar regular_expression
-and if it matches, leave the file alone.  There may be any number of these
-options.  Use of this option disables the
-.Pa .ctm_status
-sequence number checks.
-.Pp
-Pathnames can be selected for CTM's consideration using the
-.Fl e
-option.
-.El
-.Sh SECURITY
-On its own, CTM is an insecure protocol
-- there is no authentication performed that the
-changes applied to the source code were sent by a
-trusted party, and so care should be taken if the
-CTM deltas are obtained via an unauthenticated
-medium such as regular email.
-It is a relatively simple matter for an attacker
-to forge a CTM delta to replace or precede the
-legitimate one and insert malicious code into your
-source tree.
-If the legitimate delta is somehow prevented from
-arriving, this will go unnoticed until a later
-delta attempts to touch the same file, at which
-point the MD5 checksum will fail.
-.Pp
-To remedy this insecurity, CTM pieces generated by
-FreeBSD.org are cryptographically signed in a
-format compatible with the GNU Privacy Guard
-utility, available in /usr/ports/security/gpg, and
-the Pretty Good Privacy v5 utility,
-/usr/ports/security/pgp5.
-The relevant public key can be obtained by
-fingering ctm@FreeBSD.org.
-.Pp
-CTM deltas which are thus signed cannot be
-undetectably altered by an attacker.
-Therefore it is recommended that you make use of
-GPG or PGP5 to verify the signatures if you
-receive your CTM deltas via email.
-.Sh ENVIRONMENT
-.Ev TMPDIR ,
-if set to a pathname, will cause ctm to use that pathname
-as the location of temporary file.
-See
-.Xr tempnam 3 ,
-for more details on this.
-The same effect may be achieved with the
-.Fl T
-flag.
-.Sh FILES
-.Pa .ctm_status
-contains the sequence number of the last CTM delta applied.  Changing
-or removing this file will greatly confuse
-.Nm .
-.Pp
-Using the
-.Fl e
-and
-.Fl x
-options can update a partial subset of the source tree and causes sources
-to be in an inconsistent state.  It is assumed that you know what you are
-doing when you use these options.
-.Sh EXAMPLES
-.Bd -literal
-cd ~cvs
-/usr/sbin/ctm ~ctm/cvs-*
-.Ed
-.Pp
-To extract and patch all sources under `lib'
-.Bd -literal
-cd ~/lib-srcs
-/usr/sbin/ctm -e '^lib' ~ctm/src-cur*
-.Ed
-.Sh DIAGNOSTICS
-Numerous messages, hopefully self-explanatory.  The
-.Dq noise level
-can be adjusted with the
-.Fl q ,
-.Fl v
-and
-.Fl V
-options.
-.Sh SEE ALSO
-.Xr ctm_rmail 1 ,
-.Xr ctm 5
-.Sh HISTORY
-Initial trials were run during the work on
-.Fx 1.1.5 ,
-and many bugs and
-methods were hashed out.
-.Pp
-The
-.Nm
-command appeared in
-.Fx 2.1 .
-.Sh AUTHORS
-The CTM system has been designed and implemented by
-.An Poul-Henning Kamp
-.Aq phk@FreeBSD.org .
-.Pp
-.An Joerg Wunsch
-.Aq joerg@FreeBSD.org
-wrote this man-page.
diff --git a/usr.sbin/ctm/ctm/ctm.5 b/usr.sbin/ctm/ctm/ctm.5
deleted file mode 100644 (file)
index 8f7246b..0000000
+++ /dev/null
@@ -1,182 +0,0 @@
-.\"----------------------------------------------------------------------------
-.\""THE BEER-WARE LICENSE" (Revision 42):
-.\"<joerg@FreeBSD.org> wrote this file.  As long as you retain this notice you
-.\"can do whatever you want with this stuff. If we meet some day, and you think
-.\"this stuff is worth it, you can buy me a beer in return.       Joerg Wunsch
-.\"----------------------------------------------------------------------------
-.\"
-.\" This manual page is partially obtained from Poul-Hennings CTM README
-.\" file.
-.\"
-.\" CTM and ctm(1) by <phk@FreeBSD.org>
-.\"
-.\" $FreeBSD: src/usr.sbin/ctm/ctm/ctm.5,v 1.9.2.5 2003/03/12 22:08:14 trhodes Exp $
-.\" $DragonFly: src/usr.sbin/ctm/ctm/Attic/ctm.5,v 1.2 2003/06/17 04:29:53 dillon Exp $
-.\"
-.Dd March 25, 1995
-.Os
-.Dt CTM 5
-.Sh NAME
-.Nm ctm
-.Nd source code mirror system
-.Sh DESCRIPTION
-The
-.Nm
-transfers data in a specific file format, called a CTM delta.
-.Pp
-CTM deltas consist of control lines and data chunks.  Each control
-line starts with the letters
-.Dq CTM ,
-followed by a CTM statement and control data, and ends with a '\en'
-character.
-.Pp
-Data chunks always belong to the preceding control line, and the
-last field on that control line is the number of bytes in the data
-chunk.
-A trailing newline '\en' character follows each data chunk, this
-newline is not part of the chunk and isn't included in the count.
-.Pp
-The CTM statements are as follows.
-.Bl -tag -width indent
-.It _BEGIN Ar version name number timestamp prefix
-This is the overall begin of a CTM delta file.  The
-.Ar version
-field must match the program version
-(currently 2.0).
-.Ar Name
-is the name and
-.Ar number
-the sequence number of the CTM service, it is matched against the file
-.Pa .ctm_status
-to see if the delta has already been applied.
-.Ar Timestamp
-contains the year, month, day, hour, minute, and second of the
-time of delta creation for reference
-(followed by the letter
-.Sq Z
-meaning this is a UTC timestamp).
-The
-.Ar prefix
-field is currently not implemented.
-.It _END Ar md5
-This statement ends the CTM delta, the global
-.Ar md5
-checksum is matched against the MD5 checksum of the entire delta, up to
-and including the space (0x20) character following ``_END''.
-.It \&FM Ar name uid gid mode md5 count
-Make the file
-.Ar name ,
-the original file had the uid
-.Ar uid
-(numerical, decimal),
-the gid
-.Ar gid
-(numerical, decimal),
-mode
-.Ar mode
-(numerical, octal),
-and the MD5 checksum
-.Ar md5 .
-.Pp
-The following
-.Ar count
-bytes data are the contents of the new file.
-.It \&FS Ar name uid gid mode md5before md5after count
-Substitute the contents of file
-.Ar name ,
-the original file had the new uid
-.Ar uid
-(numerical, decimal),
-the new gid
-.Ar gid
-(numerical, decimal),
-new mode
-.Ar mode
-(numerical, octal),
-the old MD5 checksum
-.Ar md5before ,
-and the new MD5 checksum
-.Ar md5after .
-.Pp
-The following
-.Ar count
-bytes data are the contents of the new file.
-.Pp
-File substitution is used if the commands to edit a file would exceed
-the total file length, so substituting it is more efficient.
-.It \&FN Ar name uid gid mode md5before md5after count
-Edit the file
-.Ar name .
-The arguments are as above, but the data sections contains an
-.Xr diff 1
--n script which should be applied to the file in question.
-.It \&FR Ar name md5
-Remove the file
-.Ar name ,
-which must match the MD5 checksum
-.Ar md5 .
-.It \&AS Ar name uid gid mode
-The original file
-.Ar name
-changed its owner to
-.Ar uid ,
-its group to
-.Ar gid ,
-and/or its mode to
-.Ar mode .
-.It \&DM Ar name uid gid mode
-The directory
-.Ar name
-is to be created, it had originally the owner
-.Ar uid ,
-group
-.Ar gid ,
-and mode
-.Ar mode .
-.It \&DR Ar name
-The directory
-.Ar name
-is to be removed.
-.El
-.Sh EXAMPLES
-In the following example, long lines have been folded to make them
-printable
-(marked by backslashes).
-.Bd -literal
-CTM_BEGIN 2.0 cvs-cur 485 19950324214652Z .
-CTMFR src/sys/gnu/i386/isa/scd.c,v 5225f13aa3c7e458f9dd0d4bb637b18d
-CTMFR src/sys/gnu/i386/isa/scdreg.h,v e5af42b8a06f2c8030b93a7d71afb223
-CTMDM src/sys/gnu/i386/isa/Attic 0 552 775
-CTMFS .ctm_status 545 552 664 d9ccd2a84a9dbb8db56ba85663adebf0 \\
-e2a10c6f66428981782a0a18a789ee2e 12
-cvs-cur 485
-
-CTMFN CVSROOT/commitlogs/gnu 545 552 664 \\
-5d7bc3549140d860bd9641b5782c002d 7fb04ed84b48160c9b8eea84b4c0b6e3 394
-a6936 21
-ache        95/03/24 09:59:50
-
-  Modified:    gnu/lib/libdialog kernel.c prgbox.c
-  Log:
-[...]
-CTM_END 74ddd298d76215ae45a077a4b6a74e9c
-.Ed
-.Sh SEE ALSO
-.Xr ctm 1 ,
-.Xr ctm_rmail 1 ,
-.Xr ed 1
-.Sh HISTORY
-Initial trials ran during the
-.Fx 1.1.5 ,
-and many bugs and
-methods were hashed out.
-The CTM system has been made publicly available in
-.Fx 2.1 .
-.Sh AUTHORS
-The CTM system has been designed and implemented by
-.An Poul-Henning Kamp
-.Aq phk@FreeBSD.org .
-.Pp
-.An Joerg Wunsch
-.Aq joerg@FreeBSD.org
-wrote this man-page.
diff --git a/usr.sbin/ctm/ctm/ctm.c b/usr.sbin/ctm/ctm/ctm.c
deleted file mode 100644 (file)
index cdbf6dd..0000000
+++ /dev/null
@@ -1,332 +0,0 @@
-/*
- * ----------------------------------------------------------------------------
- * "THE BEER-WARE LICENSE" (Revision 42):
- * <phk@login.dknet.dk> wrote this file.  As long as you retain this notice you
- * can do whatever you want with this stuff. If we meet some day, and you think
- * this stuff is worth it, you can buy me a beer in return.   Poul-Henning Kamp
- * ----------------------------------------------------------------------------
- *
- * $FreeBSD: src/usr.sbin/ctm/ctm/ctm.c,v 1.19.2.1 2000/08/23 08:51:25 kris Exp $
- * $DragonFly: src/usr.sbin/ctm/ctm/Attic/ctm.c,v 1.2 2003/06/17 04:29:53 dillon Exp $
- *
- * This is the client program of 'CTM'.  It will apply a CTM-patch to a
- * collection of files.
- *
- * Options we'd like to see:
- *
- * -a                  Attempt best effort.
- * -d <int>            Debug TBD.
- * -m <mail-addr>      Email me instead.
- * -r <name>           Reconstruct file.
- * -R <file>           Read list of files to reconstruct.
- *
- * Options we have:
- * -b <dir>            Base-dir
- * -B <file>           Backup to tar-file.
- * -t                  Tar command (default as in TARCMD).
- * -c                  Check it out, don't do anything.
- * -F                  Force
- * -q                  Tell us less.
- * -T <tmpdir>.                Temporary files.
- * -u                  Set all file modification times to the timestamp
- * -v                  Tell us more.
- * -V <level>          Tell us more level = number of -v
- * -k                  Keep files and directories that would have been removed.
- * -l                  List actions.
- *
- * Options we don't actually use:
- * -p                  Less paranoid.
- * -P                  Paranoid.
- */
-
-#define EXTERN /* */
-#include <paths.h>
-#include "ctm.h"
-
-#define CTM_STATUS ".ctm_status"
-
-extern int Proc(char *, unsigned applied);
-
-int
-main(int argc, char **argv)
-{
-    int stat=0, err=0;
-    int c;
-    unsigned applied = 0;
-    FILE *statfile;
-    struct CTM_Filter *nfilter = NULL; /* new filter */
-    u_char * basedir;
-
-    basedir = NULL;
-    Verbose = 1;
-    Paranoid = 1;
-    SetTime = 0;
-    KeepIt = 0;
-    ListIt = 0;
-    BackupFile = NULL;
-    TarCmd = TARCMD;
-    LastFilter = FilterList = NULL;
-    TmpDir = getenv("TMPDIR");
-    if (TmpDir == NULL)
-       TmpDir = strdup(_PATH_TMP);
-    setbuf(stderr,0);
-    setbuf(stdout,0);
-
-    while((c=getopt(argc,argv,"ab:B:cd:e:Fklm:pPqr:R:t:T:uV:vx:")) != -1) {
-       switch (c) {
-           case 'b': basedir = optarg; break; /* Base Directory */
-           case 'B': BackupFile = optarg;      break;
-           case 'c': CheckIt++;        break; /* Only check it */
-           case 'F': Force = 1;        break; 
-           case 'k': KeepIt++;         break; /* Don't do removes */
-           case 'l': ListIt++;         break; /* Only list actions and files */
-           case 'p': Paranoid--;       break; /* Less Paranoid */
-           case 'P': Paranoid++;       break; /* More Paranoid */
-           case 'q': Verbose--;        break; /* Quiet */
-           case 't': TarCmd = optarg;  break; /* archiver command */
-           case 'T': TmpDir = optarg;  break; /* set temporary directory */
-           case 'u': SetTime++;        break; /* Set timestamp on files */
-           case 'v': Verbose++;        break; /* Verbose */
-           case 'V': sscanf(optarg,"%d", &c); /* Verbose */
-                     Verbose += c;
-                     break;
-           case 'e':                           /* filter expressions */
-           case 'x':
-               if (NULL == (nfilter =  Malloc(sizeof(struct CTM_Filter)))) {
-                       warnx("out of memory for expressions: \"%s\"", optarg);
-                       stat++;
-                       break;
-               }
-
-               (void) memset(nfilter, 0, sizeof(struct CTM_Filter));
-
-               if (0 != (err = 
-                       regcomp(&nfilter->CompiledRegex, optarg, REG_NOSUB))) {
-
-                       char errmsg[128];
-
-                       regerror(err, &nfilter->CompiledRegex, errmsg, 
-                               sizeof(errmsg));
-                       warnx("regular expression: \"%s\"", errmsg);
-                       stat++;
-                       break;
-               }
-
-               /* note whether the filter enables or disables on match */
-               nfilter->Action = 
-                       (('e' == c) ? CTM_FILTER_ENABLE : CTM_FILTER_DISABLE);
-
-               /* link in the expression into the list */
-               nfilter->Next = NULL;
-               if (NULL == FilterList) {
-                 LastFilter = FilterList = nfilter; /* init head and tail */
-               } else {    /* place at tail */
-                 LastFilter->Next = nfilter;
-                 LastFilter = nfilter; 
-               }
-               break;
-           case ':':
-               warnx("option '%c' requires an argument",optopt);
-               stat++;
-               break;
-           case '?':
-               warnx("option '%c' not supported",optopt);
-               stat++;
-               break;
-           default:
-               warnx("option '%c' not yet implemented",optopt);
-               break;
-       }
-    }
-
-    if(stat) {
-       warnx("%d errors during option processing",stat);
-       return Exit_Pilot;
-    }
-    stat = Exit_Done;
-    argc -= optind;
-    argv += optind;
-
-    if (basedir == NULL) {
-       Buffer = (u_char *)Malloc(BUFSIZ + strlen(SUBSUFF) +1);
-       CatPtr = Buffer;
-       *Buffer  = '\0';
-    } else {
-       Buffer = (u_char *)Malloc(strlen(basedir)+ BUFSIZ + strlen(SUBSUFF) +1);
-       strcpy(Buffer, basedir);
-       CatPtr = Buffer + strlen(basedir);
-       if (CatPtr[-1] != '/') {
-               strcat(Buffer, "/");
-               CatPtr++;
-       }
-    }
-    strcat(Buffer, CTM_STATUS);
-
-    if(ListIt) 
-       applied = 0;
-    else
-       if((statfile = fopen(Buffer, "r")) == NULL) {
-           if (Verbose > 0)
-               warnx("warning: %s not found", Buffer);
-       } else {
-           fscanf(statfile, "%*s %u", &applied);
-           fclose(statfile);
-       }
-
-    if(!argc)
-       stat |= Proc("-", applied);
-
-    while(argc-- && stat == Exit_Done) {
-       stat |= Proc(*argv++, applied);
-       stat &= ~(Exit_Version | Exit_NoMatch);
-    }
-
-    if(stat == Exit_Done)
-       stat = Exit_OK;
-
-    if(Verbose > 0)
-       warnx("exit(%d)",stat);
-
-    if (FilterList)
-       for (nfilter = FilterList; nfilter; ) {
-           struct CTM_Filter *tmp = nfilter->Next;
-           Free(nfilter);
-           nfilter = tmp;
-       }
-    return stat;
-}
-
-int
-Proc(char *filename, unsigned applied)
-{
-    FILE *f;
-    int i;
-    char *p = strrchr(filename,'.');
-
-    if(!strcmp(filename,"-")) {
-       p = 0;
-       f = stdin;
-    } else if(p && (!strcmp(p,".gz") || !strcmp(p,".Z"))) {
-       p = alloca(20 + strlen(filename));
-       strcpy(p,"gunzip < ");
-       strcat(p,filename);
-       f = popen(p,"r");
-       if(!f) { warn("%s", p); return Exit_Garbage; }
-    } else {
-       p = 0;
-       f = fopen(filename,"r");
-    }
-    if(!f) {
-       warn("%s", filename);
-       return Exit_Garbage;
-    }
-
-    if(Verbose > 1)
-       fprintf(stderr,"Working on <%s>\n",filename);
-
-    Delete(FileName);
-    FileName = String(filename);
-
-    /* If we cannot seek, we're doomed, so copy to a tmp-file in that case */
-    if(!p &&  -1 == fseek(f,0,SEEK_END)) {
-       char *fn;
-       FILE *f2;
-       int fd;
-
-       if (asprintf(&fn, "%s/CTMclient.XXXXXXXXXX", TmpDir) == -1) {
-           fprintf(stderr, "Cannot allocate memory\n");
-           fclose(f);
-           return Exit_Broke;
-       }
-       if ((fd = mkstemp(fn)) == -1 || (f2 = fdopen(fd, "w+")) == NULL) {
-           warn("%s", fn);
-           free(fn);
-           if (fd != -1)
-               close(fd);
-           fclose(f);
-           return Exit_Broke;
-       }
-       unlink(fn);
-       if (Verbose > 0)
-           fprintf(stderr,"Writing tmp-file \"%s\"\n",fn);
-       free(fn);
-       while(EOF != (i=getc(f)))
-           if(EOF == putc(i,f2)) {
-               fclose(f2);
-               return Exit_Broke;
-           }
-       fclose(f);
-       f = f2;
-    }
-
-    if(!p)
-       rewind(f);
-
-    if((i=Pass1(f, applied)))
-       goto exit_and_close;
-
-    if(ListIt) {
-       i = Exit_Done;
-       goto exit_and_close;
-    }
-
-    if(!p) {
-        rewind(f);
-    } else {
-       pclose(f);
-       f = popen(p,"r");
-       if(!f) { warn("%s", p); return Exit_Broke; }
-    }
-
-    i=Pass2(f);
-
-    if(!p) {
-        rewind(f);
-    } else {
-       pclose(f);
-       f = popen(p,"r");
-       if(!f) { warn("%s", p); return Exit_Broke; }
-    }
-
-    if(i) {
-       if((!Force) || (i & ~Exit_Forcible))
-           goto exit_and_close;
-    }
-
-    if(CheckIt) {
-       if (Verbose > 0) 
-           fprintf(stderr,"All checks out ok.\n");
-       i = Exit_Done;
-       goto exit_and_close;
-    }
-   
-    /* backup files if requested */
-    if(BackupFile) {
-
-       i = PassB(f);
-
-       if(!p) {
-           rewind(f);
-       } else {
-           pclose(f);
-           f = popen(p,"r");
-           if(!f) { warn("%s", p); return Exit_Broke; }
-       }
-    }
-
-    i=Pass3(f);
-
-exit_and_close:
-    if(!p)
-        fclose(f);
-    else
-       pclose(f);
-
-    if(i)
-       return i;
-
-    if (Verbose > 0)
-       fprintf(stderr,"All done ok\n");
-
-    return Exit_Done;
-}
diff --git a/usr.sbin/ctm/ctm/ctm.h b/usr.sbin/ctm/ctm/ctm.h
deleted file mode 100644 (file)
index 88da4aa..0000000
+++ /dev/null
@@ -1,165 +0,0 @@
-/*
- * ----------------------------------------------------------------------------
- * "THE BEER-WARE LICENSE" (Revision 42):
- * <phk@login.dknet.dk> wrote this file.  As long as you retain this notice you
- * can do whatever you want with this stuff. If we meet some day, and you think
- * this stuff is worth it, you can buy me a beer in return.   Poul-Henning Kamp
- * ----------------------------------------------------------------------------
- *
- * $FreeBSD: src/usr.sbin/ctm/ctm/ctm.h,v 1.14.2.2 2001/07/05 02:30:52 kris Exp $
- * $DragonFly: src/usr.sbin/ctm/ctm/Attic/ctm.h,v 1.2 2003/06/17 04:29:53 dillon Exp $
- *
- */
-
-#include <ctype.h>
-#include <err.h>
-#include <errno.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <time.h>
-#include <unistd.h>
-#include <md5.h>
-#include <regex.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <sys/file.h>
-#include <sys/time.h>
-
-#define VERSION "2.0"
-#define MAXSIZE (1024*1024*40)
-
-#define SUBSUFF ".ctm"
-#define TMPSUFF ".ctmtmp"
-#define TARCMD  "tar -rf %s -T -"
-
-/* The fields... */
-#define CTM_F_MASK             0xff
-#define CTM_F_Name             0x01
-#define CTM_F_Uid              0x02
-#define CTM_F_Gid              0x03
-#define CTM_F_Mode             0x04
-#define CTM_F_MD5              0x05
-#define CTM_F_Count            0x06
-#define CTM_F_Bytes            0x07
-
-/* The qualifiers... */
-#define CTM_Q_MASK             0xff00
-#define CTM_Q_Name_File                0x0100
-#define CTM_Q_Name_Dir         0x0200
-#define CTM_Q_Name_New         0x0400
-#define CTM_Q_Name_Subst       0x0800
-#define CTM_Q_MD5_After                0x0100
-#define CTM_Q_MD5_Before       0x0200
-#define CTM_Q_MD5_Chunk                0x0400
-#define CTM_Q_MD5_Force                0x0800
-
-struct CTM_Syntax {
-    char       *Key;           /* CTM key for operation */
-    int                *List;          /* List of operations */
-    };
-
-extern struct CTM_Syntax Syntax[];
-
-struct CTM_Filter {
-    struct CTM_Filter  *Next;  /* next filter in the list */
-    int                Action; /* enable or disable */
-    regex_t            CompiledRegex;  /* compiled regex */
-};
-
-#define        CTM_FILTER_DISABLE      0
-#define        CTM_FILTER_ENABLE       1
-
-#define Malloc malloc
-#define Free free
-#define Delete(foo) if (!foo) ; else {Free(foo); foo = 0; }
-#define String(foo) strdup(foo)
-
-#ifndef EXTERN
-#  define EXTERN extern
-#endif
-EXTERN u_char *Version;
-EXTERN u_char *Name;
-EXTERN u_char *Nbr;
-EXTERN u_char *TimeStamp;
-EXTERN u_char *Prefix;
-EXTERN u_char *FileName;
-EXTERN u_char *TmpDir;
-EXTERN u_char *CatPtr;
-EXTERN u_char *Buffer;
-EXTERN u_char *BackupFile;
-EXTERN u_char *TarCmd;
-
-/*
- * Paranoid -- Just in case they should be after us...
- *  0 not at all.
- *  1 normal.
- *  2 somewhat.
- *  3 you bet!.
- *
- * Verbose -- What to tell mom...
- *  0 Nothing which wouldn't surprise.
- *  1 Normal.
- *  2 Show progress '.'.
- *  3 Show progress names, and actions.
- *  4 even more...
- *  and so on
- *
- * ExitCode -- our Epitaph
- *  0 Perfect, all input digested, no problems
- *  1 Bad input, no point in retrying.
- *  2 Pilot error, commandline problem &c
- *  4 Out of resources.
- *  8 Destination-tree not correct.
- * 16 Destination-tree not correct, can force.
- * 32 Internal problems.
- *
- */
-
-EXTERN int Paranoid;
-EXTERN int Verbose;
-EXTERN int Exit;
-EXTERN int Force;
-EXTERN int CheckIt;
-EXTERN int KeepIt;
-EXTERN int ListIt;
-EXTERN int SetTime;
-EXTERN struct timeval Times[2];
-EXTERN struct CTM_Filter       *FilterList;
-EXTERN struct CTM_Filter       *LastFilter;
-
-#define Exit_OK                0
-#define Exit_Garbage   1
-#define Exit_Pilot     2
-#define Exit_Broke     4
-#define Exit_NotOK     8
-#define Exit_Forcible  16
-#define Exit_Mess      32
-#define Exit_Done      64
-#define Exit_Version   128
-#define Exit_NoMatch   256
-
-void Fatal_(int ln, char *fn, char *kind);
-#define Fatal(foo) Fatal_(__LINE__,__FILE__,foo)
-#define Assert() Fatal_(__LINE__,__FILE__,"Assert failed.")
-#define WRONG {Assert(); return Exit_Mess;}
-
-u_char * Ffield(FILE *fd, MD5_CTX *ctx,u_char term);
-u_char * Fname(FILE *fd, MD5_CTX *ctx,u_char term,int qual, int verbose);
-
-int Fbytecnt(FILE *fd, MD5_CTX *ctx, u_char term);
-
-u_char * Fdata(FILE *fd, int u_chars, MD5_CTX *ctx);
-
-#define GETFIELD(p,q) if(!((p)=Ffield(fd,&ctx,(q)))) return BADREAD
-#define GETFIELDCOPY(p,q) if(!((p)=Ffield(fd,&ctx,(q)))) return BADREAD; else p=String(p)
-#define GETBYTECNT(p,q) if(0 >((p)= Fbytecnt(fd,&ctx,(q)))) return BADREAD
-#define GETDATA(p,q) if(!((p) = Fdata(fd,(q),&ctx))) return BADREAD
-#define GETNAMECOPY(p,q,r,v) if(!((p)=Fname(fd,&ctx,(q),(r),(v)))) return BADREAD; else p=String(p)
-
-int Pass1(FILE *fd, unsigned applied);
-int Pass2(FILE *fd);
-int PassB(FILE *fd);
-int Pass3(FILE *fd);
-
-int ctm_edit(u_char *script, int length, char *filein, char *fileout);
diff --git a/usr.sbin/ctm/ctm/ctm_ed.c b/usr.sbin/ctm/ctm/ctm_ed.c
deleted file mode 100644 (file)
index 6168fa4..0000000
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- * ----------------------------------------------------------------------------
- * "THE BEER-WARE LICENSE" (Revision 42):
- * <phk@login.dknet.dk> wrote this file.  As long as you retain this notice you
- * can do whatever you want with this stuff. If we meet some day, and you think
- * this stuff is worth it, you can buy me a beer in return.   Poul-Henning Kamp
- * ----------------------------------------------------------------------------
- *
- * $FreeBSD: src/usr.sbin/ctm/ctm/ctm_ed.c,v 1.10 1999/08/28 01:15:59 peter Exp $
- * $DragonFly: src/usr.sbin/ctm/ctm/Attic/ctm_ed.c,v 1.2 2003/06/17 04:29:53 dillon Exp $
- *
- */
-
-#include "ctm.h"
-
-int
-ctm_edit(u_char *script, int length, char *filein, char *fileout)
-{
-    u_char *ep, cmd;
-    int ln, ln2, iln, ret=0, c;
-    FILE *fi=0,*fo=0;
-
-    fi = fopen(filein,"r");
-    if(!fi) {
-       warn("%s", filein);
-       return 8;
-    }
-
-    fo = fopen(fileout,"w");
-    if(!fo) {
-       warn("%s", fileout);
-       fclose(fi);
-       return 4;
-    }
-    iln = 1;
-    for(ep=script;ep < script+length;) {
-       cmd = *ep++;
-       if(cmd != 'a' && cmd != 'd') { ret = 1; goto bye; }
-       ln = 0;
-       while(isdigit(*ep)) {
-           ln *= 10;
-           ln += (*ep++ - '0');
-       }
-       if(*ep++ != ' ') { ret = 1; goto bye; }
-       ln2 = 0;
-       while(isdigit(*ep)) {
-           ln2 *= 10;
-           ln2 += (*ep++ - '0');
-       }
-       if(*ep++ != '\n') { ret = 1; goto bye; }
-
-
-       if(cmd == 'd') {
-           while(iln < ln) {
-               c = getc(fi);
-               if(c == EOF) { ret = 1; goto bye; }
-               putc(c,fo);
-               if(c == '\n')
-                   iln++;
-           }
-           while(ln2) {
-               c = getc(fi);
-               if(c == EOF) { ret = 1; goto bye; }
-               if(c != '\n')
-                   continue;
-               ln2--;
-               iln++;
-           }
-           continue;
-       }
-       if(cmd == 'a') {
-           while(iln <= ln) {
-               c = getc(fi);
-               if(c == EOF) { ret = 1; goto bye; }
-               putc(c,fo);
-               if(c == '\n')
-                   iln++;
-           }
-           while(ln2) {
-               c = *ep++;
-               putc(c,fo);
-               if(c != '\n')
-                   continue;
-               ln2--;
-           }
-           continue;
-       }
-       ret = 1;
-       goto bye;
-    }
-    while(1) {
-       c = getc(fi);
-       if(c == EOF) break;
-       putc(c,fo);
-    }
-    ret = 0;
-bye:
-    if(fi) {
-       if(fclose(fi) != 0) {
-           warn("%s", filein);
-           ret = 1;
-       }
-    }
-    if(fo) {
-       if(fflush(fo) != 0) {
-           warn("%s", fileout);
-           ret = 1;
-       }
-       if(fclose(fo) != 0) {
-           warn("%s", fileout);
-           ret = 1;
-       }
-    }
-    return ret;
-}
diff --git a/usr.sbin/ctm/ctm/ctm_input.c b/usr.sbin/ctm/ctm/ctm_input.c
deleted file mode 100644 (file)
index 70018fe..0000000
+++ /dev/null
@@ -1,139 +0,0 @@
-/*
- * ----------------------------------------------------------------------------
- * "THE BEER-WARE LICENSE" (Revision 42):
- * <phk@login.dknet.dk> wrote this file.  As long as you retain this notice you
- * can do whatever you want with this stuff. If we meet some day, and you think
- * this stuff is worth it, you can buy me a beer in return.   Poul-Henning Kamp
- * ----------------------------------------------------------------------------
- *
- * $FreeBSD: src/usr.sbin/ctm/ctm/ctm_input.c,v 1.8 1999/08/28 01:15:59 peter Exp $
- * $DragonFly: src/usr.sbin/ctm/ctm/Attic/ctm_input.c,v 1.2 2003/06/17 04:29:53 dillon Exp $
- *
- */
-
-#include "ctm.h"
-
-/*---------------------------------------------------------------------------*/
-void
-Fatal_(int ln, char *fn, char *kind)
-{
-    if(Verbose > 2)
-       fprintf(stderr,"Fatal error. (%s:%d)\n",fn,ln);
-    fprintf(stderr,"%s Fatal error: %s\n",FileName, kind);
-}
-#define Fatal(foo) Fatal_(__LINE__,__FILE__,foo)
-#define Assert() Fatal_(__LINE__,__FILE__,"Assert failed.")
-
-/*---------------------------------------------------------------------------*/
-/* get next field, check that the terminating whitespace is what we expect */
-u_char *
-Ffield(FILE *fd, MD5_CTX *ctx,u_char term)
-{
-    static u_char buf[BUFSIZ];
-    int i,l;
-
-    for(l=0;;) {
-       if((i=getc(fd)) == EOF) {
-           Fatal("Truncated patch.");
-           return 0;
-       }
-       buf[l++] = i;
-       if(isspace(i))
-           break;
-       if(l >= sizeof buf) {
-           Fatal("Corrupt patch.");
-           printf("Token is too long.\n");
-           return 0;
-       }
-    }
-    buf[l] = '\0';
-    MD5Update(ctx,buf,l);
-    if(buf[l-1] != term) {
-        Fatal("Corrupt patch.");
-       fprintf(stderr,"Expected \"%s\" but didn't find it {%02x}.\n",
-           term == '\n' ? "\\n" : " ",buf[l-1]);
-       if(Verbose > 4)
-           fprintf(stderr,"{%s}\n",buf);
-       return 0;
-    }
-    buf[--l] = '\0';
-    if(Verbose > 4)
-        fprintf(stderr,"<%s>\n",buf);
-    return buf;
-}
-
-int
-Fbytecnt(FILE *fd, MD5_CTX *ctx, u_char term)
-{
-    u_char *p,*q;
-    int u_chars=0;
-
-    p = Ffield(fd,ctx,term);
-    if(!p) return -1;
-    for(q=p;*q;q++) {
-       if(!isdigit(*q)) {
-           Fatal("Bytecount contains non-digit.");
-           return -1;
-       }
-       u_chars *= 10;
-       u_chars += (*q - '0');
-    }
-    if(u_chars > MAXSIZE) {
-       Fatal("Bytecount too large.");
-       return -1;
-    }
-    return u_chars;
-}
-
-u_char *
-Fdata(FILE *fd, int u_chars, MD5_CTX *ctx)
-{
-    u_char *p = Malloc(u_chars+1);
-
-    if(u_chars+1 != fread(p,1,u_chars+1,fd)) {
-       Fatal("Truncated patch.");
-       return 0;
-    }
-    MD5Update(ctx,p,u_chars+1);
-    if(p[u_chars] != '\n') {
-       if(Verbose > 3)
-           printf("FileData wasn't followed by a newline.\n");
-        Fatal("Corrupt patch.");
-       return 0;
-    }
-    p[u_chars] = '\0';
-    return p;
-}
-
-/*---------------------------------------------------------------------------*/
-/* get the filename in the next field, prepend BaseDir and give back the result
-   strings. The sustitute filename is return (the one with the suffix SUBSUFF) 
-   if it exists and the qualifier contains CTM_Q_Name_Subst
-   NOTA: Buffer is already initialize with BaseDir, CatPtr is the insertion
-   point on this buffer + the length test in Ffield() is enough for Fname() */
-
-u_char *
-Fname(FILE *fd, MD5_CTX *ctx,u_char term,int qual, int verbose)
-{
-    u_char * p;
-    struct stat st;
-
-    if ((p = Ffield(fd,ctx,term)) == NULL) return(NULL);
-
-    strcpy(CatPtr, p);
-
-    if (!(qual & CTM_Q_Name_Subst)) return(Buffer);
-
-    p = Buffer + strlen(Buffer);
-
-    strcat(Buffer, SUBSUFF);
-
-    if ( -1 == stat(Buffer, &st) ) {
-       *p = '\0';
-    } else {
-       if(verbose > 2)
-           fprintf(stderr,"Using %s as substitute file\n", Buffer);
-    }
-
-    return (Buffer);
-}
diff --git a/usr.sbin/ctm/ctm/ctm_pass1.c b/usr.sbin/ctm/ctm/ctm_pass1.c
deleted file mode 100644 (file)
index 0bfb078..0000000
+++ /dev/null
@@ -1,251 +0,0 @@
-/*
- * ----------------------------------------------------------------------------
- * "THE BEER-WARE LICENSE" (Revision 42):
- * <phk@login.dknet.dk> wrote this file.  As long as you retain this notice you
- * can do whatever you want with this stuff. If we meet some day, and you think
- * this stuff is worth it, you can buy me a beer in return.   Poul-Henning Kamp
- * ----------------------------------------------------------------------------
- *
- * $FreeBSD: src/usr.sbin/ctm/ctm/ctm_pass1.c,v 1.16 1999/08/28 01:15:59 peter Exp $
- * $DragonFly: src/usr.sbin/ctm/ctm/Attic/ctm_pass1.c,v 1.2 2003/06/17 04:29:53 dillon Exp $
- *
- */
-
-#include "ctm.h"
-#define BADREAD 1
-
-/*---------------------------------------------------------------------------*/
-/* Pass1 -- Validate the incoming CTM-file.
- */
-
-int
-Pass1(FILE *fd, unsigned applied)
-{
-    u_char *p,*q;
-    MD5_CTX ctx;
-    int i,j,sep,cnt;
-    u_char *md5=0,*name=0,*trash=0;
-    struct CTM_Syntax *sp;
-    int slashwarn=0, match=0, total_matches=0;
-    unsigned current;
-    char md5_1[33];
-
-    if(Verbose>3)
-       printf("Pass1 -- Checking integrity of incoming CTM-patch\n");
-    MD5Init (&ctx);
-
-    GETFIELD(p,' ');                           /* CTM_BEGIN */
-    if(strcmp(p,"CTM_BEGIN")) {
-       Fatal("Probably not a CTM-patch at all.");
-       if(Verbose>3)
-           fprintf(stderr,"Expected \"CTM_BEGIN\" got \"%s\".\n",p);
-       return 1;
-    }
-
-    GETFIELDCOPY(Version,' ');                         /* <Version> */
-    if(strcmp(Version,VERSION)) {
-       Fatal("CTM-patch is wrong version.");
-       if(Verbose>3)
-           fprintf(stderr,"Expected \"%s\" got \"%s\".\n",VERSION,p);
-       return 1;
-    }
-
-    GETFIELDCOPY(Name,' ');                            /* <Name> */
-    GETFIELDCOPY(Nbr,' ');                             /* <Nbr> */
-    GETFIELDCOPY(TimeStamp,' ');                       /* <TimeStamp> */
-    GETFIELDCOPY(Prefix,'\n');                         /* <Prefix> */
-
-    sscanf(Nbr, "%u", &current);
-    if (FilterList || ListIt)
-       current = 0;    /* ignore if -l or if filters are present */
-    if(current && current <= applied) {
-       if(Verbose > 0)
-           fprintf(stderr,"Delta number %u is already applied; ignoring.\n",
-                   current);
-       return Exit_Version;
-    }
-
-    for(;;) {
-       Delete(md5);
-       Delete(name);
-       Delete(trash);
-       cnt = -1;
-       /* if a filter list is defined we assume that all pathnames require
-          an action opposite to that requested by the first filter in the
-          list.
-          If no filter is defined, all pathnames are assumed to match. */
-       match = (FilterList ? !(FilterList->Action) : CTM_FILTER_ENABLE);
-
-       GETFIELD(p,' ');                        /* CTM_something */
-
-       if (p[0] != 'C' || p[1] != 'T' || p[2] != 'M') {
-           Fatal("Expected CTM keyword.");
-           fprintf(stderr,"Got [%s]\n",p);
-           return 1;
-       }
-
-       if(!strcmp(p+3,"_END"))
-           break;
-
-       for(sp=Syntax;sp->Key;sp++)
-           if(!strcmp(p+3,sp->Key))
-               goto found;
-       Fatal("Expected CTM keyword.");
-       fprintf(stderr,"Got [%s]\n",p);
-       return 1;
-    found:
-       if(Verbose > 5)
-           fprintf(stderr,"%s ",sp->Key);
-       for(i=0;(j = sp->List[i]);i++) {
-           if (sp->List[i+1] && (sp->List[i+1] & CTM_F_MASK) != CTM_F_Bytes)
-               sep = ' ';
-           else
-               sep = '\n';
-
-           if(Verbose > 5)
-               fprintf(stderr," %x(%d)",sp->List[i],sep);
-
-           switch (j & CTM_F_MASK) {
-               case CTM_F_Name: /* XXX check for garbage and .. */
-                   GETFIELDCOPY(name,sep);
-                   j = strlen(name);
-                   if(name[j-1] == '/' && !slashwarn)  {
-                       fprintf(stderr,"Warning: contains trailing slash\n");
-                       slashwarn++;
-                   }
-                   if (name[0] == '/') {
-                       Fatal("Absolute paths are illegal.");
-                       return Exit_Mess;
-                   }
-                   q = name;
-                   for (;;) {
-                       if (q[0] == '.' && q[1] == '.')
-                           if (q[2] == '/' || q[2] == '\0') {
-                               Fatal("Paths containing '..' are illegal.");
-                               return Exit_Mess;
-                           }
-                       if ((q = strchr(q, '/')) == NULL)
-                           break;
-                       q++;
-                   }
-
-                   /* if we have been asked to `keep' files then skip
-                      removes; i.e. we don't match these entries at
-                      all. */
-                   if (KeepIt &&
-                       (!strcmp(sp->Key,"DR") || !strcmp(sp->Key,"FR"))) {
-                       match = CTM_FILTER_DISABLE;
-                       break;
-                   }
-
-                   /* If filter expression have been defined, match the
-                      path name against the expression list.  */
-                   
-                   if (FilterList) {
-                       struct CTM_Filter *filter;
-
-                       for (filter = FilterList; filter; 
-                            filter = filter->Next) {
-                               if (0 == regexec(&filter->CompiledRegex, name,
-                                       0, 0, 0))
-                                       /* if the name matches, adopt the 
-                                          action */
-                                       match = filter->Action;
-                       }
-                   }
-
-                   /* Add up the total number of matches */
-                   total_matches += match;
-                   break;
-               case CTM_F_Uid:
-                   GETFIELD(p,sep);
-                   while(*p) {
-                       if(!isdigit(*p)) {
-                           Fatal("Non-digit in uid.");
-                           return 32;
-                       }
-                       p++;
-                   }
-                   break;
-               case CTM_F_Gid:
-                   GETFIELD(p,sep);
-                   while(*p) {
-                       if(!isdigit(*p)) {
-                           Fatal("Non-digit in gid.");
-                           return 32;
-                       }
-                       p++;
-                   }
-                   break;
-               case CTM_F_Mode:
-                   GETFIELD(p,sep);
-                   while(*p) {
-                       if(!isdigit(*p)) {
-                           Fatal("Non-digit in mode.");
-                           return 32;
-                       }
-                       p++;
-                   }
-                   break;
-               case CTM_F_MD5:
-                   if(j & CTM_Q_MD5_Chunk) {
-                       GETFIELDCOPY(md5,sep);  /* XXX check for garbage */
-                   } else if(j & CTM_Q_MD5_Before) {
-                       GETFIELD(p,sep);  /* XXX check for garbage */
-                   } else if(j & CTM_Q_MD5_After) {
-                       GETFIELD(p,sep);  /* XXX check for garbage */
-                   } else {
-                       fprintf(stderr,"List = 0x%x\n",j);
-                       Fatal("Unqualified MD5.");
-                       return 32;
-                   }
-                   break;
-               case CTM_F_Count:
-                   GETBYTECNT(cnt,sep);
-                   break;
-               case CTM_F_Bytes:
-                   if(cnt < 0) WRONG
-                   GETDATA(trash,cnt);
-                   p = MD5Data(trash,cnt,md5_1);
-                   if(md5 && strcmp(md5,p)) {
-                       Fatal("Internal MD5 failed.");
-                       return Exit_Garbage;
-               default:
-                       fprintf(stderr,"List = 0x%x\n",j);
-                       Fatal("List had garbage.");
-                       return Exit_Garbage;
-                   }
-           }
-       }
-       if(Verbose > 5)
-           putc('\n',stderr);
-       if(ListIt && match)
-           printf("> %s %s\n", sp->Key, name);
-    }
-
-    Delete(md5);
-    Delete(name);
-    Delete(trash);
-
-    q = MD5End (&ctx,md5_1);
-    if(Verbose > 2)
-       printf("Expecting Global MD5 <%s>\n",q);
-    GETFIELD(p,'\n');                  /* <MD5> */
-    if(Verbose > 2)
-       printf("Reference Global MD5 <%s>\n",p);
-    if(strcmp(q,p)) {
-       Fatal("MD5 sum doesn't match.");
-       fprintf(stderr,"\tI have:<%s>\n",q);
-       fprintf(stderr,"\tShould have been:<%s>\n",p);
-       return Exit_Garbage;
-    }
-    if (-1 != getc(fd)) {
-       if(!Force) {
-           Fatal("Trailing junk in CTM-file.  Can Force with -F.");
-           return 16;
-       }
-    }
-    if ((Verbose > 1) && (0 == total_matches))
-       printf("No matches in \"%s\"\n", FileName);
-    return (total_matches ? Exit_OK : Exit_NoMatch);
-}
diff --git a/usr.sbin/ctm/ctm/ctm_pass2.c b/usr.sbin/ctm/ctm/ctm_pass2.c
deleted file mode 100644 (file)
index 76da1f9..0000000
+++ /dev/null
@@ -1,302 +0,0 @@
-/*
- * ----------------------------------------------------------------------------
- * "THE BEER-WARE LICENSE" (Revision 42):
- * <phk@login.dknet.dk> wrote this file.  As long as you retain this notice you
- * can do whatever you want with this stuff. If we meet some day, and you think
- * this stuff is worth it, you can buy me a beer in return.   Poul-Henning Kamp
- * ----------------------------------------------------------------------------
- *
- * $FreeBSD: src/usr.sbin/ctm/ctm/ctm_pass2.c,v 1.18.2.1 2001/07/05 07:46:57 kris Exp $
- * $DragonFly: src/usr.sbin/ctm/ctm/Attic/ctm_pass2.c,v 1.2 2003/06/17 04:29:53 dillon Exp $
- *
- */
-
-#include "ctm.h"
-#define BADREAD 32
-
-/*---------------------------------------------------------------------------*/
-/* Pass2 -- Validate the incoming CTM-file.
- */
-
-int
-Pass2(FILE *fd)
-{
-    u_char *p,*q,*md5=0;
-    MD5_CTX ctx;
-    int i,j,sep,cnt,fdesc;
-    u_char *trash=0,*name=0;
-    struct CTM_Syntax *sp;
-    struct stat st;
-    int ret = 0;
-    int match = 0;
-    char md5_1[33];
-    struct CTM_Filter *filter;
-    FILE *ed = NULL;
-    static char *template = NULL;
-
-    if(Verbose>3)
-       printf("Pass2 -- Checking if CTM-patch will apply\n");
-    MD5Init (&ctx);
-
-    GETFIELD(p,' '); if(strcmp("CTM_BEGIN",p)) WRONG
-    GETFIELD(p,' '); if(strcmp(Version,p)) WRONG
-    GETFIELD(p,' '); if(strcmp(Name,p)) WRONG
-    /* XXX Lookup name in /etc/ctm,conf, read stuff */
-    GETFIELD(p,' '); if(strcmp(Nbr,p)) WRONG
-    /* XXX Verify that this is the next patch to apply */
-    GETFIELD(p,' '); if(strcmp(TimeStamp,p)) WRONG
-    GETFIELD(p,'\n'); if(strcmp(Prefix,p)) WRONG
-    /* XXX drop or use ? */
-
-    for(;;) {
-       Delete(trash);
-       Delete(name);
-       Delete(md5);
-       cnt = -1;
-
-       /* if a filter list was specified, check file name against
-          the filters specified 
-          if no filter was given operate on all files. */
-       match = (FilterList ? 
-                   !(FilterList->Action) : CTM_FILTER_ENABLE);
-
-       GETFIELD(p,' ');
-
-       if (p[0] != 'C' || p[1] != 'T' || p[2] != 'M') WRONG
-
-       if(!strcmp(p+3,"_END"))
-           break;
-
-       for(sp=Syntax;sp->Key;sp++)
-           if(!strcmp(p+3,sp->Key))
-               goto found;
-       WRONG
-    found:
-       for(i=0;(j = sp->List[i]);i++) {
-           if (sp->List[i+1] && (sp->List[i+1] & CTM_F_MASK) != CTM_F_Bytes)
-               sep = ' ';
-           else
-               sep = '\n';
-
-           switch (j & CTM_F_MASK) {
-               case CTM_F_Name:
-                   GETNAMECOPY(name,sep,j,0);
-                   /* If `keep' was specified, we won't remove any files,
-                      so don't check if the file exists */
-                   if (KeepIt &&
-                       (!strcmp(sp->Key,"FR") || !strcmp(sp->Key,"DR"))) {
-                       match = CTM_FILTER_DISABLE;
-                       break;
-                   }
-
-                   for (filter = FilterList; filter; filter = filter->Next)                            if (0 == regexec(&filter->CompiledRegex, name,
-                                   0, 0, 0)) {
-                                   match = filter->Action;
-                           }
-
-                   if (CTM_FILTER_DISABLE == match)
-                           break;      /* should ignore this file */
-
-                   /* XXX Check DR DM rec's for parent-dir */
-                   if(j & CTM_Q_Name_New) {
-                       /* XXX Check DR FR rec's for item */
-                       if(-1 != stat(name,&st)) {
-                           fprintf(stderr,"  %s: %s exists.\n",
-                               sp->Key,name);
-                           ret |= Exit_Forcible;
-                       }
-                       break;
-                   }
-                   if(-1 == stat(name,&st)) {
-                       fprintf(stderr,"  %s: %s doesn't exist.\n",
-                           sp->Key,name);
-                       if (sp->Key[1] == 'R')
-                           ret |= Exit_Forcible;
-                       else
-                           ret |= Exit_NotOK;
-                       break;
-                   }
-                   if (SetTime && getuid() && (getuid() != st.st_uid)) {
-                           fprintf(stderr,
-                               "  %s: %s not mine, cannot set time.\n",
-                               sp->Key,name);
-                           ret |= Exit_NotOK;
-                   }
-                   if (j & CTM_Q_Name_Dir) {
-                       if((st.st_mode & S_IFMT) != S_IFDIR) {
-                           fprintf(stderr,
-                               "  %s: %s exist, but isn't dir.\n",
-                               sp->Key,name);
-                           ret |= Exit_NotOK;
-                       }
-                       break;
-                   }
-                   if (j & CTM_Q_Name_File) {
-                       if((st.st_mode & S_IFMT) != S_IFREG) {
-                           fprintf(stderr,
-                               "  %s: %s exist, but isn't file.\n",
-                               sp->Key,name);
-                           ret |= Exit_NotOK;
-                       }
-                       break;
-                   }
-                   break;
-               case CTM_F_Uid:
-               case CTM_F_Gid:
-               case CTM_F_Mode:
-                   GETFIELD(p,sep);
-                   break;
-               case CTM_F_MD5:
-                   if(!name) WRONG
-                   if(j & CTM_Q_MD5_Before) {
-                       char *tmp;
-                       GETFIELD(p,sep);
-                       if(match && (st.st_mode & S_IFMT) == S_IFREG &&
-                         (tmp = MD5File(name,md5_1)) != NULL &&
-                         strcmp(tmp,p)) {
-                           fprintf(stderr,"  %s: %s md5 mismatch.\n",
-                               sp->Key,name);
-                           GETFIELDCOPY(md5,sep);
-                           if(md5 != NULL && strcmp(tmp,md5) == 0) {
-                               fprintf(stderr,"  %s: %s already applied.\n",
-                                       sp->Key,name);
-                               match = CTM_FILTER_DISABLE;
-                           } else if(j & CTM_Q_MD5_Force) {
-                               if(Force)
-                                   fprintf(stderr,"  Can and will force.\n");
-                               else
-                                   fprintf(stderr,"  Could have forced.\n");
-                               ret |= Exit_Forcible;
-                           } else {
-                               ret |= Exit_NotOK;
-                           }
-                       }
-                       break;
-                   } else if(j & CTM_Q_MD5_After) {
-                       if(md5 == NULL) {
-                           GETFIELDCOPY(md5,sep);
-                       }
-                       break;
-                   }
-                   /* Unqualified MD5 */
-                   WRONG
-                   break;
-               case CTM_F_Count:
-                   GETBYTECNT(cnt,sep);
-                   break;
-               case CTM_F_Bytes:
-                   if(cnt < 0) WRONG
-                   GETDATA(trash,cnt);
-                   if (!match)
-                       break;
-                   if (!template) {
-                       if (asprintf(&template, "%s/CTMclientXXXXXX",
-                               TmpDir) == -1) {
-                           fprintf(stderr, "  %s: malloc failed.\n",
-                               sp->Key);
-                           ret |= Exit_Mess;
-                           return ret;
-                       }
-                   }
-                   if(!strcmp(sp->Key,"FN")) {
-                       if ((p = strdup(template)) == NULL) {
-                           fprintf(stderr, "  %s: malloc failed.\n",
-                               sp->Key);
-                           ret |= Exit_Mess;
-                           return ret;
-                       }
-                       if ((fdesc = mkstemp(p)) == -1) {
-                           fprintf(stderr, "  %s: mkstemp failed.\n",
-                               sp->Key);
-                           ret |= Exit_Mess;
-                           Free(p);
-                           return ret;
-                       }
-                       if (close(fdesc) == -1) {
-                           fprintf(stderr, "  %s: close failed.\n",
-                               sp->Key);
-                           ret |= Exit_Mess;
-                           unlink(p);
-                           Free(p);
-                           return ret;
-                       }
-                       j = ctm_edit(trash,cnt,name,p);
-                       if(j) {
-                           fprintf(stderr,"  %s: %s edit returned %d.\n",
-                               sp->Key,name,j);
-                           ret |= j;
-                           unlink(p);
-                           Free(p);
-                           return ret;
-                       } else if(strcmp(md5,MD5File(p,md5_1))) {
-                           fprintf(stderr,"  %s: %s edit fails.\n",
-                               sp->Key,name);
-                           ret |= Exit_Mess;
-                           unlink(p);
-                           Free(p);
-                           return ret;
-                       }
-                       unlink(p);
-                       Free(p);
-                   } else if (!strcmp(sp->Key,"FE")) {
-                       if ((p = strdup(template)) == NULL) {
-                           fprintf(stderr, "  %s: malloc failed.\n",
-                               sp->Key);
-                           ret |= Exit_Mess;
-                           return ret;
-                       }
-                       if ((fdesc = mkstemp(p)) == -1) {
-                           fprintf(stderr, "  %s: mkstemp failed.\n",
-                               sp->Key);
-                           ret |= Exit_Mess;
-                           Free(p);
-                           return ret;
-                       }
-                       if (close(fdesc) == -1) {
-                           fprintf(stderr, "  %s: close failed.\n",
-                               sp->Key);
-                           ret |= Exit_Mess;
-                           unlink(p);
-                           Free(p);
-                           return ret;
-                       }
-                       ed = popen("ed","w");
-                       if (!ed) {
-                           WRONG
-                       }
-                       fprintf(ed,"e %s\n", name);
-                       if (cnt != fwrite(trash,1,cnt,ed)) {
-                           warn("%s", name);
-                           pclose(ed);
-                           WRONG
-                       }
-                       fprintf(ed,"w %s\n",p);
-                       if (pclose(ed)) {
-                           warn("%s", p);
-                           WRONG
-                       }
-                       if(strcmp(md5,MD5File(p,md5_1))) {
-                           fprintf(stderr,"%s %s MD5 didn't come out right\n",
-                               sp->Key, name);
-                           WRONG
-                       }
-                       unlink(p);
-                       Free(p);
-                   }
-
-                   break;
-               default: WRONG
-           }
-        }
-    }
-
-    Delete(trash);
-    Delete(name);
-    Delete(md5);
-
-    q = MD5End (&ctx,md5_1);
-    GETFIELD(p,'\n');                  /* <MD5> */
-    if(strcmp(q,p)) WRONG
-    if (-1 != getc(fd)) WRONG
-    return ret;
-}
diff --git a/usr.sbin/ctm/ctm/ctm_pass3.c b/usr.sbin/ctm/ctm/ctm_pass3.c
deleted file mode 100644 (file)
index 0e813e8..0000000
+++ /dev/null
@@ -1,296 +0,0 @@
-/*
- * ----------------------------------------------------------------------------
- * "THE BEER-WARE LICENSE" (Revision 42):
- * <phk@login.dknet.dk> wrote this file.  As long as you retain this notice you
- * can do whatever you want with this stuff. If we meet some day, and you think
- * this stuff is worth it, you can buy me a beer in return.   Poul-Henning Kamp
- * ----------------------------------------------------------------------------
- *
- * $FreeBSD: src/usr.sbin/ctm/ctm/ctm_pass3.c,v 1.19 1999/08/28 01:16:00 peter Exp $
- * $DragonFly: src/usr.sbin/ctm/ctm/Attic/ctm_pass3.c,v 1.2 2003/06/17 04:29:53 dillon Exp $
- *
- */
-
-#include "ctm.h"
-#define BADREAD 32
-
-/*---------------------------------------------------------------------------*/
-/* Pass3 -- Validate the incoming CTM-file.
- */
-
-int
-settime(const char *name, const struct timeval *times)
-{
-       if (SetTime)
-           if (utimes(name,times)) {
-               warn("utimes(): %s", name);
-               return -1;
-           }
-       return 0;
-}
-
-int
-Pass3(FILE *fd)
-{
-    u_char *p,*q,buf[BUFSIZ];
-    MD5_CTX ctx;
-    int i,j,sep,cnt;
-    u_char *md5=0,*md5before=0,*trash=0,*name=0,*uid=0,*gid=0,*mode=0;
-    struct CTM_Syntax *sp;
-    FILE *ed=0;
-    struct stat st;
-    char md5_1[33];
-    int match=0;
-    struct timeval times[2];
-    struct CTM_Filter *filter = NULL;
-    if(Verbose>3)
-       printf("Pass3 -- Applying the CTM-patch\n");
-    MD5Init (&ctx);
-
-    GETFIELD(p,' '); if(strcmp("CTM_BEGIN",p)) WRONG
-    GETFIELD(p,' '); if(strcmp(Version,p)) WRONG
-    GETFIELD(p,' '); if(strcmp(Name,p)) WRONG
-    GETFIELD(p,' '); if(strcmp(Nbr,p)) WRONG
-    GETFIELD(p,' '); if(strcmp(TimeStamp,p)) WRONG
-    GETFIELD(p,'\n'); if(strcmp(Prefix,p)) WRONG
-
-    /*
-     * This would be cleaner if mktime() worked in UTC rather than
-     * local time.
-     */
-    if (SetTime) {
-        struct tm tm;
-        char *tz;
-        char buf[5];
-        int i;
-
-#define SUBSTR(off,len)        strncpy(buf, &TimeStamp[off], len), buf[len] = '\0'
-#define WRONGDATE { fprintf(stderr, " %s failed date validation\n",\
-       TimeStamp); WRONG}
-
-        if (strlen(TimeStamp) != 15 || TimeStamp[14] != 'Z') WRONGDATE
-       for (i = 0; i < 14; i++)
-           if (!isdigit(TimeStamp[i])) WRONGDATE
-
-        tz = getenv("TZ");
-       if (setenv("TZ", "UTC", 1) < 0) WRONG
-       tzset();
-
-       tm.tm_isdst = tm.tm_gmtoff = 0;
-
-        SUBSTR(0, 4);
-        tm.tm_year = atoi(buf) - 1900;
-        SUBSTR(4, 2);
-        tm.tm_mon = atoi(buf) - 1;
-        if (tm.tm_mon < 0 || tm.tm_mon > 11) WRONGDATE
-        SUBSTR(6, 2);
-        tm.tm_mday = atoi(buf);
-        if (tm.tm_mday < 1 || tm.tm_mday > 31) WRONG;
-        SUBSTR(8, 2);
-        tm.tm_hour = atoi(buf);
-        if (tm.tm_hour > 24) WRONGDATE
-        SUBSTR(10, 2);
-        tm.tm_min = atoi(buf);
-        if (tm.tm_min > 59) WRONGDATE
-        SUBSTR(12, 2);
-        tm.tm_sec = atoi(buf);
-        if (tm.tm_min > 62) WRONGDATE  /* allow leap seconds */
-    
-        times[0].tv_sec = times[1].tv_sec = mktime(&tm);
-        if (times[0].tv_sec == -1) WRONGDATE
-       times[0].tv_usec = times[1].tv_usec = 0;
-
-        if (tz) {
-            if (setenv("TZ", tz, 1) < 0) WRONGDATE
-         } else {
-            unsetenv("TZ");
-        }
-    }
-
-    for(;;) {
-       Delete(md5);
-       Delete(uid);
-       Delete(gid);
-       Delete(mode);
-       Delete(md5before);
-       Delete(trash);
-       Delete(name);
-       cnt = -1;
-
-       GETFIELD(p,' ');
-
-       if (p[0] != 'C' || p[1] != 'T' || p[2] != 'M') WRONG
-
-       if(!strcmp(p+3,"_END"))
-           break;
-
-       for(sp=Syntax;sp->Key;sp++)
-           if(!strcmp(p+3,sp->Key))
-               goto found;
-       WRONG
-    found:
-       for(i=0;(j = sp->List[i]);i++) {
-           if (sp->List[i+1] && (sp->List[i+1] & CTM_F_MASK) != CTM_F_Bytes)
-               sep = ' ';
-           else
-               sep = '\n';
-
-           switch (j & CTM_F_MASK) {
-               case CTM_F_Name: GETNAMECOPY(name,sep,j, Verbose); break;
-               case CTM_F_Uid:  GETFIELDCOPY(uid,sep); break;
-               case CTM_F_Gid:  GETFIELDCOPY(gid,sep); break;
-               case CTM_F_Mode: GETFIELDCOPY(mode,sep); break;
-               case CTM_F_MD5:
-                   if(j & CTM_Q_MD5_Before)
-                       GETFIELDCOPY(md5before,sep);
-                   else
-                       GETFIELDCOPY(md5,sep);
-                   break;
-               case CTM_F_Count: GETBYTECNT(cnt,sep); break;
-               case CTM_F_Bytes: GETDATA(trash,cnt); break;
-               default: WRONG
-               }
-           }
-       /* XXX This should go away.  Disallow trailing '/' */
-       j = strlen(name)-1;
-       if(name[j] == '/') name[j] = '\0';
-
-       /*
-        * If a filter list is specified, run thru the filter list and
-        * match `name' against filters.  If the name matches, set the
-        * required action to that specified in the filter.
-        * The default action if no filterlist is given is to match
-        * everything.  
-        */
-
-       match = (FilterList ? !(FilterList->Action) : CTM_FILTER_ENABLE);
-       for (filter = FilterList; filter; filter = filter->Next) {
-           if (0 == regexec(&filter->CompiledRegex, name,
-               0, 0, 0)) {
-               match = filter->Action;
-           }
-       }
-
-       if (CTM_FILTER_DISABLE == match) /* skip file if disabled */
-               continue;
-
-       if (Verbose > 0)
-               fprintf(stderr,"> %s %s\n",sp->Key,name);
-       if(!strcmp(sp->Key,"FM") || !strcmp(sp->Key, "FS")) {
-           i = open(name,O_WRONLY|O_CREAT|O_TRUNC,0666);
-           if(i < 0) {
-               warn("%s", name);
-               WRONG
-           }
-           if(cnt != write(i,trash,cnt)) {
-               warn("%s", name);
-               WRONG
-           }
-           close(i);
-           if(strcmp(md5,MD5File(name,md5_1))) {
-               fprintf(stderr,"  %s %s MD5 didn't come out right\n",
-                  sp->Key,name);
-               WRONG
-           }
-           if (settime(name,times)) WRONG
-           continue;
-       }
-       if(!strcmp(sp->Key,"FE")) {
-           ed = popen("ed","w");
-           if(!ed) {
-               WRONG
-           }
-           fprintf(ed,"e %s\n",name);
-           if(cnt != fwrite(trash,1,cnt,ed)) {
-               warn("%s", name);
-               pclose(ed);
-               WRONG
-           }
-           fprintf(ed,"w %s\n",name);
-           if(pclose(ed)) {
-               warn("ed");
-               WRONG
-           }
-           if(strcmp(md5,MD5File(name,md5_1))) {
-               fprintf(stderr,"  %s %s MD5 didn't come out right\n",
-                  sp->Key,name);
-               WRONG
-           }
-           if (settime(name,times)) WRONG
-           continue;
-       }
-       if(!strcmp(sp->Key,"FN")) {
-           strcpy(buf,name);
-           strcat(buf,TMPSUFF);
-           i = ctm_edit(trash,cnt,name,buf);
-           if(i) {
-               fprintf(stderr," %s %s Edit failed with code %d.\n",
-                   sp->Key,name,i);
-               WRONG
-           }
-           if(strcmp(md5,MD5File(buf,md5_1))) {
-               fprintf(stderr," %s %s Edit failed MD5 check.\n",
-                   sp->Key,name);
-               WRONG
-           }
-           if (rename(buf,name) == -1)
-               WRONG
-           if (settime(name,times)) WRONG
-           continue;
-       }
-       if(!strcmp(sp->Key,"DM")) {
-           if(0 > mkdir(name,0777)) {
-               sprintf(buf,"mkdir -p %s",name);
-               system(buf);
-           }
-           if(0 > stat(name,&st) || ((st.st_mode & S_IFMT) != S_IFDIR)) {
-               fprintf(stderr,"<%s> mkdir failed\n",name);
-               WRONG
-           }
-           if (settime(name,times)) WRONG
-           continue;
-       }
-       if(!strcmp(sp->Key,"FR")) {
-           if (KeepIt) { 
-               if (Verbose > 1) 
-                       printf("<%s> not removed\n", name);
-           }
-           else if (0 != unlink(name)) {
-               fprintf(stderr,"<%s> unlink failed\n",name);
-               if (!Force)
-                   WRONG
-           }
-           continue;
-       }
-       if(!strcmp(sp->Key,"DR")) {
-           /*
-            * We cannot use rmdir() because we do not get the directories
-            * in '-depth' order (cvs-cur.0018.gz for examples)
-            */
-           if (KeepIt) {
-               if (Verbose > 1) {
-                       printf("<%s> not removed\n", name);
-               }
-           } else {
-                   sprintf(buf,"rm -rf %s",name);
-                   system(buf);
-           }
-           continue;
-       }
-       WRONG
-    }
-
-    Delete(md5);
-    Delete(uid);
-    Delete(gid);
-    Delete(mode);
-    Delete(md5before);
-    Delete(trash);
-    Delete(name);
-
-    q = MD5End (&ctx,md5_1);
-    GETFIELD(p,'\n');
-    if(strcmp(q,p)) WRONG
-    if (-1 != getc(fd)) WRONG
-    return 0;
-}
diff --git a/usr.sbin/ctm/ctm/ctm_passb.c b/usr.sbin/ctm/ctm/ctm_passb.c
deleted file mode 100644 (file)
index 7e0bf9a..0000000
+++ /dev/null
@@ -1,143 +0,0 @@
-/*
- * ----------------------------------------------------------------------------
- * "THE BEER-WARE LICENSE" (Revision 42):
- * <koshy@india.hp.com> wrote this file.  As long as you retain this notice you
- * can do whatever you want with this stuff. If we meet some day, and you think
- * this stuff is worth it, you can buy me a beer in return.   Joseph Koshy
- * ----------------------------------------------------------------------------
- *
- * $FreeBSD: src/usr.sbin/ctm/ctm/ctm_passb.c,v 1.5.2.1 2001/07/05 07:46:57 kris Exp $
- * $DragonFly: src/usr.sbin/ctm/ctm/Attic/ctm_passb.c,v 1.2 2003/06/17 04:29:53 dillon Exp $
- *
- */
-
-#include "ctm.h"
-#define BADREAD 32
-
-/*---------------------------------------------------------------------------*/
-/* PassB -- Backup modified files.
- */
-
-int
-PassB(FILE *fd)
-{
-    u_char *p,*q;
-    MD5_CTX ctx;
-    int i,j,sep,cnt;
-    u_char *md5=0,*md5before=0,*trash=0,*name=0,*uid=0,*gid=0,*mode=0;
-    struct CTM_Syntax *sp;
-    FILE *b = 0;       /* backup command */
-    u_char buf[BUFSIZ];
-    char md5_1[33];
-    int ret = 0;
-    int match = 0;
-    struct CTM_Filter *filter = NULL;
-
-    if(Verbose>3)
-       printf("PassB -- Backing up files which would be changed.\n");
-
-    MD5Init (&ctx);
-    snprintf(buf, sizeof(buf), fmtcheck(TarCmd, TARCMD), BackupFile);
-    b=popen(buf, "w");
-    if(!b) { warn("%s", buf); return Exit_Garbage; }
-
-    GETFIELD(p,' '); if(strcmp("CTM_BEGIN",p)) WRONG
-    GETFIELD(p,' '); if(strcmp(Version,p)) WRONG
-    GETFIELD(p,' '); if(strcmp(Name,p)) WRONG
-    GETFIELD(p,' '); if(strcmp(Nbr,p)) WRONG
-    GETFIELD(p,' '); if(strcmp(TimeStamp,p)) WRONG
-    GETFIELD(p,'\n'); if(strcmp(Prefix,p)) WRONG
-
-    for(;;) {
-       Delete(md5);
-       Delete(uid);
-       Delete(gid);
-       Delete(mode);
-       Delete(md5before);
-       Delete(trash);
-       Delete(name);
-       cnt = -1;
-
-       GETFIELD(p,' ');
-
-       if (p[0] != 'C' || p[1] != 'T' || p[2] != 'M') WRONG
-
-       if(!strcmp(p+3,"_END"))
-           break;
-
-       for(sp=Syntax;sp->Key;sp++)
-           if(!strcmp(p+3,sp->Key))
-               goto found;
-       WRONG
-    found:
-       for(i=0;(j = sp->List[i]);i++) {
-           if (sp->List[i+1] && (sp->List[i+1] & CTM_F_MASK) != CTM_F_Bytes)
-               sep = ' ';
-           else
-               sep = '\n';
-
-           switch (j & CTM_F_MASK) {
-               case CTM_F_Name: GETNAMECOPY(name,sep,j, Verbose); break;
-               case CTM_F_Uid:  GETFIELDCOPY(uid,sep); break;
-               case CTM_F_Gid:  GETFIELDCOPY(gid,sep); break;
-               case CTM_F_Mode: GETFIELDCOPY(mode,sep); break;
-               case CTM_F_MD5:
-                   if(j & CTM_Q_MD5_Before)
-                       GETFIELDCOPY(md5before,sep);
-                   else
-                       GETFIELDCOPY(md5,sep);
-                   break;
-               case CTM_F_Count: GETBYTECNT(cnt,sep); break;
-               case CTM_F_Bytes: GETDATA(trash,cnt); break;
-               default: WRONG
-               }
-           }
-       /* XXX This should go away.  Disallow trailing '/' */
-       j = strlen(name)-1;
-       if(name[j] == '/') name[j] = '\0';
-
-       if (KeepIt && 
-           (!strcmp(sp->Key,"DR") || !strcmp(sp->Key,"FR")))
-           continue;
-               
-       /* match the name against the elements of the filter list.  The
-          action associated with the last matched filter determines whether
-          this file should be ignored or backed up. */
-       match = (FilterList ? !(FilterList->Action) : CTM_FILTER_ENABLE);
-       for (filter = FilterList; filter; filter = filter->Next) {
-           if (0 == regexec(&filter->CompiledRegex, name, 0, 0, 0))
-               match = filter->Action;
-       }
-
-       if (CTM_FILTER_DISABLE == match)
-               continue;
-
-       if (!strcmp(sp->Key,"FS") || !strcmp(sp->Key,"FN") ||
-           !strcmp(sp->Key,"AS") || !strcmp(sp->Key,"DR") || 
-           !strcmp(sp->Key,"FR")) {
-           /* send name to the archiver for a backup */
-           cnt = strlen(name);
-           if (cnt != fwrite(name,1,cnt,b) || EOF == fputc('\n',b)) {
-               warn("%s", name);
-               pclose(b);
-               WRONG;
-           }
-       }
-    }
-
-    ret = pclose(b);
-
-    Delete(md5);
-    Delete(uid);
-    Delete(gid);
-    Delete(mode);
-    Delete(md5before);
-    Delete(trash);
-    Delete(name);
-
-    q = MD5End (&ctx,md5_1);
-    GETFIELD(p,'\n');                  /* <MD5> */
-    if(strcmp(q,p)) WRONG
-    if (-1 != getc(fd)) WRONG
-    return ret;
-}
diff --git a/usr.sbin/ctm/ctm/ctm_syntax.c b/usr.sbin/ctm/ctm/ctm_syntax.c
deleted file mode 100644 (file)
index 62a705a..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * ----------------------------------------------------------------------------
- * "THE BEER-WARE LICENSE" (Revision 42):
- * <phk@login.dknet.dk> wrote this file.  As long as you retain this notice you
- * can do whatever you want with this stuff. If we meet some day, and you think
- * this stuff is worth it, you can buy me a beer in return.   Poul-Henning Kamp
- * ----------------------------------------------------------------------------
- *
- * $FreeBSD: src/usr.sbin/ctm/ctm/ctm_syntax.c,v 1.10 1999/08/28 01:16:00 peter Exp $
- * $DragonFly: src/usr.sbin/ctm/ctm/Attic/ctm_syntax.c,v 1.2 2003/06/17 04:29:53 dillon Exp $
- *
- */
-
-#include "ctm.h"
-
-/* The fields... */
-#define Name   CTM_F_Name
-#define Uid    CTM_F_Uid
-#define Gid    CTM_F_Gid
-#define Mode   CTM_F_Mode
-#define MD5    CTM_F_MD5
-#define Count  CTM_F_Count
-#define Bytes  CTM_F_Bytes
-
-/* The qualifiers... */
-#define File   CTM_Q_Name_File
-#define Dir    CTM_Q_Name_Dir
-#define New    CTM_Q_Name_New
-#define Subst  CTM_Q_Name_Subst
-#define After  CTM_Q_MD5_After
-#define Before CTM_Q_MD5_Before
-#define Chunk  CTM_Q_MD5_Chunk
-#define Force  CTM_Q_MD5_Force
-
-static int ctmFM[] = /* File Make */
-    { Name|File|New|Subst, Uid, Gid, Mode,
-       MD5|After|Chunk, Count, Bytes,0 };
-
-static int ctmFS[] = /* File Substitute */
-    { Name|File|Subst, Uid, Gid, Mode,
-       MD5|Before|Force, MD5|After|Chunk, Count, Bytes,0 };
-
-static int ctmFE[] = /* File Edit */
-    { Name|File|Subst, Uid, Gid, Mode,
-       MD5|Before, MD5|After, Count, Bytes,0 };
-
-static int ctmFR[] = /* File Remove */
-    { Name|File|Subst, MD5|Before, 0 };
-
-static int ctmAS[] = /* Attribute Substitute */
-    { Name|Subst, Uid, Gid, Mode, 0 };
-
-static int ctmDM[] = /* Directory Make */
-    { Name|Dir|New , Uid, Gid, Mode, 0 };
-
-static int ctmDR[] = /* Directory Remove */
-    { Name|Dir, 0 };
-
-struct CTM_Syntax Syntax[] = {
-    { "FM",    ctmFM },
-    { "FS",    ctmFS },
-    { "FE",    ctmFE },
-    { "FN",    ctmFE },
-    { "FR",    ctmFR },
-    { "AS",    ctmAS },
-    { "DM",    ctmDM },
-    { "DR",    ctmDR },
-    { 0,       0} };