Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do you htdigest 400 user accounts?

How do you generate user accounts for 400 users to do a load testing?

Htdigest forces you to type in a password each time, I have tried dos pipes like

echo password > htdigest -c realm username%1 

htdigest -c realm username%1 < password.txt 

but it is not working...

like image 559
zeroin23 Avatar asked Mar 14 '09 08:03

zeroin23


2 Answers

(Aside: On unix/linux the first one should be:

echo password | htdigest -c realm username$1

)

As htdigest doesn't have any nice way to pass the password in, I would use expect to automate the process.

An example from http://www.seanodonnell.com/code/?id=21:

#!/usr/bin/expect
#########################################
#$ file: htpasswd.sh
#$ desc: Automated htpasswd shell script
#########################################
#$
#$ usage example:
#$
#$ ./htpasswd.sh passwdpath username userpass
#$
######################################

set htpasswdpath [lindex $argv 0]
set username [lindex $argv 1]
set userpass [lindex $argv 2]

# spawn the htpasswd command process
spawn htpasswd $htpasswdpath $username

# Automate the 'New password' Procedure
expect "New password:"
send "$userpass\r"

expect "Re-type new password:"
send "$userpass\r"

It's left as an exercise to the user to convert this for Windows if required.

like image 122
Douglas Leeder Avatar answered Sep 28 '22 07:09

Douglas Leeder


You can also check out the python script that trac distributes on their website for htdigest passwords, you can then automate it:

Generating htdigest passwords without Apache

They also suggest something along these lines will work:

It is possible to use md5sum utility to generate digest-password file using such method:

$ printf "${user}:trac:${password}" | md5sum - >>user.htdigest

and manually delete " -" from the end and add "${user}:trac:" to the start of line from 'to-file'.


I have tested this on FreeBSD, not sure if this will work on Linux or Windows, so you may need to modify it a little:

(echo -n "user:realm:" && echo -n "user:realm:testing" | md5) > outfile

outfile contains:

user:realm:84af20dd88a2456d3bf6431fe8a59d16

Same thing with htdigest:

htdigest -c outfile2 realm user

output in outfile2

user:realm:84af20dd88a2456d3bf6431fe8a59d16

They are both the same, thereby proving correctness of the command line implementation!

like image 21
X-Istence Avatar answered Sep 28 '22 05:09

X-Istence