Diff for /loncom/auth/lonwebdavauth.pm between versions 1.1 and 1.3

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;
     }      }

Removed from v.1.1  
changed lines
  Added in v.1.3


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