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

version 1.39, 2003/04/02 14:57:32 version 1.152, 2012/08/27 00:52:45
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 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','role','symb']);
       if (!defined($env{'form.firsturl'})) {
           &Apache::lonacc::get_posted_cgi($r,['firsturl']);
       }
   
   # -- 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'},      my $londocroot = $r->dir_config('lonDocRoot'); 
       ['interface','username','domain','firsturl']);      if (-e "$londocroot/lon-status/reroute.txt") {
     &Apache::lonauth::reroute($r);
 # ----------------------------------------------------------- Process Interface   return OK;
     $ENV{'form.interface'}=~s/\W//g;      }
   
     my $textbrowsers=$r->dir_config('lonTextBrowsers');      $env{'form.firsturl'} =~ s/(`)/'/g;
     my $httpbrowser=$ENV{"HTTP_USER_AGENT"};  
       # -------------------------------- Prevent users from attempting to login twice
     foreach (split(/\:/,$textbrowsers)) {      my $handle = &Apache::lonnet::check_for_valid_session($r);
  if ($httpbrowser=~/$_/i) {      if ($handle ne '') {
     $ENV{'form.interface'}='textual';          my $lonidsdir=$r->dir_config('lonIDsDir');
           if ($handle=~/^publicuser\_/) {
   # For "public user" - remove it, we apparently really want to login
       unlink($r->dir_config('lonIDsDir')."/$handle.id");
           } else {
   # Indeed, a valid token is found
               &Apache::lonnet::transfer_profile_to_env($lonidsdir,$handle);
       my $start_page = 
           &Apache::loncommon::start_page('Already logged in');
       my $end_page = 
           &Apache::loncommon::end_page();
               my $dest = '/adm/roles';
               if ($env{'form.firsturl'} ne '') {
                   $dest = $env{'form.firsturl'}; 
               }
       $r->print(
                     $start_page
                    .'<p class="LC_warning">'.&mt('You are already logged in!').'</p>'
                    .'<p>'.&mt('Please either [_1]continue the current session[_2] or [_3]log out[_4].',
                     '<a href="'.$dest.'">','</a>','<a href="/adm/logout">','</a>').'</p>'
                    .$end_page
                    );
               return OK;
         }          }
     }      }
   
     my $fullgraph=($ENV{'form.interface'} ne 'textual');  # ---------------------------------------------------- No valid token, continue
   
     my $iconpath= 'http://'.$ENV{'HTTP_HOST'}.':8080'.   # ---------------------------- Not possible to really login to domain "public"
                   $r->dir_config('lonIconsURL');      if ($env{'form.domain'} eq 'public') {
     my $domain  = $r->dir_config('lonDefDomain');   $env{'form.domain'}='';
    $env{'form.username'}='';
       }
   # ----------------------------------------------------------- Process Interface
       $env{'form.interface'}=~s/\W//g;
   
       my $httpbrowser=$ENV{"HTTP_USER_AGENT"};
   
       my $iconpath= 
    &Apache::loncommon::lonhttpdurl($r->dir_config('lonIconsURL'));
   
       my $lonhost = $r->dir_config('lonHostID');
       my $domain = &Apache::lonnet::default_login_domain();
       if ($lonhost ne '') {
           my $redirect = &check_loginvia($domain,$lonhost);
           if ($redirect) {
               $r->print($redirect);
               return OK;
           } 
       }
   
       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 $uloadlim= $r->dir_config('lonUserLoadLim');
     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 $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;  
   
 # ------------------------------------------------------- Do the load balancing      my ($loadpercent,$userloadpercent);
     my $otherserver='http://'.$ENV{'SERVER_NAME'};      if ($loadlim) {
     my $firsturl=          $loadpercent=sprintf("%.1f",100*$loadavg/$loadlim);
     ($ENV{'request.firsturl'}?$ENV{'request.firsturl'}:$ENV{'form.firsturl'});      }
 # ---------------------------------------- Are we access server and overloaded?      if ($uloadlim) {
     if (($role eq 'access') && ($loadpercent>100.0)) {          $userloadpercent=&Apache::lonnet::userload();
         $otherserver=Apache::lonnet::spareserver($loadpercent);  
     }      }
   
       my $firsturl=
       ($env{'request.firsturl'}?$env{'request.firsturl'}:$env{'form.firsturl'});
   
   # ----------------------------------------------------------- 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 123  sub handler { Line 187  sub handler {
     if ($uextkey>2147483647) { $uextkey-=4294967296; }      if ($uextkey>2147483647) { $uextkey-=4294967296; }
   
 # -------------------------------------------------------- Store away log token  # -------------------------------------------------------- Store away log token
       my $tokenextras;
       if ($env{'form.role'}) {
           $tokenextras = '&role='.&escape($env{'form.role'});
       }
       if ($env{'form.symb'}) {
           if (!$tokenextras) {
               $tokenextras = '&';
           }
           $tokenextras .= '&symb='.&escape($env{'form.symb'});
       }
     my $logtoken=Apache::lonnet::reply(      my $logtoken=Apache::lonnet::reply(
        'tmpput:'.$ukey.$lkey.'&'.$firsturl,         'tmpput:'.$ukey.$lkey.'&'.$firsturl.$tokenextras,
        $lonhost);         $lonhost);
   
 # ------------------- If we cannot talk to ourselves, we are in serious trouble  # -- If we cannot talk to ourselves, or hostID does not map to a hostname
   #    we are in serious trouble
   
     if ($logtoken eq 'con_lost') {      if (($logtoken eq 'con_lost') || ($logtoken eq 'no_such_host')) {
           if ($logtoken eq 'no_such_host') {
               &Apache::lonnet::logthis('No valid logtoken for log-in page -- unable to determine hostname for hostID: '.$lonhost.'. Check entry in hosts.tab');
           }
         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) || ($hostname eq ''));
               $spares.='<br /><font size="+1"><a href="http://'.
                   $hostname.
                   '/adm/login?domain='.$authdomain.'">'.
                   $hostname.'</a>'.
                   ' '.&mt('(preferred)').'</font>'.$/;
       $last=$hostname;
           }
           if ($spares) {
               $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) || ($hostname eq ''));
               $spares.='<br /><a href="http://'.
                $hostname.
                '/adm/login?domain='.$authdomain.'">'.
                $hostname.'</a>';
               $last=$hostname;
            }
            $r->print(
      '<html>'
     .'<head><title>'
     .&mt('The LearningOnline Network with CAPA')
     .'</title></head>'
     .'<body bgcolor="#FFFFFF">'
     .'<h1>'.&mt('The LearningOnline Network with CAPA').'</h1>'
     .'<img src="/adm/lonKaputt/lonlogo_broken.gif" align="right" />'
     .'<h3>'.&mt('This LON-CAPA server is temporarily not available for login.').'</h3>');
           if ($spares) {
               $r->print('<p>'.&mt('Please attempt to login to one of the following servers:')
                        .'</p>'
                        .$spares);
         }          }
  $r->print(<<ENDTROUBLE);          $r->print('</body>'
 <html>                   .'</html>'
 <head><title>The LearningOnline Network with CAPA</title></head>          );
 <body bgcolor="#FFFFFF">  
 <img src="/adm/lonKaputt/lonlogo_broken.gif" align="right" />  
 <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>If the problem persists, please contact <tt>$servadm</tt>.</p>  
 </body>  
 </html>  
 ENDTROUBLE  
         return OK;          return OK;
     }      }
   
 # ----------------------------------------------- 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  
     $r->print(<<ENDHEADER);  
 <html>  
 <head>  
 <meta HTTP-EQUIV="Refresh" CONTENT="$expire; url=/adm/roles" />  
 <title>The LearningOnline Network with CAPA Login</title>  
 </head>  
 ENDHEADER  
 # ---------------------------------------------------- Serve out DES JavaScript  
     {  
  my $jsh=Apache::File->new($include."/londes.js");  
         $r->print(<$jsh>);  
     }  
   
 # ----------------------------------------------------------- Front page design  # ----------------------------------------------------------- Front page design
     my $pgbg=      my $pgbg=&Apache::loncommon::designparm('login.pgbg',$domain);
       ($fullgraph?&Apache::loncommon::designparm('login.pgbg'):'#FFFFFF');      my $font=&Apache::loncommon::designparm('login.font',$domain);
     my $font=      my $link=&Apache::loncommon::designparm('login.link',$domain);
       ($fullgraph?&Apache::loncommon::designparm('login.font'):'#000000');      my $vlink=&Apache::loncommon::designparm('login.vlink',$domain);
     my $link=      my $alink=&Apache::loncommon::designparm('login.alink',$domain);
       ($fullgraph?&Apache::loncommon::designparm('login.link'):'#0000FF');      my $mainbg=&Apache::loncommon::designparm('login.mainbg',$domain);
     my $vlink=      my $loginbox_bg=&Apache::loncommon::designparm('login.sidebg',$domain);
       ($fullgraph?&Apache::loncommon::designparm('login.vlink'):'#0000FF');      my $loginbox_header_bgcol=&Apache::loncommon::designparm('login.bgcol',$domain);
     my $alink=&Apache::loncommon::designparm('login.alink');      my $loginbox_header_textcol=&Apache::loncommon::designparm('login.textcol',$domain);
     my $mainbg=      my $logo=&Apache::loncommon::designparm('login.logo',$domain);
       ($fullgraph?&Apache::loncommon::designparm('login.mainbg'):'#FFFFFF');      my $img=&Apache::loncommon::designparm('login.img',$domain);
     my $sidebg=      my $domainlogo=&Apache::loncommon::domainlogo($domain);
       ($fullgraph?&Apache::loncommon::designparm('login.sidebg'):'#FFFFFF');      my $showbanner = 1;
     my $logo=&Apache::loncommon::designparm('login.logo');      my $showmainlogo = 1;
     my $img=&Apache::loncommon::designparm('login.img');      if (defined(&Apache::loncommon::designparm('login.showlogo_img',$domain))) {
           $showbanner = &Apache::loncommon::designparm('login.showlogo_img',$domain);
       }
 # ---------------------------------------------------------- Serve rest of page      if (defined(&Apache::loncommon::designparm('login.showlogo_logo',$domain))) {
     $r->print(<<ENDSCRIPT);          $showmainlogo = &Apache::loncommon::designparm('login.showlogo_logo',$domain);
       }
 <body bgcolor="$pgbg" text="$font" link="$link" vlink="$vlink" alink="$alink"      my $showadminmail=&Apache::loncommon::designparm('login.adminmail',$domain);
   topmargin=0 leftmargin=0 marginwidth=0 marginheight=0>      my $showcoursecat =
           &Apache::loncommon::designparm('login.coursecatalog',$domain);
  <script language="JavaScript">      my $shownewuserlink = 
     function send()          &Apache::loncommon::designparm('login.newuser',$domain);
     {      my $now=time;
  this.document.server.elements.uname.value      my $js = (<<ENDSCRIPT);
        =this.document.client.elements.uname.value;  
   <script type="text/javascript" language="JavaScript">
         this.document.server.elements.udom.value  // <![CDATA[
        =this.document.client.elements.udom.value;  function send()
   {
         this.document.server.elements.imagesuppress.value  this.document.server.elements.uname.value
        =this.document.client.elements.imagesuppress.checked;  =this.document.client.elements.uname.value;
   
         this.document.server.elements.embedsuppress.value  this.document.server.elements.udom.value
        =this.document.client.elements.embedsuppress.checked;  =this.document.client.elements.udom.value;
   
   uextkey=this.document.client.elements.uextkey.value;
   lextkey=this.document.client.elements.lextkey.value;
   initkeys();
   
   this.document.server.elements.upass0.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.server.elements.appletsuppress.value  this.document.client.elements.uname.value='';
        =this.document.client.elements.appletsuppress.checked;  this.document.client.elements.upass$now.value='';
   
         this.document.server.elements.fontenhance.value  this.document.server.submit();
        =this.document.client.elements.fontenhance.checked;  return false;
   }
   
         this.document.server.elements.blackwhite.value  function enableInput() {
        =this.document.client.elements.blackwhite.checked;      this.document.client.elements.upass$now.removeAttribute("readOnly");
       this.document.client.elements.uname.removeAttribute("readOnly");
       this.document.client.elements.udom.removeAttribute("readOnly");
       return;
   }
   
         this.document.server.elements.remember.value  // ]]>
        =this.document.client.elements.remember.checked;  </script>
   
         uextkey=this.document.client.elements.uextkey.value;  ENDSCRIPT
         lextkey=this.document.client.elements.lextkey.value;  
         initkeys();  
   
         this.document.server.elements.upass.value  # --------------------------------------------------- Print login screen header
     =crypted(this.document.client.elements.upass.value);  
   
         this.document.server.submit();      my %add_entries = (
  return false;         bgcolor      => "$mainbg",
          text         => "$font",
          link         => "$link",
          vlink        => "$vlink",
          alink        => "$alink",
                  onload       => 'javascript:enableInput();',);
   
       $r->print(&Apache::loncommon::start_page('The LearningOnline Network with CAPA Login',$js,
          { 'redirect'       => [$expire,'/adm/roles'], 
    'add_entries' => \%add_entries,
    'only_body'   => 1,}));
   
   # ----------------------------------------------------------------------- Texts
   
       my %lt=&Apache::lonlocal::texthash(
             'un'       => 'Username',
             'pw'       => 'Password',
             'dom'      => 'Domain',
             'perc'     => 'percent',
             'load'     => 'Server Load',
             'userload' => 'User Load',
             'catalog'  => 'Course/Community Catalog',
             'log'      => 'Log in',
             'help'     => 'Log-in Help',
             'serv'     => 'Server',
             'servadm'  => 'Server Administration',
             'helpdesk' => 'Contact Helpdesk',
             'forgotpw' => 'Forgot password?',
             'newuser'  => 'New User?',
          );
   # -------------------------------------------------- Change password field name
   
       my $forgotpw = &forgotpwdisplay(%lt);
       $forgotpw .= '<br />' if $forgotpw;
       my $loginhelp = &Apache::lonauth::loginhelpdisplay($authdomain);
       if ($loginhelp) {
           $loginhelp = '<a href="'.$loginhelp.'">'.$lt{'help'}.'</a><br />';
     }      }
  </script>  
 ENDSCRIPT  
   
     if ($fullgraph) {  # ---------------------------------------------------- Serve out DES JavaScript
  $r->print(      {
   '<table width="100%" cellpadding=0 cellspacing=0 border=0>');      my $jsh=Apache::File->new($include."/londes.js");
       $r->print(<$jsh>);
     }      }
   # ---------------------------------------------------------- Serve rest of page
   
       $r->print(
       '<div class="LC_Box"'
      .' style="margin:0 auto; padding:10px; width:90%; height: auto; background-color:#FFFFFF;">'
   );
   
     $r->print(<<ENDSERVERFORM);      $r->print(<<ENDSERVERFORM);
   <form name="server" action="$otherserver/adm/authenticate" method="post" target="_top">  <form name="server" action="/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="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="localpath" value="$env{'form.localpath'}" />
    <input type="hidden" name="appletsuppress"  value="" />     <input type="hidden" name="localres" value="$env{'form.localres'}" />
    <input type="hidden" name="embedsuppress"  value="" />  
    <input type="hidden" name="fontenhance"  value="" />  
    <input type="hidden" name="blackwhite"  value="" />  
    <input type="hidden" name="remember"  value="" />  
   </form>    </form>
 ENDSERVERFORM  ENDSERVERFORM
     if ($fullgraph) { $r->print(<<ENDTOP);      my $coursecatalog;
   <!-- The LON-CAPA Header -->      if (($showcoursecat eq '') || ($showcoursecat)) {
   <tr>          $coursecatalog = &coursecatalog_link($lt{'catalog'}).'<br />';
       }
    <!-- Row 1 Columns 2-4 -->      my $newuserlink;
    <td width="100%" height=75 colspan=4 align="left" valign="top" bgcolor="$pgbg"><img src="$img" border=0 alt="The Learning Online Network with CAPA" /></td>      if ($shownewuserlink) {
   </tr>          $newuserlink = &newuser_link($lt{'newuser'}).'<br />';
       }
   <!-- The gray bar that starts the two table frames -->      my $logintitle =
   <tr>          '<h2 class="LC_hcell"'
          .' style="background:'.$loginbox_header_bgcol.';'
    <!-- Row 2 Column 1 -->         .' color:'.$loginbox_header_textcol.'">'
    <td width=182 height=27 bgcolor="$sidebg">&nbsp;</td>         .$lt{'log'}
          .'</h2>';
    <!-- Row 2 Column 2 -->  
    <td width=27 height=27 align="left" background="$iconpath/filltop.gif"><img src="$iconpath/upperleft.gif" border=0 alt="" /></td>      my $noscript_warning='<noscript><span class="LC_warning"><b>'
                           .&mt('Use of LON-CAPA requires Javascript to be enabled in your web browser.')
    <!-- Row 2 Column 3 -->                          .'</b></span></noscript>';
    <td height=27 background="$iconpath/filltop.gif"><img src="$iconpath/filltop.gif" alt="" /></td>      my $helpdeskscript;
       my $contactblock = &contactdisplay(\%lt,$servadm,$showadminmail,
    <!-- Row 2 Column 4 -->                                         $authdomain,\$helpdeskscript);
    <td width=27 height=27 align="right" background="$iconpath/filltop.gif"><img src="$iconpath/upperright.gif" border=0 alt="" /></td>  
   </tr>      my $loginform=(<<LFORM);
   <tr>  <form name="client" action="" onsubmit="return(send())">
        <input type="hidden" name="lextkey" value="$lextkey" />
    <!-- A cell that will hold the 'access' and 'about' buttons -->    <input type="hidden" name="uextkey" value="$uextkey" />
    <!-- Row 3 Column 1 -->    <b><label for="uname">$lt{'un'}</label>:</b><br />
    <td valign="top" height=60 align="center" bgcolor="$sidebg">    <input type="text" name="uname" id="uname" size="15" value="$authusername" readonly="readonly" /><br />
     <a href="/adm/login?interface=textual"><img src="$iconpath/accessbutton.gif" border=0 alt="Accessibility Options" /></a>    <b><label for="upass$now">$lt{'pw'}</label>:</b><br />
     <br />    <input type="password" name="upass$now" id="upass$now" size="15" readonly="readonly" /><br />
     <a href="/adm/about.html"><img src="$iconpath/aboutlon.gif" border=0 alt="About LON-CAPA" /></a>    <b><label for="udom">$lt{'dom'}</label>:</b><br />
    </td>    <input type="text" name="udom" id="udom" size="15" value="$authdomain" readonly="readonly" /><br />
     <input type="submit" value="$lt{'log'}" />
    <!-- The shaded space between the two main columns -->  </form>
    <!-- Row 3 Column 2 -->  LFORM
    <td width=27 height=60 background="$iconpath/fillleft.gif"><img src="$iconpath/fillleft.gif" alt="" /></td>  
       if ($showbanner) {
    <!-- The right main column holding the large LON-CAPA logo-->          $r->print(<<HEADER);
    <!-- Rows 3-4 Column 3 -->  <!-- The LON-CAPA Header -->
    <td align="center" valign="top" width="100%" height="100%" rowspan=2 bgcolor="$mainbg">  <div style="background:$pgbg;margin:0;width:100%;">
     <center>    <img src="$img" border="0" alt="The Learning Online Network with CAPA" />
      <img src="$logo" alt="" />  </div>
     </center>  HEADER
    </td>      }
       $r->print(<<ENDTOP);
    <!-- Row 3 Column 4 -->  <div style="float:left;margin-top:0;">
    <td width=27 background="$iconpath/fillright.gif"><img src="$iconpath/fillright.gif" alt="" /></td>  <div class="LC_Box" style="background:$loginbox_bg;">
   </tr>    $logintitle
   <tr>    $loginform
     $noscript_warning
    <!-- The entry form -->  </div>
    <!-- Row 4 Column 1 -->    
    <td align="center" valign="middle" bgcolor="$sidebg">  <div class="LC_Box" style="padding-top: 10px;">
     $loginhelp
     $forgotpw
     $contactblock
     $newuserlink
     $coursecatalog
   </div>
   </div>
   
   <div>
 ENDTOP  ENDTOP
 } else {      if ($showmainlogo) {
     $r->print('<h1>The Learning<i>Online</i> Network with CAPA</h1><h2>Text-based Interface Login</h2>');          $r->print(' <img src="'.$logo.'" alt="" />'."\n");
 }      }
     $r->print('<form name="client" onsubmit="return(send())">');  $r->print(<<ENDTOP);
     unless ($fullgraph) {  $announcements
         $r->print(<<ENDACCESSOPTIONS);  </div>
 <h3>Select Accessibility Options</h3>  <hr style="clear:both;" />
 <input type="checkbox" name="imagesuppress" /> Suppress rendering of images<br />  ENDTOP
 <input type="checkbox" name="appletsuppress" /> Suppress Java applets<br />      my ($domainrow,$serverrow,$loadrow,$userloadrow,$versionrow);
 <input type="checkbox" name="embedsuppress" /> Suppress rendering of embedded multimedia<br />      $domainrow = <<"END";
 <input type="checkbox" name="fontenhance" /> Increase font size<br />  
 <input type="checkbox" name="blackwhite" /> Switch to black and white mode<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 />  
 ENDACCESSOPTIONS  
 } else {  
     $r->print(<<ENDNOOPT);  
 <input type="hidden" name="imagesuppress"  value="" />  
 <input type="hidden" name="embedsuppress"  value="" />  
 <input type="hidden" name="appletsuppress"  value="" />  
 <input type="hidden" name="fontenhance"  value="" />  
 <input type="hidden" name="blackwhite"  value="" />  
 <input type="hidden" name="remember"  value="" />  
 ENDNOOPT  
 }  
     $r->print(<<ENDLOGIN);  
      <input type="hidden" name="lextkey" value="$lextkey">  
      <input type="hidden" name="uextkey" value="$uextkey">  
   
      <!-- Start the sub-table for text and input alignment -->  
      <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="$mainbg"><br /><font size=-1><b>&nbsp;&nbsp;&nbsp;User Name:</b></font></td>  
        <td bgcolor="$mainbg"><br /><input type="text" name="uname" size="10" value="$authusername" /></td>  
       </tr>  
       <tr>  
        <td bgcolor="$mainbg"><font size=-1><b>&nbsp;&nbsp;&nbsp;Password:</b></font></td>  
        <td bgcolor="$mainbg"><input type="password" name="upass" size="10" /></td>  
       </tr>  
       <tr>        <tr>
        <td bgcolor="$mainbg"><font size=-1><b>&nbsp;&nbsp;&nbsp;Domain:</b></font></td>         <td  align="left" valign="top">
        <td bgcolor="$mainbg"><input type="text" name="udom" size="10" value="$authdomain" /></td>          <small><b>$lt{'dom'}:&nbsp;</b></small>
          </td>
          <td  align="left" valign="top">
           <small><tt>&nbsp;$domain</tt></small>
          </td>
       </tr>        </tr>
   END
       $serverrow = <<"END";
       <tr>        <tr>
        <td bgcolor="$mainbg">&nbsp;&nbsp;&nbsp;<a href="/adm/loginproblems.html">Help</a></td>         <td  align="left" valign="top">
        <td bgcolor="$mainbg" valign="bottom" align="center">          <small><b>$lt{'serv'}:&nbsp;</b></small>
         <br />         </td>
         <input type="submit" value="Log In" />         <td align="left" valign="top">
           <small><tt>&nbsp;$lonhost ($role)</tt></small>
        </td>         </td>
       </tr>        </tr>
      </table>  END
      <!-- End sub-table -->      if ($loadlim) {
     </form>          $loadrow = <<"END";
 ENDLOGIN  
     if ($fullgraph) {  
  $r->print(<<ENDDOCUMENT);  
    </td>  
   
    <!-- Row 4 Column 2 -->  
    <td width=27 background="$iconpath/fillleft.gif"><img src="$iconpath/fillleft.gif" alt="" /></td>  
   
    <!-- Row 4 Column 4 -->  
    <td width=27 background="$iconpath/fillright.gif"><img src="$iconpath/fillright.gif" alt="" /></td>  
   </tr>  
   <tr>  
   
    <!-- Row 5 Column 1 -->  
    <td bgcolor="$sidebg" valign="middle" align="left">  
      <br />  
      <table border=0 cellspacing=0 cellpadding=0>  
       <tr>        <tr>
        <td bgcolor="$sidebg" align="left" valign="top">         <td align="left" valign="top">
         <small><b>&nbsp;&nbsp;&nbsp;Domain:&nbsp;</b></small>          <small><b>$lt{'load'}:&nbsp;</b></small>
        </td>         </td>
        <td bgcolor="$sidebg" align="left" valign="top">         <td align="left" valign="top">
         <small><tt>&nbsp;$domain</tt></small>          <small><tt>&nbsp;$loadpercent $lt{'perc'}</tt></small>
        </td>         </td>
       </tr>        </tr>
   END
       }
       if ($uloadlim) {
           $userloadrow = <<"END";
       <tr>        <tr>
        <td bgcolor="$sidebg" align="left" valign="top">         <td align="left" valign="top">
         <small><b>&nbsp;&nbsp;&nbsp;Server:&nbsp;</b></small>          <small><b>$lt{'userload'}:&nbsp;</b></small>
        </td>         </td>
        <td bgcolor="$sidebg" align="left" valign="top">         <td align="left" valign="top">
         <small><tt>&nbsp;$lonhost ($role)</tt></small>          <small><tt>&nbsp;$userloadpercent $lt{'perc'}</tt></small>
        </td>         </td>
       </tr>        </tr>
   END
       }
       if (($version ne '') && ($version ne '<!-- VERSION -->')) {
           $versionrow = <<"END";
       <tr>        <tr>
        <td bgcolor="$sidebg" align="left" valign="top">         <td colspan="2" align="left">
         <small><b>&nbsp;&nbsp;&nbsp;Load:&nbsp;</b></small>          <small>$version</small>
        </td>  
        <td bgcolor="$sidebg" align="left" valign="top">  
         <small><tt>&nbsp;$loadpercent percent</tt></small>  
        </td>         </td>
       </tr>        </tr>
      </table>  END
      <br />      }
     <small>  
      <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>  
   
    <!-- Row 5 Column 2 -->  
    <td width=27 background="$iconpath/fillleft.gif"><img src="$iconpath/fillleft.gif" alt="" /></td>  
   
    <!-- Row 5 Column 3 -->  
    <td width="100%" valign="bottom" bgcolor="$mainbg">  
 $domainlogo  
 </td>  
   
    <!-- Row 5 Column 4 -->  
    <td width=27 background="$iconpath/fillright.gif"><img src="$iconpath/fillright.gif" alt="" /></td>  
   </tr>  
   <tr>  
   
    <!-- Row 6 Column 1 -->  
    <td bgcolor="$sidebg">&nbsp;</td>  
   
    <!-- Row 6 Column 2 -->  
    <td align="left" background="$iconpath/fillbottom.gif"><img src="$iconpath/lowerleft.gif" alt="" /></td>  
   
    <!-- Row 6 Column 3 -->  
    <td background="$iconpath/fillbottom.gif"><img src="$iconpath/fillbottom.gif" alt="" /></td>  
   
    <!-- Row 6 Column 4 -->  
    <td align="right" background="$iconpath/fillbottom.gif"><img src="$iconpath/lowerright.gif" alt="" /></td>  
   </tr>  
  </table>  
   
 <script>      $r->print(<<ENDDOCUMENT);
 // the if prevents the script error if the browser can't handle this      <div style="float: left;">
        <table border="0" cellspacing="0" cellpadding="0">
   $domainrow
   $serverrow
   $loadrow    
   $userloadrow
   $versionrow
        </table>
       </div>
       <div style="float: right;">
       $domainlogo
       </div>
       <br style="clear:both;" />
    </div>
   
   <script type="text/javascript">
   // <![CDATA[
   // 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
 }      my %endargs = ( 'noredirectlink' => 1, );
     $r->print('</body></html>');      $r->print(&Apache::loncommon::end_page(\%endargs));
     return OK;      return OK;
 }   }
   
   sub check_loginvia {
       my ($domain,$lonhost) = @_;
       if ($domain eq '' || $lonhost eq '') {
           return;
       }
       my %domconfhash = &Apache::loncommon::get_domainconf($domain);
       my $loginvia = $domconfhash{$domain.'.login.loginvia_'.$lonhost};
       my $loginvia_exempt = $domconfhash{$domain.'.login.loginvia_exempt_'.$lonhost};
       my $output;
       if ($loginvia ne '') {
           my $noredirect;
           my $ip = $ENV{'REMOTE_ADDR'};
           if ($ip eq '127.0.0.1') {
               $noredirect = 1;
           } else {
               if ($loginvia_exempt ne '') {
                   my @exempt = split(',',$loginvia_exempt);
                   if (grep(/^\Q$ip\E$/,@exempt)) {
                       $noredirect = 1;
                   }
               }
           }
           unless ($noredirect) {
               my ($newhost,$path);
               if ($loginvia =~ /:/) {
                   ($newhost,$path) = split(':',$loginvia);
               } else {
                   $newhost = $loginvia;
               }
               if ($newhost ne $lonhost) {
                   if (&Apache::lonnet::hostname($newhost) ne '') {
                       $output = &redirect_page($newhost,$path);
                   }
               }
           }
       }
       return $output;
   }
   
   sub redirect_page {
       my ($desthost,$path) = @_;
       my $protocol = $Apache::lonnet::protocol{$desthost};
       $protocol = 'http' if ($protocol ne 'https');
       unless ($path =~ m{^/}) {
           $path = '/'.$path;
       }
       my $url = $protocol.'://'.&Apache::lonnet::hostname($desthost).$path;
       if ($env{'form.firsturl'} ne '') {
           $url .='?firsturl='.$env{'form.firsturl'};
       }
       my $start_page = &Apache::loncommon::start_page('Switching Server ...',undef,
                                                       {'redirect' => [0,$url],});
       my $end_page   = &Apache::loncommon::end_page();
       return $start_page.$end_page;
   }
   
   sub contactdisplay {
       my ($lt,$servadm,$showadminmail,$authdomain,$helpdeskscript) = @_;
       my $contactblock;
       my $showhelpdesk = 0;
       my $requestmail = $Apache::lonnet::perlvar{'lonSupportEMail'};
       if ($requestmail =~ m/^[^\@]+\@[^\@]+$/) {
           $showhelpdesk = 1;
       }
       if ($servadm && $showadminmail) {
           $contactblock .= $$lt{'servadm'}.':<br />'.
                            '<tt>'.$servadm.'</tt><br />';
       }
       if ($showhelpdesk) {
           $contactblock .= '<a href="javascript:helpdesk()">'.$lt->{'helpdesk'}.'</a><br />';
           my $thisurl = &escape('/adm/login');
           $$helpdeskscript = <<"ENDSCRIPT";
   <script type="text/javascript">
   // <![CDATA[
   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
       }
       return $contactblock;
   }
   
   sub forgotpwdisplay {
       my (%lt) = @_;
       my $prompt_for_resetpw = 1; 
       if ($prompt_for_resetpw) {
           return '<a href="/adm/resetpw">'.$lt{'forgotpw'}.'</a>';
       }
       return;
   }
   
   sub coursecatalog_link {
       my ($linkname) = @_;
       return <<"END";
         <a href="/adm/coursecatalog">$linkname</a>
   END
   }
   
   sub newuser_link {
       my ($linkname) = @_;
       return '<a href="/adm/createaccount">'.$linkname.'</a>';
   }
   
 1;  1;
 __END__  __END__

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


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.