Binary files JohnTheRipper.orig/run/gpg2john and JohnTheRipper/run/gpg2john differ diff -urpN JohnTheRipper.orig/src/keyring2john.c JohnTheRipper/src/keyring2john.c --- JohnTheRipper.orig/src/keyring2john.c 2013-03-17 20:30:40.948915751 +0000 +++ JohnTheRipper/src/keyring2john.c 2013-03-18 00:07:30.872863684 +0000 @@ -14,6 +14,7 @@ #include #include "stdint.h" #include "memory.h" +#include "misc.h" #define KEYRING_FILE_HEADER "GnomeKeyring\n\r\0\n" #define KEYRING_FILE_HEADER_LEN 16 @@ -119,6 +120,7 @@ static void process_file(const char *fna uint32_t hash_iterations; unsigned char salt[8]; unsigned char *to_decrypt; + char *ext[]={".keyring"}; if (!(fp = fopen(fname, "rb"))) { fprintf(stderr, "%s : %s\n", fname, strerror(errno)); @@ -183,7 +185,7 @@ static void process_file(const char *fna to_decrypt = (unsigned char *) mem_alloc(crypto_size); count = fread(to_decrypt, crypto_size, 1, fp); assert(count == 1); - printf("%s:$keyring$", fname); + printf("%s:$keyring$", get_basename((char*)fname, ext, 1)); print_hex(salt, 8); printf("*%d*%d*%d*", hash_iterations, crypto_size, 0); print_hex(to_decrypt, crypto_size); diff -urpN JohnTheRipper.orig/src/misc.c JohnTheRipper/src/misc.c --- JohnTheRipper.orig/src/misc.c 2013-03-17 20:30:40.948915751 +0000 +++ JohnTheRipper/src/misc.c 2013-03-17 23:52:19.072867333 +0000 @@ -13,6 +13,7 @@ #pragma warning ( disable : 4996 ) #endif #include +#include #include #include #include @@ -184,3 +185,45 @@ char *strupr(char *s) return s; } #endif + +char *get_basename(char *path, char *extensions[], int count) +{ + static char retmem[256]; + char *pathdup = NULL; + char *base = NULL; + int retsize, extlen, baselen = 0; + + if (!path || !*path) + return ""; + + pathdup = strdup(path); + if (!pathdup) + goto error; + base = basename(pathdup); + if (!base || !*base) + goto error; + baselen = strlen(base); + + while (count-- >= 0) { + if (!extensions[count] || !*extensions[count]) + continue; + extlen = strlen(extensions[count]); + if (baselen > extlen && + !strcmp(&base[baselen - extlen], extensions[count])) { + base[baselen - extlen] = 0; + break; + } + } + + retsize = strlen(base) + 1; + strnzcpy(retmem, base, retsize < 256 ? retsize : 256); + free(pathdup); + return retmem; + + error: + if (pathdup) + free(pathdup); + return path; +} + + diff -urpN JohnTheRipper.orig/src/misc.h JohnTheRipper/src/misc.h --- JohnTheRipper.orig/src/misc.h 2013-03-17 20:30:40.956915751 +0000 +++ JohnTheRipper/src/misc.h 2013-03-17 23:52:13.640867355 +0000 @@ -31,6 +31,12 @@ extern void pexit(char *format, ...) #endif /* + * Strips basename from path and chops off given extensions + * size - number of extensions + */ +extern char *get_basename(char *path, char *extensions[], int count); + +/* * Attempts to write all the supplied data. Returns the number of bytes * written, or -1 on error. */ diff -urpN JohnTheRipper.orig/src/mozilla2john.c JohnTheRipper/src/mozilla2john.c --- JohnTheRipper.orig/src/mozilla2john.c 2013-03-17 20:30:40.944915751 +0000 +++ JohnTheRipper/src/mozilla2john.c 2013-03-18 00:07:56.268863582 +0000 @@ -45,6 +45,7 @@ static void process_path(char *path) unsigned char salt_data[4096]; unsigned char data1[256]; unsigned char data2[512]; + char *ext[]={".db"}; SECItem secPreHash; SECItem pkcs5_pfxpbe; @@ -84,7 +85,7 @@ static void process_path(char *path) fprintf (stderr, "%s : no Master Password set!\n", path); return; } - printf("%s:$mozilla$*%d*%d*%d*",path, keyCrackData.version, keyCrackData.saltLen, keyCrackData.nnLen); + printf("%s:$mozilla$*%d*%d*%d*",get_basename(path, ext, 1), keyCrackData.version, keyCrackData.saltLen, keyCrackData.nnLen); for (i = 0; i < keyCrackData.saltLen; i++) printf("%c%c", itoa16[ARCH_INDEX(keyCrackData.salt[i] >> 4)], itoa16[ARCH_INDEX(keyCrackData.salt[i] & 0x0f)]); diff -urpN JohnTheRipper.orig/src/ssh2john.c JohnTheRipper/src/ssh2john.c --- JohnTheRipper.orig/src/ssh2john.c 2013-03-17 20:30:40.948915751 +0000 +++ JohnTheRipper/src/ssh2john.c 2013-03-18 00:10:11.064863041 +0000 @@ -121,7 +121,7 @@ static void process_file(const char *fil } /* key has been verified */ count = fread(buffer, 1, LINE_BUFFER_SIZE, keyfile); - printf("%s:$ssh2$", filename); + printf("%s:$ssh2$", get_basename((char*)filename,NULL,0)); for (i = 0; i < count; i++) { printf("%c%c", itoa16[ARCH_INDEX(buffer[i] >> 4)], itoa16[ARCH_INDEX(buffer[i] & 0x0f)]); diff -urpN JohnTheRipper.orig/src/zip2john.c JohnTheRipper/src/zip2john.c --- JohnTheRipper.orig/src/zip2john.c 2013-03-17 20:30:40.960915751 +0000 +++ JohnTheRipper/src/zip2john.c 2013-03-18 00:06:02.792864035 +0000 @@ -467,7 +467,8 @@ static void process_old_zip(const char * print_and_cleanup:; if (count_of_hashes) { int i=1; - char *bname = basename(strdup(fname)); + char *ext[]={".zip"}; + char *bname = get_basename((char*)fname, ext, 1); printf ("%s:$pkzip$%x*%x*", bname, count_of_hashes, zfp.two_byte_check?2:1); if (checksum_only)