--- loncom/apachereload 2003/09/30 10:06:48 1.1 +++ loncom/apachereload 2011/05/14 16:12:53 1.7 @@ -3,21 +3,30 @@ # # apachereload - setuid script that reloads the apache daemon. # +# $Id: apachereload,v 1.7 2011/05/14 16:12:53 raeburn Exp $ # -# $Id +# Copyright Michigan State University Board of Trustees # -# Change log: -# $Log: apachereload,v $ -# Revision 1.1 2003/09/30 10:06:48 foxr -# This is a setuid script that allows the www user to issue -# /etc/init.d/httpd reload +# This file is part of the LearningOnline Network with CAPA (LON-CAPA). # -# This functionality is required by lond and lonc when they have been asked to -# reinitialize themselves. +# LON-CAPA is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. # -# Initial undebugged version. +# LON-CAPA is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with LON-CAPA; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# /home/httpd/html/adm/gpl.txt +# +# http://www.lon-capa.org/ # -### use strict; @@ -33,6 +42,15 @@ delete @ENV{qw(IFS CDPATH ENV BASH_ENV)} my $command = "/etc/init.d/httpd reload"; +use lib '/home/httpd/lib/perl/'; +use LONCAPA::Configuration; +my %perlvar= %{&LONCAPA::Configuration::read_conf('loncapa.conf')}; + +my ($execdir) = ($perlvar{'lonDaemons'} =~/(.*)/); +my $dist=`$execdir/distprobe`; +if ($dist =~ /^(suse|sles)/) { + $command = "/etc/init.d/apache reload"; +} # Do not print error messages my $noprint=1; @@ -50,14 +68,6 @@ if ($wwwid!=$>) { # ----------------------------------- Start running script with www permissions &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; ($>,$<)=(0,0); @@ -67,12 +77,7 @@ unless (&try_to_lock('/tmp/lock_apachere system($command); -# Remove the lock file. - - - &disable_root_capability; -unlink('/tmp/lock_apachereload'); exit 0; # ---------------------------------------------- have setuid script run as root @@ -98,44 +103,6 @@ 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=; - 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 apachereload -setuid script to reload the apache web server.