--- loncom/build/loncaparestoreconfigurations 2000/10/26 00:28:43 1.3 +++ loncom/build/loncaparestoreconfigurations 2001/06/01 16:00:44 1.10 @@ -2,44 +2,107 @@ # 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=( "/home/httpd/lonTabs/hosts.tab", "/home/httpd/lonTabs/spare.tab", "/etc/krb.conf", - "/etc/ntp.conf" + "/etc/ntp.conf", + "/etc/httpd/conf/srm.conf", + "/etc/httpd/conf/httpd.conf", ); +my @perlsetvars=("lonHostID","lonRole","lonAdmEMail","lonDefDomain","lonLoadLim","lonExpire","lonReceipt","lonSqlAccess"); +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; +}