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 ...Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access