#!/usr/bin/perl # The Learning Online Network with CAPA # # apachereload - setuid script that reloads the apache daemon. # # $Id: apachereload,v 1.9 2020/05/09 16:40:32 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # # This file is part of the LearningOnline Network with CAPA (LON-CAPA). # # 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. # # 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; # # This script is a setuid script that must be run as user www # it effectively just executes one of the following five commands: # /etc/init.d/httpd reload # /etc/init.d/apache reload # /etc/init.d/apache2 reload # /bin/systemctl reload httpd.service # /bin/systemctl reload apache2.service # (depending on Linux distro) causing the apache daemon to get HUP'd. # The script is run by lond after re-initing its host information. $ENV{'PATH'}='/bin:/usr/bin:/usr/local/sbin:/home/httpd/perl'; # Nullify path # information delete @ENV{qw(IFS CDPATH ENV BASH_ENV)}; # nullify potential taints my $command; my $checker_bin = '/sbin/chkconfig'; my $sysctl_bin = '/bin/systemctl'; my $sysv_bin = '/usr/sbin/sysv-rc-conf'; if (-x $sysctl_bin) { if (open(PIPE,"$sysctl_bin list-unit-files --type=service 2>/dev/null |")) { my @lines = ; chomp(@lines); close(PIPE); if (grep(/^httpd\.service/,@lines)) { $command = '/bin/systemctl reload httpd.service'; } elsif (grep(/^apache2\.service/,@lines)) { $command = '/bin/systemctl reload apache2.service'; } } } if (($command eq '') && (-x $checker_bin)) { if (open(PIPE,"$checker_bin --list 2>/dev/null |")) { my @lines = ; chomp(@lines); close(PIPE); if (grep(/^httpd/,@lines)) { $command = '/etc/init.d/httpd reload'; } elsif (grep(/^apache2/,@lines)) { $command = '/etc/init.d/apache2 reload'; } elsif (grep(/^apache\s+/,@lines)) { $command = '/etc/init.d/apache reload'; } } } if (($command eq '') && (-x $sysv_bin)) { if (open(PIPE,"$checker_bin --list 2>/dev/null |")) { my @lines = ; chomp(@lines); close(PIPE); if (grep(/^apache2/,@lines)) { $command = '/etc/init.d/apache2 reload'; } elsif (grep(/^apache\s+/,@lines)) { $command = '/etc/init.d/apache reload'; } } } # Do not print error messages my $noprint=1; if ($command eq '') { print("Could not determine command to reload Apache.\n") unless $noprint; exit 1; } else { print "In apachereload" unless $noprint; } # ----------------------------- Make sure this process is running from user=www my $wwwid=getpwnam('www'); &disable_root_capability; if ($wwwid!=$>) { print("User ID mismatch. This program must be run as user 'www'\n") unless $noprint; exit 1; } # ----------------------------------- Start running script with www permissions &disable_root_capability; &enable_root_capability; ($>,$<)=(0,0); # Now run the reload: # system("$command > /dev/null 2>&1"); &disable_root_capability; exit 0; # ---------------------------------------------- have setuid script run as root sub enable_root_capability { if ($wwwid==$>) { ($<,$>)=($>,0); ($(,$))=($),0); } else { # root capability is already enabled } return $>; } # ----------------------------------------------- have setuid script run as www sub disable_root_capability { if ($wwwid==$<) { ($<,$>)=($>,$<); ($(,$))=($),$(); } else { # root capability is already disabled } } =head1 NAME apachereload -setuid script to reload the apache web server. =head1 DESCRIPTION LON-CAPA - setuid script to reload the apache web server. =head1 README LON-CAPA setuid script to reload the apache web server. =head1 PREREQUISITES =head1 COREQUISITES =pod OSNAMES linux =pod SCRIPT CATEGORIES LONCAPA/Administrative =cut 500 Internal Server Error

Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator at root@localhost to inform them of the time this error occurred, and the actions you performed just before this error.

More information about this error may be available in the server error log.