version 1.4, 2005/10/31 16:13:45
|
version 1.7, 2011/05/14 16:12:53
|
Line 46 use lib '/home/httpd/lib/perl/';
|
Line 46 use lib '/home/httpd/lib/perl/';
|
use LONCAPA::Configuration; |
use LONCAPA::Configuration; |
my %perlvar= %{&LONCAPA::Configuration::read_conf('loncapa.conf')}; |
my %perlvar= %{&LONCAPA::Configuration::read_conf('loncapa.conf')}; |
|
|
my $dist=`$perlvar{'lonDaemons'}/distprobe`; |
my ($execdir) = ($perlvar{'lonDaemons'} =~/(.*)/); |
|
my $dist=`$execdir/distprobe`; |
if ($dist =~ /^(suse|sles)/) { |
if ($dist =~ /^(suse|sles)/) { |
$command = "/etc/init.d/apache reload"; |
$command = "/etc/init.d/apache reload"; |
} |
} |
Line 67 if ($wwwid!=$>) {
|
Line 68 if ($wwwid!=$>) {
|
# ----------------------------------- Start running script with www permissions |
# ----------------------------------- Start running script with www permissions |
&disable_root_capability; |
&disable_root_capability; |
|
|
# --------------------------- Handle case of another apachereload process (locking) |
|
unless (&try_to_lock('/tmp/lock_apachereload')) { |
|
print "Error. Too many other simultaneous password change requests being ". |
|
"made.\n" unless $noprint; |
|
exit 4; |
|
} |
|
|
|
|
|
&enable_root_capability; |
&enable_root_capability; |
($>,$<)=(0,0); |
($>,$<)=(0,0); |
|
|
Line 84 unless (&try_to_lock('/tmp/lock_apachere
|
Line 77 unless (&try_to_lock('/tmp/lock_apachere
|
|
|
system($command); |
system($command); |
|
|
# Remove the lock file. |
|
|
|
|
|
|
|
&disable_root_capability; |
&disable_root_capability; |
unlink('/tmp/lock_apachereload'); |
|
exit 0; |
exit 0; |
|
|
# ---------------------------------------------- have setuid script run as root |
# ---------------------------------------------- have setuid script run as root |
Line 115 sub disable_root_capability {
|
Line 103 sub disable_root_capability {
|
} |
} |
} |
} |
|
|
# ----------------------- make sure that another apachereload process isn't running |
|
sub try_to_lock { |
|
my ($lockfile)=@_; |
|
my $currentpid; |
|
my $lastpid; |
|
# Do not manipulate lock file as root |
|
if ($>==0) { |
|
return 0; |
|
} |
|
# Try to generate lock file. |
|
# Wait 3 seconds. If same process id is in |
|
# lock file, then assume lock file is stale, and |
|
# go ahead. If process id's fluctuate, try |
|
# for a maximum of 10 times. |
|
for (0..10) { |
|
if (-e $lockfile) { |
|
open(LOCK,"<$lockfile"); |
|
$currentpid=<LOCK>; |
|
close LOCK; |
|
if ($currentpid==$lastpid) { |
|
last; |
|
} |
|
sleep 3; |
|
$lastpid=$currentpid; |
|
} |
|
else { |
|
last; |
|
} |
|
if ($_==10) { |
|
return 0; |
|
} |
|
} |
|
open(LOCK,">$lockfile"); |
|
print LOCK $$; |
|
close LOCK; |
|
return 1; |
|
} |
|
|
|
=head1 NAME |
=head1 NAME |
|
|
apachereload -setuid script to reload the apache web server. |
apachereload -setuid script to reload the apache web server. |