/*----------------------------------------
* ripmime-api
*
* Written by Paul L Daniels
* pldaniels@pldaniels.com
*
* (C)2001 P.L.Daniels
* http://www.pldaniels.com/ripmime
*
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <fcntl.h>
#include <unistd.h>
#include <time.h>
#include <errno.h>
#include <syslog.h>
#include "logger.h"
#include "ffget.h"
#include "strstack.h"
#include "mime.h"
#include "MIME_headers.h"
#include "ripmime-api.h"
char defaultdir[] = ".";
char version[] = "v1.4.0.1 - 30/08/2004 (C) PLDaniels http://www.pldaniels.com/ripmime";
/*-----------------------------------------------------------------\
Function Name : RIPMIME_init
Returns Type : int
----Parameter List
1. struct RIPMIME_globals *glb,
------------------
Exit Codes :
Side Effects :
--------------------------------------------------------------------
Comments:
--------------------------------------------------------------------
Changes:
\------------------------------------------------------------------*/
int RIPMIME_init (struct RIPMIME_object *rm)
{
rm->outputdir = defaultdir;
rm->mailpack = NULL;
LOGGER_set_output_mode(_LOGGER_STDOUT);
MIME_init();
MIME_set_uniquenames(1);
MIME_set_paranoid(0);
MIME_set_renamemethod(_MIME_RENAME_METHOD_INFIX);
MIME_set_verbosity(0);
return 0;
}
/*-----------------------------------------------------------------\
Function Name : main
Returns Type : int
----Parameter List
1. int argc,
2. char **argv,
------------------
Exit Codes :
Side Effects :
--------------------------------------------------------------------
Comments:
--------------------------------------------------------------------
Changes:
\------------------------------------------------------------------*/
int RIPMIME_decode( struct RIPMIME_object *rm, char *mailpack, char *outputdir )
{
int result = 0;
if (!mailpack)
{
LOGGER_log("%s:%d:RIPMIME_decode: mailpack filename is NULL\n",FL);
return 1;
} else {
rm->mailpack = strdup(mailpack);
}
if (!outputdir)
{
LOGGER_log("%s:%d:RIPMIME_decode: output directory is NULL\n",FL);
return 1;
} else {
rm->outputdir = strdup(outputdir);
}
// Fire up the randomizer
srand (time (NULL));
// clean up the output directory name if required (remove any trailing /'s, as suggested by James Cownie 03/02/2001
if (rm->outputdir[strlen (rm->outputdir) - 1] == '/')
{
rm->outputdir[strlen (rm->outputdir) - 1] = '\0';
}
// Create the output directory required as specified by the -d parameter
if (rm->outputdir != defaultdir)
{
result = mkdir (rm->outputdir, S_IRWXU);
// if we had a problem creating a directory, and it wasn't just
// due to the directory already existing, then we have a bit of
// a problem on our hands, hence, report it.
//
if ((result == -1) && (errno != EEXIST))
{
fprintf (stderr, "ripMIME: Cannot create directory '%s' (%s)\n",
rm->outputdir, strerror (errno));
return -1;
}
}
// Unpack the contents
MIMEH_set_outputdir(rm->outputdir);
MIME_unpack (rm->outputdir, rm->mailpack, 0);
// do any last minute things
MIME_close ();
return 0;
}
/*-END-----------------------------------------------------------*/
syntax highlighted by Code2HTML, v. 0.9.1