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