Diff for /doc/loncapafiles/updatequery.piml between versions 1.35 and 1.78

version 1.35, 2005/02/06 07:57:57 version 1.78, 2014/05/03 15:31:17
Line 47  $|=1; Line 47  $|=1;
 *********************************************  *********************************************
   
 END  END
 sleep(3);  #sleep(3);
 </perlscript>  </perlscript>
 </file>  </file>
 <file>  <file>
Line 70  you must contact lon-capa\@lon-capa.org. Line 70  you must contact lon-capa\@lon-capa.org.
 3) DEVELOPMENT - you want to do software (not content!) development with  3) DEVELOPMENT - you want to do software (not content!) development with
                  this workstation and eventually link it with the                   this workstation and eventually link it with the
                  workstations of other LON-CAPA software developers.                   workstations of other LON-CAPA software developers.
 4) PRESERVE the existing hosts.tab and domain.tab  4) RUNNING YOUR OWN CLUSTER - this machine is not in the standard LON-CAPA
                 (/home/httpd/lonTabs/hosts.tab and                   clusters and won't be in the future and you want the existing
                  /home/httpd/lonTabs/domain.tab)                   hosts.tab and domain.tab files to be left alone.
                    (This choice is unlikely what you want to select.)
 END  END
 # Option number 26 will install rawhide_hosts.tab, but  # Option number 26 will install rawhide_hosts.tab, but
 # the typical user does not want to be part of an intensive  # the typical user does not want to be part of an intensive
