--- loncom/lonnet/perl/lonnet.pm 2017/01/28 03:49:00 1.1334 +++ loncom/lonnet/perl/lonnet.pm 2017/02/25 20:30:57 1.1338 @@ -1,7 +1,7 @@ # The LearningOnline Network # TCP networking package # -# $Id: lonnet.pm,v 1.1334 2017/01/28 03:49:00 raeburn Exp $ +# $Id: lonnet.pm,v 1.1338 2017/02/25 20:30:57 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -650,10 +650,23 @@ sub transfer_profile_to_env { sub check_for_valid_session { my ($r,$name,$userhashref) = @_; my %cookies=CGI::Cookie->parse($r->header_in('Cookie')); + my ($linkname,$pubname); if ($name eq '') { $name = 'lonID'; + $linkname = 'lonLinkID'; + $pubname = 'lonPubID'; } my $lonid=$cookies{$name}; + if (!$lonid) { + if (($name eq 'lonID') && ($ENV{'SERVER_PORT'} != 443) && ($linkname)) { + $lonid=$cookies{$linkname}; + } + if (!$lonid) { + if (($name eq 'lonID') && ($pubname)) { + $lonid=$cookies{$pubname}; + } + } + } return undef if (!$lonid); my $handle=&LONCAPA::clean_handle($lonid->value); @@ -2377,8 +2390,11 @@ sub get_domain_defaults { if (ref($domconfig{'ssl'}{'replication'}) eq 'HASH') { $domdefaults{'replication'} = $domconfig{'ssl'}{'replication'}; } - if (ref($domconfig{'ssl'}{'connect'}) eq 'HASH') { - $domdefaults{'connect'} = $domconfig{'ssl'}{'connect'}; + if (ref($domconfig{'ssl'}{'connto'}) eq 'HASH') { + $domdefaults{'connect'} = $domconfig{'ssl'}{'connto'}; + } + if (ref($domconfig{'ssl'}{'connfrom'}) eq 'HASH') { + $domdefaults{'connect'} = $domconfig{'ssl'}{'connfrom'}; } } if (ref($domconfig{'trust'}) eq 'HASH') { @@ -4550,20 +4566,26 @@ sub get_my_adhocroles { if (($env{"user.role.dh./$cdom/"}) || ($env{"user.role.da./$cdom/"})) { my $then=$env{'user.login.time'}; my $update=$env{'user.update.time'}; - my $liverole = 1; + if (!$update) { + $update = $then; + } + my @liveroles; foreach my $role ('dh','da') { if ($env{"user.role.$role./$cdom/"}) { - my ($tstart,$tend)=split(/\./,$env{"user.role.$role./$cdom"}); + my ($tstart,$tend)=split(/\./,$env{"user.role.$role./$cdom/"}); my $limit = $update; if ($env{'request.role'} eq "$role./$cdom/") { $limit = $then; } - if ($tstart && $tstart>$limit) { $liverole = 0; } - if ($tend && $tend <$limit) { $liverole = 0; } - last if ($liverole); + my $activerole = 1; + if ($tstart && $tstart>$limit) { $activerole = 0; } + if ($tend && $tend <$limit) { $activerole = 0; } + if ($activerole) { + push(@liveroles,$role); + } } } - if ($liverole) { + if (@liveroles) { if (&homeserver($cnum,$cdom) ne 'no_host') { my ($accessref,$accessinfo,%access_in_dom); ($roles_by_num,$description,$accessref,$accessinfo) = &get_all_adhocroles($cdom); @@ -4618,6 +4640,18 @@ sub get_my_adhocroles { next; } elsif ($curraccess eq 'all') { push(@possroles,$role); + } elsif ($curraccess eq 'dh') { + if (grep(/^dh$/,@liveroles)) { + push(@possroles,$role); + } else { + next; + } + } elsif ($curraccess eq 'da') { + if (grep(/^da$/,@liveroles)) { + push(@possroles,$role); + } else { + next; + } } elsif ($curraccess eq 'status') { if (@okstatus) { if (!@statuses) {