Ignore:
Timestamp:
2014-04-03T17:34:44+13:00 (10 years ago)
Author:
davidb
Message:

Remote Greenstone user authenticaton stopped working, because the code working with the DerbyWrapper had changed, and now gliserver.pl could no longer instantiate another JVM that would access the Derby DB (via the users2DBtxt.java) when wanting to check if a user authenticates. Instead, a new GS3 service has been written, Authentication.remoteAuthentication(). This is called from the authentication-ping system action URL that the new ServletRealmCheck.java pings when it is called by gliserver.pl

File:
1 edited

Legend:

Unmodified
Added
Removed
  • main/trunk/greenstone2/common-src/cgi-bin/gliserver.pl

    r27411 r28958  
    196196    }
    197197
    198     my $users_db_content;
    199198    if($gsdl_cgi->greenstone_version() == 2) {
     199    my $users_db_content;
    200200    my $etc_directory = &util::filename_cat($ENV{'GSDLHOME'}, "etc");
    201201    my $users_db_file_path = &util::filename_cat($etc_directory, "users.gdb");
     
    208208    }
    209209    close(USERS_DB);
    210     }
    211     elsif($gsdl_cgi->greenstone_version() == 3) {
    212     my $gsdl3srchome = $ENV{'GSDL3SRCHOME'};
    213 
    214     my $java = $gsdl_cgi->get_java_path();
    215     my $java_gsdl3_classpath = &util::filename_cat($gsdl3srchome, "web", "WEB-INF", "lib", "gsdl3.jar");
    216     my $java_derby_classpath = &util::filename_cat($gsdl3srchome, "web", "WEB-INF", "lib", "derby.jar");
    217     my $java_classpath;
    218     my $gsdlos = $ENV{'GSDLOS'};
    219     if ($gsdlos !~ m/windows/){
    220         $java_classpath = $java_gsdl3_classpath . ":" . $java_derby_classpath;
    221     }else{
    222         $java_classpath = $java_gsdl3_classpath . ";" . $java_derby_classpath;
    223     }
    224     my $java_args = &util::filename_cat($gsdl3srchome, "web", "sites", $site, "etc", "usersDB");
    225     $gsdl_cgi->checked_chdir($java_args);
    226     my $java_command="\"$java\" -classpath \"$java_classpath\" org.greenstone.gsdl3.util.usersDB2txt \"$java_args\" 2>&1";
    227     $users_db_content = `$java_command`;
    228     }
    229210   
    230211    # Get the user account information from the usersDB database
     
    232213
    233214    # a line dividing one user entry from another is made up of 70 hyphens for GS2 (37 hyphens for GS3)
    234     my $horizontal_divider = ($gsdl_cgi->greenstone_version() == 2) ? q/-{70}/ : q/-{37}/;
     215    my $horizontal_divider = q/-{70}/;
    235216    foreach my $users_db_entry (split($horizontal_divider, $users_db_content)) {   
    236217    if ($users_db_entry =~ m/\n?\[(.+)\]\n/ || $users_db_entry =~ m/\n?USERNAME = ([^\n]*)\n/) { # GS2 and GS3 formats
     
    246227
    247228    # Check password
    248     my $pwdLine = ($gsdl_cgi->greenstone_version() == 2) ? q/\<password\>(.*)/ : q/\n?PASSWORD = (.*)\n/;
     229    my $pwdLine = q/\<password\>(.*)/;
    249230    my ($valid_user_password) = ($user_data =~ m/$pwdLine/);
    250231    if ($user_password ne $valid_user_password) {
     
    253234
    254235    # Check group
    255     my $groupLine = ($gsdl_cgi->greenstone_version() == 2) ? q/\<groups\>(.*)/ : q/\n?GROUPS = (.*)\n/;
     236    my $groupLine = q/\<groups\>(.*)/;
    256237    my ($user_groups) = ($user_data =~ m/$groupLine/);
    257238
     
    276257    }
    277258    $gsdl_cgi->generate_error("Authentication failed: user is not in the required group.");
     259    }
     260   
     261    # "GS3\web\WEB-INF\lib\gsdl3.jar;GS3\web\WEB-INF\lib\derby.jar"
     262    # org.greenstone.gsdl3.util.usersDBRealm2txt "GSDL3SRCHOME" username pwd <col> 2>&1
     263    elsif($gsdl_cgi->greenstone_version() == 3) {
     264        my $gsdl3srchome = $ENV{'GSDL3SRCHOME'};
     265
     266        my $java = $gsdl_cgi->get_java_path();
     267        my $java_gsdl3_classpath = &util::filename_cat($gsdl3srchome, "web", "WEB-INF", "lib", "gsdl3.jar");
     268        my $java_derby_classpath = &util::filename_cat($gsdl3srchome, "web", "WEB-INF", "lib", "derby.jar");
     269        my $java_classpath;
     270        my $gsdlos = $ENV{'GSDLOS'};
     271        if ($gsdlos !~ m/windows/){
     272            $java_classpath = $java_gsdl3_classpath . ":" . $java_derby_classpath;
     273        }else{
     274            $java_classpath = $java_gsdl3_classpath . ";" . $java_derby_classpath;
     275        }       
     276        my $java_args = "\"$gsdl3srchome\" \"$username\" \"$user_password\"";
     277        if ($collection ne "") {
     278            $java_args += " \"$collection\"";
     279        }
     280       
     281        $gsdl_cgi->checked_chdir($gsdl3srchome);   
     282        my $java_command="\"$java\" -classpath \"$java_classpath\" org.greenstone.gsdl3.util.ServletRealmCheck $java_args 2>&1"; # call it ServletRealmCheck
     283        my $java_output = `$java_command`;
     284        if ($java_output =~ m/^Authentication failed:/) { # $java_output contains the error message
     285            $gsdl_cgi->generate_error($java_output); # "\nJAVA_COMMAND: $java_command\n"
     286        }
     287        else { # success, $java_output is the user_groups list         
     288            return $java_output;
     289        }
     290    }
    278291}
    279292
     
    898911    foreach $sites_dir(@sites_dir)
    899912    {
    900     if (!(($sites_dir eq ".") || ($sites_dir eq "..") || ($sites_dir eq "CVS") || ($sites_dir eq ".DS_Store")))
     913    if (!(($sites_dir eq ".") || ($sites_dir eq "..") || ($sites_dir eq "CVS") || ($sites_dir eq ".DS_Store") || ($sites_dir eq "ADDING-A-SITE.txt")))
    901914    {
    902915        my $site_dir_path= &util::filename_cat($sites_directory,$sites_dir);
Note: See TracChangeset for help on using the changeset viewer.