|
|
Message-ID: <2a6bae242fc547284e5c311cf7d81aae@smtp.hushmail.com>
Date: Sun, 17 Mar 2013 23:14:53 +0100
From: magnum <john.magnum@...hmail.com>
To: john-dev@...ts.openwall.com
Subject: Re: All *2john programs should use basename of filename when put as “login” field
On 17 Mar, 2013, at 22:54 , Lukas Odzioba <lukas.odzioba@...il.com> wrote:
> 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:
...
> char *get_basename(const char *path, const char *extensions[], int count)
> {
> assert(path);
> assert(*path);
I think we should avoid asserts other than for debugging. We could opt to return a valid null string:
if (!path || !*path)
return "";
> static char retmem[64];
I think I'd use at least 256 here.
> 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);
The above does not guarantee a null termination. Replace the two lines with strnzcpy(retmem, base, sizeof(retmem)), conveniently also located in misc.c.
> free(pathdup);
> return retmem;
>
> error:
> if(pathdup)
> free(pathdup);
> return path;
> }
The rest looks fine to me, but I'm not exactly a skilled code reviewer :)
magnum
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.