Diff for /loncom/auth/lonlogin.pm between versions 1.39 and 1.91

version 1.39, 2003/04/02 14:57:32 version 1.91, 2007/04/06 22:06:02
Line 25 Line 25
 #  #
 # http://www.lon-capa.org/  # http://www.lon-capa.org/
 #  #
 # 5/21/99,5/22,5/25,5/26,5/31,6/2,6/10,7/12,7/14,  
 # 1/14/00,5/29,5/30,6/1,6/29,7/1,11/9,  
 # 1/17/01 Gerd Kortemeyer  
 #  
 # 2/7/02,2/8,2/12,2/14,2/15,2/19 Josh Brunskole  
 #   
 # 7/10/02 Jeremy Bowers  
   
 package Apache::lonlogin;  package Apache::lonlogin;
   
 use strict;  use strict;
 use Apache::Constants qw(:common);  use Apache::Constants qw(:common);
   use CGI::Cookie();
 use Apache::File ();  use Apache::File ();
 use Apache::lonnet();  use Apache::lonnet;
 use Apache::loncommon();  use Apache::loncommon();
   use Apache::lonauth();
   use Apache::lonlocal;
   use Apache::migrateuser();
   use lib '/home/httpd/lib/perl/';
   use LONCAPA;
    
 sub handler {  sub handler {
     my $r = shift;      my $r = shift;
     $r->content_type('text/html');  
       &Apache::loncommon::get_unprocessed_cgi
    (join('&',$ENV{'QUERY_STRING'},$env{'request.querystring'},
         $ENV{'REDIRECT_QUERY_STRING'}),
    ['interface','username','domain','firsturl','localpath','localres',
     'token']);
   
   # -- check if they are a migrating user
       if (defined($env{'form.token'})) {
    return &Apache::migrateuser::handler($r);
       }
   
     &Apache::loncommon::no_cache($r);      &Apache::loncommon::no_cache($r);
       &Apache::lonlocal::get_language_handle($r);
       &Apache::loncommon::content_type($r,'text/html');
     $r->send_http_header;      $r->send_http_header;
     return OK if $r->header_only;      return OK if $r->header_only;
   
   
     &Apache::loncommon::get_unprocessed_cgi  # Are we re-routing?
      ($ENV{'QUERY_STRING'}.'&'.$ENV{'request.querystring'},      if (-e '/home/httpd/html/lon-status/reroute.txt') {
       ['interface','username','domain','firsturl']);   &Apache::lonauth::reroute($r);
     return OK;
       }
   
   
   # -------------------------------- Prevent users from attempting to login twice
       my %cookies=CGI::Cookie->parse($r->header_in('Cookie'));
       my $lonid=$cookies{'lonID'};
       my $cookie;
       if ($lonid) {
    my $handle=&LONCAPA::clean_handle($lonid->value);
           my $lonidsdir=$r->dir_config('lonIDsDir');
    if (-e "$lonidsdir/$handle.id") {
   # Is there an existing token file?
       if ($handle=~/^publicuser\_/) {
   # For "public user" - remove it, we apparently really want to login
    unlink("$lonidsdir/$handle.id");
       } elsif ($handle ne '') {
   # Indeed, a valid token is found
    my $start_page = 
       &Apache::loncommon::start_page('Already logged in');
    my $end_page = 
       &Apache::loncommon::end_page();
    $r->print(<<ENDFAILED);
   $start_page
   <h1>You are already logged in</h1>
   <p>Please either <a href="/adm/roles">continue the current session</a> or
   <a href="/adm/logout">logout</a>.</p>
   <p>
   <a href="/adm/loginproblems.html">Problems?</a></p>
   $end_page
   ENDFAILED
                   return OK;
        }  
    }
       }
   
   # ---------------------------------------------------- No valid token, continue
   
    # ---------------------------- Not possible to really login to domain "public"
       if ($env{'form.domain'} eq 'public') {
    $env{'form.domain'}='';
    $env{'form.username'}='';
       }
 # ----------------------------------------------------------- Process Interface  # ----------------------------------------------------------- Process Interface
     $ENV{'form.interface'}=~s/\W//g;      $env{'form.interface'}=~s/\W//g;
   
     my $textbrowsers=$r->dir_config('lonTextBrowsers');      my $textbrowsers=$r->dir_config('lonTextBrowsers');
     my $httpbrowser=$ENV{"HTTP_USER_AGENT"};      my $httpbrowser=$ENV{"HTTP_USER_AGENT"};
           
     foreach (split(/\:/,$textbrowsers)) {      foreach (split(/\:/,$textbrowsers)) {
  if ($httpbrowser=~/$_/i) {   if ($httpbrowser=~/$_/i) {
     $ENV{'form.interface'}='textual';      $env{'form.interface'}='textual';
         }          }
     }      }
   
     my $fullgraph=($ENV{'form.interface'} ne 'textual');      my $fullgraph=($env{'form.interface'} ne 'textual');
       my $port_to_use=$r->dir_config('lonhttpdPort');
     my $iconpath= 'http://'.$ENV{'HTTP_HOST'}.':8080'.      if (!defined($port_to_use)) {
    $port_to_use='8080';
       }
       my $iconpath= 'http://'.$ENV{'HTTP_HOST'}.':'.$port_to_use.
                   $r->dir_config('lonIconsURL');                    $r->dir_config('lonIconsURL');
     my $domain  = $r->dir_config('lonDefDomain');      my $domain = &Apache::lonnet::default_login_domain();
       if (($env{'form.domain'}) && 
    (&Apache::lonnet::domain($env{'form.domain'},'description'))) {
    $domain=$env{'form.domain'};
       }
     my $role    = $r->dir_config('lonRole');      my $role    = $r->dir_config('lonRole');
     my $loadlim = $r->dir_config('lonLoadLim');      my $loadlim = $r->dir_config('lonLoadLim');
     my $servadm = $r->dir_config('lonAdmEMail');      my $servadm = $r->dir_config('lonAdmEMail');
     my $sysadm  = $r->dir_config('lonSysEMail');  
     my $lonhost = $r->dir_config('lonHostID');      my $lonhost = $r->dir_config('lonHostID');
     my $tabdir  = $r->dir_config('lonTabDir');      my $tabdir  = $r->dir_config('lonTabDir');
     my $include = $r->dir_config('lonIncludes');      my $include = $r->dir_config('lonIncludes');
     my $expire  = $r->dir_config('lonExpire');      my $expire  = $r->dir_config('lonExpire');
       my $version = $r->dir_config('lonVersion');
       my $host_name = &Apache::lonnet::hostname($lonhost);
   
 # --------------------------------------------- Default values for login fields  # --------------------------------------------- Default values for login fields
   
     my $authusername=($ENV{'form.username'}?$ENV{'form.username'}:'');      my $authusername=($env{'form.username'}?$env{'form.username'}:'');
     my $authdomain=($ENV{'form.domain'}?$ENV{'form.domain'}:$domain);      my $authdomain=($env{'form.domain'}?$env{'form.domain'}:$domain);
   
 # ---------------------------------------------------------- Determine own load  # ---------------------------------------------------------- Determine own load
     my $loadavg;      my $loadavg;
    {      {
        my $loadfile=Apache::File->new('/proc/loadavg');   my $loadfile=Apache::File->new('/proc/loadavg');
        $loadavg=<$loadfile>;   $loadavg=<$loadfile>;
    }      }
     $loadavg =~ s/\s.*//g;      $loadavg =~ s/\s.*//g;
     my $loadpercent=100*$loadavg/$loadlim;      my $loadpercent=sprintf("%.1f",100*$loadavg/$loadlim);
       my $userloadpercent=&Apache::lonnet::userload();
   
 # ------------------------------------------------------- Do the load balancing  # ------------------------------------------------------- Do the load balancing
     my $otherserver='http://'.$ENV{'SERVER_NAME'};      my $otherserver= &Apache::lonnet::absolute_url($host_name);
     my $firsturl=      my $firsturl=
     ($ENV{'request.firsturl'}?$ENV{'request.firsturl'}:$ENV{'form.firsturl'});      ($env{'request.firsturl'}?$env{'request.firsturl'}:$env{'form.firsturl'});
 # ---------------------------------------- Are we access server and overloaded?  # ---------------------------------------- Are we access server and overloaded?
     if (($role eq 'access') && ($loadpercent>100.0)) {      if (($role eq 'access') &&
         $otherserver=Apache::lonnet::spareserver($loadpercent);   (($userloadpercent>100.0)||($loadpercent>100.0))) {
           my $unloaded=Apache::lonnet::spareserver($loadpercent,$userloadpercent);
    if ($unloaded) { $otherserver=$unloaded; }
     }      }
   
   # ----------------------------------------------------------- Get announcements
       my $announcements=&Apache::lonnet::getannounce();
 # -------------------------------------------------------- Set login parameters  # -------------------------------------------------------- Set login parameters
   
     my @hexstr=('0','1','2','3','4','5','6','7',      my @hexstr=('0','1','2','3','4','5','6','7',
Line 131  sub handler { Line 198  sub handler {
   
     if ($logtoken eq 'con_lost') {      if ($logtoken eq 'con_lost') {
         my $spares='';          my $spares='';
         foreach (keys %Apache::lonnet::hostname) {   my $last;
             if ($_ ne $lonhost) {          foreach my $hostid (sort
                $spares.='<br /><a href="http://'.$Apache::lonnet::hostname{$_}.      {
  '/adm/login?domain='.$authdomain.'">'.   &Apache::lonnet::hostname($a) cmp
                  $Apache::lonnet::hostname{$_}.'</a>';      &Apache::lonnet::hostname($b);
                if ($Apache::lonnet::spareid{$_}) {      }
    $spares.=' (preferred)';      keys(%Apache::lonnet::spareid)) {
                }              next if ($hostid eq $lonhost);
    }      my $hostname = &Apache::lonnet::hostname($hostid);
       next if ($last eq $hostname);
               $spares.='<br /><font size="+1"><a href="http://'.
                   $hostname.
                   '/adm/login?domain='.$authdomain.'">'.
                   $hostname.'</a>'.
                   ' (preferred)</font>'.$/;
       $last=$hostname;
           }
           $spares.= '<br />';
    my %all_hostnames = &Apache::lonnet::all_hostnames();
           foreach my $hostid (sort
       {
    &Apache::lonnet::hostname($a) cmp
       &Apache::lonnet::hostname($b);
       }
       keys(%all_hostnames)) {
               next if ($hostid eq $lonhost || $Apache::lonnet::spareid{$hostid});
       my $hostname = &Apache::lonnet::hostname($hostid);
               next if ($last eq $hostname);
               $spares.='<br /><a href="http://'.
                   $hostname.
                   '/adm/login?domain='.$authdomain.'">'.
                   $hostname.'</a>';
       $last=$hostname;
         }          }
  $r->print(<<ENDTROUBLE);   $r->print(<<ENDTROUBLE);
 <html>  <html>
Line 148  sub handler { Line 239  sub handler {
 <img src="/adm/lonKaputt/lonlogo_broken.gif" align="right" />  <img src="/adm/lonKaputt/lonlogo_broken.gif" align="right" />
 <h3>This LON-CAPA server is temporarily not available for login</h3>  <h3>This LON-CAPA server is temporarily not available for login</h3>
 <p>Please attempt to login to one of the following servers:</p>$spares  <p>Please attempt to login to one of the following servers:</p>$spares
 <p>If the problem persists, please contact <tt>$servadm</tt>.</p>  
 </body>  </body>
 </html>  </html>
 ENDTROUBLE  ENDTROUBLE
Line 156  ENDTROUBLE Line 246  ENDTROUBLE
     }      }
   
 # ----------------------------------------------- Apparently we are in business  # ----------------------------------------------- Apparently we are in business
   
     my $domainlogo=&Apache::loncommon::domainlogo();  
     $servadm=~s/\,/\<br \/\>/g;      $servadm=~s/\,/\<br \/\>/g;
     $sysadm=~s/\,/\<br \/\>/g;  
   
 # --------------------------------------------------- Print login screen header  # --------------------------------------------------- Print login screen header
     $r->print(<<ENDHEADER);      $r->print(<<ENDHEADER);
Line 177  ENDHEADER Line 264  ENDHEADER
   
 # ----------------------------------------------------------- Front page design  # ----------------------------------------------------------- Front page design
     my $pgbg=      my $pgbg=
       ($fullgraph?&Apache::loncommon::designparm('login.pgbg'):'#FFFFFF');        ($fullgraph?&Apache::loncommon::designparm('login.pgbg',$domain):'#FFFFFF');
     my $font=      my $font=
       ($fullgraph?&Apache::loncommon::designparm('login.font'):'#000000');        ($fullgraph?&Apache::loncommon::designparm('login.font',$domain):'#000000');
     my $link=      my $link=
       ($fullgraph?&Apache::loncommon::designparm('login.link'):'#0000FF');        ($fullgraph?&Apache::loncommon::designparm('login.link',$domain):'#0000FF');
     my $vlink=      my $vlink=
       ($fullgraph?&Apache::loncommon::designparm('login.vlink'):'#0000FF');        ($fullgraph?&Apache::loncommon::designparm('login.vlink',$domain):'#0000FF');
     my $alink=&Apache::loncommon::designparm('login.alink');      my $alink=&Apache::loncommon::designparm('login.alink',$domain);
     my $mainbg=      my $mainbg=
       ($fullgraph?&Apache::loncommon::designparm('login.mainbg'):'#FFFFFF');        ($fullgraph?&Apache::loncommon::designparm('login.mainbg',$domain):'#FFFFFF');
     my $sidebg=      my $sidebg=
       ($fullgraph?&Apache::loncommon::designparm('login.sidebg'):'#FFFFFF');        ($fullgraph?&Apache::loncommon::designparm('login.sidebg',$domain):'#FFFFFF');
     my $logo=&Apache::loncommon::designparm('login.logo');      my $logo=&Apache::loncommon::designparm('login.logo',$domain);
     my $img=&Apache::loncommon::designparm('login.img');      my $img=&Apache::loncommon::designparm('login.img',$domain);
       my $domainlogo=&Apache::loncommon::domainlogo($domain);
       my $showadminmail=&Apache::loncommon::designparm('login.adminmail',                                                      $domain);
       my $showcoursecat =
           &Apache::loncommon::designparm('login.coursecatalog',$domain);
   
   
   # ----------------------------------------------------------------------- Texts
   
   my %lt=&Apache::lonlocal::texthash(
     'un'  => 'Username',
     'pw'  => 'Password',
     'dom' => 'Domain',
     'perc' => 'percent',
     'load' => 'Load',
                     'userload' => 'User Load',
                     'about'  => 'About LON-CAPA',
                     'access' => 'Accessibility Options',
                     'catalog' => 'Course Catalog',
     'auth' => 'userauthentication.gif',
     'log' => 'Log in',
     'help' => 'Log-in Help',
     'serv' => 'Server',
                     'servadm' => 'Server Administration',
                     'helpdesk' => 'Contact Helpdesk',
                     'forgotpw' => 'Forgot password?');
   # -------------------------------------------------- Change password field name
       my $now=time;
       my $forgotpw = &forgotpwdisplay(%lt);
       my $loginhelp = &loginhelpdisplay(%lt);
 # ---------------------------------------------------------- Serve rest of page  # ---------------------------------------------------------- Serve rest of page
     $r->print(<<ENDSCRIPT);      $r->print(<<ENDSCRIPT);
   
Line 230  ENDHEADER Line 344  ENDHEADER
         lextkey=this.document.client.elements.lextkey.value;          lextkey=this.document.client.elements.lextkey.value;
         initkeys();          initkeys();
   
         this.document.server.elements.upass.value          this.document.server.elements.upass0.value
     =crypted(this.document.client.elements.upass.value);      =crypted(this.document.client.elements.upass$now.value.substr(0,15));
    this.document.server.elements.upass1.value
       =crypted(this.document.client.elements.upass$now.value.substr(15,15));
    this.document.server.elements.upass2.value
       =crypted(this.document.client.elements.upass$now.value.substr(30,15));
   
           this.document.client.elements.uname.value='';
           this.document.client.elements.upass$now.value='';
   
         this.document.server.submit();          this.document.server.submit();
  return false;   return false;
Line 248  ENDSCRIPT Line 369  ENDSCRIPT
   <form name="server" action="$otherserver/adm/authenticate" method="post" target="_top">    <form name="server" action="$otherserver/adm/authenticate" method="post" target="_top">
    <input type="hidden" name="logtoken" value="$logtoken" />     <input type="hidden" name="logtoken" value="$logtoken" />
    <input type="hidden" name="serverid" value="$lonhost" />     <input type="hidden" name="serverid" value="$lonhost" />
    <input type="hidden" name="interface" value="$ENV{'form.interface'}" />     <input type="hidden" name="interface" value="$env{'form.interface'}" />
    <input type="hidden" name="uname" value="" />     <input type="hidden" name="uname" value="" />
    <input type="hidden" name="upass" value="" />     <input type="hidden" name="upass0" value="" />
      <input type="hidden" name="upass1" value="" />
      <input type="hidden" name="upass2" value="" />
    <input type="hidden" name="udom" value="" />     <input type="hidden" name="udom" value="" />
    <input type="hidden" name="imagesuppress"  value="" />     <input type="hidden" name="imagesuppress"  value="" />
    <input type="hidden" name="appletsuppress"  value="" />     <input type="hidden" name="appletsuppress"  value="" />
Line 258  ENDSCRIPT Line 381  ENDSCRIPT
    <input type="hidden" name="fontenhance"  value="" />     <input type="hidden" name="fontenhance"  value="" />
    <input type="hidden" name="blackwhite"  value="" />     <input type="hidden" name="blackwhite"  value="" />
    <input type="hidden" name="remember"  value="" />     <input type="hidden" name="remember"  value="" />
      <input type="hidden" name="localpath" value="$env{'form.localpath'}" />
      <input type="hidden" name="localres" value="$env{'form.localres'}" />
   </form>    </form>
 ENDSERVERFORM  ENDSERVERFORM
       my $coursecatalog;
       if ($showcoursecat eq '' || $showcoursecat)) {
           $coursecatalog = &coursecatalog_link($lt{'catalog'});
       }
     if ($fullgraph) { $r->print(<<ENDTOP);      if ($fullgraph) { $r->print(<<ENDTOP);
   <!-- The LON-CAPA Header -->    <!-- The LON-CAPA Header -->
   <tr>    <tr>
Line 285  ENDSERVERFORM Line 414  ENDSERVERFORM
   </tr>    </tr>
   <tr>    <tr>
         
    <!-- A cell that will hold the 'access' and 'about' buttons -->     <!-- A cell that will hold the 'access', 'about', and 'catalog' links -->
    <!-- Row 3 Column 1 -->     <!-- Row 3 Column 1 -->
    <td valign="top" height=60 align="center" bgcolor="$sidebg">     <td valign="top" height="60" align="left" bgcolor="$sidebg">
     <a href="/adm/login?interface=textual"><img src="$iconpath/accessbutton.gif" border=0 alt="Accessibility Options" /></a>      <table cellpadding="0" cellspacing="2" border="0">
     <br />       <tr>
     <a href="/adm/about.html"><img src="$iconpath/aboutlon.gif" border=0 alt="About LON-CAPA" /></a>        <td>&nbsp;</td>
         <td><a href="/adm/login?interface=textual"><b>$lt{'access'}</b></a></td>
        </tr>
        <tr>
         <td>&nbsp;</td>
         <td><a href="/adm/about.html"><b>$lt{'about'}</b></a></td>
        </tr>$coursecatalog
        <tr>
         <td colspan="2">&nbsp;</td>
        </tr>
       </table>
    </td>     </td>
   
    <!-- The shaded space between the two main columns -->     <!-- The shaded space between the two main columns -->
    <!-- Row 3 Column 2 -->     <!-- Row 3 Column 2 -->
    <td width=27 height=60 background="$iconpath/fillleft.gif"><img src="$iconpath/fillleft.gif" alt="" /></td>     <td width=27 height=60 background="$iconpath/fillleft.gif"><img src="$iconpath/fillleft.gif" alt="" /></td>
   
    <!-- The right main column holding the large LON-CAPA logo-->     <!-- The right main column holding the large LON-CAPA logo-->
    <!-- Rows 3-4 Column 3 -->     <!-- Rows 3-4 Column 3 -->
    <td align="center" valign="top" width="100%" height="100%" rowspan=2 bgcolor="$mainbg">     <td align="center" valign="top" width="100%" height="100%" bgcolor="$mainbg">
     <center>      <center>
      <img src="$logo" alt="" />       <img src="$logo" alt="" />
     </center>      </center>
Line 315  ENDSERVERFORM Line 453  ENDSERVERFORM
    <td align="center" valign="middle" bgcolor="$sidebg">     <td align="center" valign="middle" bgcolor="$sidebg">
 ENDTOP  ENDTOP
 } else {  } else {
     $r->print('<h1>The Learning<i>Online</i> Network with CAPA</h1><h2>Text-based Interface Login</h2>');      $r->print('<h1>The Learning<i>Online</i> Network with CAPA</h1><h2>Text-based Interface Login</h2>'.$announcements);
 }  }
     $r->print('<form name="client" onsubmit="return(send())">');      $r->print('<form name="client" onsubmit="return(send())">');
     unless ($fullgraph) {      unless ($fullgraph) {
         $r->print(<<ENDACCESSOPTIONS);          $r->print(<<ENDACCESSOPTIONS);
 <h3>Select Accessibility Options</h3>  <h3>Select Accessibility Options</h3>
 <input type="checkbox" name="imagesuppress" /> Suppress rendering of images<br />  <label><input type="checkbox" name="imagesuppress" /> Suppress rendering of images</label><br />
 <input type="checkbox" name="appletsuppress" /> Suppress Java applets<br />  <label><input type="checkbox" name="appletsuppress" /> Suppress Java applets</label><br />
 <input type="checkbox" name="embedsuppress" /> Suppress rendering of embedded multimedia<br />  <label><input type="checkbox" name="embedsuppress" /> Suppress rendering of embedded multimedia</label><br />
 <input type="checkbox" name="fontenhance" /> Increase font size<br />  <label><input type="checkbox" name="fontenhance" /> Increase font size</label><br />
 <input type="checkbox" name="blackwhite" /> Switch to black and white mode<br />  <label><input type="checkbox" name="blackwhite" /> Switch to black and white mode</label><br />
 <p>If you have accessibility needs that are not addressed by this interface,   
 please  
 contact the system administrator at <tt>$sysadm</tt>.</p><br />  
 <input type="checkbox" name="remember" /> Remember these settings for next login<hr />  <input type="checkbox" name="remember" /> Remember these settings for next login<hr />
 ENDACCESSOPTIONS  ENDACCESSOPTIONS
 } else {  } else {
Line 347  ENDNOOPT Line 482  ENDNOOPT
   
      <!-- Start the sub-table for text and input alignment -->       <!-- Start the sub-table for text and input alignment -->
      <table border=0 cellspacing=0 cellpadding=0>       <table border=0 cellspacing=0 cellpadding=0>
       <tr><td bgcolor="$sidebg" colspan=2><img src="$iconpath/userauthentication.gif" alt="User Authentication" /></td></tr>        <tr><td bgcolor="$sidebg" colspan=2><img src="$iconpath/$lt{'auth'}" alt="User Authentication" /></td></tr>
       <tr>        <tr>
        <td bgcolor="$mainbg"><br /><font size=-1><b>&nbsp;&nbsp;&nbsp;User Name:</b></font></td>         <td bgcolor="$mainbg"><br /><font size=-1><b>&nbsp;&nbsp;&nbsp;$lt{'un'}:</b></font></td>
        <td bgcolor="$mainbg"><br /><input type="text" name="uname" size="10" value="$authusername" /></td>         <td bgcolor="$mainbg"><br /><input type="text" name="uname" size="10" value="$authusername" /></td>
       </tr>        </tr>
       <tr>        <tr>
        <td bgcolor="$mainbg"><font size=-1><b>&nbsp;&nbsp;&nbsp;Password:</b></font></td>         <td bgcolor="$mainbg"><font size=-1><b>&nbsp;&nbsp;&nbsp;$lt{'pw'}:</b></font></td>
        <td bgcolor="$mainbg"><input type="password" name="upass" size="10" /></td>         <td bgcolor="$mainbg"><input type="password" name="upass$now" size="10" /></td>
       </tr>        </tr>
       <tr>        <tr>
        <td bgcolor="$mainbg"><font size=-1><b>&nbsp;&nbsp;&nbsp;Domain:</b></font></td>         <td bgcolor="$mainbg"><font size=-1><b>&nbsp;&nbsp;&nbsp;$lt{'dom'}:</b></font></td>
        <td bgcolor="$mainbg"><input type="text" name="udom" size="10" value="$authdomain" /></td>         <td bgcolor="$mainbg"><input type="text" name="udom" size="10" value="$authdomain" /></td>
       </tr>        </tr>
       <tr>        <tr>
        <td bgcolor="$mainbg">&nbsp;&nbsp;&nbsp;<a href="/adm/loginproblems.html">Help</a></td>         <td bgcolor="$mainbg">&nbsp;</td>
        <td bgcolor="$mainbg" valign="bottom" align="center">         <td bgcolor="$mainbg" valign="bottom" align="center">
         <br />          <br />
         <input type="submit" value="Log In" />          <input type="submit" value="$lt{'log'}" />
          </td>
         </tr>
         <tr>
          <td bgcolor="$mainbg" valign="bottom" align="left" colspan="2">
           $loginhelp
           $forgotpw
        </td>         </td>
       </tr>        </tr>
      </table>       </table>
Line 372  ENDNOOPT Line 513  ENDNOOPT
     </form>      </form>
 ENDLOGIN  ENDLOGIN
     if ($fullgraph) {      if ($fullgraph) {
           my $helpdeskscript;
           my $contactblock = &contactdisplay(\%lt,$servadm,$showadminmail,
                                     $version,$authdomain,\$helpdeskscript);
  $r->print(<<ENDDOCUMENT);   $r->print(<<ENDDOCUMENT);
    </td>     </td>
   
    <!-- Row 4 Column 2 -->     <!-- Row 4 Column 2 -->
    <td width=27 background="$iconpath/fillleft.gif"><img src="$iconpath/fillleft.gif" alt="" /></td>     <td width=27 background="$iconpath/fillleft.gif"><img src="$iconpath/fillleft.gif" alt="" /></td>
   
      <!-- Row 4 Column 3 -->
   <td bgcolor="$mainbg">$announcements</td>
   
    <!-- Row 4 Column 4 -->     <!-- Row 4 Column 4 -->
    <td width=27 background="$iconpath/fillright.gif"><img src="$iconpath/fillright.gif" alt="" /></td>     <td width=27 background="$iconpath/fillright.gif"><img src="$iconpath/fillright.gif" alt="" /></td>
   </tr>    </tr>
Line 389  ENDLOGIN Line 536  ENDLOGIN
      <table border=0 cellspacing=0 cellpadding=0>       <table border=0 cellspacing=0 cellpadding=0>
       <tr>        <tr>
        <td bgcolor="$sidebg" align="left" valign="top">         <td bgcolor="$sidebg" align="left" valign="top">
         <small><b>&nbsp;&nbsp;&nbsp;Domain:&nbsp;</b></small>          <small><b>&nbsp;&nbsp;&nbsp;$lt{'dom'}:&nbsp;</b></small>
        </td>         </td>
        <td bgcolor="$sidebg" align="left" valign="top">         <td bgcolor="$sidebg" align="left" valign="top">
         <small><tt>&nbsp;$domain</tt></small>          <small><tt>&nbsp;$domain</tt></small>
Line 397  ENDLOGIN Line 544  ENDLOGIN
       </tr>        </tr>
       <tr>        <tr>
        <td bgcolor="$sidebg" align="left" valign="top">         <td bgcolor="$sidebg" align="left" valign="top">
         <small><b>&nbsp;&nbsp;&nbsp;Server:&nbsp;</b></small>          <small><b>&nbsp;&nbsp;&nbsp;$lt{'serv'}:&nbsp;</b></small>
        </td>         </td>
        <td bgcolor="$sidebg" align="left" valign="top">         <td bgcolor="$sidebg" align="left" valign="top">
         <small><tt>&nbsp;$lonhost ($role)</tt></small>          <small><tt>&nbsp;$lonhost ($role)</tt></small>
Line 405  ENDLOGIN Line 552  ENDLOGIN
       </tr>        </tr>
       <tr>        <tr>
        <td bgcolor="$sidebg" align="left" valign="top">         <td bgcolor="$sidebg" align="left" valign="top">
         <small><b>&nbsp;&nbsp;&nbsp;Load:&nbsp;</b></small>          <small><b>&nbsp;&nbsp;&nbsp;$lt{'load'}:&nbsp;</b></small>
          </td>
          <td bgcolor="$sidebg" align="left" valign="top">
           <small><tt>&nbsp;$loadpercent $lt{'perc'}</tt></small>
          </td>
         </tr>
         <tr>
          <td bgcolor="$sidebg" align="left" valign="top">
           <small><b>&nbsp;&nbsp;&nbsp;$lt{'userload'}:&nbsp;</b></small>
        </td>         </td>
        <td bgcolor="$sidebg" align="left" valign="top">         <td bgcolor="$sidebg" align="left" valign="top">
         <small><tt>&nbsp;$loadpercent percent</tt></small>          <small><tt>&nbsp;$userloadpercent $lt{'perc'}</tt></small>
        </td>         </td>
       </tr>        </tr>
      </table>       </table>
      <br />       <br />
     <small>      $contactblock
      <b>&nbsp;&nbsp;&nbsp;System Administration:</b><br />  
      <tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$sysadm</tt><br />  
      <b>&nbsp;&nbsp;&nbsp;Server Administration:</b><br />  
      <tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$servadm<br />&nbsp;</tt>  
     </small>  
    </td>     </td>
   
    <!-- Row 5 Column 2 -->     <!-- Row 5 Column 2 -->
Line 448  $domainlogo Line 598  $domainlogo
   </tr>    </tr>
  </table>   </table>
   
 <script>  <script type="text/javascript">
 // the if prevents the script error if the browser can't handle this  // the if prevents the script error if the browser can not handle this
 if ( document.client.uname ) { document.client.uname.focus(); }  if ( document.client.uname ) { document.client.uname.focus(); }
 </script>  </script>
   $helpdeskscript
   
 ENDDOCUMENT  ENDDOCUMENT
 }  }
     $r->print('</body></html>');      $r->print('</body></html>');
     return OK;      return OK;
 }   }
   
   sub contactdisplay {
       my ($lt,$servadm,$showadminmail,$version,$authdomain,$helpdeskscript) = @_;
       my $contactblock;
       my $showhelpdesk = 0;
       my $requestmail = $Apache::lonnet::perlvar{'lonSupportEMail'};
       if ($requestmail =~ m/^[^\@]+\@[^\@]+$/) {
           $showhelpdesk = 1;
       }
       if ($servadm && $showadminmail) {
           $contactblock .= '<b>&nbsp;&nbsp;&nbsp;'.$$lt{'servadm'}.':</b><br />'.
                            '<tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'.$servadm.'</tt><br />&nbsp;<br />';
       }
       if ($showhelpdesk) {
           $contactblock .= '<b>&nbsp;&nbsp;&nbsp;<a href="javascript:helpdesk()"><font size="+1">'.$lt->{'helpdesk'}.'</font></a></b><br />';
           my $thisurl = &escape('/adm/login');
           $$helpdeskscript = <<"ENDSCRIPT";
   <script type="text/javascript">
   function helpdesk() {
       var codedom = document.client.udom.value;
       if (codedom == '') {
           codedom = "$authdomain";
       }
       var querystr = "origurl=$thisurl&codedom="+codedom;
       document.location.href = "/adm/helpdesk?"+querystr;
       return;
   }
   </script>
   ENDSCRIPT
       }
       $contactblock .= <<"ENDBLOCK";
        &nbsp;&nbsp;&nbsp;$version
   ENDBLOCK
       return $contactblock;
   }
   
   sub forgotpwdisplay {
       my (%lt) = @_;
       my $prompt_for_resetpw = 1; 
       if ($prompt_for_resetpw) {
           return '<br />&nbsp;&nbsp;&nbsp;<a href="/adm/resetpw">'.$lt{'forgotpw'}.'</a></b><br /><br />';
       }
       return;
   }
   
   sub loginhelpdisplay {
       my (%lt) = @_;
       my $login_help = 1;
       if ($login_help) {
           return '&nbsp;&nbsp;&nbsp;<a href="/adm/loginproblems.html">'.$lt{'help'}.'</a></b>';
       }
       return;
   }
   
   sub coursecatalog_link {
       my ($linkname) = @_;
       return <<"END";
        <tr>
         <td>&nbsp;</td>
         <td><a href="/adm/coursecatalog"><b>$linkname</b></a></td>
        </tr>
   END
   }
   
 1;  1;
 __END__  __END__

Removed from v.1.39  
changed lines
  Added in v.1.91


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>
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.