Example—Generating Random Passwords
mkpasswd
is an example script that comes with Expect. mkpasswd
generates a new password and optionally assigns it to a user by calling a password-setting program. This automates password creation and assignment while preventing any public exposure of the password.
In order to generate random passwords, mkpasswd
uses a variation of the random number procedure above. rand
generates a random integer from 0 to n-1.
proc rand {n} { global _ran set period 233280 set _ran [expr ($_ran*9301 + 49297) % $period] expr int($n*($_ran/double($period))) }
mkpasswd
accepts arguments to control the length and how many digits and letters must be in a generated password. After parsing the arguments, minnum
contains the minimum number of digits the password must have. minlower
and minupper
contain the minimum number of lower and uppercase characters. If the password must be longer than the sum of these variables, they are increased appropriately.
Once the arguments have been handled, the password generation code is simple. In the following fragment, the password is initially created with no characters. Each iteration of each for
loop generates a random character of the right type and calls insertchar
which adds the character to password
.
# initialize password set password "" # add digits to the password for {set i 0} {$i<$minnum} {incr i} { insertchar [rand 10] } # add lowercase letters for {set i 0} {$i<$minlower} {incr i} { insertchar [format "%c" [expr 0x61 + [rand ...
Get Exploring Expect now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.