summaryrefslogtreecommitdiff
path: root/plugin/auth_gssapi/mysql-test/auth_gssapi/suite.pm
blob: e77ba05cb5cf51cb5d785215d026200231990277 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
package My::Suite::AuthGSSAPI;

@ISA = qw(My::Suite);

return "No AUTH_GSSAPI plugin" unless $ENV{AUTH_GSSAPI_SO};

return "Not run for embedded server" if $::opt_embedded_server;

# Following environment variables may need to be set
if ($^O eq "MSWin32")
{
  chomp(my $whoami =`whoami /UPN 2>NUL` || `whoami`);
  my $fullname = $whoami;
  $fullname =~ s/\\/\\\\/; # SQL escaping for backslash
  $ENV{'GSSAPI_FULLNAME'}  = $fullname;
  $ENV{'GSSAPI_SHORTNAME'} = $ENV{'USERNAME'};
  chomp(my $sid = `powershell -Command "([System.Security.Principal.WindowsIdentity]::GetCurrent()).User.Value"`);
  $ENV{'SID'} = $sid;

}
else
{
  if (!$ENV{'GSSAPI_FULLNAME'})
  {
    my $s = `klist 2>/dev/null |grep 'Default principal: '`;
    if ($s)
    {
      chomp($s);
      my $fullname = substr($s,19);
      $ENV{'GSSAPI_FULLNAME'} = $fullname;
    }
  }
  $ENV{'GSSAPI_SHORTNAME'} = (split /@/, $ENV{'GSSAPI_FULLNAME'}) [0];
}


if (!$ENV{'GSSAPI_FULLNAME'}  || !$ENV{'GSSAPI_SHORTNAME'})
{
  return "Environment variable GSSAPI_SHORTNAME and GSSAPI_FULLNAME need to be set"
}

if ($::opt_verbose)
{
  foreach $var ('GSSAPI_SHORTNAME','GSSAPI_FULLNAME','GSSAPI_KEYTAB_PATH','GSSAPI_PRINCIPAL_NAME')
  {
    print "$var=$ENV{$var}\n";
  }
}
sub is_default { 1 }

bless { };