|
Message-ID: <loom.20160424T183551-55@post.gmane.org> Date: Sun, 24 Apr 2016 16:52:17 +0000 (UTC) From: Claudio André <claudioandre.br@...il.com> To: john-dev@...ts.openwall.com Subject: Re: System wide build Solar Designer <solar@...> writes: > > Hi Claudio, > > > > This is not ugly but the 'patch' for JOHN_SYSTEMWIDE_EXEC is going to be. > > What do you mean? I was expecting you guys to dislike the hole idea. I will create a packager patch (not suitable for merge) and I like the idea to use only $JOHN for system wide 'self contained' builds ). The excerpt below might clarify. + puts("System-wide exec: " "$JOHN/"); + puts("System-wide home: " "$JOHN/"); + printf("Private home is %s\n", path_expand(JOHN_PRIVATE_HOME)); If a patch like the original one get accepted, I will have to think again. My real patch is: ---------------------------------- diff --git a/src/john.c b/src/john.c index 3b0c44f..d9b15ac 100644 --- a/src/john.c +++ b/src/john.c @@ -454,7 +454,7 @@ static void john_omp_init(void) static void john_omp_fallback(char **argv) { if (!getenv("JOHN_NO_OMP_FALLBACK") && john_omp_threads_new <= 1) { rec_done(-2); -#ifdef JOHN_SYSTEMWIDE_EXEC +#if defined(JOHN_SYSTEMWIDE_EXEC) && !defined(_SNAP) #define OMP_FALLBACK_PATHNAME JOHN_SYSTEMWIDE_EXEC "/" OMP_FALLBACK_BINARY #else #define OMP_FALLBACK_PATHNAME path_expand("$JOHN/" OMP_FALLBACK_BINARY) @@ -463,7 +463,7 @@ static void john_omp_fallback(char **argv) { mpi_teardown(); #endif execv(OMP_FALLBACK_PATHNAME, argv); -#ifdef JOHN_SYSTEMWIDE_EXEC +#if defined(JOHN_SYSTEMWIDE_EXEC) && !defined(_SNAP) perror("execv: " OMP_FALLBACK_PATHNAME); #else perror("execv: $JOHN/" OMP_FALLBACK_BINARY); @@ -1367,13 +1367,13 @@ static void CPU_detect_or_fallback(char **argv, int make_check) #error CPU_FALLBACK is incompatible with the current DOS and Windows code #endif if (!make_check) { -#ifdef JOHN_SYSTEMWIDE_EXEC +#if defined(JOHN_SYSTEMWIDE_EXEC) && !defined(_SNAP) #define CPU_FALLBACK_PATHNAME JOHN_SYSTEMWIDE_EXEC "/" CPU_FALLBACK_BINARY #else #define CPU_FALLBACK_PATHNAME path_expand("$JOHN/" CPU_FALLBACK_BINARY) #endif execv(CPU_FALLBACK_PATHNAME, argv); -#ifdef JOHN_SYSTEMWIDE_EXEC +#if defined(JOHN_SYSTEMWIDE_EXEC) && !defined(_SNAP) perror("execv: " CPU_FALLBACK_PATHNAME); #else perror("execv: $JOHN/" CPU_FALLBACK_BINARY); diff --git a/src/listconf.c b/src/listconf.c index 4531993..1c0b813 100644 --- a/src/listconf.c +++ b/src/listconf.c @@ -134,10 +134,16 @@ static void listconf_list_build_info(void) SIMD_PARA_SHA256, SIMD_PARA_SHA512); #endif #if JOHN_SYSTEMWIDE +#if defined(_SNAP) + puts("System-wide exec: " "$JOHN/"); + puts("System-wide home: " "$JOHN/"); + printf("Private home is %s\n", path_expand(JOHN_PRIVATE_HOME)); +#else puts("System-wide exec: " JOHN_SYSTEMWIDE_EXEC); puts("System-wide home: " JOHN_SYSTEMWIDE_HOME); puts("Private home: " JOHN_PRIVATE_HOME); #endif +#endif #if CPU_FALLBACK puts("CPU fallback binary: " CPU_FALLBACK_BINARY); #endif diff --git a/src/path.c b/src/path.c index af97e38..fd9b4fa 100644 --- a/src/path.c +++ b/src/path.c @@ -46,14 +46,44 @@ void path_init(char **argv) #ifdef JOHN_PRIVATE_HOME char *private; #endif -#else - char *pos; #endif + char *pos; + + if (argv[0]) { + int dos=0; + if (!john_home_path) { + pos = strrchr(argv[0], '/'); + if (!pos) { + pos = strrchr(argv[0], '\\'); // handle this for MSVC and MinGW which use 'DOS' style C:\path\run\john syntax. + if (pos>argv[0] && argv[0][1] == ':') { + argv[0] += 2; + dos = 1; + } + } + if (pos) { + john_home_length = pos - argv[0] + 1; + if (john_home_length >= PATH_BUFFER_SIZE) return; + + john_home_path = mem_alloc(PATH_BUFFER_SIZE); + memcpy(john_home_path, argv[0], john_home_length); + john_home_path[john_home_length] = 0; + pos = strchr(john_home_path, '\\'); + while (dos && pos) { + *pos = '/'; + pos = strchr(pos, '\\'); + } + } + } + } #if JOHN_SYSTEMWIDE +#if !defined(_SNAP) + MEM_FREE(john_home_path); + john_home_path = mem_alloc(PATH_BUFFER_SIZE); strnzcpy(john_home_path, JOHN_SYSTEMWIDE_HOME "/", PATH_BUFFER_SIZE); john_home_length = strlen(john_home_path); +#endif if (user_home_path) return; @@ -82,33 +112,6 @@ void path_init(char **argv) } else fprintf(stderr, "Created directory: %s\n", private); #endif -#else - if (argv[0]) { - int dos=0; - if (!john_home_path) { - pos = strrchr(argv[0], '/'); - if (!pos) { - pos = strrchr(argv[0], '\\'); // handle this for MSVC and MinGW which use 'DOS' style C:\path\run\john syntax. - if (pos>argv[0] && argv[0][1] == ':') { - argv[0] += 2; - dos = 1; - } - } - if (pos) { - john_home_length = pos - argv[0] + 1; - if (john_home_length >= PATH_BUFFER_SIZE) return; - - john_home_path = mem_alloc(PATH_BUFFER_SIZE); - memcpy(john_home_path, argv[0], john_home_length); - john_home_path[john_home_length] = 0; - pos = strchr(john_home_path, '\\'); - while (dos && pos) { - *pos = '/'; - pos = strchr(pos, '\\'); - } - } - } - } #endif }
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.