X-Git-Url: https://git.adam-barratt.org.uk/?a=blobdiff_plain;f=update.cgi;h=406d8134cd1600dd6c160c3af41ed5df9d6674aa;hb=cee6f4d1f3276c419e1485bd840a3345307c9142;hp=f0ff1acbdc140248413930ad4837de4efb30c148;hpb=ae99a873b1ed078bffc3342461aab9f738436bb7;p=mirror%2Fuserdir-ldap-cgi.git diff --git a/update.cgi b/update.cgi index f0ff1ac..406d813 100755 --- a/update.cgi +++ b/update.cgi @@ -3,6 +3,7 @@ # $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. +# Copyright (c) 2008, 2011, 2012, 2014, 2015 Peter Palfrader use lib '.'; use strict vars; @@ -10,10 +11,13 @@ use strict vars; use CGI; use Data::UUID; use Digest::HMAC_SHA1 qw(hmac_sha1_hex); +use Digest::MD5 qw(md5_hex); use Util; use English; use URI::Escape; +use Crypt::PasswdMD5; use Net::LDAP qw(LDAP_SUCCESS LDAP_PROTOCOL_ERROR); +use Net::LDAP::Util qw(ldap_explode_dn); my %config = &Util::ReadConfigFile; @@ -22,8 +26,16 @@ my $proto = ($ENV{HTTPS} ? "https" : "http"); my $id = $query->param('id'); my $authtoken = $query->param('authtoken'); -my $password = &Util::CheckAuthToken($authtoken); -my $editdn = $query->param('editdn'); + +my $password = undef; + +if ($authtoken || $id) { + $password = Util::TouchAuthToken($authtoken, $id); +} else { + $password = ''; + $id = ''; + $authtoken = ''; +} if ($proto eq "http" || !($id && $password)) { print "Location: https://$ENV{SERVER_NAME}/$config{webloginhtml}\n\n"; @@ -41,7 +53,8 @@ sub DieHandler { $ldap->unbind if (defined($ldap)); } -$SIG{__DIE__} = \&DieHandler; +#$SIG{__DIE__} = \&DieHandler; +my $editdn = "uid=$id,$config{basedn}"; $ldap = Net::LDAP->new($config{ldaphost}); &Util::UpgradeConnection($ldap) unless $config{usessl} eq 'False'; @@ -143,7 +156,7 @@ if (!($query->param('doupdate'))) { my $confirmstring = ''; my $sudopassword = ''; for my $e(@{$entry->{'sudopassword'}}) { - my ($uuid, $status, $hosts, $crypted) = ($e =~ /^([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}) (confirmed:[0-9a-f]{40}|unconfirmed) ([a-z0-9.,*]+) ([^ ]+)$/); + my ($uuid, $status, $hosts, $crypted) = ($e =~ /^([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}) (confirmed:[0-9a-f]{40}|unconfirmed) ([a-z0-9.,*-]+) ([^ ]+)$/); unless (defined $uuid) { $sudopassword .= "Unparseable line!\n"; next; @@ -170,7 +183,7 @@ if (!($query->param('doupdate'))) { } }; if ($confirmstring ne '') { - $confirmstring = "
To confirm your new sudo passwords send signed mail to changes\@db.debian.org with a signed body containing these lines:
$confirmstring
"; + $confirmstring = "
To confirm your new sudo passwords send signed mail to changes\@$config{maildomain} with a signed body containing these lines:
$confirmstring
"; } my $sudopasswordhosts = '