#!/usr/bin/perl $pgdir = "/public/vhost/g/gutenberg/html"; use Digest::MD5; $d = new Digest::MD5; print "Name? "; $name = <>; chomp $name; if ($name !~ /^\w+ \w+( \w+)*$/) { die "Invalid name.\n"; } print "E-mail? "; $email = <>; chomp $email; $email = sprintf ("\L%s", $email); if ($email !~ /^[\w-][\w\.-]*@[\w\.-]+\.\w{2,}$/) { die "Invalid E-mail address."; } print "Password? "; $password = <>; chomp $password; if (length($password) < 5 ) { die "Error, Password too short."; } print "Confirm password. "; $password2 = <>; chomp $password2; if ($password ne $password2) { die "Passwords do not match.\n"; } print "Assign administrative access to this user? "; $admin = <>; chomp $admin; if ($admin eq 'y' || $admin eq "Y") { $admin = 1; print "Admin access has been granted.\n"; } else { $admin = 0; print "Admin access was not granted.\n"; } @chars = ('.', '/', '0'..'9', 'A'..'Z', 'a'..'z'); $password = crypt ($password, join ('', @chars[rand (64)], @chars [rand (64)])); print "Encrypted password = $password\n"; $hash = $d->md5_hex ($password); print "Hash = $hash\n"; open (DB, "+>> $pgdir/cdproject/data/users.dat") or die "Error opening user database: $!\n"; seek (DB, 0, 0) or die "Error: $!\n"; while () { chomp; @rec = split (/\|/); if ($rec[1] eq $email) { die "Error: user already exists.\n"; } } seek (DB, 0, 2) or die "Error: $!\n"; print DB "$name|$email|$password|$hash|$admin\n"; close (DB) or die "Error closing database: $!\n"; print "User added.\n"; exit;