--- loncom/build/loncaparestoreconfigurations 2000/11/02 17:11:05 1.4 +++ loncom/build/loncaparestoreconfigurations 2000/12/14 17:38:38 1.8 @@ -2,15 +2,41 @@ # loncaparestoreconfigurations -# This tool helps in updating a system. It takes a list of -# .rpmsave files and restores them. - # Scott Harrison, 10/25/2000 +# Scott Harrison, 12/14/2000 + +# This tool helps in updating a system. It restores backed-up +# configuration files (.rpmsave or other backup notations). + +# By default, the .rpmsave suffix is used. +# Alternatively, there can be two other invocations +# Invocation #1: +# ARGV[0]=suffix +# ARGV[1]=.bak +# Invocation #2: +# ARGV[0]=lasttimestamp + +# The criteria for the lasttimestamp is that the +# file suffix is a '.' followed by a 14-digit +# time-stamp (YYYYMMDDhhmmss). +# The time-stamp with the greatest value is +# taken as the backup file. + +my $suffix=".rpmsave"; +my $suffixpragma=""; +if ($ARGV[0] eq 'suffix') { + $suffix=$ARGV[1] if $suffix=~/^[\.\w]+$/; +} +elsif ($ARGV[0] eq 'lasttimestamp') { + $suffixpragma="lasttimestamp"; +} + use strict; my @special_conf_files=( - "/etc/httpd/conf/access.conf" + "/etc/httpd/conf/access.conf", + "/etc/smb.conf" ); my @generic_conf_files=( @@ -18,29 +44,63 @@ my @generic_conf_files=( "/home/httpd/lonTabs/spare.tab", "/etc/krb.conf", "/etc/ntp.conf", - "/etc/smb.conf" ); +my @perlsetvars=("lonHostID","lonRole","lonAdmEMail","lonDefDomain","lonLoadLim","lonExpire"); +my %pvar; foreach (@special_conf_files) { if (/^\/etc\/httpd\/conf\/access.conf$/) { + if ($suffixpragma eq 'lasttimestamp') { + $suffix=getsuffix('/etc/httpd/conf/access.conf'); + } my $template=`/bin/cat /etc/httpd/conf/access.conf`; - my $rpmsave=`/bin/cat /etc/httpd/conf/access.conf.rpmsave`; + my $rpmsave=`/bin/cat /etc/httpd/conf/access.conf$suffix`; `/bin/mv /etc/httpd/conf/access.conf /etc/httpd/conf/access.conf.template`; - my @perlsetvars=("lonHostID","lonRole","lonAdmEMail","lonDefDomain","lonLoadLim","lonExpire"); foreach my $psv (@perlsetvars) { $rpmsave=~/\nPerlSetVar\s+$psv\s+(\S+)/; my $pval=$1; $template=~s/(\nPerlSetVar\s+$psv\s+)\S+/$1$pval/; + $pvar{$psv}=$pval; } open OUT,">/etc/httpd/conf/access.conf"; print OUT $template; close OUT; } + if (/^\/etc\/smb.conf$/) { + if ($suffixpragma eq 'lasttimestamp') { + $suffix=getsuffix('/etc/smb.conf'); + } + my $template=`/bin/cat /etc/smb.conf`; + foreach my $psv (@perlsetvars) { + $template=~s/\{\{\{\{\[(.*?)\]\}\}\}\}/$pvar{$1}/ge; + } + open OUT,">/etc/smb.conf"; + print OUT $template; + close OUT; + } } foreach (@generic_conf_files) { - if (-e "$_.rpmsave") { - `/bin/mv $_ $_.template`; - `/bin/mv $_.rpmsave $_`; + my $file=$_; + if ($suffixpragma eq 'lasttimestamp') { + $suffix=getsuffix($file); + } + if (-e "$file$suffix") { + `/bin/mv $file $_.template`; + `/bin/cp $file$suffix $file`; } } + +sub getsuffix { + my ($file)=@_; + print "$file\n"; + my $dir=$file; $dir=~s/([^\/]+)$//; + my $filename=$1; + opendir(DIR,$dir); + my @a=grep {/$filename\.\d{14}/} readdir DIR; + closedir DIR; + map {s/$filename\.//;} @a; + my @b=sort {$a<=>$b} @a; + my $suffix='.'.$b[$#b]; + return $suffix; +} 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.