diff options
Diffstat (limited to 'perl')
| -rw-r--r-- | perl/Wallet/Kadmin/Heimdal.pm | 27 | 
1 files changed, 13 insertions, 14 deletions
| diff --git a/perl/Wallet/Kadmin/Heimdal.pm b/perl/Wallet/Kadmin/Heimdal.pm index 893be65..2ca8dcd 100644 --- a/perl/Wallet/Kadmin/Heimdal.pm +++ b/perl/Wallet/Kadmin/Heimdal.pm @@ -39,6 +39,15 @@ sub error {      return $self->{error};  } +# Add the realm to the end of the principal if no realm is currently present. +sub canonicalize_principal { +    my ($self, $principal) = @_; +    if ($Wallet::Config::KEYTAB_REALM && $principal !~ /\@/) { +        $principal .= '@' . $Wallet::Config::KEYTAB_REALM; +    } +    return $principal; +} +  # Set a callback to be called for forked kadmin processes.  This does nothing  # for Heimdal, as we're not forking anything, but remains for compatibility  # with the MIT kadmin module. @@ -76,9 +85,7 @@ sub kadmin_client {  # so, false otherwise.  sub exists {      my ($self, $principal) = @_; -    if ($Wallet::Config::KEYTAB_REALM) { -        $principal .= '@' . $Wallet::Config::KEYTAB_REALM; -    } +    $principal = $self->canonicalize_principal ($principal);      my $kadmin = $self->{client};      my $princdata = eval { $kadmin->getPrincipal ($principal) };      if ($@) { @@ -92,10 +99,7 @@ sub exists {  # the error.  Return 1 on success or the principal already existing.  sub addprinc {      my ($self, $principal) = @_; - -    if ($Wallet::Config::KEYTAB_REALM) { -        $principal .= '@' . $Wallet::Config::KEYTAB_REALM; -    } +    $principal = $self->canonicalize_principal ($principal);      my $exists = eval { $self->exists ($principal) };      if ($@) {          $self->error ("error adding principal $principal: $@"); @@ -133,9 +137,7 @@ sub addprinc {  # error.  sub ktadd {      my ($self, $principal, $file, @enctypes) = @_; -    if ($Wallet::Config::KEYTAB_REALM) { -        $principal .= '@' . $Wallet::Config::KEYTAB_REALM; -    } +    $principal = $self->canonicalize_principal ($principal);      # The way Heimdal works, you can only remove enctypes from a principal,      # not add them back in.  So we need to run randkeyPrincipal first each @@ -193,6 +195,7 @@ sub ktadd {  # exist, return success; we're bringing reality in line with our expectations.  sub delprinc {      my ($self, $principal) = @_; +    $principal = $self->canonicalize_principal ($principal);      my $exists = eval { $self->exists ($principal) };      if ($@) {          $self->error ("error checking principal existance: $@"); @@ -200,10 +203,6 @@ sub delprinc {      } elsif (not $exists) {          return 1;      } -    if ($Wallet::Config::KEYTAB_REALM) { -        $principal .= '@' . $Wallet::Config::KEYTAB_REALM; -    } -      my $kadmin = $self->{client};      my $retval = eval { $kadmin->deletePrincipal ($principal) };      if ($@) { | 
