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 accept 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
       input 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 us-
       ing the archiver	command	specified  by  the  -t	option.	  The  default
       archiver	command	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 di-
       rectory.	 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
	       options,	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 directory 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
	       specified, 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 op-
	       tion  disables  the  .ctm_status	checks and integrity checks on
	       the source tree being operated on.  The -l option can  be  com-
	       bined 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 op-
	       tion takes effect only if a backup file had been	specified  us-
	       ing 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	number checks.

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

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  ob-
       tained  via  an	unauthenticated	medium such as regular email.  It is a
       relatively simple matter	for an attacker	to forge a CTM	delta  to  re-
       place or	precede	the legitimate one and insert malicious	code into your
       source  tree.  If the legitimate	delta is somehow prevented from	arriv-
       ing, 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
       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.

       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.

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	14.3		       December	23, 2018			CTM(8)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=ctm&manpath=FreeBSD+14.3-RELEASE+and+Ports>

home | help