--- loncom/LONCAPA.pm 2006/10/13 19:11:05 1.13.2.1 +++ loncom/LONCAPA.pm 2006/11/22 19:58:29 1.14 @@ -1,7 +1,7 @@ # The LearningOnline Network # Base routines # -# $Id: LONCAPA.pm,v 1.13.2.1 2006/10/13 19:11:05 albertel Exp $ +# $Id: LONCAPA.pm,v 1.14 2006/11/22 19:58:29 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -38,9 +38,22 @@ use POSIX; my $loncapa_max_wait_time = 13; + +use vars qw($match_domain $match_not_domain + $match_username $match_not_username + $match_handle $match_not_handle); + require Exporter; our @ISA = qw (Exporter); -our @EXPORT = qw(&add_get_param &escape &unescape &tie_domain_hash &untie_domain_hash &tie_user_hash &untie_user_hash &propath); +our @EXPORT = qw(&add_get_param &escape &unescape + &tie_domain_hash &untie_domain_hash &tie_user_hash + &untie_user_hash &propath); +our @EXPORT_OK = qw($match_domain $match_not_domain + $match_username $match_not_username + $match_handle $match_not_handle); +our %EXPORT_TAGS = ( 'match' =>[qw($match_domain $match_not_domain + $match_username $match_not_username + $match_handle $match_not_handle)],); my %perlvar; @@ -83,12 +96,43 @@ sub unescape { return $str; } +$match_domain = $LONCAPA::domain_re = qr{[\w\-.]+}; +$match_not_domain = $LONCAPA::not_domain_re = qr{[^\w\-.]+}; +sub clean_domain { + my ($domain) = @_; + $domain =~ s/$match_not_domain//g; + return $domain; +} + +sub split_courseid { + my ($courseid) = @_; + my ($domain,$coursenum) = + ($courseid=~m{^/($match_domain)/($match_username)}); + return ($domain,$coursenum); +} + +$match_username = $LONCAPA::username_re = qr{[\w\-.]+}; +$match_not_username = $LONCAPA::not_username_re = qr{[^\w\-.]+}; +sub clean_username { + my ($username) = @_; + $username =~ s/$match_not_username//g; + return $username; +} + +$match_handle = $LONCAPA::handle_re = qr{[\w\-.]+}; +$match_not_handle = $LONCAPA::not_handle_re = qr{[^\w\-.]+}; +sub clean_handle { + my ($handle) = @_; + $handle =~ s/$match_not_handle//g; + return $handle; +} + # -------------------------------------------- Return path to profile directory sub propath { my ($udom,$uname)=@_; - $udom=~s/\W//g; - $uname=~s/\W//g; + $udom = &clean_domain($udom); + $uname= &clean_username($uname); my $subdir=$uname.'__'; $subdir =~ s/(.)(.)(.).*/$1\/$2\/$3/; my $proname="$perlvar{'lonUsersDir'}/$udom/$subdir/$uname"; @@ -122,7 +166,7 @@ sub tie_domain_hash { # Filter out any whitespace in the domain name: - $domain =~ s/\W//g; + $domain = &clean_domain($domain); # We have enough to go on to tie the hash: @@ -269,8 +313,7 @@ sub _do_hash_untie { return undef; } # If this is compressed, we will actually need an exclusive lock - if (-e "$file_prefix.db.gz" - || !-e "$file_prefix.db.old" ) { + if (-e "$file_prefix.db.gz") { if (!&flock_sym(LOCK_EX)) { &clean_sym(); return undef; @@ -295,30 +338,6 @@ sub _do_hash_untie { system("gunzip $file_prefix.hist.gz"); } } - if (!-e "$file_prefix.db.old") { - my $dump_db = '/home/httpd/perl/debug/dump_db_static_32'; - my $create_db = '/home/httpd/perl/debug/create_db_dynamic_64'; - my $file = "$file_prefix.db"; - &main::logthis("Converting $file"); - if (!-x $dump_db) { - &clean_symb(); - &main::logthis("$dump_db unexecutable"); - return; - } - if (!-x $create_db) { - &clean_symb(); - &main::logthis("$create_db unexecutable"); - return; - } - system("$dump_db -f $file|$create_db -f $file.new"); - if (!-e "$file.new") { - &clean_symb(); - &main::logthis("conversion faile $file.new doesn't exist"); - return; - } - rename($file,"$file.old"); - rename("$file.new","$file"); - } # Change access mode to non-blocking $how=$how|&GDBM_NOLOCK(); # Go ahead and tie the hash