|
Message-ID: <20110823183240.GA21430@openwall.com> Date: Tue, 23 Aug 2011 22:32:40 +0400 From: Solar Designer <solar@...nwall.com> To: john-dev@...ts.openwall.com Subject: Re: check for filter() is added, patch and questions about it Aleksey, Thank you for your work on this! On Tue, Aug 23, 2011 at 12:26:44PM +0400, Aleksey Cherepanov wrote: > I fixed it and prepared 2 patches: for John and for Jumbo. Both are > tested. I made that patch for Jumbo does not need patch for John, it > includes all changes needed. Is it right? Or should I make patch for > John and then patch with small Jumbo specific change to use both > patches with Jumbo and only first with John? You did everything right. You also got me thinking of a possibly better way to approach the problem. I liked the way you made the check early on, much sooner than external.c's check for generate(). When we make the check this early, there's no need to log_event() the error - we're not logging yet. Also, the check for batch mode was not required (it was a can't happen condition), although arguably it was cleaner/safer to have it anyway. Well, I ended up making more invasive changes, see below. I've only tested these against 1.7.8 proper so far, but I think they should work for -jumbo as well - probably as-is. Please test and let me know. Index: external.c =================================================================== RCS file: /home/cvs/cvsroot/Owl/packages/john/john/src/external.c,v retrieving revision 1.6 diff -u -r1.6 external.c --- external.c 27 Feb 2006 03:58:02 -0000 1.6 +++ external.c 23 Aug 2011 18:19:51 -0000 @@ -1,6 +1,6 @@ /* * This file is part of John the Ripper password cracker, - * Copyright (c) 1996-2001,2003,2004,2006 by Solar Designer + * Copyright (c) 1996-2001,2003,2004,2006,2011 by Solar Designer */ #include <stdio.h> @@ -16,10 +16,12 @@ #include "recovery.h" #include "config.h" #include "cracker.h" +#include "external.h" static char int_word[PLAINTEXT_BUFFER_SIZE]; static char rec_word[PLAINTEXT_BUFFER_SIZE]; +unsigned int ext_flags = 0; char *ext_mode = NULL; static c_int ext_word[PLAINTEXT_BUFFER_SIZE]; @@ -78,6 +80,19 @@ f_generate = c_lookup("generate"); f_filter = c_lookup("filter"); + if ((ext_flags & EXT_REQ_GENERATE) && !f_generate) { + fprintf(stderr, "No generate() for external mode: %s\n", mode); + error(); + } + if ((ext_flags & EXT_REQ_FILTER) && !f_filter) { + fprintf(stderr, "No filter() for external mode: %s\n", mode); + error(); + } + if ((ext_flags & (EXT_USES_GENERATE | EXT_USES_FILTER)) == + EXT_USES_FILTER && f_generate) + fprintf(stderr, "Warning: external mode defines generate(), " + "but is only used for filter()\n"); + ext_mode = mode; } @@ -147,13 +162,6 @@ log_event("Proceeding with external mode: %.100s", ext_mode); - if (!f_generate) { - log_event("! No generate() function defined"); - fprintf(stderr, "No generate() for external mode: %s\n", - ext_mode); - error(); - } - internal = (unsigned char *)int_word; external = ext_word; while (*external) Index: external.h =================================================================== RCS file: /home/cvs/cvsroot/Owl/packages/john/john/src/external.h,v retrieving revision 1.1 diff -u -r1.1 external.h --- external.h 10 Apr 2002 14:13:25 -0000 1.1 +++ external.h 23 Aug 2011 18:19:51 -0000 @@ -1,6 +1,6 @@ /* * This file is part of John the Ripper password cracker, - * Copyright (c) 1996-2001 by Solar Designer + * Copyright (c) 1996-2001,2011 by Solar Designer */ /* @@ -12,6 +12,13 @@ #include "loader.h" +#define EXT_REQ_GENERATE 0x00000001 +#define EXT_REQ_FILTER 0x00000002 +#define EXT_USES_GENERATE 0x00010000 +#define EXT_USES_FILTER 0x00020000 + +extern unsigned int ext_flags; + /* * Defined for use in the ext_filter() macro, below. */ Index: options.c =================================================================== RCS file: /home/cvs/cvsroot/Owl/packages/john/john/src/options.c,v retrieving revision 1.22 diff -u -r1.22 options.c --- options.c 22 Jun 2011 13:03:43 -0000 1.22 +++ options.c 23 Aug 2011 18:19:51 -0000 @@ -18,6 +18,7 @@ #include "recovery.h" #include "options.h" #include "bench.h" +#include "external.h" struct options_main options; @@ -123,10 +124,16 @@ opt_process(opt_list, &options.flags, argv); - if ((options.flags & - (FLG_EXTERNAL_CHK | FLG_CRACKING_CHK | FLG_MAKECHR_CHK)) == - FLG_EXTERNAL_CHK) - options.flags |= FLG_CRACKING_SET; + ext_flags = 0; + if (options.flags & FLG_EXTERNAL_CHK) { + if (options.flags & (FLG_CRACKING_CHK | FLG_MAKECHR_CHK)) { + ext_flags = EXT_REQ_FILTER | EXT_USES_FILTER; + } else { + options.flags |= FLG_CRACKING_SET; + ext_flags = EXT_REQ_GENERATE | + EXT_USES_GENERATE | EXT_USES_FILTER; + } + } if (!(options.flags & FLG_ACTION)) options.flags |= FLG_BATCH_SET; Thanks again, Alexander
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.