Newer
Older
<?
function make_password($length = 8)
Tim Clark
committed
{
$vowels = "aeiouy";
$consonants = "bcdfghjklmnprst";
$password = "";
$cn = strlen($consonants) - 1;
$vn = strlen($vowels) - 1;
// Start on cons or vowel
$alt = mt_rand(0, 1);
// How many numbers
$len = mt_rand($length - 3, $length);
for ($i = 0; $i < $len; $i++) {
if ($alt == 1) {
$password .= $consonants[mt_rand(0, $cn)];
$alt = 0;
} else {
$password .= $vowels[mt_rand(0, $vn)];
$alt = 1;
Tim Clark
committed
}
}
for ($i = 0; $i < $length - $len; $i++) {
$password .= mt_rand(0, 9);
}
return $password;
Tim Clark
committed
}
//get the year, this'll be the start/prefix of the uid
$prefix = date("Y");
//generate a uid
//check to see if it's taken/safe to use
$ok = false;
while ($ok == false) {
//generate random number between 00000 and 99999
$uid = sprintf("%06d", mt_rand(0, 99999));
// id return 1 for error (safe to take). 0 for sucess (taken) not safe
shell_exec("id ".$prefix.$uid, $output, $returnVal);
//check the result of id
if ($returnVal == 1) {
// We have a unused one!
$ok = true;
Tim Clark
committed
}
Tim Clark
committed
return $safeuid;
Tim Clark
committed
}
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
function generateLdif($uid, $password, $type, $realname, $username)
{
// explode the realname
$nameexplode = explode(' ', trim($realname));
// hash the password
$ldappassword = "{SHA}" . base64_encode(pack("H*", sha1($password)));
// compile ldif
$ldif = "dn: uid=" . $username . ",ou=People,dc=sucs,dc=org\n";
$ldif .= "uid: " . $username . "\n";
$ldif .= "cn: " . $realname . "\n";
// if only has 1 part to real name (and therefore a soc) then set it as sn otherwise set first name to given name and last name to sn
if (count($nameexplode) > 1) {
$ldif .= "givenName: " . $nameexplode[0] . "\n";
$ldif .= "sn: " . $nameexplode[count($nameexplode) - 1] . "\n";
} else {
$ldif .= "sn: " . $realname . "\n";
}
$ldif .= "mail: " . $username . "@sucs.org\n";
$ldif .= "objectClass: person\n";
$ldif .= "objectClass: organizationalPerson\n";
$ldif .= "objectClass: inetOrgPerson\n";
$ldif .= "objectClass: posixAccount\n";
$ldif .= "objectClass: top\n";
$ldif .= "userPassword: " . $ldappassword . "\n";
$ldif .= "loginShell: /bin/bash\n";
$ldif .= "uidNumber: " . $uid . "\n";
// make some society specific changes
// More like make sure peoples home dirs get made in the right place
if ($type == 2) {
$gid = 1130;
$homebase = "society";
} elseif ($type == 5) {
$gid = 100;
$homebase = "alumni";
} elseif ($type == 3) {
$gid = 100;
$homebase = "honorary";
} elseif ($type == 4) {
$gid = 100;
$homebase = "life";
} else {
$gid = 100;
$homebase = "member";
}
$ldif .= "gidNumber: " . $gid . "\n";
$ldif .= "homeDirectory: /home/" . $homebase . "/" . $username . "\n";
$ldif .= "gecos: " . $realname . "\n\n";
return $ldif;
Tim Clark
committed
}
// function to renew a persons sucs membership
function renew_membership($username)
{
// we need to the sucs db here
global $sucsDB;
// get their details from the sucs db
$userdata = $sucsDB->Execute("SELECT * FROM members WHERE username=?", array($username));
// include the date file so we can call the paidUntil function
include_once("date.php");
// Update their record in the DB
$sucsDB->Execute("UPDATE members SET paid=?, lastupdate=DEFAULT, lastedit=? WHERE username=?", array(paidUntil(time()), "99999", $username));
// Give them their 200 print credits
exec("/usr/local/sbin/printerrenew.apache ${username} 200");
// apprently sending them an email confirming so is nice
$message = "Your Swansea University Computer Society (SUCS) membership has been renewed\n\n";
$message .= "Username: ${username}\n";
$message .= "If you do not know or have forgotten your password, please email admin@sucs.org to arrange for it to be changed.\n\n";
$message .= "Regards\n The SUCS admin";
$header = "From: admin@sucs.org\r\n";
$header .= "Reply-To: admin@sucs.org";
// send it to their personal account
mail($userdata->fields['email'], "SUCS account renewal", $message, $header);