
1. Before doing anything with this Software, read the LICENCE at the
   end of mpart2tar.c file. Each program has at the end a COPYRIGHT
   notice.

2. The distribution directory Mpart2tar contains:

 a) This README file.

 b) upload.tcl is a very simple cgi script that offers a web form
    for uploading a text message and some files. The generated form 
    data is stored on the server as a file of type multipart/form-data.
    If it is configurated to save files in directory Uploads in the
    home directory of user username in server sereveraddr, you can get
    new uploads with:

     rsync -av username@serveraddr:Uploads/ Uploads

    But from time to time you must log into the server and delete old post.

 c) mpart2tar.c is a program that takes a file as above and gives in 
    stdout a tar file containing the contents of the form. If compiled 
    as mpart2tar, the usage is like:

     mpart2tar formdatafile > formdatafile.tar
     mpart2tar formdatafile | tar tvf -
     mpart2tar formdatafile | tar xvf -

    The tar file expands as directory formdatafile-d with two files
    for each field of the form, one with the headers and one with
    the given content.
 
3. For installing upload.tcl

 (a) Put in the first line the path to the tclsh interpreter.
 (b) Put in line beginning with "set Dir" the path of the directory 
     where files must be uploaded. It must be writable by the web server.
 (c) Put in line beginning with "set N" the maximal number of uploads allowed.
 (d) Put in line beginning with "set M" the maximal size of an upload in bytes.
 (e) Put this script where the CGI server reads it.

4. For installing mpart2tar

 (a) Adapt the headers of mpart2tar.c to your system. 
 (b) Compile mpart2tar.c with: cc -o mpart2tar mpart2tar.c
 (c) Put the generated mpart2tar in your PATH.

 Examples:
 (a) In FreeBSD 11.4 should compile without changes. 
 (b) For OpenBSD delete "#include <malloc_np.h>". 
 (c) For Debian also put on the top
      "#define _GNU_SOURCE" and "#include <stdint.h>".

5. Background

 I wanted to offer a form for uploading files with a simple cgi script,
 just for circumventing email. The CGI server offers in stdout the
 form fields, the first line has a separator of the parts, each part 
 has at the beginning a header block, an empty line and a form field.
 Before saving this to a file, I added a "from line" at the beginning, 
 some headers that the server offers in the environement variables, 
 mainly "Content-Type" that also contains the separator as parameter 
 "boundary", and an empty line, in order that it appear to be a mail 
 folder containing an email with mime attachements. With this I hoped 
 to be able to separate the parts with a normal mail program: it does 
 not work because lines are separated with \r\n and these programs in 
 Unix expect lines separated with \n. To replace \n with \r\n does not 
 help, because the file, opposite to mails, may contain arbitrary binary 
 data. That is why I wrote mpart2tar.c. I kept update.tcl as simple as 
 possible, but usable, and wrote mpart2tar.c more generic than necessary, 
 in order to experiment with them.

6. What can be done with it?

 For example make the CGI script send the file encrypted per Email, 
 instead of saving it in the server, or at least to save it encrypted. 
 Or make it send an Email anouncing new post. Or to make other CGI 
 script for managing and reading the postbox after authentication. 
 Or to offer postboxes for many users. Just some ideas.