Line 97  while (!$flag) { Line 97  while (!$flag) {
   }    }
   elsif ($choice==4) {    elsif ($choice==4) {
     $lonCluster='existing'; $flag=1;      $lonCluster='existing'; $flag=1;
     if (-e '/home/httpd/lonTabs/hosts.tab') {      foreach my $file ('hosts.tab','dns_hosts.tab',
       `cp /home/httpd/lonTabs/hosts.tab ../existing_hosts.tab`;                        'domain.tab','dns_domain.tab') {
     }          if (-e '/home/httpd/lonTabs/'.$file) {
     else {      `cp /home/httpd/lonTabs/$file ../existing_$file`;
       print &lt;&lt;END;          }
 There is no existing /home/httpd/lonTabs/hosts.tab          else {
       print &lt;&lt;END;
   There is no existing /home/httpd/lonTabs/$file
 END  END
       die('');              die('');
     }          }
     if (-e '/home/httpd/lonTabs/domain.tab') {  
       `cp /home/httpd/lonTabs/domain.tab ../existing_domain.tab`;  
     }  
     else {  
       print &lt;&lt;END;  
 There is no existing /home/httpd/lonTabs/domain.tab  
 END  
       die('');  
     }      }
   }    }
   elsif ($choice==26) {    elsif ($choice==26) {
Line 129  END Line 123  END
 $|=1;  $|=1;
 my $domainDescription;  my $domainDescription;
 my $domainTabExtras;  my $domainTabExtras;
   my $primaryLibServer;
   my $protocol;
   my $intdom;
   my @libservers = ();
 unless (-e "<TARGET />") {  unless (-e "<TARGET />") {
   print(&lt;&lt;END);    print(&lt;&lt;END);
            WELCOME TO LON-CAPA!             WELCOME TO LON-CAPA!
Line 137  If you have questions, please visit http Line 135  If you have questions, please visit http
 or contact helpdesk\@lon-capa.org.  or contact helpdesk\@lon-capa.org.
   
 ===============================================================================  ===============================================================================
 The following 4 values are needed to configure LON-CAPA:  The following 7 values are needed to configure LON-CAPA:
 * Machine Role  * Machine Role
 * LON-CAPA Domain Name  * LON-CAPA Domain Name
 * LON-CAPA Machine ID Name, and  * LON-CAPA Machine ID Name, and
 * System Administration E-mail Address.  * Server Administration E-mail Address.
   * LON-CAPA Domain's Primary Library Server Machine ID
   * Web Server Protocol
   * Internet Domain Name of Your Institution
 ===============================================================================  ===============================================================================
   
 In addition, a Support E-mail Address can also be included. If  In addition, a Support E-mail Address can also be included. If
Line 196  while (!$flag) { Line 197  while (!$flag) {
 }  }
   
 # need to recommend a machine ID name (ipdomain.l.somenumber)  # need to recommend a machine ID name (ipdomain.l.somenumber)
 my $hostname=`hostname`; chomp($hostname);  my $hostname=`hostname -f`; chomp($hostname);
 my $ipdomain='';  my $ipdomain='';
 if ($hostname=~/([^\.]*)\.([^\.]*)$/) {  if ($hostname=~/([^\.]*)\.([^\.]*)$/) {
   $ipdomain=$1;    $ipdomain=$1;
Line 205  if ($hostname=~/([^\.]*)\.([^\.]*)$/) { Line 206  if ($hostname=~/([^\.]*)\.([^\.]*)$/) {
   print(&lt;&lt;END);    print(&lt;&lt;END);
   
 **** Domain ****  **** Domain ****
 [this does NOT need to correspond to internet address domains,  [This does NOT need to correspond to internet address domains.
  examples might be "msu" or "bionet" or "vermontcc"]   Please make this name short AND descriptive of your organization.
    Domain names are close to impossible to change later!!!
    Good examples might be "msu" or "bionet" or "vermontcc".
    Bad examples are "physics" (too general)
      or "michiganstateuniversity" (too long)
      or "msuedu" (internet domain, just make it "msu")
      or "msuphysics" (only if there is a good reason to limit to department
                       - we don't know of one)
      or "mydomain" (what is that?)
    Avoid multiple domains at the same institution, even if it means that you 
    have to actually work together with your colleagues. You can still run
    multiple library servers within the same domain.
    If this domain is eventually going to be part of the main production
    cluster, you MUST contact the LON-CAPA group at MSU (loncapa@loncapa.org)
    to have a domain name assigned, and then use it exactly as given. This is
    also true for test installs that might eventually turn into production setups.
    Stop now if you didn't do so.]
 END  END
   
 # get domain name  # get domain name
Line 227  END Line 244  END
   my $choice=&lt;&gt;;    my $choice=&lt;&gt;;
   chomp($choice);    chomp($choice);
   my $bad_domain_flag=0;    my $bad_domain_flag=0;
   my @bad_domain_names=('raw','userfiles','priv','adm','uploaded');    my @bad_domain_names=('res','raw','userfiles','priv','adm','uploaded',
    'editupload');
   foreach my $bad (@bad_domain_names) {    foreach my $bad (@bad_domain_names) {
     $bad_domain_flag=1 if $choice eq $bad;      $bad_domain_flag=1 if $choice eq $bad;
   }    }
     if ($choice=~/capa/i) {
        $bad_domain_flag=1;
     }
   if ($ipdomain and $choice=~/^\s*$/) {    if ($ipdomain and $choice=~/^\s*$/) {
     $choice=$ipdomain;      $choice=$ipdomain;
     open(OUT,'&gt;&gt;/tmp/loncapa_updatequery.out');      open(OUT,'&gt;&gt;/tmp/loncapa_updatequery.out');
Line 238  END Line 259  END
     close(OUT);      close(OUT);
     $lonDefDomain=$choice;      $lonDefDomain=$choice;
     $flag=1;      $flag=1;
   }    } elsif (length($choice)>35) {
   elsif ($choice!~/\_/ and $choice=~/^\w+$/) {      print "Name too long\n";
     } elsif (length($choice)<2) {
       print "Name too short\n";
     } elsif ($bad_domain_flag) {
       print "Invalid input ('$choice' conflicts with LON-CAPA namespace).\n";
       print "Please try something different than '$choice'\n";
     } elsif ($choice!~/\_/ and $choice=~/^[\w\-.]+$/) {
     open(OUT,'&gt;&gt;/tmp/loncapa_updatequery.out');      open(OUT,'&gt;&gt;/tmp/loncapa_updatequery.out');
     print(OUT 'lonDefDomain'."\t".$choice."\n");      print(OUT 'lonDefDomain'."\t".$choice."\n");
     close(OUT);      close(OUT);
     $lonDefDomain=$choice;      $lonDefDomain=$choice;
     $r='l';      $r='l';
     $flag=1;      $flag=1;
   }    } else {
   elsif ($bad_domain_flag) {      print "Invalid input (only alphanumeric characters, '-', and '.' supported).\n";
     print "Invalid input ('$choice' conflicts with LON-CAPA namespace).\n";  
     print "Please try something different than '$choice'\n";  
   }  
   else {  
     print "Invalid input (only alphanumeric characters supported).\n";  
   }    }
 }  }
   
Line 293  if ($lonDefDomain) { Line 315  if ($lonDefDomain) {
   print(&lt;&lt;END);    print(&lt;&lt;END);
   
 **** Machine ID Name ****  **** Machine ID Name ****
 [this does NOT need to correspond to internet address names;  [This does NOT need to correspond to internet address names;
  this name MUST be unique to the whole LON-CAPA network;   this name MUST be unique to the whole LON-CAPA network;
  we recommend that you use a name based off of your institution;   we recommend that you use a name based off of your institution.
  good examples: "msul1" or "bionetl1";   Good examples: "msul1" or "bioneta2".
  bad examples: "loncapabox" or "studentsinside"]   Bad examples: "loncapabox" or "studentsinside".
    Note that machine names are very hard to change later.]
 END  END
 # get machine name  # get machine name
 # accept if valid, if not valid, tell user and repeat  # accept if valid, if not valid, tell user and repeat
Line 315  END Line 338  END
 }  }
   my $choice=&lt;&gt;;    my $choice=&lt;&gt;;
   chomp($choice);    chomp($choice);
   if ($lonHostID and $choice=~/^\s*$/) {    if ($choice=~/capa/i) {
       print "Invalid input (names containing 'capa' are reserved).\n";
     } elsif ($lonHostID and $choice=~/^\s*$/) {
     $choice=$lonHostID;      $choice=$lonHostID;
     open(OUT,'&gt;&gt;/tmp/loncapa_updatequery.out');      open(OUT,'&gt;&gt;/tmp/loncapa_updatequery.out');
     print(OUT 'lonHostID'."\t".$choice."\n");      print(OUT 'lonHostID'."\t".$choice."\n");
     close(OUT);      close(OUT);
     $lonHostID=$choice;      $lonHostID=$choice;
     $flag=1;      $flag=1;
   }    } elsif (length($choice)>45) {
   elsif ($choice!~/\_/ and $choice=~/^\w+$/) {      print "Name too long\n";
     } elsif (length($choice)<4) {
       print "Name too short\n";
     } elsif ($choice!~/\_/ and $choice=~/^[\w\-.]+$/) {
     open(OUT,'&gt;&gt;/tmp/loncapa_updatequery.out');      open(OUT,'&gt;&gt;/tmp/loncapa_updatequery.out');
     print(OUT 'lonHostID'."\t".$choice."\n");      print(OUT 'lonHostID'."\t".$choice."\n");
     close(OUT);      close(OUT);
     $lonHostID=$choice;      $lonHostID=$choice;
     $flag=1;      $flag=1;
     } else {
       print "Invalid input (only alphanumeric characters, '-', and '.' supported).\n";
   }    }
   else {  
     print "Invalid input (only alphanumeric characters supported).\n";  
   }  
 }  }
   
   # get primary library server in domain
   if ($lonRole eq 'library') {
       if (!grep/^\Q$lonHostID\E$/,@libservers) {
           push(@libservers,$lonHostID);
       } 
       if (@libservers == 1) {
           $primaryLibServer = $libservers[0];
       }
   }
   
   $flag=0;
   while (!$flag) {
     print(&lt;&lt;END);
   **** Domain's Primary Library Server ID ****
   This should be the LON-CAPA machine ID of a library server in your 
   domain.  If you only have a single library server in your domain, then
   the Primary Library server ID will be the machine ID of that server. 
   This server will be where domain data which are not associated with any
   specific home library server will be stored (e.g., e-mail broadcast by
   administrators to users in the domain).
   END
       if (defined($primaryLibServer)) {
           print(&lt;&lt;END);
   ENTER DOMAIN'S PRIMARY LIBRARY SERVER ID [$primaryLibServer]:
   END
       } elsif (@libservers > 0) {
           print(&lt;&lt;END);
   ENTER DOMAIN'S PRIMARY LIBRARY SERVER ID [$libservers[0]]
   END
       } else {
           print (&lt;&lt;END);
   No library servers could be identified for this domain.  If you have already installed LON-CAPA on a different server (designated as a library server) in this domain, please enter the LONCAPA MACHINE ID of that server.  If not, you will need to install a LON-CAPA library server.  Enter the MACHINE ID of the server you plan to designate as a library server.
   END
       }
   
       my $choice=&lt;&gt;;
       chomp($choice);
       if ($primaryLibServer and $choice=~/^\s*$/) {
           $choice=$primaryLibServer;
           open(OUT,'&gt;&gt;/tmp/loncapa_updatequery.out');
           print(OUT 'primaryLibServer'."\t".$choice."\n");
           close(OUT);
           $flag=1;
       } elsif (length($choice)>35) {
           print "Name too long\n";
       } elsif (length($choice)<4) {
           print "Name too short\n";
       } elsif ($choice!~/\_/ and $choice=~/^[\w\-.]+$/) {
           open(OUT,'&gt;&gt;/tmp/loncapa_updatequery.out');
           print(OUT 'primaryLibServer'."\t".$choice."\n");
           close(OUT);
           $primaryLibServer=$choice;
           $flag=1;
       } else {
           print "Invalid input (only alphanumeric characters, '-', and '.' supported).\n";
       }
   }
   
   
 # get admin e-mail address  # get admin e-mail address
 # accept if valid, if not valid, tell user and repeat  # accept if valid, if not valid, tell user and repeat
 $flag=0;  $flag=0;
Line 342  my $lonAdmEMail; Line 428  my $lonAdmEMail;
 while (!$flag) {  while (!$flag) {
   print(&lt;&lt;END);    print(&lt;&lt;END);
   
 **** System Administrator's E-mail ****  **** Server Administrators E-mail ****
 E-mail address of the person who will manage this machine  E-mail address of the person who will manage this machine
 [should be in the form somebody\@somewhere]  [should be in the form somebody\@somewhere]
 ENTER ADMIN E-MAIL ADDRESS:  ENTER ADMIN E-MAIL ADDRESS:
Line 395  END Line 481  END
   }    }
 }  }
   
   # get protocol
   # accept if valid, if not valid, tell user and repeat
   $flag=0;
   while (!$flag) {
     print(&lt;&lt;END);
   
   ****  Web Server Protocol ****
   If you plan to run the Apache server with SSL enabled, 
   the protocol should be: https; otherwise it should be http.
   ENTER WEB SERVER PROTOCOL [http]:
   END
   
     my $choice=&lt;&gt;;
     chomp($choice);
     if ($choice =~ /^https?$/) {
       open(OUT,'&gt;&gt;/tmp/loncapa_updatequery.out');
       print(OUT 'protocol'."\t".$choice."\n");
       close(OUT);
       $protocol=$choice;
       $flag=1;
     } elsif ($choice eq '') {
       open(OUT,'&gt;&gt;/tmp/loncapa_updatequery.out');
       print(OUT 'protocol'."\t".'http'."\n");
       close(OUT);
       $protocol = 'http';
       $flag = 1;
     } else {
       print "Invalid input (only http or https allowed).\n";
     }
   }
   
   # get internet domain
   # accept if valid, if not valid, tell user and repeat
   $flag=0;
   while (!$flag) {
     print(&lt;&lt;END);
   
   ****  Internet Domain Name of Your Institution ****
   
   The internet domain name used for servers at your institution 
   should be provided.  This will be similar to: ustate.edu or
   topcollege.ac.uk or my.hostingcompany.com, i.e., the part of
   a server hostname which indicates to which organization the 
   server belongs.
   
   ENTER INTERNET DOMAIN NAME:
   END
   
     my $choice=&lt;&gt;;
     chomp($choice);
     if ($choice =~/[^.]+\.[^.]+/) {
       open(OUT,'&gt;&gt;/tmp/loncapa_updatequery.out');
       print(OUT 'internet domain'."\t".$choice."\n");
       close(OUT);
       $intdom=$choice;
       $flag=1;
     }
     else {
       print "Invalid input (must be at least two levels separated by .  - e.g., ustate.edu).\n";
     }
   }
   
   
 # update loncapa.conf  # update loncapa.conf
 my $confdir='/etc/httpd/conf/';  my $confdir = '/etc/httpd/conf/';
 #my $confdir='';  if ('<DIST />' eq 'sles10' || '<DIST />' eq 'sles11' || '<DIST />' eq 'suse10.1' || '<DIST />' eq 'suse10.2' || '<DIST />' eq 'suse10.3' || '<DIST />' eq 'suse11.1' || '<DIST />' eq 'suse11.2' || '<DIST />' eq 'suse11.3' || '<DIST />' eq 'suse11.4' || '<DIST />' eq 'suse12.1' || '<DIST />' eq 'suse12.2' || '<DIST />' eq 'suse12.3' || '<DIST />' eq 'suse13.1' || '<DIST />' eq 'debian5' || '<DIST />' eq 'debian6' || '<DIST />' eq 'ubuntu6' || '<DIST />' eq 'ubuntu8' || '<DIST />' eq 'ubuntu10' || '<DIST />' eq 'ubuntu12' || '<DIST />' eq 'ubuntu14') {
        $confdir = '/etc/apache2/';
   }   
 my $filename='loncapa.conf';  my $filename='loncapa.conf';
 my %perlvar;  my %perlvar;
     if (-e "$confdir$filename") {      if (-e "$confdir$filename") {
Line 439  my %perlvar; Line 589  my %perlvar;
       die("Cannot output to $confdir$filename\n");        die("Cannot output to $confdir$filename\n");
     foreach my $key (keys %perlvar) {      foreach my $key (keys %perlvar) {
       my $value=$perlvar{$key};        my $value=$perlvar{$key};
         my $line = "PerlSetVar     $key      $value"; 
         if ($value eq '') {
             $line = '#'.$line;
         }
       print(OUT &lt;&lt;END);        print(OUT &lt;&lt;END);
 PerlSetVar     $key      $value  $line
 END  END
     }      }
     close(OUT);      close(OUT);
Line 448  END Line 602  END
 </perlscript>  </perlscript>
 </file>  </file>
 <file>  <file>
 <target dist='default'>/</target>  <target dist='default'>/etc/httpd/conf/</target>
   <target dist='sles10 sles11 suse10.1 suse10.2 suse10.3 suse11.1 suse11.2 suse11.3 suse11.4 suse12.1 suse12.2 suse12.3 suse13.1 debian5 debian6 ubuntu6 ubuntu8 ubuntu10 ubuntu12 ubuntu14'>/etc/apache2/</target>
 <perlscript mode='fg'>  <perlscript mode='fg'>
 sub securesetting {  sub securesetting {
     my (%perlvar)=@_;      my (%perlvar)=@_;
Line 466  sub securesetting { Line 621  sub securesetting {
     return ($securestatus,$securenum);      return ($securestatus,$securenum);
 }  }
 # read values from loncapa.conf  # read values from loncapa.conf
 my $confdir='/etc/httpd/conf/';  my $confdir = "<TARGET />";
 my $filename='loncapa.conf';  my $filename='loncapa.conf';
 my %perlvar;  my %perlvar;
 my ($securestatus,$securenum);  my ($securestatus,$securenum);
Line 520  my %perlvarstatic; Line 675  my %perlvarstatic;
  }   }
  close(CONFIG);   close(CONFIG);
     }      }
     if (!$domainDescription && $lonCluster ne 'existing') {  
        open(IN,'&lt;../'.$lonCluster.'_domain.tab');      my (@hosts_files, @domain_files);
        while(&lt;IN&gt;) {      if ( $lonCluster ne 'existing') {
           if (/^$perlvar{'lonDefDomain'}\:/) {   push(@domain_files,'../'.$lonCluster.'_domain.tab',
      (undef,$domainDescription,$domainTabExtras)=split(/:/,$_,3);       '../'.$lonCluster.'_dns_domain.tab');
      chomp($domainDescription);   push(@hosts_files,'../'.$lonCluster.'_hosts.tab',
      chomp($domainTabExtras);       '../'.$lonCluster.'_dns_hosts.tab');
              last;      }
           }      push(@domain_files,'/home/httpd/lonTabs/domain.tab',
        }           '/home/httpd/lonTabs/dns_domain.tab');
        close(IN);      push(@hosts_files,'/home/httpd/lonTabs/hosts.tab',
     }           '/home/httpd/lonTabs/dns_hosts.tab');
   
     if (!$domainDescription) {      if (!$domainDescription) {
        open(IN,'&lt;/home/httpd/lonTabs/domain.tab');   foreach my $file (@domain_files) {
        while(&lt;IN&gt;) {      open(IN,'&lt;'.$file);
           if (/^$perlvar{'lonDefDomain'}\:/) {      while(my $line = &lt;IN&gt;) {
      (undef,$domainDescription,$domainTabExtras)=split(/:/,$_,3);   if ($line =~ /^\Q$perlvar{'lonDefDomain'}\E\:/) {
      chomp($domainDescription);      (undef,$domainDescription,$domainTabExtras)=split(/:/,$line,3);
      chomp($domainTabExtras);      chomp($domainDescription);
              last;      chomp($domainTabExtras);
           }      # the remaining field (primary lib server) is handled later
        }      $domainTabExtras = join(':',(split(/:/,$domainTabExtras))[0..5]);
        close(IN);      last;
    }
       }
       close(IN);
       last if ($domainDescription);
    }
       }
   
       if (!$protocol) {
           foreach my $file (@hosts_files) {
               open(IN,'&lt;'.$file);
               while(my $line = &lt;IN&gt;) {
                   if ($line =~ /^\Q$perlvar{'lonHostID'}\E:\Q$perlvar{'lonDefDomain'}\E\:(?:access|library)\:[^:]+\:(https?)/) {
                       $protocol = $1;
                       chomp($protocol);
                       last;
                   }
               }
           }
       }
   
       if (!$protocol) {
           $protocol = 'http';
       }
   
       if (!$intdom) {
           foreach my $file (@hosts_files) {
               open(IN,'&lt;'.$file);
               while(my $line = &lt;IN&gt;) {
                   if ($line =~ /^\Q$perlvar{'lonHostID'}\E:\Q$perlvar{'lonDefDomain'}\E\:(?:access|library)\:[^:]+\:https?\:([^:]+)/) {
                       $intdom = $1;
                       chomp($intdom);
                       last;
                   }
               }
           }
       }
   
       while(!$primaryLibServ && (@hosts_file || @domain_files)) {
    my $file = shift(@domain_files);
           open(IN,'&lt;'.$file);
           while(my $line = &lt;IN&gt;) {
               if ($line =~ /^\Q$perlvar{'lonDefDomain'}\E\:/) {
    $primaryLibServer=(split(/:/,$line))[8];
                   chomp($primaryLibServer);
               }
           }
           close(IN);
    last if ($primaryLibServer);
    $file = shift(@hosts_files);
    open(IN,'&lt;'.$file);
    while(my $line = &lt;IN&gt;) {
       if ($line =~ /^([^\:]+)\:\Q$perlvar{'lonDefDomain'}\E\:library\:/) {
    push(@libservers,$1);
       }
    }
    # make list unique
    @libservers = keys(%{{ map { $_ => 1 } (@libservers) }});
    close(IN);
    if (@libservers == 1) {
       $primaryLibServer = $libservers[0];
    }
     }      }
         
 # implement editing logic below, interactively  # implement editing logic below, interactively
 # update loncapa.conf until 8 is entered  # update loncapa.conf until 14 is entered
   
 $flag=0;  $flag=0;
   
Line 558  This is now the current configuration of Line 775  This is now the current configuration of
  1) Domain Name: $perlvar{'lonDefDomain'}   1) Domain Name: $perlvar{'lonDefDomain'}
  2) Domain Description: $domainDescription   2) Domain Description: $domainDescription
  3) Machine Name: $perlvar{'lonHostID'}   3) Machine Name: $perlvar{'lonHostID'}
  4) System Administrator's E-mail Address: $perlvar{'lonAdmEMail'}   4) ID of primary library server for domain: $primaryLibServer
  5) Support E-mail Address: $perlvar{'lonSupportEMail'}   5) Server Administrator's E-mail Address: $perlvar{'lonAdmEMail'}
  6) Role: $perlvar{'lonRole'}   6) Support E-mail Address: $perlvar{'lonSupportEMail'}
  7) Cache Expiration Time: $perlvar{'lonExpire'}   7) Web Server Protocol (http or https): $protocol 
  8) Server Load: $perlvar{'lonLoadLim'}   8) Internet Domain Name: $intdom 
  9) User Load: $perlvar{'lonUserLoadLim'}   9) Role: $perlvar{'lonRole'}
 10) Allow only secure connections: $securestatus   10) Cache Expiration Time: $perlvar{'lonExpire'}
 11) Everything is correct up above  11) Server Load: $perlvar{'lonLoadLim'}
 END  12) User Load: $perlvar{'lonUserLoadLim'}
 my $hbug=-1;  13) Allow only secure connections: $securestatus 
 my $dbug=-1;  14) Everything is correct up above
 {  END
   my $v=$perlvar{'lonHostID'};  
   $hbug=0;  my @error;
   $hbug=1 if $v=~/\W/;  foreach my $v ($perlvar{'lonDefDomain'},$perlvar{'lonHostID'}) {
   $hbug=1 if $v=~/\_/;     if (length($v)>35) { $error.="\nName $v too long"; }
 }     if (length($v)<2) { $error.="\nName $v too short"; }
 {     if ($v=~/capa/i) {
   my $v=$1;   if ($v!~/^oucapa\d+$/ && 
   $dbug=0;      ($v!~/^capa\d+$/ && $perlvar{'lonDefDomain'} eq 'uwsp')) {
   $dbug=1 if $v=~/\W/;   push(@error,"Name $v contains 'capa'");
   $dbug=1 if $v=~/\_/;   }
 }     }
      foreach my $bad ('res','raw','userfiles','priv','adm','uploaded',
 if ($hbug) {   'editupload') {
   print "**** ERROR **** ".        push(@error,"\nName $v reserved.") if $v eq $bad;
  "Invalid lonHostID (should only be letters and/or digits)\n";     }
 }     if ($v=~/[^\w\-.]/) { push(@error,"Name $v contains special characters"); }
 if ($dbug) {  }
   print "**** ERROR **** ".  if ($domainDescription =~ /^\s*$/) {
  "Invalid lonDefDomain (should only be letters and/or digits)\n";     push(@error,"Domain Description is blank.");
   } elsif ($domainDescription!~/^[\(\)\-\w\s,]+$/) {
      push(@error,"Domain Description contains special characters.");
   } 
   foreach my $v ($perlvar{'lonExpire'},$perlvar{'lonLoadLim'}) {
      unless ($v=~/^[\d+\.]+$/) { push(@error,"Number expected instead of $v"); }
   }
   unless (($perlvar{'lonRole'} eq 'library') || ($perlvar{'lonRole'} eq 'access')) {
      push(@error,"Invalid Role");
   }
   
   unless (($protocol eq 'http') || ($protocol eq 'https')) {
      push(@error,"Invalid Protocol (must be http or https");
   }
   
   if (!defined($intdom)) { 
      push(@error,"No internet domain name designated. Enter something like ustate.edu"); 
   } elsif ($intdom !~ /[^.]+\.\w{2,6}$/) {
      push(@error,"Invalid Internet domain name (must be at least two levels separated by .  - e.g., ustate.edu");
   }
   
   if (!defined($primaryLibServer)) {
      if (@libservers > 0) {
          push(@error,"No primary library server ID designated. Choose from: ".join(',',sort(@libservers)));
      } else {
          push(@error,"No library servers in this domain (including current server)");
      }
   } else {
      if (length($primaryLibServer)>35) { push(@error,"Primary Library Server ID:  $primaryLibServer too long"); }
      if (length($primaryLibServer)<2) { push(@error,"Primary Library Server ID:  $primaryLibServer too short"); }
      if ($primaryLibServer =~/capa/i) {
           if ($primaryLibServer!~/^oucapa\d+$/ &&
               ($primaryLibServer!~/^capa\d+$/ && $perlvar{'lonDefDomain'} eq 'uwsp')) {
                    push(@error,"Primary library server ID $primaryLibServer contains 'capa'")
           }
      }
      foreach my $bad ('res','raw','userfiles','priv','adm','uploaded',
           'editupload') {
         push(@error,"Primary library server ID $primaryLibServer reserved.") if $primaryLibServer eq $bad;
      }
      if ($primaryLibServer=~/[^\w\-.]/) { push(@error,"Primary library server ID $primaryLibServer contains special characters"); }
 }  }
   
   
   if (@error) { print "\n*** ERRORS: \n\t".join("\n\t",@error)."\n"; }
   print(&lt;&lt;END);    print(&lt;&lt;END);
 ENTER A CHOICE OF 1-10 TO CHANGE, otherwise ENTER 11:  ENTER A CHOICE OF 1-13 TO CHANGE, otherwise ENTER 14:
 END  END
 my $choice=&lt;&gt;;  my $choice=&lt;&gt;;
 chomp($choice);  chomp($choice);
