Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
CTM(8)			     System Manager's Manual			  CTM(8)

NAME
     ctm -- source code mirror program

SYNOPSIS
     ctm [-cFklquv] [-b basedir] [-B backup-file] [-e include-regex]
	 [-t tar-command] [-T tmpdir] [-V level] [-x exclude-regex] file ...

DESCRIPTION
     The  ctm  utility	was  originally  "Cvs Through eMail", but now instead it
     seems more fitting to call it "Current Through eMail".

     The ctm utility is now meant to be the definitive way to make and	apply  a
     delta between two versions of a directory tree.

     There  are  two parts to this, making the delta and applying it.  These are
     two entirely different things.

   Usage
     To apply a CTM delta, you pass it to the ctm 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 ac-
     cept gzip'ed, bzip2'ed, or xz'ed files and since it will not have to make a
     temporary	copy of your file.  (If you pass it an xz'ed file, and xz is not
     part of your base system, you will have to install xz from the ports.)  You
     can specify multiple deltas at one time, they will be processed  one  at  a
     time.  Deltas that are already applied will be ignored.

     The ctm command runs in a number of passes.  It will process the entire in-
     put file in each pass, before commencing with the next pass.

     Before  working  on  a  file name ctm first checks for the existence of the
     file name.ctm.  If this file exists, ctm works on it instead.

     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, ctm will simply
     reject the input file.

     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.

     If a backup-file had been specified using the -B  option,	all  files  that
     would  be	modified by this ctm invocation are backed up to this file using
     the archiver command specified by the -t option.  The default archiver com-
     mand is tar -rf %s -T -.

     Pass 3 will actually apply the delta.

     The list of files that would be modified by ctm  is  subject  to  filtering
     regular  expressions  specified using the -e and -x options.  The -e and -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 ctm.

     The ctm utility will extract the file hierarchy below  its  working  direc-
     tory.   Absolute  filenames  or filenames containing references through `.'
     and `..' are explicitly prohibited as a security measure.

   Options
     -b basedir
	     Prepend the path basedir to every filename.

     -B backup-file
	     Backup all files  that  would  be	modified  by  this  CTM  run  to
	     backup-file.   If any filters are specified using the -e and -x op-
	     tions, then the final set of files backed up are those  that  would
	     be modified by CTM after the filters are applied.

     -c      Check it out, do not do anything.

     -e regular_expression
	     Match  each name in the CTM file against 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
	     .ctm_status sequence number checks.  For  example,  the  expression
	     ^usr.sbin/ctm  for example, will select the usr.sbin/ctm source di-
	     rectory and all pathnames under it.

	     Pathnames can be disabled from being considered by CTM using the -x
	     option.

     -F      Force.

     -k      Keep files and directories and do not remove them even if	the  CTM
	     file  specifies they are to be removed.  If the -B option is speci-
	     fied, these files and directories will not be backed up.

     -l      List files that would be modified by this invocation of CTM and the
	     actions that would be performed on them.  Use of the -l option dis-
	     ables the .ctm_status checks and integrity  checks  on  the  source
	     tree  being operated on.  The -l option can be combined with the -e
	     and -x options to determine which files would be  modified  by  the
	     given set of command line options.

     -q      Tell us less.

     -t tar-command
	     Use  tar-command  instead of the default archiver tar.  This option
	     takes effect only if a backup file had been specified using the  -B
	     option.   A  %s  in the tar command will be replaced by the name of
	     the backup file.

     -T tmpdir
	     Put temporary files under tmpdir.

     -u      Set modification time of created and  modified  files  to	the  CTM
	     delta creation time.

     -v      Tell us more.

     -V level
	     Tell us more.  Level is the level of verbosity.

     -x regular_expression
	     Match  each  name in the CTM file against regular_expression and if
	     it matches, leave the file alone.	There may be any number of these
	     options.  Use of this option disables the .ctm_status sequence num-
	     ber checks.

	     Pathnames can be selected for CTM's consideration using the -e  op-
	     tion.

SECURITY
     On  its  own, CTM is an insecure protocol - there is no authentication per-
     formed 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 le-
     gitimate one and insert malicious code into your source tree.  If	the  le-
     gitimate  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.

     To remedy this insecurity, CTM pieces generated by FreeBSD.org are  crypto-
     graphically  signed in a format compatible with the GNU Privacy Guard util-
     ity, 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.

     CTM  deltas  which are thus signed cannot be undetectably altered by an at-
     tacker.  Therefore it is recommended that you make use of GPG  or	PGP5  to
     verify the signatures if you receive your CTM deltas via email.

ENVIRONMENT
     TMPDIR,  if  set  to a pathname, will cause ctm to use that pathname as the
     location of temporary file.  See tempnam(3), for more details on this.  The
     same effect may be achieved with the -T flag.

FILES
     .ctm_status contains the sequence number of the  last  CTM  delta	applied.
     Changing or removing this file will greatly confuse ctm.

     .svn_revision  contains  the  revision  number emitted by SVN (to reference
     when discussing sources with users of svn direct).

     Using the -e and -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.

EXAMPLES
     cd ~cvs
     /usr/sbin/ctm ~ctm/cvs-*

     To extract and patch all sources under `lib'

     cd ~/lib-srcs
     /usr/sbin/ctm -e '^lib' ~ctm/src-cur*

DIAGNOSTICS
     Numerous messages, hopefully self-explanatory.  The "noise  level"  can  be
     adjusted with the -q, -v and -V options.

SEE ALSO
     ctm(5), ctm_dequeue(8), ctm_rmail(8), ctm_smail(8)

     Miscellaneous CTM on FreeBSD Resources, http://ctm.berklix.org.

HISTORY
     Initial trials were run during the work on FreeBSD 1.1.5, and many bugs and
     methods were hashed out.

     The ctm command appeared in FreeBSD 2.1.

AUTHORS
     The  CTM  system  has  been  designed  and implemented by Poul-Henning Kamp
     <phk@FreeBSD.org>.

     Joerg Wunsch <joerg@FreeBSD.org> wrote this man-page.

FreeBSD ports 15.quarterly	December 23, 2018			  CTM(8)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=ctm&sektion=8&manpath=FreeBSD+Ports+15.1.quarterly>

home | help