Follow @Openwall on Twitter for new release announcements and other news
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date: Wed, 9 May 2012 19:13:07 +0200
From: Frank Dittrich <frank_dittrich@...mail.com>
To: john-dev@...ts.openwall.com
Subject: Re: bash auto-completion for john

On 05/09/2012 02:42 AM, Frank Dittrich wrote:
> On 05/09/2012 01:15 AM, magnum wrote:
>> On 05/09/2012 12:31 AM, Frank Dittrich wrote:
>>> OK. Currently implemented:
>>>
>>> 1.
>>> Improved expansion for --config= (only files *.conf and *.ini will be
>>> suggested; IMO this is what sane people would want to have, even if you
>>> could also name your config file john.log)
>>> Negative side effect: expansion for ~ doesn't work anymore, but that is
>>> probably less important. (I hate doing this "manually", there really
>>> must be another way. The code is already full of ugly hacks, no need to
>>> add even more of them.)
>>
>> Is your very first approach, with "complete -F _filedir_xspec john" not
>> usable together with auto-completion?
> 
> No, because the
> 	complete -F _filedir_xspec john
> in my .bashrc would overwrite the
> 	complete -F _john john
> at the end of the bash completion script.

Meanwhile I found a solution for this problem, but I am nor very happy
with it.

I found the __expand_tilde_by_ref function in /etc/bash_completion.
It seems to do exactly what I need.
Nevertheless, i am a bit unhappy, because:
1. I found no usage of this function in any other file in
/etc/bash_completion.d/
2. the name starts with __, so this function might not be part of an
"official" API (if such a thing exists at all).

That's why I used
__expand_tilde_by_ref cur 2>/dev/null
to silence any possible errors in case that function might not exist.
I tested this with temporarily using
__FDTEST__expand_tilde_by_ref cur 2>/dev/null

No negative side effects, except that tilde expansion doesn't work when
the function does not exist.

Other changes:
1. I got rid of the dependency on ls (replaced by for f in *.rec ...),
so that the only external commands needed are sed and grep.

2. I added bash completion for unique.
But I didn't create another file. Instead, I added a function _unique to
the existing script.

For the old (official) unique without any options, there is no
auto-completion (offering existing files doesn't make much sense,
because the output file must not exist).

For the jumbo version, bash completion works like this:
$ cd magnumripper-magnum-jumbo-46dd1ae/run/
$ echo ''|./unique
[-cut=len]              [-ex_file_only=FNAME2]  [-mem=num]              [-v]
[-ex_file=FNAME2]       [-inp=fname]            OUTPUT-FILE
$ echo ''|./unique -
-cut=           -ex_file=       -ex_file_only=  -inp=           -mem=
        -v
$ echo ''|./unique -ex_file
-ex_file=       -ex_file_only=
$ echo ''|./unique -ex_file_only=
all.chr             fdtest              ldif2john.pl        pdf2john
        ssh2john
alnum.chr           genincstats.rb      lion2john-alt.pl    pw
        stats
...


File attached.

Frank

View attachment "john" of type "text/plain" (12585 bytes)

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.