[LON-CAPA-cvs] cvs: loncom /auth migrateuser.pm switchserver.pm /lonnet/perl lonnet.pm
albertel
lon-capa-cvs@mail.lon-capa.org
Tue, 25 Oct 2005 19:14:33 -0000
albertel Tue Oct 25 15:14:33 2005 EDT
Modified files:
/loncom/auth migrateuser.pm switchserver.pm
/loncom/lonnet/perl lonnet.pm
Log:
- migrateuser checks the input data more carefully
- tmpput and tmpget now have lonnet implementations
Index: loncom/auth/migrateuser.pm
diff -u loncom/auth/migrateuser.pm:1.1 loncom/auth/migrateuser.pm:1.2
--- loncom/auth/migrateuser.pm:1.1 Mon Oct 24 17:32:42 2005
+++ loncom/auth/migrateuser.pm Tue Oct 25 15:14:32 2005
@@ -1,7 +1,7 @@
# The LearningOnline Network
# Starts a user off based of an existing token.
#
-# $Id: migrateuser.pm,v 1.1 2005/10/24 21:32:42 albertel Exp $
+# $Id: migrateuser.pm,v 1.2 2005/10/25 19:14:32 albertel Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -26,7 +26,7 @@
# http://www.lon-capa.org/
#
-package Apache::startuser;
+package Apache::migrateuser;
use strict;
use Apache::Constants qw(:common :http :methods);
@@ -34,13 +34,13 @@
use Apache::lonnet;
sub goto_login {
- my ($r) = @_;
- &Apache::loncommon::content_type($r,'text/html');
- $r->send_http_header;
- $r->print(<<TOLOGIN);
+ my ($r) = @_;
+ &Apache::loncommon::content_type($r,'text/html');
+ $r->send_http_header;
+ $r->print(<<TOLOGIN);
<html>
<head>
- <meta http-equiv="refresh" content="10;url=/adm/login" />
+ <meta http-equiv="refresh" content="0;url=/adm/login" />
<title>Going to login</title>
</head>
<body>
@@ -52,31 +52,38 @@
</body>
</html>
TOLOGIN
- return '';
+ return OK;
}
+
sub handler {
my ($r) = @_;
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},['token']);
- my $data = &Apache::lonnet::reply('tmpget:'.$env{'form.token'},
- $Apache::lonnet::perlvar{'lonHostID'});
- my ($ip,$udom,$uname,$role) = split('&',$data);
-
- if ($ip ne $ENV{'REMOTE_ADDR'} && $ip ne '127.0.0.1') {
- #error or invalid token
- &goto_login($r);
+ my %data = &Apache::lonnet::tmpget($env{'form.token'});
+
+ if ($data{'ip'} ne $ENV{'REMOTE_ADDR'} || !defined($data{'username'}) ||
+ !defined($data{'domain'}) ) {
+ return &goto_login($r);
+ }
+
+ &Apache::lonnet::logthis("Allowing access for $data{'username'}\@$data{'domain'} to $data{'role'}");
+ my $home=&Apache::lonnet::homeserver($data{'username'},$data{'domain'});
+ if ($home =~ /(con_lost|no_such_host)/) { return &goto_login($r); }
+
+ if (!defined($data{'role'})) {
+ &Apache::lonauth::success($r,$data{'username'},$data{'domain'},
+ $home,'/adm/roles');
return OK;
}
- &Apache::lonnet::logthis("Allowing access for $uname\@$udom to $role");
- my $home=&Apache::lonnet::homeserver($uname,$udom);
- my $cookie=&Apache::lonauth::success($r,$uname,$udom,$home,'noredirect');
+ my $cookie=&Apache::lonauth::success($r,$data{'username'},$data{'domain'},
+ $home,'noredirect');
$r->header_out('Set-cookie',"lonID=$cookie; path=/");
&Apache::lonnet::transfer_profile_to_env($r->dir_config('lonIDsDir'),
$cookie);
$env{'form.selectrole'}='1';
- $env{'form.'.$role}='1';
+ $env{'form.'.$data{'role'}}='1';
return &Apache::lonroles::handler($r);
}
Index: loncom/auth/switchserver.pm
diff -u loncom/auth/switchserver.pm:1.2 loncom/auth/switchserver.pm:1.3
--- loncom/auth/switchserver.pm:1.2 Mon Oct 24 17:35:16 2005
+++ loncom/auth/switchserver.pm Tue Oct 25 15:14:32 2005
@@ -1,7 +1,7 @@
# The LearningOnline Network
# Switch Servers Handler
#
-# $Id: switchserver.pm,v 1.2 2005/10/24 21:35:16 albertel Exp $
+# $Id: switchserver.pm,v 1.3 2005/10/25 19:14:32 albertel Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -87,7 +87,12 @@
$windowinfo.=&Apache::lonnavmaps::close();
# ---------------------------------------------------------------- Get handover
- my $token = &Apache::lonnet::reply('tmpput:'.join('&',$ENV{'REMOTE_ADDR'},$env{'user.domain'},$env{'user.name'},$env{'form.role'}),$env{'form.otherserver'});
+ my %info=('ip' => $ENV{'REMOTE_ADDR'},
+ 'domain' => $env{'user.domain'},
+ 'username' => $env{'user.name'},
+ 'role' => $env{'form.role'},
+ 'server' => $r->dir_config('lonHostID'));
+ my $token = &Apache::lonnet::tmpput(\%info,$env{'form.otherserver'});
my $switch='<meta HTTP-EQUIV="Refresh" CONTENT="0.5; url=http://'.$switch_to.'/adm/migrateuser?token='.$token.'">';
my $bodytag=&Apache::loncommon::bodytag('Switching Server ...');
# --------------------------------------------------------------- Screen Output
Index: loncom/lonnet/perl/lonnet.pm
diff -u loncom/lonnet/perl/lonnet.pm:1.666 loncom/lonnet/perl/lonnet.pm:1.667
--- loncom/lonnet/perl/lonnet.pm:1.666 Tue Oct 18 17:29:35 2005
+++ loncom/lonnet/perl/lonnet.pm Tue Oct 25 15:14:33 2005
@@ -1,7 +1,7 @@
# The LearningOnline Network
# TCP networking package
#
-# $Id: lonnet.pm,v 1.666 2005/10/18 21:29:35 albertel Exp $
+# $Id: lonnet.pm,v 1.667 2005/10/25 19:14:33 albertel Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -2955,6 +2955,29 @@
return %returnhash;
}
+# ------------------------------------------------------------ tmpput interface
+sub tmpput {
+ my ($storehash,$server)=@_;
+ my $items='';
+ foreach (keys(%$storehash)) {
+ $items.=&escape($_).'='.&freeze_escape($$storehash{$_}).'&';
+ }
+ $items=~s/\&$//;
+ return &reply("tmpput:$items",$server);
+}
+
+# ------------------------------------------------------------ tmpget interface
+sub tmpget {
+ my ($token)=@_;
+ my $rep=&reply("tmpget:$token",$perlvar{'lonHostID'});
+ my %returnhash;
+ foreach my $item (split(/\&/,$rep)) {
+ my ($key,$value)=split(/=/,$item);
+ $returnhash{&unescape($key)}=&thaw_unescape($value);
+ }
+ return %returnhash;
+}
+
# ---------------------------------------------- Custom access rule evaluation
sub customaccess {