8784: Fix test for latest firefox.
[arvados.git] / sdk / pam / tests / integration_test.pl
1 #!/usr/bin/env perl
2
3 $ENV{ARVADOS_API_HOST_INSECURE} = 1;
4 use Authen::PAM qw(:constants);
5
6 for my $case (['good', 1, 'active', '3kg6k6lzmp9kj5cpkcoxie963cmvjahbt2fod9zru30k1jqdmi'],
7               ['badtoken', 0, 'active', 'badtokenmp9kj5cpkcoxie963cmvjahbt2fod9zru30k1jqdmi'],
8               ['badusername', 0, 'baduser', '3kg6k6lzmp9kj5cpkcoxie963cmvjahbt2fod9zru30k1jqdmi']) {
9     dotest(@$case);
10 }
11 print "=== OK ===\n";
12
13 sub dotest {
14     my ($label, $expect_ok, $user, $token) = @_;
15     print "$label: ";
16     my $service_name = 'login';
17     $main::Token = $token;
18     my $pamh = new Authen::PAM($service_name, $user, \&token_conv_func);
19     ref($pamh) || die "Error code $pamh during PAM init!";
20     $pamh->pam_set_item(PAM_RHOST(), '::1');
21     $pamh->pam_set_item(PAM_RUSER(), 'none');
22     $pamh->pam_set_item(PAM_TTY(), '/dev/null');
23     my $flags = PAM_SILENT();
24     $res = $pamh->pam_authenticate($flags);
25     $msg = $pamh->pam_strerror($res);
26     print "Result (code $res): $msg\n";
27     if (($res == 0) != ($expect_ok == 1)) {
28         die "*** FAIL ***\n";
29     }
30 }
31
32 sub token_conv_func {
33     my @res;
34     while ( @_ ) {
35         my $code = shift;
36         my $msg = shift;
37         my $ans;
38         print "Message (type $code): $msg\n";
39         if ($code == PAM_PROMPT_ECHO_OFF() || $code == PAM_PROMPT_ECHO_ON()) {
40             $ans = $main::Token;
41         }
42         push @res, (0,$ans);
43     }
44     push @res, PAM_SUCCESS();
45     return @res;
46 }