version 1.1, 2012/02/27 03:06:33
|
version 1.3, 2015/05/29 18:42:01
|
Line 32 Apache::lonwebdavauth - webDAV Authentic
|
Line 32 Apache::lonwebdavauth - webDAV Authentic
|
|
|
=head1 SYNOPSIS |
=head1 SYNOPSIS |
|
|
Invoked for /+webdav/[\w\-]+/[\w\-]+/ by |
Invoked for ^/+webdav/[\w\-.]+/\w[\w.\-\@]+/ by |
/etc/httpd/conf/loncapa_apache.conf: |
/etc/httpd/conf/loncapa_apache.conf: |
|
|
PerlAuthenHandler Apache::lonwebdavauth |
PerlAuthenHandler Apache::lonwebdavauth |
Line 169 sub handler {
|
Line 169 sub handler {
|
if ($now-$sesstime < $timetolive) { |
if ($now-$sesstime < $timetolive) { |
if (&Apache::lonnet::homeserver($uname,$udom) eq $uhome) { |
if (&Apache::lonnet::homeserver($uname,$udom) eq $uhome) { |
&Apache::lonnet::transfer_profile_to_env($sessiondir,$handle); |
&Apache::lonnet::transfer_profile_to_env($sessiondir,$handle); |
return OK; |
if (&Apache::lonnet::usertools_access($uname,$udom,'webdav')) { |
|
return OK; |
|
} else { |
|
return FORBIDDEN; |
|
} |
} |
} |
} |
} |
} |
} |
Line 204 sub handler {
|
Line 208 sub handler {
|
my $uhome = &Apache::lonnet::authenticate($uname,$upass,$udom); |
my $uhome = &Apache::lonnet::authenticate($uname,$upass,$udom); |
if (($uhome ne 'no_host') && |
if (($uhome ne 'no_host') && |
(&Apache::lonnet::hostname($uhome) ne '')) { |
(&Apache::lonnet::hostname($uhome) ne '')) { |
$handle = &init_webdav_env($sessiondir,$uname,$udom, |
my ($author) = ($r->uri =~ m{^/webdav/($match_domain/$match_username)/}); |
$uhome,$now,$timetolive); |
$handle = &init_webdav_env($r,$sessiondir,$uname,$udom, |
|
$uhome,$now,$timetolive,$author); |
if ($handle ne '') { |
if ($handle ne '') { |
my $cookie = "lonDAV=$handle; path=/webdav/; secure; HttpOnly;"; |
if (&Apache::lonnet::usertools_access($uname,$udom,'webdav')) { |
$r->header_out('Set-cookie' => $cookie); |
my $cookie = "lonDAV=$handle; path=/webdav/; secure; HttpOnly;"; |
$r->send_http_header; |
$r->header_out('Set-cookie' => $cookie); |
|
$r->send_http_header; |
|
return OK; |
|
} else { |
|
return FORBIDDEN; |
|
} |
} |
} |
return OK; |
|
} |
} |
} |
} |
} |
} |
Line 220 sub handler {
|
Line 229 sub handler {
|
} |
} |
|
|
sub init_webdav_env { |
sub init_webdav_env { |
my ($sessiondir,$uname,$udom,$uhome,$now,$timetolive) = @_; |
my ($r,$sessiondir,$uname,$udom,$uhome,$now,$timetolive,$author) = @_; |
my $handle; |
my $handle; |
my $currnewest = 0; |
my $currnewest = 0; |
if ($sessiondir ne '') { |
if ($sessiondir ne '') { |
Line 257 sub init_webdav_env {
|
Line 266 sub init_webdav_env {
|
$disk_env{'user.name'} = $uname; |
$disk_env{'user.name'} = $uname; |
$disk_env{'user.domain'} = $udom; |
$disk_env{'user.domain'} = $udom; |
$disk_env{'user.home'} = $uhome; |
$disk_env{'user.home'} = $uhome; |
|
my %userenv = &Apache::lonnet::get('environment',['inststatus','tools.webdav'], |
|
$udom,$uname); |
|
my ($tmp) = keys(%userenv); |
|
if ($tmp =~ /^(con_lost|error|no_such_host)/i) { |
|
$disk_env{'environment.inststatus'} = $userenv{'inststatus'}; |
|
$disk_env{'environment.tools.webdav'} = $userenv{'tools.webdav'}; |
|
} |
$disk_env{'user.environment'} = $sessionfile; |
$disk_env{'user.environment'} = $sessionfile; |
my $possroles = ['au','ca','aa']; |
my $possroles = ['au','ca','aa']; |
my @possdoms = &Apache::lonnet::current_machine_domains(); |
my @possdoms = &Apache::lonnet::current_machine_domains(); |
my %cstr_roles = |
my %cstr_roles = |
&Apache::lonnet::get_my_roles($uname,$udom,'userroles', |
&Apache::lonnet::get_my_roles($uname,$udom,'userroles', |
undef,$possroles,\@possdoms); |
undef,$possroles,\@possdoms); |
foreach my $item (keys(%cstr_roles)) { |
if (keys(%cstr_roles) > 0) { |
my ($aname,$adom,$role) = split(/:/,$item); |
$disk_env{'user.adv'} = 1; |
if ($role eq 'au') { |
$disk_env{'user.author'} = 1; |
$disk_env{"user.role.$role./$adom/"} = $cstr_roles{$item}; |
foreach my $item (keys(%cstr_roles)) { |
} else { |
my ($aname,$adom,$role) = split(/:/,$item); |
$disk_env{"user.role.$role./$adom/$aname"} = $cstr_roles{$item}; |
if ($role eq 'au') { |
|
$disk_env{"user.role.$role./$adom/"} = $cstr_roles{$item}; |
|
} else { |
|
$disk_env{"user.role.$role./$adom/$aname"} = $cstr_roles{$item}; |
|
} |
} |
} |
} |
} |
|
my %is_adv = ( is_adv => $disk_env{'user.adv'} ); |
|
my %domdef = &Apache::lonnet::get_domain_defaults($udom); |
|
$disk_env{'environment.availabletools.webdav'} = |
|
&Apache::lonnet::usertools_access($uname,$udom,'webdav','reload',undef, |
|
\%userenv,\%domdef,\%is_adv); |
@env{keys(%disk_env)} = @disk_env{keys(%disk_env)}; |
@env{keys(%disk_env)} = @disk_env{keys(%disk_env)}; |
untie(%disk_env); |
untie(%disk_env); |
|
my $ip; |
|
my $c = $r->connection; |
|
if (ref($c)) { |
|
$ip = $c->remote_ip; |
|
} |
|
&Apache::lonnet::log($udom,$uname,$uhome, |
|
"Login webdav/$author $ip"); |
} |
} |
return $handle; |
return $handle; |
} |
} |