X-Git-Url: https://git.adam-barratt.org.uk/?a=blobdiff_plain;f=update.cgi;h=d1aa73ab35c6da24a06dae0f38e4839ff46fe1f0;hb=d807a73baa1d9bf27e6bf4351d5886e5b0761524;hp=33fc9de543e409a5f526d90815e178c33416f9d0;hpb=2333aa3b88bd7c8b6b867ae5689bb174a558804c;p=mirror%2Fuserdir-ldap-cgi.git diff --git a/update.cgi b/update.cgi index 33fc9de..d1aa73a 100755 --- a/update.cgi +++ b/update.cgi @@ -1,7 +1,8 @@ #!/usr/bin/perl -# $Id: update.cgi,v 1.5 1999/12/13 04:56:48 tausq Exp $ +# $Id: update.cgi,v 1.13 2006/12/28 02:44:02 rmurray Exp $ # (c) 1999 Randolph Chung. Licensed under the GPL. +# (c) 2006 Ryan Murray. Licensed under the GPL. use lib '.'; use strict vars; @@ -21,8 +22,8 @@ my $authtoken = $query->param('authtoken'); my $password = &Util::CheckAuthToken($authtoken); my $editdn = $query->param('editdn'); -if (!($id && $password)) { - print "Location: $proto://$ENV{SERVER_NAME}/$config{webloginurl}\n\n"; +if ($proto eq "http" || !($id && $password)) { + print "Location: https://$ENV{SERVER_NAME}/$config{webloginhtml}\n\n"; exit; } @@ -43,7 +44,7 @@ $auth = ($mesg->code == LDAP_SUCCESS); if (!$auth) { $ldap->unbind; - &Util::HTMLError("You have not been authenticated. Please Login"); + &Util::HTMLError("You have not been authenticated. Please Login"); } # Authenticated.... @@ -70,6 +71,8 @@ if (!($query->param('doupdate'))) { $data{$_} = $entry->{$_}->[0]; } + $data{gender} = 9 if not $data{gender}; + # Now we have to fill in the rest that needs some processing... $data{id} = $id; $data{authtoken} = $authtoken; @@ -77,15 +80,38 @@ if (!($query->param('doupdate'))) { $data{staddress} = $entry->{postaladdress}->[0]; $data{staddress} =~ s/\$/\n/; $data{countryname} = &Util::LookupCountry($data{c}); + + if ($data{mailgreylisting} eq "TRUE") { + $data{mailgreylisting} = " checked"; + } else { + $data{mailgreylisting} = ""; + } + + if ($data{mailcallout} eq "TRUE") { + $data{mailcallout} = " checked"; + } else { + $data{mailcallout} = ""; + } $data{email} = join(", ", @{$entry->{emailforward}}); + my $genderselect = ''; + # finally we can send output... my ($sub, $substr); &Util::HTMLSendHeader; open (F, "<$config{webupdatehtml}") || &Util::HTMLError($!); while () { s/~(.+?)~/$data{$1}/g; + s/<\?genderselect>/$genderselect/; print; } close F; @@ -94,8 +120,10 @@ if (!($query->param('doupdate'))) { # Actually update stuff... my ($newpassword, $newstaddress); - if (($query->param('labeledurl')) && - ($query->param('labeledurl') !~ /^https?:\/\//i)) { + &Util::FixParams($query); + + if (($query->param('labeleduri')) && + ($query->param('labeleduri') !~ /^https?:\/\//i)) { &Util::HTMLError("Your homepage URL is invalid"); } @@ -107,52 +135,83 @@ if (!($query->param('doupdate'))) { # create a md5 crypted password $newpassword = '{crypt}'.crypt($query->param('newpass'), &Util::CreateCryptSalt(1)); - LDAPUpdate($ldap, $editdn, 'userPassword', $newpassword); + &Util::LDAPUpdate($ldap, $editdn, 'userPassword', $newpassword); &Util::UpdateAuthToken($authtoken, $query->param('newpass')); } $newstaddress = $query->param('staddress'); $newstaddress =~ s/\n/\$/m; + + my $gender = $query->param('gender'); + if ($gender != 1 && $gender != 2) { + $gender = 9; # unspecified + } + my ($bd_ok, $bd_yr, $bd_mo, $bd_day); + + if ($query->param('birthdate') =~ /^([1-9][0-9]{3})([01][0-9])([0-3][0-9])$/) { + $bd_yr = $1; $bd_mo = $2; $bd_day = $3; + if ($bd_yr > 1850 and $bd_mo > 0 and $bd_mo <= 12 and $bd_day > 0) { + if ($bd_mo == 2) { + if ($bd_day == 29 and ($bd_yr % 4 == 0 && ($bd_yr % 100 != 0 || $bd_yr % 400 == 0))) { + $bd_ok = 1; + } elsif ($bd_day <= 28) { + $bd_ok = 1; + } + } elsif ($bd_mo == 4 or $bd_mo == 6 or $bd_mo == 9 or $bd_mo == 11) { + if ($bd_day <= 30) { + $bd_ok = 1; + } + } else { + if ($bd_day <= 31) { + $bd_ok = 1; + } + } + } + } elsif (not defined($query->param('birthdate')) or $query->param('birthdate') =~ /^\s*$/) { + $bd_ok = 1; + } my ($lat, $long); ($lat, $long) = &Util::CheckLatLong($query->param('latitude'), $query->param('longitude')); - - LDAPUpdate($ldap, $editdn, 'postalAddress', $newstaddress); - LDAPUpdate($ldap, $editdn, 'l', $query->param('l')); - LDAPUpdate($ldap, $editdn, 'latitude', $lat); - LDAPUpdate($ldap, $editdn, 'longitude', $long); - LDAPUpdate($ldap, $editdn, 'c', $query->param('country')); - LDAPUpdate($ldap, $editdn, 'postalcode', $query->param('postalcode')); - LDAPUpdate($ldap, $editdn, 'telephoneNumber', $query->param('telephonenumber')); - LDAPUpdate($ldap, $editdn, 'facsimileTelephoneNumber', $query->param('facsimiletelephonenumber')); - LDAPUpdate($ldap, $editdn, 'loginShell', $query->param('loginshell')); - LDAPUpdate($ldap, $editdn, 'emailForward', $query->param('email')); - LDAPUpdate($ldap, $editdn, 'privatesub', $query->param('privatesub')); - LDAPUpdate($ldap, $editdn, 'ircNick', $query->param('ircnick')); - LDAPUpdate($ldap, $editdn, 'labeledUrl', $query->param('labeledurl')); - LDAPUpdate($ldap, $editdn, 'onvacation', $query->param('onvacation')); + my ($greylisting, $callout); + + $greylisting = $query->param('mailgreylisting'); + if (!$greylisting or $greylisting ne "TRUE") { + $greylisting = "FALSE"; + } + + $callout = $query->param('mailcallout'); + if (!$callout or $callout ne "TRUE") { + $callout = "FALSE"; + } + + &Util::LDAPUpdate($ldap, $editdn, 'postalAddress', $newstaddress); + &Util::LDAPUpdate($ldap, $editdn, 'l', $query->param('l')); + &Util::LDAPUpdate($ldap, $editdn, 'latitude', $lat); + &Util::LDAPUpdate($ldap, $editdn, 'longitude', $long); + &Util::LDAPUpdate($ldap, $editdn, 'c', $query->param('country')); + &Util::LDAPUpdate($ldap, $editdn, 'postalCode', $query->param('postalcode')); + &Util::LDAPUpdate($ldap, $editdn, 'telephoneNumber', $query->param('telephonenumber')); + &Util::LDAPUpdate($ldap, $editdn, 'facsimileTelephoneNumber', $query->param('facsimiletelephonenumber')); + &Util::LDAPUpdate($ldap, $editdn, 'loginShell', $query->param('loginshell')); + &Util::LDAPUpdate($ldap, $editdn, 'emailForward', $query->param('email')); + &Util::LDAPUpdate($ldap, $editdn, 'privateSub', $query->param('privatesub')); + &Util::LDAPUpdate($ldap, $editdn, 'ircNick', $query->param('ircnick')); + &Util::LDAPUpdate($ldap, $editdn, 'icqUin', $query->param('icquin')); + &Util::LDAPUpdate($ldap, $editdn, 'jabberJID', $query->param('jabberjid')); + &Util::LDAPUpdate($ldap, $editdn, 'labeledURI', $query->param('labeleduri')); + &Util::LDAPUpdate($ldap, $editdn, 'onVacation', $query->param('onvacation')); + &Util::LDAPUpdate($ldap, $editdn, 'gender', $gender); + &Util::LDAPUpdate($ldap, $editdn, 'birthDate', $query->param('birthdate')) if $bd_ok; + &Util::LDAPUpdate($ldap, $editdn, 'mailDisableMessage', $query->param('maildisablemessage')); + &Util::LDAPUpdate($ldap, $editdn, 'mailCallout', $callout); + &Util::LDAPUpdate($ldap, $editdn, 'mailGreylisting', $greylisting); # when we are done, reload the page with the updated details. - my $url = "$proto://$ENV{SERVER_NAME}/$config{webupdateurl}?id=$id&authtoken=$authtoken&editdn="; + my $url = "https://$ENV{SERVER_NAME}/$config{webupdateurl}?id=$id&authtoken=$authtoken&editdn="; $url .= uri_escape($editdn, "\x00-\x40\x7f-\xff"); print "Location: $url\n\n"; } $ldap->unbind; - -sub LDAPUpdate { - my $ldap = shift; - my $dn = shift; - my $attr = shift; - my $val = shift; - my $mesg; - - if (!$val) { - $mesg = $ldap->modify($dn, delete => { $attr => [] }); - } else { - $val = [ $val ] if (!ref($val)); - $mesg = $ldap->modify($dn, replace => { $attr => $val }); - $mesg->code && &Util::HTMLError("error updating $attr: ".$mesg->error); - } -}