Line 632  END Line 891  END
   }    }
   elsif ($choice==4) {    elsif ($choice==4) {
   print(&lt;&lt;END);    print(&lt;&lt;END);
 4) System Administrator's E-mail Address: $perlvar{'lonAdmEMail'}  4) ID of primary library server for domain: $primaryLibServer
   ENTER NEW VALUE (this will be the LON-CAPA Machine ID of a library server in
                    your domain; it cannot contain any of '_' '-' '.' or ':'. 
                    This server will be where domain data which are not 
                    associated with any specific home library server
                    will be stored (e.g., e-mail broadcast by Domain Coordinators
                    to users in the domain).
   END
       my $choice2=&lt;&gt;;
       chomp($choice2);
       $primaryLibServer=$choice2;
     }
     elsif ($choice==5) {
     print(&lt;&lt;END);
   5) Server Administrator's E-mail Address: $perlvar{'lonAdmEMail'}
 ENTER NEW VALUE:  ENTER NEW VALUE:
 END  END
     my $choice2=&lt;&gt;;      my $choice2=&lt;&gt;;
     chomp($choice2);      chomp($choice2);
     $perlvar{'lonAdmEMail'}=$choice2;      $perlvar{'lonAdmEMail'}=$choice2;
   }    }
   elsif ($choice==5) {    elsif ($choice==6) {
   print(&lt;&lt;END);    print(&lt;&lt;END);
 5) Support E-mail Address: $perlvar{'lonSupportEMail'}  6) Support E-mail Address: $perlvar{'lonSupportEMail'}
 ENTER NEW VALUE:  ENTER NEW VALUE:
 END  END
     my $choice2=&lt;&gt;;      my $choice2=&lt;&gt;;
     chomp($choice2);      chomp($choice2);
     $perlvar{'lonSupportEMail'}=$choice2;      $perlvar{'lonSupportEMail'}=$choice2;
   }    }
   elsif ($choice==6) {    elsif ($choice==7) {
   print(&lt;&lt;END);    print(&lt;&lt;END);
 6) Role: $perlvar{'lonRole'}  7) Server Protocol (http or https): 
   ENTER NEW VALUE: (this should be either 'http' or 'https'
                    if in doubt set to 'http'):
   END
       my $choice2=&lt;&gt;;
       chomp($choice2);
       $protocol=$choice2;
     }
     elsif ($choice==8) {
     print(&lt;&lt;END);
   8) Internet Domain Name of Institution
   ENTER NEW VALUE: 
   
   END
       my $choice2=&lt;&gt;;
       chomp($choice2);
       $intdom=$choice2;
     }
     elsif ($choice==9) {
     print(&lt;&lt;END);
   9) Role: $perlvar{'lonRole'}
 ENTER NEW VALUE (this should be either 'access' or 'library'   ENTER NEW VALUE (this should be either 'access' or 'library' 
                  if in doubt select 'library'):                   if in doubt select 'library'):
 END  END
