diff options
author | Russ Allbery <rra@stanford.edu> | 2007-08-28 21:12:15 +0000 |
---|---|---|
committer | Russ Allbery <rra@stanford.edu> | 2007-08-28 21:12:15 +0000 |
commit | 8b9daeaad45a5181356d76fa9dfde6db25296d69 (patch) | |
tree | 2858e3446938a649a0f710f487e2f0db26535389 /perl/Wallet/Object | |
parent | 0e0ccfe8b2497a4b3245dd60a331b4d4f14bd714 (diff) |
Throw exceptions for failure of object new() and create() functions
rather than returning undef so that we can save the error message.
Diffstat (limited to 'perl/Wallet/Object')
-rw-r--r-- | perl/Wallet/Object/Base.pm | 23 | ||||
-rw-r--r-- | perl/Wallet/Object/Keytab.pm | 11 |
2 files changed, 17 insertions, 17 deletions
diff --git a/perl/Wallet/Object/Base.pm b/perl/Wallet/Object/Base.pm index a3c9b3d..d50e513 100644 --- a/perl/Wallet/Object/Base.pm +++ b/perl/Wallet/Object/Base.pm @@ -40,7 +40,7 @@ sub new { $dbh->{PrintError} = 0; my $sql = 'select ob_name from objects where ob_name = ? and ob_type = ?'; my $data = $dbh->selectrow_array ($sql, undef, $name, $type); - return undef unless ($data and $data eq $name); + die "cannot find ${type}:${name}\n" unless ($data and $data eq $name); my $self = { dbh => $dbh, name => $name, @@ -71,7 +71,7 @@ sub create { }; if ($@) { $dbh->rollback; - return undef; + die "cannot create object ${type}:${name}: $@\n"; } my $self = { dbh => $dbh, @@ -385,9 +385,9 @@ the Wallet::Object::Type->new syntax). Creates a new object with the given object name and type, based on data already in the database. This method will only succeed if an object of the given NAME and TYPE is already present in the wallet database. If no such -object exits, returns undef. Otherwise, returns an object blessed into the -class used for the new() call (so subclasses can leave this method alone and -not override it). +object exits, throws an exception. Otherwise, returns an object blessed +into the class used for the new() call (so subclasses can leave this method +alone and not override it). Takes a database handle, which is stored in the object and used for any further operations. This database handle is taken over by the wallet system @@ -397,13 +397,12 @@ object for its own needs. =item create(NAME, TYPE, DBH, PRINCIPAL, HOSTNAME [, DATETIME]) Similar to new() but instead creates a new entry in the database. This -method will fail (returning undef) if an entry for that name and type -already exists in the database or if creating the database record fails. -Otherwise, a new database entry will be created with that name and type, no -owner, no ACLs, no expiration, no flags, and with created by, from, and on -set to the PRINCIPAL, HOSTNAME, and DATETIME parameters. If DATETIME isn't -given, the current time is used. The database handle is treated as with -new(). +method will throw an exception if an entry for that name and type already +exists in the database or if creating the database record fails. Otherwise, +a new database entry will be created with that name and type, no owner, no +ACLs, no expiration, no flags, and with created by, from, and on set to the +PRINCIPAL, HOSTNAME, and DATETIME parameters. If DATETIME isn't given, the +current time is used. The database handle is treated as with new(). =back diff --git a/perl/Wallet/Object/Keytab.pm b/perl/Wallet/Object/Keytab.pm index b10c67a..b386fae 100644 --- a/perl/Wallet/Object/Keytab.pm +++ b/perl/Wallet/Object/Keytab.pm @@ -80,17 +80,18 @@ sub _kadmin_exists { } } -# Create a principal in Kerberos. Return true if successful, false otherwise. +# Create a principal in Kerberos. Since this is only called by create, it +# throws an exception on failure rather than setting the error and returning +# undef. sub _kadmin_addprinc { my ($self, $principal) = @_; unless ($self->_valid_principal ($principal)) { - $self->{error} = "invalid principal name: $principal"; - return undef; + die "invalid principal name $principal\n"; } my $flags = $Wallet::Config::KEYTAB_FLAGS; my $output = $self->_kadmin ("addprinc -randkey $flags $principal"); if ($output =~ /^add_principal: (.*)/m) { - return undef; + die "error adding principal $principal: $!\n"; } return 1; } @@ -144,7 +145,7 @@ sub create { if ($name !~ /\@/ && $Wallet::Config::KEYTAB_REALM) { $name .= '@' . $Wallet::Config::KEYTAB_REALM; } - return undef if not $class->_kadmin_addprinc ($name); + $class->_kadmin_addprinc ($name); return $class->SUPER::create ($name, $type, $dbh, $creator, $host, $time); } |