KIT(1) KIT(1) Version 2.0 PL28 NAME kit, mailkit, unkit - the ultimate mailing tools SYNOPSIS kit [ -EFHMBVXefhpx ] [ -S size ] [ -a address ] [ -k key ] [ -d dir ] [ -m address ] [ -n basename ] [ -l file ] [ -s name ] directories | files mailkit [ -EFVcefhp ] [ -l file ] [ -n partname ] title [ address(es) ] unkit [ -bhlprsSV ] [-d dir ] [ -k key ] [ files ] DESCRIPTION Kit is the ultimate mailing tool. It enables you to mail data without any consideration of possible escape sequences or control characters. Given a file name or a directory, it builds a single file using tar(1) and compress(1). Then this file is hex-encoded (option -H) or ASCII- encoded with btoa(1) (option -B, which is used by default) before being shell-archived. Kit produces files that match "Kit*" regular expression. This default base name can be changed thanks to the -n option. With the -m option, it is possible to give one mail address, and kit will invoke mailkit to send the archive. There may be as many -m options as needed (to send the same archive to more than a single person). If there are a lot of recipients, you may want to store them in a file and use the -l option to tell kit where the recipient file is located. The -E, -F, -e, -f and -p options are passed on to mailkit, so if no -m option is used, they will be ignored. When sending files with -m, the subject of the message holds the name of the first file given in the command line (supposed to be the name of the kit). It is possible to overwrite this default by using the -s option. If you want to send sensible data, it is possible to encrypt them using a public-domain implementation of Data Encryption Standard (DES). The -x option will use the Cipher Block Chaining mode (default), while -X requests the Electronic Code Book mode. If you do not specify the encryption key with -k, des(1) will prompt you for one. If you use the -k option, -x is assumed. It may happen that there are no write permissions in the directory where the root directory to be kitted lies. The -d option enables you to specify another directory, where all the temporary files will be stored. If you use something like /tmp, you must be careful to use -n to change the base name used (in case someone else is doing the same thing, otherwise files may get mangled). To prevent common mistakes, kit will stop and give an error message if the argument of -d is not a directory, if the directory is not writable by the user, or if a kit file is present in the temporary directory (same base name). - 1 - Formatted: November 14, 2024 KIT(1) KIT(1) Version 2.0 PL28 When you send a kit to someone who may not have kit, the -M option may be used to include a minikit script, which is a minimal set of commands to unkit an unencrypted ASCII-encoded kit. The overhead is small (around 4K) and some instructions are provided in the header of every kit part. The minikit is usually called minikit, but should you already have a file with that name in your distribution, it will be renamed MINIKIT. If by chance (!) you named one of your files MINIKIT, then a unique name of the form mkitXXXXX will be generated (XXXXX stands for the PID of the kit process). By using the -a option, you ask the remote unkit program to send an automatic acknowledgment to the specified e-mail address upon successful archive extraction. However, this feature is only supported if the remote end has at least the 2.0 PL15 release. You will receive a short message with a junk precedence, telling you who extracted the archive and when. The default part size generated by kit is currently 50000 bytes. However, this can be changed throughout the -S option, which expects a part size as argument. It can be given in bytes (e.g. -S 40000 to set the maximum part size to 40000 bytes) or in kbytes by appending a k at the end (i.e. -S 60k would produce parts with size ranging up to 61440 bytes). Mailkit takes "Kit*" files and sends them to a list of addresses. The -n option can be used to change that base name, if necessary. Each message sent corresponds to one part and has its `Subject:' field set to the number of this part with the title given, and you also have the total number of parts, so that missing parts can easily be located. The options -E and -e from mailkit enable you to give the recipient some instructions. They both call an editor. At the top of the file edited, there is a little message, which will (of course) be stripped from the text you enter, so do not remove it or your own message will be cut instead. With -E, the message will be sent in an extra part (#0), while with -e it will be included in each part. Empty messages will be ignored. Options -F and -f are very similar, but take their input from stdin (standard input) instead of calling an editor. Option -p asks mailkit for preserving mailed files. They are removed by default. When mailkit is given a -l option, it takes the file name as a file whith recipients addresses in it and adds the optional addresses that may be given on the command line. Addresses in the recipient file are separated with spaces, commas or new lines. Shell-style comments starting with a pound sign (#) are allowed. More than one -l can be used to get addresses from multiple files (duplicates will not be removed by mailkit but should be taken care of by the underlying transport mechanism). - 2 - Formatted: November 14, 2024 KIT(1) KIT(1) Version 2.0 PL28 If mailkit is invoked by kit via -m options, it will be given the -c flag to clean up parts when they are successfully sent, unless -p was also provided. However, when invoking mailkit directly from a shell, the default action is to not remove the parts when they have been sent (that is to say, -p is the default action unless you add the -c option yourself). If for some reason one part could not be sent and mailkit was directed to remove parts when sent, then the file is not removed immediately. If the input and output are connected to a terminal, mailkit will ask you at the end whether you wish to keep the unsent parts, on an individual basis. Otherwise, (e.g. standard output redirected to a file), the unsent parts will be removed without asking. Another useful feature when invoking mailkit manually is the ability to send only a subset of all the kit parts by using the -r option and supplying a range list of parts to be sent. A range list is a set of ranges comma separated. A range is a part number by itself or a set of two numbers separated with a minus sign, indicating the lowest and the largest bound, hence specifying an interval. If the lowest bound is missing, 1 is assumed. If the largest bound is missing, the total number of parts is substituted. Thus, a range of 1- means all the parts, while 1,4-7,10 would send parts 1, 4 trough 7 and 10. Finally, -5,8- would send parts 1 through 5 and 8 up to the end. If you introduce spaces in your range list specification, do not forget to quote the whole list for the shell... Unkit is used to restore the original files. The argument is a list of archive files (or mail files, as unshar(1), which is called by unkit, can deal with mail headers). Input files are not removed unless option -r is given. By default, option -p is used to preserve the input file(s). If no file name is given to unkit, the standard input is processed. This is useful to process messages directly from a mail user agent. You may save more than one kit part into a file and give that file as an argument to unkit, which will then identify and extract the embeded parts to process them. The program lists on the standard error the files as they are processed and tells you how many kit parts it found within each file. Sometimes, tar does not work well accross NFS and will fail restoring ownership on files, even with the -o option. If you chose to install badtar at configuration time, you may use -b to instruct unkit using badtar as a filter before running tar. This is the default action on some systems (the -h option will tell you what was determined at configuration time). If you want to know what unkit will create without actually doing it, use the -l option. With this option, -r is ignored. You may also use unkit in place of unshar: it will stop after having unpacked the shell archives if it does not detect any kit file. - 3 - Formatted: November 14, 2024 KIT(1) KIT(1) Version 2.0 PL28 When unpacking crypted archives, the -k option may be used to specify the key to be used by DES. If you do not supply it, DES will prompt you on the terminal. By default, unkit will perform security checks on the shell archives (if perl is available) to detect alien code. It will skip those parts containing suspicious code which should not be part of the archive. You may explicitely skip those checks by using the -s option, which should be used only when unkit input can be reliably trusted. Unfortunately, the script used to make those checks is written in perl, so nothing will happen if perl is not in your PATH. The -S option will make kit abort with an error if it is unable to perform security checks due to the absence of perl. For all of these commands, option -V prints the version number with the current patch level and exits, while -h gives a little help message with the syntax and the meaning of the options. OPTIONS This section summarizes the different options. All the options may be specified separately (e.g. -a -b foo -c) or grouped together, along with optional arguments (e.g. -ac -bfoo). Option parsing stops when -- is encountered. Kit has the following options: -B Use btoa encoding (default), as opposed to hexadecimal encoding. -E Edit instructions which will be sent as part #0. -F Get instructions to be sent as part #0 from standard input. -H Use hexadecimal encoding, as opposed to the default btoa. This is an obsolete feature, kept for compatibility with kit 1.0. -M Include minikit in the distribution, in order to allow unkiting by the recipient, should kit be missing at the remote site. Note that minikit will only be able to unkit plain btoa-encoded packages (i.e. encryption is not supported, although automatic acknowledgment is). -V Print version number and patchlevel. -S size Set each part size in bytes or kbytes (by appending a single k after the size figure). The actual size of each part may be slightly bigger than the maximum stated (a few hundred bytes at most). - 4 - Formatted: November 14, 2024 KIT(1) KIT(1) Version 2.0 PL28 -X Encryption with DES Electronic Code Block algorithm. You will be prompted for a key, unless you specify one on the command line via the -k option. -a address Ask the unkiting process to send an acknowldgment to the specified e-mail address upon successful extraction. -d dir Put temporary files in the specified directory. This is useful if you do not have writing permission in the current directory. If you specify a common directory like /tmp, be sure to use the -n option or your kit might be clobbered if somebody else is doing the same thing. -e Edit instructions to be sent at the top of each part. -f Get instructions to be sent at the top of each part from standard input. -h Print usage and option summary. -k key Set the key to be used for encryption. The -x option will be assumed, unless -X is explicitely given to override the default. -m address Invoke mailkit to send all the parts at the given address. Several -m may be specifed to send the package to more than one recipient. The kit parts will be removed at the end, unless -p is given. When sending large files to multiple recipients, it is wise to use this option in case one part gets lost. -l file Send the kit parts to the recipients held in the file (one recipient per line). -n basename Set the basename of the generated parts. The default is Kit. You should use this option when a kit is already present in the current directory, or when you use something like -d /tmp. -p Preserve file sent. This option is meaningful only when -m or -l is given. -s name Set the kit name, which will be copied as-is into the Subject of messages sent by mailkit (provided -m or -l is specified), and also in the automatic acknowledgment. By default, the name of the first directory or file specified on the command line will be used. - 5 - Formatted: November 14, 2024 KIT(1) KIT(1) Version 2.0 PL28 -x Use DES Cipher Block Chaining encryption algorithm. You will be prompted for a key, unless you specify one on the command line via the -k option. Mailkit recognizes the following options: -E Edit instructions which will be sent as part #0. -F Get instructions to be sent as part #0 from standard input. -V Print version number and patchlevel. -c Clean up after each part sent: all the parts successfully sent will be removed from the disk. -e Edit instructions to be sent at the top of each part. -f Get instructions to be sent at the top of each part from standard input. -h Print usage and option summary. -l file Get the recipient list from a file (one recipient per line). -n basename Set the basename of the generated parts. The default is Kit. You should use this option when more than one kit is present in the current directory, or when you used the kit's -n option to change the default basename. -p Preserve files sent. This is the default, unless -c is specified. -r range Specify which parts are to be sent. For instance, -r 1,4-7 would send part #1 and then parts #4 through #7. Unkit uses the following options: -S Complain loudly and abort if perl is not found, since that would make it impossible to check each kit part for possible alien code before running them through the shell. -V Print version number and patchlevel. -b Force usage of badtar. -d dir Go to dir before starting extraction. - 6 - Formatted: November 14, 2024 KIT(1) KIT(1) Version 2.0 PL28 -h Print usage and option summary. -k key Set the key to be used for data decryption. Unkit is able to determine automatically whether decryption is needed or not and will prompt you for the key unless this option is used. -l Lists the files contained in the kit package without extracting them. -r Remove input files if unshar succeeds. -s Force skipping of security checks, which are conducted only if perl is available in your PATH. FILES {zag,zcb,zec}.hex.* temporary files used by kit and unkit for datas which are hex-encoded. {zag,zcb,zec}.ba.* temporary files used by kit and unkit for datas which are ASCII-encoded. Kit* files generated by kit zag* non encrypted temporary files. zcb* data encrypted using CBC mode. zec* data encrypted using ECB mode. zzz.minikit file holding the name of the extras files added by kit. zzz.ack contains the address where acknowledgment should be sent. zzz.subject contains the name of kit archive for acknowledgment purposes. /opt/kit/lib/minikit the script which may be used to unkit a distribution when the kit package is not available. /opt/kit/lib/makeshar the script which emulates cshar's makekit program. /opt/kit/lib/rshar a simple shell archive maker. /opt/kit/lib/secure security checks (detection of alien code) in kit archives. ENVIRONMENT The following environment variables are paid attention to by mailkit. If they are not set, a default determined at configuration time will be used: EDITOR the name of the editor to call when -E option and friends are used. - 7 - Formatted: November 14, 2024 KIT(1) KIT(1) Version 2.0 PL28 MAILER the name of the program to invoke to send mail. This program must be ready to take a list of addresses as argument and the whole message (with some headers already computed) from standard input. NOTES Kit may now be used as a standalone package, i.e. without the help of the cshar distribution. This was not true before version 2.0 PL10. Two simple shell scripts now emulate cshar's behaviour. Those scripts are held in the private library directory because they are not intended to be used directly by any user. In order to use kit, hexdecode, hexencode, atob and btoa must be installed and compress must be available. If any of these is missing, this mailing kit is useless. Unkit has its own unshar built-in, but it will not be used if unshar is installed, because it is really simple-minded and not smart at all in case of errors. However, this is useful if you do not have cshar, but still want to use unkit. EXAMPLES To mail ram@educ.emse.fr a directory called XLOCK and all what it may hold, do: kit XLOCK mailkit XLOCK ram@educ.emse.fr Kit will produce files Kit*, and mailkit will send them. Or, to do it all in one: kit -m ram@educ.emse.fr XLOCK Assuming the XLOCK package has 5 kit parts, you could send only parts 3 and 5 by using: mailkit -r 3,5 XLOCK ram@eiffel.com If you have no write permissions in the current directory, you can specify an alternate directory for temporary files: kit -m ram@eiffel.com -d /tmp -n mykit XLOCK To unkit, save the mail messages in files called, e.g. xlock.01 (for part 01), xlock.02 (for part 02) and so on. Then do: unkit xlock* Even if it succeeds, files xlock* will not be removed. - 8 - Formatted: November 14, 2024 KIT(1) KIT(1) Version 2.0 PL28 BUGS Try "kit .": it is harmless (well, I hope !), and you will quickly understand the problem. The solution is to use the -d option. If you use the -r option in unkit and one or more kit parts are missing, all the files will be lost. So use it with care... Some systems cannot extract tar archives with overwriting of ownership informations (usually this is done with tar option -o). The -M option is unknown to versions of kit prior to 2.0 PL9, which means the remote unkit program will not be able to clean-up the extras files. Similarly, the automatic acknowledgment feature was added at 2.0 PL15. Fortunately, kit programs newer than 2.0 PL9 will know how to deal with the extras files, although the acknowledgment feature itself will only be handled by 2.0 PL15 and later versions. SEE ALSO atob(1), btoa(1), unshar(1), makekit(1). AUTHOR Raphael Manfredi <ram@acri.fr>. Kit was first developed at the Ecole des Mines, Saint-Etienne, France. Many improvements were added at Interactive Software Engineering Inc., Santa-Barbara CA, USA. - 9 - Formatted: November 14, 2024