Line 658  END Line 951  END
     chomp($choice2);      chomp($choice2);
     $perlvar{'lonRole'}=$choice2;      $perlvar{'lonRole'}=$choice2;
   }    }
   elsif ($choice==7) {    elsif ($choice==10) {
   print(&lt;&lt;END);    print(&lt;&lt;END);
 7) Cache Expiration Time: $perlvar{'lonExpire'}  10) Cache Expiration Time: $perlvar{'lonExpire'}
 ENTER NEW VALUE (in seconds, 86400 is a reasonable value):  ENTER NEW VALUE (in seconds, 86400 is a reasonable value):
 END  END
     my $choice2=&lt;&gt;;      my $choice2=&lt;&gt;;
     chomp($choice2);      chomp($choice2);
     $perlvar{'lonExpire'}=$choice2;      $perlvar{'lonExpire'}=$choice2;
   }    }
   elsif ($choice==8) {    elsif ($choice==11) {
   print(&lt;&lt;END);    print(&lt;&lt;END);
 8) Server Load: $perlvar{'lonLoadLim'}  11) Server Load: $perlvar{'lonLoadLim'}
 ENTER NEW VALUE:  ENTER NEW VALUE:
 END  END
     my $choice2=&lt;&gt;;      my $choice2=&lt;&gt;;
     chomp($choice2);      chomp($choice2);
     $perlvar{'lonLoadLim'}=$choice2;      $perlvar{'lonLoadLim'}=$choice2;
   }    }
   elsif ($choice==9) {    elsif ($choice==12) {
   print(&lt;&lt;END);    print(&lt;&lt;END);
 9) User Load: $perlvar{'lonUserLoadLim'}  12) User Load: $perlvar{'lonUserLoadLim'}
 Numer of users that can login before machine is 'overloaded'  Numer of users that can login before machine is 'overloaded'
 ENTER NEW VALUE (integer value, 0 means there is no limit):  ENTER NEW VALUE (integer value, 0 means there is no limit):
 END  END
