Subversion Repositories pub

Compare Revisions

No changes between revisions

Ignore whitespace Rev 189 → Rev 190

/relevation/branches/1.1/devtools/genpw.py
0,0 → 1,66
#!/usr/bin/env python
 
"""
Simplistic Password Generator.
"""
 
# This file is released under the CC0 license (CC equivalent of Public Domain).
#
# License details:
# http://creativecommons.org/publicdomain/zero/1.0/legalcode
 
import random
import string
import locale
import sys
 
DEFAULT_RESULTS = 20
DEFAULT_LENGTH = 8
#Letters and digits are repeated to favour them
FAVOURED_SET = string.lowercase + string.digits #string.letters
STDSET = string.uppercase + string.punctuation
DEFAULT_CSET = FAVOURED_SET * 8 + STDSET
 
REJECTS_SET = [ 'l', '1', 'I', '0', 'O' ] # FIXME: What else?
 
def pwgen(length=DEFAULT_LENGTH, possible=DEFAULT_CSET, reject_ambiguous=False):
pw = ''
rejects = []
if reject_ambiguous:
rejects = REJECTS_SET
for i in range(length):
pick = random.choice(possible)
while pick in rejects:
pick = random.choice(possible)
pw += pick
return pw
 
def main(argv):
rounds = DEFAULT_RESULTS
length = DEFAULT_LENGTH
cset = DEFAULT_CSET
reject_ambiguous = False
 
# No need to use getopt or anything like it
positional = []
for arg in argv:
if arg in ( '-B', '--ambiguous' ):
reject_ambiguous = True
else:
positional.append(arg)
try:
if len(positional) > 0:
length = int(positional[0])
if len(positional) > 1:
rounds = int(positional[1])
except ValueError:
sys.stderr.write('Usage: pwgen [-B] [length] [num pw]\n');
sys.exit(2);
 
for i in range(rounds):
print pwgen(length=length, reject_ambiguous=reject_ambiguous)
 
if __name__ == '__main__':
locale.setlocale(locale.LC_ALL, 'C')
main(sys.argv[1:])
 
/relevation/branches/1.1/devtools/.
Property changes:
Added: bugtraq:number
+true
\ No newline at end of property