aboutsummaryrefslogtreecommitdiff
path: root/perl
diff options
context:
space:
mode:
authorRuss Allbery <rra@stanford.edu>2008-02-08 23:42:40 +0000
committerRuss Allbery <rra@stanford.edu>2008-02-08 23:42:40 +0000
commit96d7a9fbc8fb9648a592bad4cf43f29dc6ccf6d0 (patch)
tree6c4b5f091a6ae258effe9ebb9fcdcb6a4bdc9e03 /perl
parentda92a0d5e259a126095e120c7938c6e3be27618c (diff)
Wallet::Config and hence the wallet server now checks for the
environment variable WALLET_CONFIG and loads configuration from the file specified there instead of /etc/wallet/wallet.conf if it is set.
Diffstat (limited to 'perl')
-rw-r--r--perl/Wallet/Config.pm30
-rwxr-xr-xperl/t/config.t46
2 files changed, 67 insertions, 9 deletions
diff --git a/perl/Wallet/Config.pm b/perl/Wallet/Config.pm
index 47a45df..735e799 100644
--- a/perl/Wallet/Config.pm
+++ b/perl/Wallet/Config.pm
@@ -15,10 +15,10 @@ use vars qw($PATH $VERSION);
# This version should be increased on any code change to this module. Always
# use two digits for the minor version with a leading zero if necessary so
# that it will sort properly.
-$VERSION = '0.02';
+$VERSION = '0.03';
# Path to the config file to load.
-$PATH = '/etc/wallet/wallet.conf';
+$PATH = $ENV{WALLET_CONFIG} || '/etc/wallet/wallet.conf';
=head1 NAME
@@ -46,11 +46,12 @@ Wallet::Config - Configuration handling for the wallet server
=head1 DESCRIPTION
Wallet::Config encapsulates all of the site-specific configuration for the
-wallet server. It is implemented as a Perl class that declares and sets the
-defaults for various configuration variables and then, if it exists, loads
-the file F</etc/wallet/wallet.conf>. That file should contain any
-site-specific overrides to the defaults, and at least some parameters must
-be set.
+wallet server. It is implemented as a Perl class that declares and sets
+the defaults for various configuration variables and then, if it exists,
+loads the file specified by the WALLET_CONFIG environment variable or
+F</etc/wallet/wallet.conf> if that environment variable isn't set. That
+file should contain any site-specific overrides to the defaults, and at
+least some parameters must be set.
This file must be valid Perl. To set a variable, use the syntax:
@@ -560,6 +561,17 @@ keytab objects for particular principals have fully-qualified hostnames:
Objects that aren't of type C<keytab> or which aren't for a host-based key
have no naming requirements enforced.
+=head1 ENVIRONMENT
+
+=over 4
+
+=item WALLET_CONFIG
+
+If this environment variable is set, it is taken to be the path to the
+wallet configuration file to load instead of F</etc/wallet/wallet.conf>.
+
+=back
+
=cut
# Now, load the configuration file so that it can override the defaults.
@@ -574,8 +586,8 @@ __END__
DBI(3), Wallet::Object::Keytab(3), Wallet::Server(3), wallet-backend(8)
-This module is part of the wallet system. The current version is available
-from L<http://www.eyrie.org/~eagle/software/wallet/>.
+This module is part of the wallet system. The current version is
+available from L<http://www.eyrie.org/~eagle/software/wallet/>.
=head1 AUTHOR
diff --git a/perl/t/config.t b/perl/t/config.t
new file mode 100755
index 0000000..0d159dc
--- /dev/null
+++ b/perl/t/config.t
@@ -0,0 +1,46 @@
+#!/usr/bin/perl -w
+# $Id$
+#
+# t/config.t -- Tests for the wallet server configuration.
+#
+# Written by Russ Allbery <rra@stanford.edu>
+# Copyright 2008 Board of Trustees, Leland Stanford Jr. University
+#
+# See LICENSE for licensing terms.
+
+use Test::More tests => 7;
+
+# Silence warnings since we're not using use.
+package Wallet::Config;
+our $DB_DRIVER;
+our $KEYTAB_AFS_KASETKEY;
+our $KEYTAB_FLAGS;
+our $KEYTAB_KADMIN;
+package main;
+
+# Load with a nonexistent file.
+$ENV{WALLET_CONFIG} = '/path/to/nonexistent/file';
+eval { require Wallet::Config };
+is ($@, '', 'Loading Wallet::Config with nonexistent config file works');
+is ($Wallet::Config::KEYTAB_FLAGS, '-clearpolicy',
+ ' and KEYTAB_FLAGS is correct');
+is ($Wallet::Config::KEYTAB_KADMIN, 'kadmin',
+ ' and KEYTAB_KADMIN is correct');
+is ($Wallet::Config::KEYTAB_AFS_KASETKEY, 'kasetkey',
+ ' and KEYTAB_AFS_KASETKEY is correct');
+is ($Wallet::Config::DB_DRIVER, undef, ' and DB_DRIVER is unset');
+
+# Create a configuration file with a single setting.
+open (CONFIG, '>', 'test-wallet.conf')
+ or die "$0: cannot create test-wallet.conf: $!\n";
+print CONFIG '$DB_DRIVER = "mysql";', "\n";
+print CONFIG "1;\n";
+close CONFIG;
+$ENV{WALLET_CONFIG} = './test-wallet.conf';
+
+# Reload the module and be sure it picks up that configuration file.
+delete $INC{'Wallet/Config.pm'};
+eval { require Wallet::Config };
+is ($@, '', 'Loading Wallet::Config with new config file works');
+is ($Wallet::Config::DB_DRIVER, 'mysql', ' and now DB_DRIVER is set');
+unlink 'test-wallet.conf';