summaryrefslogtreecommitdiffstats
path: root/ipapython/ipautil.py
diff options
context:
space:
mode:
Diffstat (limited to 'ipapython/ipautil.py')
-rw-r--r--ipapython/ipautil.py32
1 files changed, 23 insertions, 9 deletions
diff --git a/ipapython/ipautil.py b/ipapython/ipautil.py
index c06e7bbcf..44580be8e 100644
--- a/ipapython/ipautil.py
+++ b/ipapython/ipautil.py
@@ -550,21 +550,35 @@ def parse_generalized_time(timestr):
except ValueError:
return None
-def ipa_generate_password():
+def ipa_generate_password(characters=None,pwd_len=None):
+ ''' Generates password. Password cannot start or end with a whitespace
+ character. It also cannot be formed by whitespace characters only.
+ Length of password as well as string of characters to be used by
+ generator could be optionaly specified by characters and pwd_len
+ parameters, otherwise default values will be used: characters string
+ will be formed by all printable non-whitespace characters and space,
+ pwd_len will be equal to value of GEN_PWD_LEN.
+ '''
+ if not characters:
+ characters=string.digits + string.ascii_letters + string.punctuation + ' '
+ else:
+ if characters.isspace():
+ raise ValueError("password cannot be formed by whitespaces only")
+ if not pwd_len:
+ pwd_len = GEN_PWD_LEN
+
+ upper_bound = len(characters) - 1
rndpwd = ''
r = random.SystemRandom()
- for x in range(GEN_PWD_LEN):
- # do not generate space (chr(32)) as the first or last character
- if x == 0 or x == (GEN_PWD_LEN-1):
- rndchar = chr(r.randint(33,126))
- else:
- rndchar = chr(r.randint(32,126))
+ for x in range(pwd_len):
+ rndchar = characters[r.randint(0,upper_bound)]
+ if (x == 0) or (x == pwd_len-1):
+ while rndchar.isspace():
+ rndchar = characters[r.randint(0,upper_bound)]
rndpwd += rndchar
-
return rndpwd
-
def format_list(items, quote=None, page_width=80):
'''Format a list of items formatting them so they wrap to fit the
available width. The items will be sorted.