/*---------------------------------------- * ripmime-api * * Written by Paul L Daniels * pldaniels@pldaniels.com * * (C)2001 P.L.Daniels * http://www.pldaniels.com/ripmime * */ #include #include #include #include #include #include #include #include #include #include #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-----------------------------------------------------------*/