Line 686  END Line 979  END
     chomp($choice2);      chomp($choice2);
     $perlvar{'lonUserLoadLim'}=$choice2;      $perlvar{'lonUserLoadLim'}=$choice2;
   }    }
   elsif ($choice==10) {    elsif ($choice==13) {
   print(&lt;&lt;END);    print(&lt;&lt;END);
 10) Allow only secure connections: $securestatus   13) Allow only secure connections: $securestatus 
 The Lon-CAPA communication daemons lonc and lond can be configured to  The Lon-CAPA communication daemons lonc and lond can be configured to
 allow only secure connections by default.  allow only secure connections by default.
   
Line 715  END Line 1008  END
     }      }
     ($securestatus,$securenum)=&securesetting(%perlvar);      ($securestatus,$securenum)=&securesetting(%perlvar);
   }    }
   elsif ($choice==11) {    elsif (($choice==14) && (!$error)) {
     $flag=1;      $flag=1;
   }    }
   else {    else {
       print "Invalid input.\n";
   }    }
 }  }
     open(OUT,"&gt;$confdir$filename") or      open(OUT,"&gt;$confdir$filename") or
       die("Cannot output to $confdir$filename\n");        die("Cannot output to $confdir$filename\n");
     foreach my $key (keys %perlvar) {      foreach my $key (keys %perlvar) {
       my $value=$perlvar{$key};        my $value=$perlvar{$key};
         my $line = "PerlSetVar     $key      $value";
         if ($value eq '') {
             $line = '#'.$line;
         }
       print(OUT &lt;&lt;END) unless $perlvarstatic{$key};        print(OUT &lt;&lt;END) unless $perlvarstatic{$key};
 PerlSetVar     $key      $value  $line
 END  END
     }      }
     close(OUT);      close(OUT);
