|
|
Message-ID: <CABob6iqPFGyWp=_beo3xsAt3qh38dfpz9g-1iJ2wg3zmCQRniw@mail.gmail.com>
Date: Sun, 17 Mar 2013 22:54:55 +0100
From: Lukas Odzioba <lukas.odzioba@...il.com>
To: john-dev@...ts.openwall.com
Subject: Re: All *2john programs should use basename of filename when put as “login” field
2013/3/17 magnum <john.magnum@...hmail.com>:
> As far as I know there are two problems:
> 1. Some versions of basename() modify the original string, some do not. This is only a problem if we want to keep the original full name as well.
> 2. Some versions of basename() may return NULL on error. This problem might be more or less academic for this use.
>
> The current gpg2john code handles both cases. A generic version in misc.c or maybe in path.c is a good idea. Supporting an arbitrary list of extensions to strip would be powerful of course.
misc.s seems to be better place.
What do you think about this version:
#include <stdio.h>
#include <stdlib.h>
#include <libgen.h>
#include <assert.h>
#include <string.h>
char *get_basename(const char *path, const char *extensions[], int count)
{
assert(path);
assert(*path);
static char retmem[64];
char *pathdup = NULL;
char *base = NULL;
int retsize,i,extlen,baselen = 0;
pathdup = strdup(path);
if(!pathdup)
goto error;
base = basename(pathdup);
if(!base || !*base)
goto error;
baselen = strlen(base);
while(count--) {
extlen=strlen(extensions[count]);
if ( baselen > extlen &&
!strcmp(&base[baselen-extlen],extensions[count]) ) {
base[baselen-extlen]=0;
break;
}
}
retsize = strlen(base) + 1;
memcpy(retmem, base, retsize<64?retsize:64);
free(pathdup);
return retmem;
error:
if(pathdup)
free(pathdup);
return path;
}
int main(void) {
char *test="test.txt";
char *ext[]={".pdf",".txt",".gpg"};
printf("[%s]",get_basename(test,ext,3));
printf("[%s]",get_basename("/root/test.pdf",ext,3));
printf("[%s]",get_basename("/root/test.odt",ext,3));
printf("[%s]",get_basename("../test.pdf",ext,3));
printf("[%s]",get_basename("../test.gpg",ext,3));
printf("[%s]",get_basename("x",ext,3));
printf("[%s]",get_basename("xtxt",ext,3));
return 0;
}
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.