diff options
| -rw-r--r-- | NEWS | 5 | ||||
| -rw-r--r-- | perl/lib/Wallet/ACL.pm | 5 | ||||
| -rw-r--r-- | perl/lib/Wallet/Admin.pm | 19 | ||||
| -rw-r--r-- | perl/lib/Wallet/Schema/Result/AclHistory.pm | 10 | ||||
| -rw-r--r-- | perl/sql/Wallet-Schema-0.08-0.09-MySQL.sql | 4 | ||||
| -rw-r--r-- | perl/sql/Wallet-Schema-0.08-0.09-PostgreSQL.sql | 4 | ||||
| -rw-r--r-- | perl/sql/Wallet-Schema-0.08-0.09-SQLite.sql | 4 | ||||
| -rw-r--r-- | perl/sql/Wallet-Schema-0.09-MySQL.sql | 4 | ||||
| -rw-r--r-- | perl/sql/Wallet-Schema-0.09-PostgreSQL.sql | 4 | ||||
| -rw-r--r-- | perl/sql/Wallet-Schema-0.09-SQLite.sql | 5 | ||||
| -rwxr-xr-x | perl/t/general/server.t | 18 | 
11 files changed, 58 insertions, 24 deletions
| @@ -46,6 +46,11 @@ wallet 1.1 (unreleased)      the DateTime::Format::* module corresponding to the DBD::* module used      for the server database. +    The initial creation and membership of the ADMIN ACL during database +    initialization or reinitialization is no longer recorded in the +    acl_history table.  (This is fallout from making a specific type of +    upgrade testable, and may be fixed in the future.) +      The wallet server now requires Perl 5.8 or later (instead of 5.006 in      previous versions) and is now built with Module::Build instead of      ExtUtils::MakeMaker.  This should be transparent to anyone not working diff --git a/perl/lib/Wallet/ACL.pm b/perl/lib/Wallet/ACL.pm index 57097c0..6f5172a 100644 --- a/perl/lib/Wallet/ACL.pm +++ b/perl/lib/Wallet/ACL.pm @@ -80,6 +80,7 @@ sub create {          # Add to the history table.          my $date = DateTime->from_epoch (epoch => $time);          %record = (ah_acl    => $id, +                   ah_name   => $name,                     ah_action => 'create',                     ah_by     => $user,                     ah_from   => $host, @@ -165,6 +166,7 @@ sub log_acl {      }      my $date = DateTime->from_epoch (epoch => $time);      my %record = (ah_acl        => $self->{id}, +                  ah_name       => $self->{name},                    ah_action     => $action,                    ah_scheme     => $scheme,                    ah_identifier => $identifier, @@ -243,7 +245,8 @@ sub destroy {          # Create new history line for the deletion.          my $date = DateTime->from_epoch (epoch => $time); -        my %record = (ah_acl => $self->{id}, +        my %record = (ah_acl    => $self->{id}, +                      ah_name   => $self->{name},                        ah_action => 'destroy',                        ah_by     => $user,                        ah_from   => $host, diff --git a/perl/lib/Wallet/Admin.pm b/perl/lib/Wallet/Admin.pm index 29b2f21..b07c7d1 100644 --- a/perl/lib/Wallet/Admin.pm +++ b/perl/lib/Wallet/Admin.pm @@ -98,13 +98,22 @@ sub initialize {      $self->default_data;      # Create a default admin ACL. -    my $acl = Wallet::ACL->create ('ADMIN', $self->{schema}, $user, -                                   'localhost'); -    unless ($acl->add ('krb5', $user, $user, 'localhost')) { -        $self->error ($acl->error); +    eval { +        my $guard = $self->{schema}->txn_scope_guard; +        $self->{schema}->resultset ('Acl')->populate ([ +            [ qw/ac_id ac_name/ ], +            [ 1, 'ADMIN'        ], +        ]); +        $self->{schema}->resultset ('AclEntry')->populate ([ +            [ qw/ae_id ae_scheme ae_identifier/ ], +            [ 1, 'krb5', $user                  ], +        ]); +        $guard->commit; +    }; +    if ($@) { +        $self->error ("cannot add ADMIN ACL: $@");          return;      } -      return 1;  } diff --git a/perl/lib/Wallet/Schema/Result/AclHistory.pm b/perl/lib/Wallet/Schema/Result/AclHistory.pm index 11593b7..82e18a9 100644 --- a/perl/lib/Wallet/Schema/Result/AclHistory.pm +++ b/perl/lib/Wallet/Schema/Result/AclHistory.pm @@ -41,6 +41,12 @@ __PACKAGE__->table("acl_history");    data_type: 'integer'    is_nullable: 0 +=head2 ah_name + +  data_type: 'varchar' +  is_nullable: 1 +  size: 255 +  =head2 ah_action    data_type: 'varchar' @@ -84,6 +90,8 @@ __PACKAGE__->add_columns(    { data_type => "integer", is_auto_increment => 1, is_nullable => 0 },    "ah_acl",    { data_type => "integer", is_nullable => 0 }, +  "ah_name", +  { data_type => "varchar", is_nullable => 1, size => 255 },    "ah_action",    { data_type => "varchar", is_nullable => 0, size => 16 },    "ah_scheme", @@ -108,6 +116,8 @@ sub sqlt_deploy_hook {      my ($self, $sqlt_table) = @_;      my $name = 'acl_history_idx_ah_acl';      $sqlt_table->add_index (name => $name, fields => [qw(ah_acl)]); +    $name = 'acl_history_idx_ah_name'; +    $sqlt_table->add_index (name => $name, fields => [qw(ah_name)]);  }  1; diff --git a/perl/sql/Wallet-Schema-0.08-0.09-MySQL.sql b/perl/sql/Wallet-Schema-0.08-0.09-MySQL.sql index 8127613..f6b1abe 100644 --- a/perl/sql/Wallet-Schema-0.08-0.09-MySQL.sql +++ b/perl/sql/Wallet-Schema-0.08-0.09-MySQL.sql @@ -12,7 +12,9 @@ CREATE TABLE duo (  SET foreign_key_checks=1; -ALTER TABLE acl_history ADD INDEX acl_history_idx_ah_acl (ah_acl); +ALTER TABLE acl_history ADD COLUMN ah_name varchar(255) NULL, +                        ADD INDEX acl_history_idx_ah_acl (ah_acl), +                        ADD INDEX acl_history_idx_ah_name (ah_name);  ALTER TABLE object_history DROP FOREIGN KEY object_history_fk_oh_type_oh_name,                             ALTER TABLE object_history; diff --git a/perl/sql/Wallet-Schema-0.08-0.09-PostgreSQL.sql b/perl/sql/Wallet-Schema-0.08-0.09-PostgreSQL.sql index 66603f7..a1d3fa3 100644 --- a/perl/sql/Wallet-Schema-0.08-0.09-PostgreSQL.sql +++ b/perl/sql/Wallet-Schema-0.08-0.09-PostgreSQL.sql @@ -8,8 +8,12 @@ CREATE TABLE "duo" (    PRIMARY KEY ("du_name")  ); +ALTER TABLE acl_history ADD COLUMN ah_name character varying(255); +  CREATE INDEX acl_history_idx_ah_acl on acl_history (ah_acl); +CREATE INDEX acl_history_idx_ah_name on acl_history (ah_name); +  COMMIT; diff --git a/perl/sql/Wallet-Schema-0.08-0.09-SQLite.sql b/perl/sql/Wallet-Schema-0.08-0.09-SQLite.sql index 42f4ea5..df0fa09 100644 --- a/perl/sql/Wallet-Schema-0.08-0.09-SQLite.sql +++ b/perl/sql/Wallet-Schema-0.08-0.09-SQLite.sql @@ -8,6 +8,10 @@ CREATE TABLE duo (    PRIMARY KEY (du_name)  ); +ALTER TABLE acl_history ADD ah_name varchar(255) default null; +  CREATE INDEX acl_history_idx_ah_acl ON acl_history (ah_acl); +CREATE INDEX acl_history_idx_ah_name ON acl_history (ah_name); +  COMMIT; diff --git a/perl/sql/Wallet-Schema-0.09-MySQL.sql b/perl/sql/Wallet-Schema-0.09-MySQL.sql index 86eeec4..200b941 100644 --- a/perl/sql/Wallet-Schema-0.09-MySQL.sql +++ b/perl/sql/Wallet-Schema-0.09-MySQL.sql @@ -1,6 +1,6 @@  --   -- Created by SQL::Translator::Producer::MySQL --- Created on Fri Jul 11 19:17:16 2014 +-- Created on Tue Jul 15 17:41:01 2014  --   SET foreign_key_checks=0; @@ -12,6 +12,7 @@ DROP TABLE IF EXISTS `acl_history`;  CREATE TABLE `acl_history` (    `ah_id` integer NOT NULL auto_increment,    `ah_acl` integer NOT NULL, +  `ah_name` varchar(255) NULL,    `ah_action` varchar(16) NOT NULL,    `ah_scheme` varchar(32) NULL,    `ah_identifier` varchar(255) NULL, @@ -19,6 +20,7 @@ CREATE TABLE `acl_history` (    `ah_from` varchar(255) NOT NULL,    `ah_on` datetime NOT NULL,    INDEX `acl_history_idx_ah_acl` (`ah_acl`), +  INDEX `acl_history_idx_ah_name` (`ah_name`),    PRIMARY KEY (`ah_id`)  ); diff --git a/perl/sql/Wallet-Schema-0.09-PostgreSQL.sql b/perl/sql/Wallet-Schema-0.09-PostgreSQL.sql index 38fc6ca..a66f0b1 100644 --- a/perl/sql/Wallet-Schema-0.09-PostgreSQL.sql +++ b/perl/sql/Wallet-Schema-0.09-PostgreSQL.sql @@ -1,6 +1,6 @@  --   -- Created by SQL::Translator::Producer::PostgreSQL --- Created on Fri Jul 11 19:17:17 2014 +-- Created on Tue Jul 15 17:41:03 2014  --   --  -- Table: duo. @@ -19,6 +19,7 @@ DROP TABLE "acl_history" CASCADE;  CREATE TABLE "acl_history" (    "ah_id" serial NOT NULL,    "ah_acl" integer NOT NULL, +  "ah_name" character varying(255),    "ah_action" character varying(16) NOT NULL,    "ah_scheme" character varying(32),    "ah_identifier" character varying(255), @@ -28,6 +29,7 @@ CREATE TABLE "acl_history" (    PRIMARY KEY ("ah_id")  );  CREATE INDEX "acl_history_idx_ah_acl" on "acl_history" ("ah_acl"); +CREATE INDEX "acl_history_idx_ah_name" on "acl_history" ("ah_name");  --  -- Table: acl_schemes. diff --git a/perl/sql/Wallet-Schema-0.09-SQLite.sql b/perl/sql/Wallet-Schema-0.09-SQLite.sql index 97db821..19a77c2 100644 --- a/perl/sql/Wallet-Schema-0.09-SQLite.sql +++ b/perl/sql/Wallet-Schema-0.09-SQLite.sql @@ -1,6 +1,6 @@  --   -- Created by SQL::Translator::Producer::SQLite --- Created on Fri Jul 11 19:17:16 2014 +-- Created on Tue Jul 15 17:41:02 2014  --   BEGIN TRANSACTION; @@ -24,6 +24,7 @@ DROP TABLE IF EXISTS acl_history;  CREATE TABLE acl_history (    ah_id INTEGER PRIMARY KEY NOT NULL,    ah_acl integer NOT NULL, +  ah_name varchar(255),    ah_action varchar(16) NOT NULL,    ah_scheme varchar(32),    ah_identifier varchar(255), @@ -34,6 +35,8 @@ CREATE TABLE acl_history (  CREATE INDEX acl_history_idx_ah_acl ON acl_history (ah_acl); +CREATE INDEX acl_history_idx_ah_name ON acl_history (ah_name); +  --  -- Table: acl_schemes  -- diff --git a/perl/t/general/server.t b/perl/t/general/server.t index 0a527a5..b270733 100755 --- a/perl/t/general/server.t +++ b/perl/t/general/server.t @@ -54,18 +54,8 @@ is ($server->acl_show ('ADMIN'),  is ($server->acl_show (1),      "Members of ACL ADMIN (id: 1) are:\n  krb5 $admin\n",      ' including by number'); -my $history = <<"EOO"; -DATE  create -    by $admin from $host -DATE  add krb5 $admin -    by $admin from $host -EOO -my $result = $server->acl_history ('ADMIN'); -$result =~ s/^\d{4}-\d\d-\d\d \d\d:\d\d:\d\d/DATE/gm; -is ($result, $history, ' and displaying history works'); -$result = $server->acl_history (1); -$result =~ s/^\d{4}-\d\d-\d\d \d\d:\d\d:\d\d/DATE/gm; -is ($result, $history, ' including by number'); +is ($server->acl_history ('ADMIN'), '', ' and initial history is empty'); +is ($server->acl_history (1), '', ' including by number');  is ($server->acl_create (3), undef, 'Cannot create ACL with a numeric name');  is ($server->error, 'ACL name may not be all numbers',      ' and returns the right error'); @@ -117,7 +107,7 @@ is ($server->acl_add ('both', 'krb5', $user2), 1,  is ($server->acl_show ('both'),      "Members of ACL both (id: 4) are:\n  krb5 $user1\n  krb5 $user2\n",      ' and show returns the correct result'); -$history = <<"EOO"; +my $history = <<"EOO";  DATE  create      by $admin from $host  DATE  add krb5 $user1 @@ -125,7 +115,7 @@ DATE  add krb5 $user1  DATE  add krb5 $user2      by $admin from $host  EOO -$result = $server->acl_history ('both'); +my $result = $server->acl_history ('both');  $result =~ s/^\d{4}-\d\d-\d\d \d\d:\d\d:\d\d/DATE/gm;  is ($result, $history, ' as does history');  is ($server->acl_add ('empty', 'krb5', $user1), 1, ' and another to empty'); | 
