summaryrefslogtreecommitdiff
path: root/perl/Wallet
diff options
context:
space:
mode:
Diffstat (limited to 'perl/Wallet')
-rw-r--r--perl/Wallet/Kadmin/Heimdal.pm5
-rw-r--r--perl/Wallet/Kadmin/MIT.pm12
-rw-r--r--perl/Wallet/Object/Keytab.pm13
3 files changed, 24 insertions, 6 deletions
diff --git a/perl/Wallet/Kadmin/Heimdal.pm b/perl/Wallet/Kadmin/Heimdal.pm
index 9c2805b..b0010a5 100644
--- a/perl/Wallet/Kadmin/Heimdal.pm
+++ b/perl/Wallet/Kadmin/Heimdal.pm
@@ -39,6 +39,11 @@ sub error {
return $self->{error};
}
+# 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.
+sub fork_callback { }
+
##############################################################################
# kadmin Interaction
##############################################################################
diff --git a/perl/Wallet/Kadmin/MIT.pm b/perl/Wallet/Kadmin/MIT.pm
index 2e9b0b4..c3ad901 100644
--- a/perl/Wallet/Kadmin/MIT.pm
+++ b/perl/Wallet/Kadmin/MIT.pm
@@ -39,6 +39,12 @@ sub error {
return $self->{error};
}
+# Set a callback to be called for forked kadmin processes.
+sub fork_callback {
+ my ($self, $callback) = @_;
+ $self->{fork_callback} = $callback;
+}
+
##############################################################################
# kadmin Interaction
##############################################################################
@@ -73,11 +79,7 @@ sub kadmin {
$self->error ("cannot fork: $!");
return;
} elsif ($pid == 0) {
- # TODO - How should I handle the db handle?
- # Don't use die here; it will get trapped as an exception. Also be
- # careful about our database handles. (We still lose if there's some
- # other database handle open we don't know about.)
- #$object->{dbh}->{InactiveDestroy} = 1;
+ $self->{fork_callback} ();
unless (open (STDERR, '>&STDOUT')) {
warn "wallet: cannot dup stdout: $!\n";
exit 1;
diff --git a/perl/Wallet/Object/Keytab.pm b/perl/Wallet/Object/Keytab.pm
index 6733cf0..22598f1 100644
--- a/perl/Wallet/Object/Keytab.pm
+++ b/perl/Wallet/Object/Keytab.pm
@@ -466,6 +466,11 @@ sub new {
my $kadmin = Wallet::Kadmin->new ();
$self->{kadmin} = $kadmin;
+ # Set a callback for things to do after a fork, specifically for the MIT
+ # kadmin module which forks to kadmin.
+ my $callback = sub { $self->{dbh}->{InactiveDestroy} = 1 };
+ $kadmin->fork_callback ($callback);
+
$self = $class->SUPER::new ($type, $name, $dbh);
$self->{kadmin} = $kadmin;
return $self;
@@ -484,8 +489,14 @@ sub create {
bless $self, $class;
my $kadmin = Wallet::Kadmin->new ();
$self->{kadmin} = $kadmin;
+
+ # Set a callback for things to do after a fork, specifically for the MIT
+ # kadmin module which forks to kadmin.
+ my $callback = sub { $self->{dbh}->{InactiveDestroy} = 1 };
+ $kadmin->fork_callback ($callback);
+
if (not $kadmin->addprinc ($name)) {
- die $kadmin->error;
+ die $kadmin->error, "\n";
}
$self = $class->SUPER::create ($type, $name, $dbh, $creator, $host, $time);
$self->{kadmin} = $kadmin;