Line 737  END Line 1034  END
 <target dist='default'>loncom/hosts.tab</target>  <target dist='default'>loncom/hosts.tab</target>
 <perlscript mode='fg'>  <perlscript mode='fg'>
 unless (-l "<TARGET />") {  unless (-l "<TARGET />") {
   my $hostname=`hostname`;chomp($hostname);    my $hostname=`hostname -f`;chomp($hostname);
   $date=`date -I`; chomp($date);    $date=`date -I`; chomp($date);
   $lonHostID=$perlvar{'lonHostID'};    $lonHostID=$perlvar{'lonHostID'};
   $lonHostID=~s/\W//g;    $lonHostID=~s/[^\w\-.]//g;
   $lineexistflag=0;    $lineexistflag=0;
   $hostidexistflag=0;    $hostidexistflag=0;
   $line2insert=&lt;&lt;END;    $line2insert=&lt;&lt;END;
 $perlvar{'lonHostID'}:$perlvar{'lonDefDomain'}:$perlvar{'lonRole'}:$hostname  $perlvar{'lonHostID'}:$perlvar{'lonDefDomain'}:$perlvar{'lonRole'}:$hostname:$protocol:$intdom
 END  END
   $domaininsert="$perlvar{'lonDefDomain'}:$domainDescription:$domainTabExtras\n";    if (!$domainTabExtras) {
    $domainTabExtras=':::::';
     }
     $domaininsert="$perlvar{'lonDefDomain'}:$domainDescription:$domainTabExtras:$primaryLibServer\n";
   if ($lonCluster eq 'standalone') {    if ($lonCluster eq 'standalone') {
     open(OUT,'&gt;../'.$lonCluster.'_hosts.tab') or      open(OUT,'&gt;../'.$lonCluster.'_hosts.tab') or
       die('file generation error');        die('file generation error');
       print(OUT $line2insert);        print(OUT $line2insert);
         print OUT ("^$hostname:$protocol\n");
       close(OUT);
       open(OUT,'&gt;../'.$lonCluster.'_dns_hosts.tab') or
         die('file generation error');
         print(OUT $line2insert);
     close(OUT);      close(OUT);
     open(OUT,'&gt;../'.$lonCluster.'_domain.tab') or      open(OUT,'&gt;../'.$lonCluster.'_domain.tab') or
       die('file generation error');        die('file generation error');
       print(OUT $domaininsert);        print(OUT $domaininsert);
     close(OUT);      close(OUT);
       open(OUT,'&gt;../'.$lonCluster.'_dns_domain.tab') or
         die('file generation error');
         print(OUT $domaininsert);
       close(OUT);
   }    }
   if ($flag==1) {    if ($flag==1) {
     `rm -f ../hosts.tab`;      `rm -f ../hosts.tab`;
     open(IN,'&lt;../'.$lonCluster.'_hosts.tab');      `rm -f ../dns_hosts.tab`;
     while(&lt;IN&gt;) {      `ln -s ${lonCluster}_dns_hosts.tab ../dns_hosts.tab`;
       if (/^$line2insert$/) {      open(IN,'&lt;../'.$lonCluster.'_dns_hosts.tab');
       while(my $line = &lt;IN&gt;) {
         if ($line =~ /^\Q$line2insert\E$/) {
         $lineexistflag=1;          $lineexistflag=1;
       }        }
       if (/^$lonHostID\:/) {        if ($line =~ /^\Q$lonHostID\E\:/) {
         $hostidexistflag=1;          $hostidexistflag=1;
       }        }
     }      }
Line 772  END Line 1083  END
     if ($hostidexistflag and !$lineexistflag) {      if ($hostidexistflag and !$lineexistflag) {
       print &lt;&lt;END;        print &lt;&lt;END;
 WARNING: $lonHostID already exists inside  WARNING: $lonHostID already exists inside
 loncapa/loncom/${lonCluster}_hosts.tab.  The entry inside  loncapa/loncom/${lonCluster}_dns_hosts.tab.  The entry inside
 ${lonCluster}_hosts.tab does not match your settings.  ${lonCluster}_dns_hosts.tab does not match your settings.
 The entry inside ${lonCluster}_hosts.tab is being replaced  An entry inside ${lonCluster}_hosts.tab will be made
 with your new values.  with your new values.
 END  END
       `grep -v "$lonHostID:" ../${lonCluster}_hosts.tab &gt; ../new_${lonCluster}_hosts.tab`;        `grep -v "$lonHostID:" ../${lonCluster}_hosts.tab &gt; ../new_${lonCluster}_hosts.tab`;
Line 784  END Line 1095  END
        close(OUT);         close(OUT);
       `ln -s new_${lonCluster}_hosts.tab ../hosts.tab`;        `ln -s new_${lonCluster}_hosts.tab ../hosts.tab`;
       # email appropriate message        # email appropriate message
       `echo "REPLACE:$lonCluster:$lonHostID:$date:$line2insert" | mail -s "REPLACE:$lonCluster:$lonHostID:$date" installrecord\@mail.lon-capa.org`;        `echo "REPLACE:$lonCluster:$lonHostID:$date:$line2insert" | mail -s "REPLACE:$lonCluster:$lonHostID:$protocol:$intdom:$date" installrecord\@mail.lon-capa.org`;
     }      }
     elsif ($hostidexistflag and $lineexistflag) {      elsif ($hostidexistflag and $lineexistflag) {
       print &lt;&lt;END;        print &lt;&lt;END;
 Entry exists in ${lonCluster}_hosts.tab.  Entry exists in ${lonCluster}_dns_hosts.tab. Making duplicate entry in ${lonCluster}_hosts.tab
 END  END
       `ln -s ${lonCluster}_hosts.tab ../hosts.tab`;        `grep -v "$lonHostID:" ../${lonCluster}_hosts.tab &gt; ../new_${lonCluster}_hosts.tab`;
          open(OUT,'&gt;&gt;../new_'.$lonCluster.'_hosts.tab') or
            die("cannot open loncom/${lonCluster}_hosts.tab for output\n");
            print(OUT $line2insert);
          close(OUT);
         `ln -s new_${lonCluster}_hosts.tab ../hosts.tab`;
       # email appropriate message        # email appropriate message
       `echo "STABLEUPDATE:$lonCluster:$lonHostID:$date:$line2insert" | mail -s "STABLEUPDATE:$lonCluster:$lonHostID:$date" installrecord\@mail.lon-capa.org`;        `echo "STABLEUPDATE:$lonCluster:$lonHostID:$date:$line2insert" | mail -s "STABLEUPDATE:$lonCluster:$lonHostID:$protocol:$intdom:$date" installrecord\@mail.lon-capa.org`;
     }      }
     elsif (!$hostidexistflag and !$lineexistflag) {      elsif (!$hostidexistflag and !$lineexistflag) {
       print &lt;&lt;END;        print &lt;&lt;END;
Line 805  END Line 1121  END
        close(OUT);         close(OUT);
       `ln -s new_${lonCluster}_hosts.tab ../hosts.tab`;        `ln -s new_${lonCluster}_hosts.tab ../hosts.tab`;
       # email appropriate message        # email appropriate message
       `echo "INSERT:$lonCluster:$lonHostID:$date:$line2insert" | mail -s "INSERT:$lonCluster:$lonHostID:$date" installrecord\@mail.lon-capa.org`;        `echo "INSERT:$lonCluster:$lonHostID:$date:$line2insert" | mail -s "INSERT:$lonCluster:$lonHostID:$protocol:$intdom:$date" installrecord\@mail.lon-capa.org`;
     }      }
   }    }
   $lineexistflag=0;    $lineexistflag=0;
   if ($flag==1) {    if ($flag==1) {
     `rm -f ../domain.tab`;      `rm -f ../domain.tab`;
     open(IN,'&lt;../'.$lonCluster.'_domain.tab');      `rm -f ../dns_domain.tab`;
     while(&lt;IN&gt;) {      `ln -s ${lonCluster}_dns_domain.tab ../dns_domain.tab`;
       if (/^$domaininsert$/) {      open(IN,'&lt;../'.$lonCluster.'_dns_domain.tab');
       while(my $line = &lt;IN&gt;) {
         if ($line =~/^\Q$domaininsert\E$/) {
         $lineexistflag=1;          $lineexistflag=1;
       }        }
       if (/^$perlvar{'lonDefDomain'}\:/) {        if ($line =~/^\Q$perlvar{'lonDefDomain'}\E\:/) {
         $domainexistflag=1;          $domainexistflag=1;
       }        }
     }      }
Line 824  END Line 1142  END
     if ($domainexistflag and !$lineexistflag) {      if ($domainexistflag and !$lineexistflag) {
       print &lt;&lt;END;        print &lt;&lt;END;
 WARNING: $perlvar{'lonDefDomain'} already exists inside  WARNING: $perlvar{'lonDefDomain'} already exists inside
 loncapa/loncom/${lonCluster}_domain.tab.  The entry inside  loncapa/loncom/${lonCluster}_dns_domain.tab.  The entry inside
 ${lonCluster}_domain.tab does not match your settings.  ${lonCluster}_dns_domain.tab does not match your settings.
 The entry inside ${lonCluster}_domain.tab is being replaced  An entry will be made in inside ${lonCluster}_domain.tab
 with your new values.  with your new values.
 END  END
       `grep -v "$perlvar{'lonDefDomain'}:" ../${lonCluster}_domain.tab &gt; ../new_${lonCluster}_domain.tab`;        `grep -v "$perlvar{'lonDefDomain'}:" ../${lonCluster}_domain.tab &gt; ../new_${lonCluster}_domain.tab`;
Line 839  END Line 1157  END
       `echo "REPLACEdom:$lonCluster:$lonHostID:$date:$domaninsert" | mail -s "REPLACEdom:$lonCluster:$lonHostID:$date" installrecord\@mail.lon-capa.org`;        `echo "REPLACEdom:$lonCluster:$lonHostID:$date:$domaninsert" | mail -s "REPLACEdom:$lonCluster:$lonHostID:$date" installrecord\@mail.lon-capa.org`;
     }      }
     elsif ($domainexistflag and $lineexistflag) {      elsif ($domainexistflag and $lineexistflag) {
         `grep -v "$perlvar{'lonDefDomain'}:" ../${lonCluster}_domain.tab &gt; ../new_${lonCluster}_domain.tab`;
          open(OUT,'&gt;&gt;../new_'.$lonCluster.'_domain.tab') or
            die("cannot open loncom/${lonCluster}_domain.tab for output\n");
            print(OUT $domaininsert);
          close(OUT);
       print &lt;&lt;END;        print &lt;&lt;END;
 Entry exists in ${lonCluster}_domain.tab.  Entry exists in ${lonCluster}_dns_domain.tab. Making duplicate entry in ${lonCluster}_domain.tab
 END  END
       `ln -s ${lonCluster}_domain.tab ../domain.tab`;        `ln -s new_${lonCluster}_domain.tab ../domain.tab`;
       # email appropriate message        # email appropriate message
       `echo "STABLEUPDATEdom:$lonCluster:$lonHostID:$date:$domaininsert" | mail -s "STABLEUPDATEdom:$lonCluster:$lonHostID:$date" installrecord\@mail.lon-capa.org`;        `echo "STABLEUPDATEdom:$lonCluster:$lonHostID:$date:$domaininsert" | mail -s "STABLEUPDATEdom:$lonCluster:$lonHostID:$date" installrecord\@mail.lon-capa.org`;
     }      }

Removed from v.1.35  
changed lines
  Added in v.1.78


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>