summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore6
-rw-r--r--Makefile.am153
-rw-r--r--NEWS8
-rw-r--r--README15
-rw-r--r--configure.ac2
-rw-r--r--perl/Build.PL46
-rw-r--r--perl/MANIFEST84
-rw-r--r--perl/MANIFEST.SKIP41
-rw-r--r--perl/Makefile.PL.in18
-rw-r--r--perl/lib/Wallet/ACL.pm (renamed from perl/Wallet/ACL.pm)0
-rw-r--r--perl/lib/Wallet/ACL/Base.pm (renamed from perl/Wallet/ACL/Base.pm)0
-rw-r--r--perl/lib/Wallet/ACL/Krb5.pm (renamed from perl/Wallet/ACL/Krb5.pm)0
-rw-r--r--perl/lib/Wallet/ACL/Krb5/Regex.pm (renamed from perl/Wallet/ACL/Krb5/Regex.pm)0
-rw-r--r--perl/lib/Wallet/ACL/LDAP/Attribute.pm (renamed from perl/Wallet/ACL/LDAP/Attribute.pm)0
-rw-r--r--perl/lib/Wallet/ACL/NetDB.pm (renamed from perl/Wallet/ACL/NetDB.pm)0
-rw-r--r--perl/lib/Wallet/ACL/NetDB/Root.pm (renamed from perl/Wallet/ACL/NetDB/Root.pm)0
-rw-r--r--perl/lib/Wallet/Admin.pm (renamed from perl/Wallet/Admin.pm)0
-rw-r--r--perl/lib/Wallet/Config.pm (renamed from perl/Wallet/Config.pm)0
-rw-r--r--perl/lib/Wallet/Database.pm (renamed from perl/Wallet/Database.pm)0
-rw-r--r--perl/lib/Wallet/Kadmin.pm (renamed from perl/Wallet/Kadmin.pm)0
-rw-r--r--perl/lib/Wallet/Kadmin/Heimdal.pm (renamed from perl/Wallet/Kadmin/Heimdal.pm)0
-rw-r--r--perl/lib/Wallet/Kadmin/MIT.pm (renamed from perl/Wallet/Kadmin/MIT.pm)0
-rw-r--r--perl/lib/Wallet/Object/Base.pm (renamed from perl/Wallet/Object/Base.pm)0
-rw-r--r--perl/lib/Wallet/Object/Duo.pm (renamed from perl/Wallet/Object/Duo.pm)0
-rw-r--r--perl/lib/Wallet/Object/File.pm (renamed from perl/Wallet/Object/File.pm)0
-rw-r--r--perl/lib/Wallet/Object/Keytab.pm (renamed from perl/Wallet/Object/Keytab.pm)0
-rw-r--r--perl/lib/Wallet/Object/WAKeyring.pm (renamed from perl/Wallet/Object/WAKeyring.pm)0
-rw-r--r--perl/lib/Wallet/Policy/Stanford.pm (renamed from perl/Wallet/Policy/Stanford.pm)0
-rw-r--r--perl/lib/Wallet/Report.pm (renamed from perl/Wallet/Report.pm)0
-rw-r--r--perl/lib/Wallet/Schema.pm (renamed from perl/Wallet/Schema.pm)0
-rw-r--r--perl/lib/Wallet/Schema/Result/Acl.pm (renamed from perl/Wallet/Schema/Result/Acl.pm)0
-rw-r--r--perl/lib/Wallet/Schema/Result/AclEntry.pm (renamed from perl/Wallet/Schema/Result/AclEntry.pm)0
-rw-r--r--perl/lib/Wallet/Schema/Result/AclHistory.pm (renamed from perl/Wallet/Schema/Result/AclHistory.pm)0
-rw-r--r--perl/lib/Wallet/Schema/Result/AclScheme.pm (renamed from perl/Wallet/Schema/Result/AclScheme.pm)0
-rw-r--r--perl/lib/Wallet/Schema/Result/Duo.pm (renamed from perl/Wallet/Schema/Result/Duo.pm)0
-rw-r--r--perl/lib/Wallet/Schema/Result/Enctype.pm (renamed from perl/Wallet/Schema/Result/Enctype.pm)0
-rw-r--r--perl/lib/Wallet/Schema/Result/Flag.pm (renamed from perl/Wallet/Schema/Result/Flag.pm)0
-rw-r--r--perl/lib/Wallet/Schema/Result/KeytabEnctype.pm (renamed from perl/Wallet/Schema/Result/KeytabEnctype.pm)0
-rw-r--r--perl/lib/Wallet/Schema/Result/KeytabSync.pm (renamed from perl/Wallet/Schema/Result/KeytabSync.pm)0
-rw-r--r--perl/lib/Wallet/Schema/Result/Object.pm (renamed from perl/Wallet/Schema/Result/Object.pm)0
-rw-r--r--perl/lib/Wallet/Schema/Result/ObjectHistory.pm (renamed from perl/Wallet/Schema/Result/ObjectHistory.pm)0
-rw-r--r--perl/lib/Wallet/Schema/Result/SyncTarget.pm (renamed from perl/Wallet/Schema/Result/SyncTarget.pm)0
-rw-r--r--perl/lib/Wallet/Schema/Result/Type.pm (renamed from perl/Wallet/Schema/Result/Type.pm)0
-rw-r--r--perl/lib/Wallet/Server.pm (renamed from perl/Wallet/Server.pm)0
-rwxr-xr-xperl/t/docs/pod-spelling.t (renamed from perl/t/pod-spelling.t)0
-rwxr-xr-xperl/t/docs/pod.t (renamed from perl/t/pod.t)0
-rwxr-xr-xperl/t/general/acl.t (renamed from perl/t/acl.t)0
-rwxr-xr-xperl/t/general/admin.t (renamed from perl/t/admin.t)0
-rwxr-xr-xperl/t/general/config.t (renamed from perl/t/config.t)0
-rwxr-xr-xperl/t/general/init.t (renamed from perl/t/init.t)0
-rwxr-xr-xperl/t/general/report.t (renamed from perl/t/report.t)0
-rwxr-xr-xperl/t/general/server.t (renamed from perl/t/server.t)0
-rwxr-xr-xperl/t/object/base.t (renamed from perl/t/object.t)0
-rwxr-xr-xperl/t/object/duo.t (renamed from perl/t/duo.t)0
-rwxr-xr-xperl/t/object/file.t (renamed from perl/t/file.t)0
-rwxr-xr-xperl/t/object/keytab.t (renamed from perl/t/keytab.t)0
-rwxr-xr-xperl/t/object/wa-keyring.t (renamed from perl/t/wa-keyring.t)0
-rwxr-xr-xperl/t/policy/stanford.t (renamed from perl/t/stanford-naming.t)0
-rwxr-xr-xperl/t/util/kadmin.t (renamed from perl/t/kadmin.t)0
-rwxr-xr-xperl/t/verifier/basic.t (renamed from perl/t/verifier.t)0
-rwxr-xr-xperl/t/verifier/ldap-attr.t (renamed from perl/t/verifier-ldap-attr.t)0
-rwxr-xr-xperl/t/verifier/netdb.t (renamed from perl/t/verifier-netdb.t)0
-rw-r--r--tests/client/full-t.in2
-rw-r--r--tests/client/prompt-t.in4
-rwxr-xr-xtests/data/cmd-wrapper2
65 files changed, 288 insertions, 93 deletions
diff --git a/.gitignore b/.gitignore
index fdba4a0..86f4a1c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -9,16 +9,18 @@
/config.log
/config.status
/configure
+/perl/Build
/perl/MYMETA.json
/perl/MYMETA.yml
-/perl/Makefile.PL
-/perl/Makefile.old
+/perl/_build/
/perl/blib/
/perl/pm_to_blib
/perl/t/data/test.keytab
/perl/t/data/test.principal
/perl/t/data/test.realm
/perl/t/data/test.krbtype
+/perl/t/lib/Test/RRA.pm
+/perl/t/lib/Test/RRA/
/tests/client/basic-t
/tests/client/full-t
/tests/client/prompt-t
diff --git a/Makefile.am b/Makefile.am
index 82b84f7..19dbe11 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -6,54 +6,78 @@
#
# See LICENSE for licensing terms.
+# These variables exist only for the use of the Debian packaging and similar
+# situations and aren't normally set. We want to honor them if they're set
+# in the environment, as well as via make arguments.
+#
+# WALLET_PERL_FLAGS are additional flags to pass to Build.PL when building
+# the Makefile.
+WALLET_PERL_FLAGS ?=
+
# These two lists of files are needed for Perl builds and for the test suite
# and are not generated or touched by configure. They're listed here to be
# added to EXTRA_DIST and so that they can be copied over properly for
# builddir != srcdir builds.
-PERL_FILES = perl/Wallet/ACL.pm perl/Wallet/ACL/Base.pm \
- perl/Wallet/ACL/Krb5.pm perl/Wallet/ACL/Krb5/Regex.pm \
- perl/Wallet/ACL/LDAP/Attribute.pm perl/Wallet/ACL/NetDB.pm \
- perl/Wallet/ACL/NetDB/Root.pm perl/Wallet/Admin.pm \
- perl/Wallet/Config.pm perl/Wallet/Database.pm perl/Wallet/Kadmin.pm \
- perl/Wallet/Kadmin/Heimdal.pm perl/Wallet/Kadmin/MIT.pm \
- perl/Wallet/Object/Base.pm perl/Wallet/Object/Duo.pm \
- perl/Wallet/Object/File.pm perl/Wallet/Object/Keytab.pm \
- perl/Wallet/Object/WAKeyring.pm perl/Wallet/Policy/Stanford.pm \
- perl/Wallet/Report.pm perl/Wallet/Schema.pm perl/Wallet/Server.pm \
- perl/Wallet/Schema/Result/Acl.pm \
- perl/Wallet/Schema/Result/AclEntry.pm \
- perl/Wallet/Schema/Result/AclHistory.pm \
- perl/Wallet/Schema/Result/AclScheme.pm \
- perl/Wallet/Schema/Result/Duo.pm \
- perl/Wallet/Schema/Result/Enctype.pm \
- perl/Wallet/Schema/Result/Flag.pm \
- perl/Wallet/Schema/Result/KeytabEnctype.pm \
- perl/Wallet/Schema/Result/KeytabSync.pm \
- perl/Wallet/Schema/Result/Object.pm \
- perl/Wallet/Schema/Result/ObjectHistory.pm \
- perl/Wallet/Schema/Result/SyncTarget.pm \
- perl/Wallet/Schema/Result/Type.pm \
- perl/sql/Wallet-Schema-0.07-0.08-MySQL.sql \
- perl/sql/Wallet-Schema-0.07-0.08-SQLite.sql \
- perl/sql/Wallet-Schema-0.07-MySQL.sql \
- perl/sql/Wallet-Schema-0.07-SQLite.sql \
- perl/sql/Wallet-Schema-0.08-0.09-MySQL.sql \
- perl/sql/Wallet-Schema-0.08-0.09-PostgreSQL.sql \
- perl/sql/Wallet-Schema-0.08-0.09-SQLite.sql \
- perl/sql/Wallet-Schema-0.08-MySQL.sql \
- perl/sql/Wallet-Schema-0.08-PostgreSQL.sql \
- perl/sql/Wallet-Schema-0.08-SQLite.sql \
- perl/sql/Wallet-Schema-0.09-MySQL.sql \
- perl/sql/Wallet-Schema-0.09-PostgreSQL.sql \
- perl/sql/Wallet-Schema-0.09-SQLite.sql perl/t/acl.t perl/t/admin.t \
- perl/t/config.t perl/t/data/README perl/t/data/duo/integration.json \
- perl/t/data/duo/keys.json perl/t/data/keytab-fake \
- perl/t/data/keytab.conf perl/t/data/netdb.conf \
- perl/t/data/netdb-fake perl/t/duo.t perl/t/file.t perl/t/init.t \
- perl/t/kadmin.t perl/t/keytab.t perl/t/lib/Util.pm perl/t/object.t \
- perl/t/pod-spelling.t perl/t/pod.t perl/t/report.t perl/t/server.t \
- perl/t/stanford-naming.t perl/t/verifier-ldap-attr.t \
- perl/t/verifier-netdb.t perl/t/verifier.t perl/t/wa-keyring.t
+PERL_FILES = perl/Build.PL perl/MANIFEST perl/MANIFEST.SKIP \
+ perl/lib/Wallet/ACL.pm perl/lib/Wallet/ACL/Base.pm \
+ perl/lib/Wallet/ACL/Krb5.pm perl/lib/Wallet/ACL/Krb5/Regex.pm \
+ perl/lib/Wallet/ACL/LDAP/Attribute.pm perl/lib/Wallet/ACL/NetDB.pm \
+ perl/lib/Wallet/ACL/NetDB/Root.pm perl/lib/Wallet/Admin.pm \
+ perl/lib/Wallet/Config.pm perl/lib/Wallet/Database.pm \
+ perl/lib/Wallet/Kadmin.pm perl/lib/Wallet/Kadmin/Heimdal.pm \
+ perl/lib/Wallet/Kadmin/MIT.pm perl/lib/Wallet/Object/Base.pm \
+ perl/lib/Wallet/Object/Duo.pm perl/lib/Wallet/Object/File.pm \
+ perl/lib/Wallet/Object/Keytab.pm \
+ perl/lib/Wallet/Object/WAKeyring.pm \
+ perl/lib/Wallet/Policy/Stanford.pm perl/lib/Wallet/Report.pm \
+ perl/lib/Wallet/Schema.pm perl/lib/Wallet/Server.pm \
+ perl/lib/Wallet/Schema/Result/Acl.pm \
+ perl/lib/Wallet/Schema/Result/AclEntry.pm \
+ perl/lib/Wallet/Schema/Result/AclHistory.pm \
+ perl/lib/Wallet/Schema/Result/AclScheme.pm \
+ perl/lib/Wallet/Schema/Result/Duo.pm \
+ perl/lib/Wallet/Schema/Result/Enctype.pm \
+ perl/lib/Wallet/Schema/Result/Flag.pm \
+ perl/lib/Wallet/Schema/Result/KeytabEnctype.pm \
+ perl/lib/Wallet/Schema/Result/KeytabSync.pm \
+ perl/lib/Wallet/Schema/Result/Object.pm \
+ perl/lib/Wallet/Schema/Result/ObjectHistory.pm \
+ perl/lib/Wallet/Schema/Result/SyncTarget.pm \
+ perl/lib/Wallet/Schema/Result/Type.pm \
+ perl/sql/Wallet-Schema-0.07-0.08-MySQL.sql \
+ perl/sql/Wallet-Schema-0.07-0.08-SQLite.sql \
+ perl/sql/Wallet-Schema-0.07-MySQL.sql \
+ perl/sql/Wallet-Schema-0.07-SQLite.sql \
+ perl/sql/Wallet-Schema-0.08-0.09-MySQL.sql \
+ perl/sql/Wallet-Schema-0.08-0.09-PostgreSQL.sql \
+ perl/sql/Wallet-Schema-0.08-0.09-SQLite.sql \
+ perl/sql/Wallet-Schema-0.08-MySQL.sql \
+ perl/sql/Wallet-Schema-0.08-PostgreSQL.sql \
+ perl/sql/Wallet-Schema-0.08-SQLite.sql \
+ perl/sql/Wallet-Schema-0.09-MySQL.sql \
+ perl/sql/Wallet-Schema-0.09-PostgreSQL.sql \
+ perl/sql/Wallet-Schema-0.09-SQLite.sql perl/t/data/README \
+ perl/t/data/duo/integration.json perl/t/data/duo/keys.json \
+ perl/t/data/keytab-fake perl/t/data/keytab.conf \
+ perl/t/data/netdb.conf perl/t/data/netdb-fake \
+ perl/t/docs/pod-spelling.t perl/t/docs/pod.t perl/t/general/acl.t \
+ perl/t/general/admin.t perl/t/general/config.t \
+ perl/t/general/init.t perl/t/general/report.t \
+ perl/t/general/server.t perl/t/lib/Util.pm perl/t/object/base.t \
+ perl/t/object/duo.t perl/t/object/file.t perl/t/object/keytab.t \
+ perl/t/object/wa-keyring.t perl/t/policy/stanford.t \
+ perl/t/util/kadmin.t perl/t/verifier/basic.t \
+ perl/t/verifier/ldap-attr.t perl/t/verifier/netdb.t
+
+# Directories that have to be created in builddir != srcdir builds before
+# copying PERL_FILES over.
+PERL_DIRECTORIES = perl perl/lib perl/lib/Wallet perl/lib/Wallet/ACL \
+ perl/lib/Wallet/ACL/Krb5 perl/lib/Wallet/ACL/LDAP \
+ perl/lib/Wallet/ACL/NetDB perl/lib/Wallet/Kadmin \
+ perl/lib/Wallet/Object perl/lib/Wallet/Policy \
+ perl/lib/Wallet/Schema perl/lib/Wallet/Schema/Result perl/sql \
+ perl/t perl/t/data perl/t/docs perl/t/general perl/t/lib \
+ perl/t/object perl/t/policy perl/t/util perl/t/verifier
ACLOCAL_AMFLAGS = -I m4
EXTRA_DIST = .gitignore LICENSE autogen client/wallet.pod \
@@ -82,6 +106,7 @@ EXTRA_DIST = .gitignore LICENSE autogen client/wallet.pod \
tests/tap/perl/Test/RRA/Config.pm tests/tap/remctl.sh \
tests/util/xmalloc-t $(PERL_FILES)
+# Supporting convenience libraries used by other targets.
noinst_LIBRARIES = portable/libportable.a util/libutil.a
portable_libportable_a_SOURCES = portable/dummy.c portable/krb5-extra.c \
portable/krb5.h portable/macros.h portable/stdbool.h \
@@ -93,11 +118,13 @@ util_libutil_a_SOURCES = util/macros.h util/messages-krb5.c \
util/xmalloc.h
util_libutil_a_CPPFLAGS = $(KRB5_CPPFLAGS)
+# The private library used by both wallet and wallet-rekey.
noinst_LIBRARIES += client/libwallet.a
client_libwallet_a_SOURCES = client/file.c client/internal.h client/keytab.c \
client/krb5.c client/options.c client/remctl.c client/srvtab.c
client_libwallet_a_CPPFLAGS = $(REMCTL_CPPFLAGS) $(KRB5_CPPFLAGS)
+# The client and server programs.
bin_PROGRAMS = client/wallet client/wallet-rekey
dist_sbin_SCRIPTS = server/keytab-backend server/wallet-admin \
server/wallet-backend server/wallet-report
@@ -110,6 +137,7 @@ client_wallet_rekey_LDFLAGS = $(REMCTL_LDFLAGS) $(KRB5_LDFLAGS)
client_wallet_rekey_LDADD = client/libwallet.a util/libutil.a \
portable/libportable.a $(REMCTL_LIBS) $(KRB5_LIBS)
+# The manual pages.
dist_man_MANS = client/wallet.1 client/wallet-rekey.1 server/keytab-backend.8 \
server/wallet-admin.8 server/wallet-backend.8 server/wallet-report.8
@@ -151,7 +179,8 @@ warnings:
KRB5_CPPFLAGS='$(KRB5_CPPFLAGS_GCC)' $(check_PROGRAMS)
# Remove some additional files.
-DISTCLEANFILES = perl/Makefile
+CLEANFILES = perl/t/lib/Test/RRA.pm perl/t/lib/Test/RRA/Automake.pm \
+ perl/t/lib/Test/RRA/Config.pm
MAINTAINERCLEANFILES = Makefile.in aclocal.m4 build-aux/compile \
build-aux/depcomp build-aux/install-sh build-aux/missing \
client/wallet.1 config.h.in config.h.in~ configure \
@@ -164,19 +193,18 @@ MAINTAINERCLEANFILES = Makefile.in aclocal.m4 build-aux/compile \
# packaging.
all-local: perl/blib/lib/Wallet/Config.pm
-perl/blib/lib/Wallet/Config.pm:
- set -e; if [ x"$(builddir)" != x"$(srcdir)" ] ; then \
- mkdir perl/Wallet perl/Wallet/ACL perl/Wallet/ACL/Krb5 \
- perl/Wallet/ACL/LDAP perl/Wallet/ACL/NetDB \
- perl/Wallet/Kadmin perl/Wallet/Object perl/Wallet/Policy \
- perl/Wallet/Schema perl/Wallet/Schema/Result perl/sql perl/t \
- perl/t/data perl/t/lib 2>/dev/null || true ; \
- for f in $(PERL_FILES) ; do \
- cp "$(srcdir)/$$f" "$(builddir)/$$f" ; \
- done \
+perl/blib/lib/Wallet/Config.pm: $(srcdir)/perl/lib/Wallet/Config.pm
+ set -e; if [ x"$(builddir)" != x"$(srcdir)" ] ; then \
+ for d in $(PERL_DIRECTORIES) ; do \
+ [ -d "$(builddir)/$$d" ] || mkdir "$(builddir)/$$d" ; \
+ done ; \
+ for f in $(PERL_FILES) ; do \
+ cp "$(srcdir)/$$f" "$(builddir)/$$f" ; \
+ done ; \
fi
- cd perl && perl Makefile.PL
- cd perl && $(MAKE)
+ cp -R $(srcdir)/tests/tap/perl/* perl/t/lib/
+ cd perl && perl Build.PL $(WALLET_PERL_FLAGS)
+ cd perl && ./Build
install-data-local:
if [ x"$(DESTDIR)" != x ] ; then \
@@ -187,13 +215,16 @@ install-data-local:
# ExtUtils::MakeMaker really likes moving the Makefile aside.
clean-local:
- [ ! -f perl/Makefile ] || ( set -e; cd perl && $(MAKE) clean )
- cd perl && ( [ ! -f Makefile.old ] || mv Makefile.old Makefile )
+ set -e; if [ -f "perl/Build" ] ; then \
+ cd perl && ./Build realclean ; \
+ fi
# Remove the files that we copy over if and only if builddir != srcdir.
distclean-local:
set -e; if [ x"$(builddir)" != x"$(srcdir)" ] ; then \
- rm -f $(PERL_FILES) ; \
+ for f in $(PERL_FILES) ; do \
+ rm -f "$(builddir)/$$f" ; \
+ done ; \
fi
# The bits below are for the test suite, not for the main package.
@@ -241,7 +272,7 @@ tests_util_xmalloc_LDADD = util/libutil.a portable/libportable.a
check-local: $(check_PROGRAMS)
cd tests && ./runtests -l $(abs_top_srcdir)/tests/TESTS
@echo ''
- cd perl && $(MAKE) test
+ cd perl && ./Build test
# Alas, we have to disable this check because there's no way to do an
# uninstall from Perl.
diff --git a/NEWS b/NEWS
index 76ddfd1..e40b80d 100644
--- a/NEWS
+++ b/NEWS
@@ -39,6 +39,14 @@ wallet 1.1 (unreleased)
and an incorrect linkage in the schema for the ACL history, and add
indices for the object type, name, and ACL instead.
+ 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
+ with the source code, since Perl 5.8 was released in 2002, but
+ Module::Build is now required to build the wallet server. It is
+ included in some versions of Perl, or can be installed separately from
+ CPAN, distribution packages, or other sources.
+
Update to rra-c-util 5.5:
* Use Lancaster Consensus environment variables to control tests.
diff --git a/README b/README
index 85a6299..e72bc80 100644
--- a/README
+++ b/README
@@ -64,13 +64,14 @@ REQUIREMENTS
The wallet client will build with either MIT Kerberos or Heimdal.
- The wallet server is written in Perl and requires Perl 5.6.0 or later.
- It uses DBIx::Class and DBI to talk to a database, and therefore the
- DBIx::Class and DBI modules (and their dependencies) and a DBD module
- for the database it will use must be installed. The SQL::Translator
- Perl module is also required for schema deployment and database
- upgrades. If the wallet server is used with a SQLite 3 database, the
- Perl module DateTime::Format::SQLite should also be installed.
+ The wallet server is written in Perl and requires Perl 5.6.0 or later
+ plus Module::Build to build. It uses DBIx::Class and DBI to talk to a
+ database, and therefore the DBIx::Class and DBI modules (and their
+ dependencies) and a DBD module for the database it will use must be
+ installed. The SQL::Translator Perl module is also required for schema
+ deployment and database upgrades. If the wallet server is used with a
+ SQLite 3 database, the Perl module DateTime::Format::SQLite should also
+ be installed.
Currently, the server has only been tested against SQLite 3, MySQL 5,
and PostgreSQL, and prebuilt SQL files (for database upgrades) are only
diff --git a/configure.ac b/configure.ac
index b1b335d..d49c7b5 100644
--- a/configure.ac
+++ b/configure.ac
@@ -75,7 +75,7 @@ AS_IF([test x"$REMCTLD" != x],
dnl Output section.
AC_CONFIG_HEADER([config.h])
-AC_CONFIG_FILES([Makefile perl/Makefile.PL])
+AC_CONFIG_FILES([Makefile])
AC_CONFIG_FILES([tests/client/basic-t], [chmod +x tests/client/basic-t])
AC_CONFIG_FILES([tests/client/full-t], [chmod +x tests/client/full-t])
AC_CONFIG_FILES([tests/client/prompt-t], [chmod +x tests/client/prompt-t])
diff --git a/perl/Build.PL b/perl/Build.PL
new file mode 100644
index 0000000..3d3bcdc
--- /dev/null
+++ b/perl/Build.PL
@@ -0,0 +1,46 @@
+#!/usr/bin/perl
+#
+# Build script for the wallet distribution.
+#
+# Written by Russ Allbery <eagle@eyrie.org>
+# Copyright 2014
+# The Board of Trustees of the Leland Stanford Junior University
+#
+# See LICENSE for licensing terms.
+
+use 5.006;
+use strict;
+use warnings;
+
+use Module::Build;
+
+# Basic package configuration.
+my $build = Module::Build->new(
+ dist_abstract => 'Secure credential management system',
+ dist_author => 'Russ Allbery <eagle@eyrie.org>',
+ dist_name => 'Wallet',
+ dist_version => '1.01',
+ license => 'mit',
+ recursive_test_files => 1,
+
+ # Other package relationships.
+ configure_requires => { 'Module::Build' => 0.28 },
+ requires => {
+ 'DBIx::Class' => 0,
+ DBI => 0,
+ 'Digest::MD5' => 0,
+ 'SQL::Translator' => 0,
+ perl => '5.006',
+ },
+ recommends => {
+ 'Authen::SASL' => 0,
+ 'Heimdal::Kadm5' => 0,
+ 'Net::Duo' => 0,
+ 'Net::LDAP' => 0,
+ 'Net::Remctl' => 0,
+ WebAuth => 0,
+ },
+);
+
+# Generate the build script.
+$build->create_build_script;
diff --git a/perl/MANIFEST b/perl/MANIFEST
new file mode 100644
index 0000000..7f67987
--- /dev/null
+++ b/perl/MANIFEST
@@ -0,0 +1,84 @@
+Build.PL
+create-ddl
+lib/Wallet/ACL.pm
+lib/Wallet/ACL/Base.pm
+lib/Wallet/ACL/Krb5.pm
+lib/Wallet/ACL/Krb5/Regex.pm
+lib/Wallet/ACL/LDAP/Attribute.pm
+lib/Wallet/ACL/NetDB.pm
+lib/Wallet/ACL/NetDB/Root.pm
+lib/Wallet/Admin.pm
+lib/Wallet/Config.pm
+lib/Wallet/Database.pm
+lib/Wallet/Kadmin.pm
+lib/Wallet/Kadmin/Heimdal.pm
+lib/Wallet/Kadmin/MIT.pm
+lib/Wallet/Object/Base.pm
+lib/Wallet/Object/Duo.pm
+lib/Wallet/Object/File.pm
+lib/Wallet/Object/Keytab.pm
+lib/Wallet/Object/WAKeyring.pm
+lib/Wallet/Policy/Stanford.pm
+lib/Wallet/Report.pm
+lib/Wallet/Schema.pm
+lib/Wallet/Schema/Result/Acl.pm
+lib/Wallet/Schema/Result/AclEntry.pm
+lib/Wallet/Schema/Result/AclHistory.pm
+lib/Wallet/Schema/Result/AclScheme.pm
+lib/Wallet/Schema/Result/Duo.pm
+lib/Wallet/Schema/Result/Enctype.pm
+lib/Wallet/Schema/Result/Flag.pm
+lib/Wallet/Schema/Result/KeytabEnctype.pm
+lib/Wallet/Schema/Result/KeytabSync.pm
+lib/Wallet/Schema/Result/Object.pm
+lib/Wallet/Schema/Result/ObjectHistory.pm
+lib/Wallet/Schema/Result/SyncTarget.pm
+lib/Wallet/Schema/Result/Type.pm
+lib/Wallet/Server.pm
+MANIFEST This list of files
+MANIFEST.SKIP
+sql/Wallet-Schema-0.07-0.08-MySQL.sql
+sql/Wallet-Schema-0.07-0.08-SQLite.sql
+sql/Wallet-Schema-0.07-MySQL.sql
+sql/Wallet-Schema-0.07-SQLite.sql
+sql/Wallet-Schema-0.08-0.09-MySQL.sql
+sql/Wallet-Schema-0.08-0.09-PostgreSQL.sql
+sql/Wallet-Schema-0.08-0.09-SQLite.sql
+sql/Wallet-Schema-0.08-MySQL.sql
+sql/Wallet-Schema-0.08-PostgreSQL.sql
+sql/Wallet-Schema-0.08-SQLite.sql
+sql/Wallet-Schema-0.09-MySQL.sql
+sql/Wallet-Schema-0.09-PostgreSQL.sql
+sql/Wallet-Schema-0.09-SQLite.sql
+t/acl.t
+t/admin.t
+t/data/duo/integration.json
+t/data/duo/keys.json
+t/data/keytab-fake
+t/data/keytab.conf
+t/data/netdb-fake
+t/data/netdb.conf
+t/data/README
+t/data/test.keytab
+t/data/test.krbtype
+t/data/test.principal
+t/data/test.realm
+t/duo.t
+t/file.t
+t/init.t
+t/kadmin.t
+t/keytab.t
+t/lib/Test/RRA.pm
+t/lib/Test/RRA/Automake.pm
+t/lib/Test/RRA/Config.pm
+t/lib/Util.pm
+t/object.t
+t/pod-spelling.t
+t/pod.t
+t/report.t
+t/server.t
+t/stanford-naming.t
+t/verifier-ldap-attr.t
+t/verifier-netdb.t
+t/verifier.t
+t/wa-keyring.t
diff --git a/perl/MANIFEST.SKIP b/perl/MANIFEST.SKIP
new file mode 100644
index 0000000..82fa711
--- /dev/null
+++ b/perl/MANIFEST.SKIP
@@ -0,0 +1,41 @@
+# -*- conf -*-
+
+# Avoid generated build files.
+\bblib/
+
+# Avoid Module::Build generated and utility files.
+\bBuild$
+\b_build/
+\bBuild.bat$
+\bBuild.COM$
+\bBUILD.COM$
+\bbuild.com$
+
+# Avoid temp and backup files.
+~$
+\.old$
+\#$
+\b\.#
+\.bak$
+\.tmp$
+\.#
+\.rej$
+
+# Avoid OS-specific files/dirs
+# Mac OSX metadata
+\B\.DS_Store
+# Mac OSX SMB mount metadata files
+\B\._
+
+# Avoid Devel::Cover and Devel::CoverX::Covered files.
+\bcover_db\b
+\bcovered\b
+
+# Avoid MYMETA files
+^MYMETA\.
+
+# Avoid archives of this distribution
+\bWallet-[\d\.\_]+
+
+# Avoid local test configuration files.
+^t/config
diff --git a/perl/Makefile.PL.in b/perl/Makefile.PL.in
deleted file mode 100644
index a3038ae..0000000
--- a/perl/Makefile.PL.in
+++ /dev/null
@@ -1,18 +0,0 @@
-# Makefile.PL for the Wallet Perl library. -*- perl -*-
-
-use ExtUtils::MakeMaker;
-
-my $version = '@PACKAGE_VERSION@';
-$version =~ s/\.(\d)$/.0$1/;
-
-# Set a prefix for ExtUtils::MakeMaker if we were given one for configure.
-my $prefix = "@prefix@";
-
-WriteMakefile(
- NAME => 'Wallet',
- VERSION => $version,
- ABSTRACT => 'Wallet: a secure credential management system',
- AUTHOR => 'Russ Allbery (eagle@eyrie.org)',
- (($prefix ne '/usr' && $prefix ne '/usr/local') ?
- (PREFIX => $prefix) : ())
-);
diff --git a/perl/Wallet/ACL.pm b/perl/lib/Wallet/ACL.pm
index 808be3c..808be3c 100644
--- a/perl/Wallet/ACL.pm
+++ b/perl/lib/Wallet/ACL.pm
diff --git a/perl/Wallet/ACL/Base.pm b/perl/lib/Wallet/ACL/Base.pm
index b6e4ce3..b6e4ce3 100644
--- a/perl/Wallet/ACL/Base.pm
+++ b/perl/lib/Wallet/ACL/Base.pm
diff --git a/perl/Wallet/ACL/Krb5.pm b/perl/lib/Wallet/ACL/Krb5.pm
index ed0b7df..ed0b7df 100644
--- a/perl/Wallet/ACL/Krb5.pm
+++ b/perl/lib/Wallet/ACL/Krb5.pm
diff --git a/perl/Wallet/ACL/Krb5/Regex.pm b/perl/lib/Wallet/ACL/Krb5/Regex.pm
index 30f5527..30f5527 100644
--- a/perl/Wallet/ACL/Krb5/Regex.pm
+++ b/perl/lib/Wallet/ACL/Krb5/Regex.pm
diff --git a/perl/Wallet/ACL/LDAP/Attribute.pm b/perl/lib/Wallet/ACL/LDAP/Attribute.pm
index aea8a72..aea8a72 100644
--- a/perl/Wallet/ACL/LDAP/Attribute.pm
+++ b/perl/lib/Wallet/ACL/LDAP/Attribute.pm
diff --git a/perl/Wallet/ACL/NetDB.pm b/perl/lib/Wallet/ACL/NetDB.pm
index b76d4ed..b76d4ed 100644
--- a/perl/Wallet/ACL/NetDB.pm
+++ b/perl/lib/Wallet/ACL/NetDB.pm
diff --git a/perl/Wallet/ACL/NetDB/Root.pm b/perl/lib/Wallet/ACL/NetDB/Root.pm
index 6c95c6e..6c95c6e 100644
--- a/perl/Wallet/ACL/NetDB/Root.pm
+++ b/perl/lib/Wallet/ACL/NetDB/Root.pm
diff --git a/perl/Wallet/Admin.pm b/perl/lib/Wallet/Admin.pm
index 3a05284..3a05284 100644
--- a/perl/Wallet/Admin.pm
+++ b/perl/lib/Wallet/Admin.pm
diff --git a/perl/Wallet/Config.pm b/perl/lib/Wallet/Config.pm
index 5b0ab1c..5b0ab1c 100644
--- a/perl/Wallet/Config.pm
+++ b/perl/lib/Wallet/Config.pm
diff --git a/perl/Wallet/Database.pm b/perl/lib/Wallet/Database.pm
index 031be9e..031be9e 100644
--- a/perl/Wallet/Database.pm
+++ b/perl/lib/Wallet/Database.pm
diff --git a/perl/Wallet/Kadmin.pm b/perl/lib/Wallet/Kadmin.pm
index 4ea7920..4ea7920 100644
--- a/perl/Wallet/Kadmin.pm
+++ b/perl/lib/Wallet/Kadmin.pm
diff --git a/perl/Wallet/Kadmin/Heimdal.pm b/perl/lib/Wallet/Kadmin/Heimdal.pm
index 42de8e0..42de8e0 100644
--- a/perl/Wallet/Kadmin/Heimdal.pm
+++ b/perl/lib/Wallet/Kadmin/Heimdal.pm
diff --git a/perl/Wallet/Kadmin/MIT.pm b/perl/lib/Wallet/Kadmin/MIT.pm
index 1ae01bf..1ae01bf 100644
--- a/perl/Wallet/Kadmin/MIT.pm
+++ b/perl/lib/Wallet/Kadmin/MIT.pm
diff --git a/perl/Wallet/Object/Base.pm b/perl/lib/Wallet/Object/Base.pm
index 8debac9..8debac9 100644
--- a/perl/Wallet/Object/Base.pm
+++ b/perl/lib/Wallet/Object/Base.pm
diff --git a/perl/Wallet/Object/Duo.pm b/perl/lib/Wallet/Object/Duo.pm
index e5773c8..e5773c8 100644
--- a/perl/Wallet/Object/Duo.pm
+++ b/perl/lib/Wallet/Object/Duo.pm
diff --git a/perl/Wallet/Object/File.pm b/perl/lib/Wallet/Object/File.pm
index 4afef04..4afef04 100644
--- a/perl/Wallet/Object/File.pm
+++ b/perl/lib/Wallet/Object/File.pm
diff --git a/perl/Wallet/Object/Keytab.pm b/perl/lib/Wallet/Object/Keytab.pm
index 24c3302..24c3302 100644
--- a/perl/Wallet/Object/Keytab.pm
+++ b/perl/lib/Wallet/Object/Keytab.pm
diff --git a/perl/Wallet/Object/WAKeyring.pm b/perl/lib/Wallet/Object/WAKeyring.pm
index f8bd0f7..f8bd0f7 100644
--- a/perl/Wallet/Object/WAKeyring.pm
+++ b/perl/lib/Wallet/Object/WAKeyring.pm
diff --git a/perl/Wallet/Policy/Stanford.pm b/perl/lib/Wallet/Policy/Stanford.pm
index 5ac29e0..5ac29e0 100644
--- a/perl/Wallet/Policy/Stanford.pm
+++ b/perl/lib/Wallet/Policy/Stanford.pm
diff --git a/perl/Wallet/Report.pm b/perl/lib/Wallet/Report.pm
index 1085546..1085546 100644
--- a/perl/Wallet/Report.pm
+++ b/perl/lib/Wallet/Report.pm
diff --git a/perl/Wallet/Schema.pm b/perl/lib/Wallet/Schema.pm
index 74b4c99..74b4c99 100644
--- a/perl/Wallet/Schema.pm
+++ b/perl/lib/Wallet/Schema.pm
diff --git a/perl/Wallet/Schema/Result/Acl.pm b/perl/lib/Wallet/Schema/Result/Acl.pm
index 226738a..226738a 100644
--- a/perl/Wallet/Schema/Result/Acl.pm
+++ b/perl/lib/Wallet/Schema/Result/Acl.pm
diff --git a/perl/Wallet/Schema/Result/AclEntry.pm b/perl/lib/Wallet/Schema/Result/AclEntry.pm
index a33a98c..a33a98c 100644
--- a/perl/Wallet/Schema/Result/AclEntry.pm
+++ b/perl/lib/Wallet/Schema/Result/AclEntry.pm
diff --git a/perl/Wallet/Schema/Result/AclHistory.pm b/perl/lib/Wallet/Schema/Result/AclHistory.pm
index 11593b7..11593b7 100644
--- a/perl/Wallet/Schema/Result/AclHistory.pm
+++ b/perl/lib/Wallet/Schema/Result/AclHistory.pm
diff --git a/perl/Wallet/Schema/Result/AclScheme.pm b/perl/lib/Wallet/Schema/Result/AclScheme.pm
index 91a58b2..91a58b2 100644
--- a/perl/Wallet/Schema/Result/AclScheme.pm
+++ b/perl/lib/Wallet/Schema/Result/AclScheme.pm
diff --git a/perl/Wallet/Schema/Result/Duo.pm b/perl/lib/Wallet/Schema/Result/Duo.pm
index 80a71dc..80a71dc 100644
--- a/perl/Wallet/Schema/Result/Duo.pm
+++ b/perl/lib/Wallet/Schema/Result/Duo.pm
diff --git a/perl/Wallet/Schema/Result/Enctype.pm b/perl/lib/Wallet/Schema/Result/Enctype.pm
index 5733669..5733669 100644
--- a/perl/Wallet/Schema/Result/Enctype.pm
+++ b/perl/lib/Wallet/Schema/Result/Enctype.pm
diff --git a/perl/Wallet/Schema/Result/Flag.pm b/perl/lib/Wallet/Schema/Result/Flag.pm
index e223ff8..e223ff8 100644
--- a/perl/Wallet/Schema/Result/Flag.pm
+++ b/perl/lib/Wallet/Schema/Result/Flag.pm
diff --git a/perl/Wallet/Schema/Result/KeytabEnctype.pm b/perl/lib/Wallet/Schema/Result/KeytabEnctype.pm
index daea724..daea724 100644
--- a/perl/Wallet/Schema/Result/KeytabEnctype.pm
+++ b/perl/lib/Wallet/Schema/Result/KeytabEnctype.pm
diff --git a/perl/Wallet/Schema/Result/KeytabSync.pm b/perl/lib/Wallet/Schema/Result/KeytabSync.pm
index ca84277..ca84277 100644
--- a/perl/Wallet/Schema/Result/KeytabSync.pm
+++ b/perl/lib/Wallet/Schema/Result/KeytabSync.pm
diff --git a/perl/Wallet/Schema/Result/Object.pm b/perl/lib/Wallet/Schema/Result/Object.pm
index fd64e1b..fd64e1b 100644
--- a/perl/Wallet/Schema/Result/Object.pm
+++ b/perl/lib/Wallet/Schema/Result/Object.pm
diff --git a/perl/Wallet/Schema/Result/ObjectHistory.pm b/perl/lib/Wallet/Schema/Result/ObjectHistory.pm
index 5e9c8bd..5e9c8bd 100644
--- a/perl/Wallet/Schema/Result/ObjectHistory.pm
+++ b/perl/lib/Wallet/Schema/Result/ObjectHistory.pm
diff --git a/perl/Wallet/Schema/Result/SyncTarget.pm b/perl/lib/Wallet/Schema/Result/SyncTarget.pm
index 4300a54..4300a54 100644
--- a/perl/Wallet/Schema/Result/SyncTarget.pm
+++ b/perl/lib/Wallet/Schema/Result/SyncTarget.pm
diff --git a/perl/Wallet/Schema/Result/Type.pm b/perl/lib/Wallet/Schema/Result/Type.pm
index 748a8a8..748a8a8 100644
--- a/perl/Wallet/Schema/Result/Type.pm
+++ b/perl/lib/Wallet/Schema/Result/Type.pm
diff --git a/perl/Wallet/Server.pm b/perl/lib/Wallet/Server.pm
index 3266928..3266928 100644
--- a/perl/Wallet/Server.pm
+++ b/perl/lib/Wallet/Server.pm
diff --git a/perl/t/pod-spelling.t b/perl/t/docs/pod-spelling.t
index 577a99e..577a99e 100755
--- a/perl/t/pod-spelling.t
+++ b/perl/t/docs/pod-spelling.t
diff --git a/perl/t/pod.t b/perl/t/docs/pod.t
index dfcf88e..dfcf88e 100755
--- a/perl/t/pod.t
+++ b/perl/t/docs/pod.t
diff --git a/perl/t/acl.t b/perl/t/general/acl.t
index e633f46..e633f46 100755
--- a/perl/t/acl.t
+++ b/perl/t/general/acl.t
diff --git a/perl/t/admin.t b/perl/t/general/admin.t
index 41bc33a..41bc33a 100755
--- a/perl/t/admin.t
+++ b/perl/t/general/admin.t
diff --git a/perl/t/config.t b/perl/t/general/config.t
index 881f2bd..881f2bd 100755
--- a/perl/t/config.t
+++ b/perl/t/general/config.t
diff --git a/perl/t/init.t b/perl/t/general/init.t
index b8ec3c9..b8ec3c9 100755
--- a/perl/t/init.t
+++ b/perl/t/general/init.t
diff --git a/perl/t/report.t b/perl/t/general/report.t
index 9563362..9563362 100755
--- a/perl/t/report.t
+++ b/perl/t/general/report.t
diff --git a/perl/t/server.t b/perl/t/general/server.t
index 9026439..9026439 100755
--- a/perl/t/server.t
+++ b/perl/t/general/server.t
diff --git a/perl/t/object.t b/perl/t/object/base.t
index 0432a23..0432a23 100755
--- a/perl/t/object.t
+++ b/perl/t/object/base.t
diff --git a/perl/t/duo.t b/perl/t/object/duo.t
index 4229afe..4229afe 100755
--- a/perl/t/duo.t
+++ b/perl/t/object/duo.t
diff --git a/perl/t/file.t b/perl/t/object/file.t
index 0aecd9d..0aecd9d 100755
--- a/perl/t/file.t
+++ b/perl/t/object/file.t
diff --git a/perl/t/keytab.t b/perl/t/object/keytab.t
index 127762a..127762a 100755
--- a/perl/t/keytab.t
+++ b/perl/t/object/keytab.t
diff --git a/perl/t/wa-keyring.t b/perl/t/object/wa-keyring.t
index 8d8e1fe..8d8e1fe 100755
--- a/perl/t/wa-keyring.t
+++ b/perl/t/object/wa-keyring.t
diff --git a/perl/t/stanford-naming.t b/perl/t/policy/stanford.t
index 555086c..555086c 100755
--- a/perl/t/stanford-naming.t
+++ b/perl/t/policy/stanford.t
diff --git a/perl/t/kadmin.t b/perl/t/util/kadmin.t
index 8eabc6b..8eabc6b 100755
--- a/perl/t/kadmin.t
+++ b/perl/t/util/kadmin.t
diff --git a/perl/t/verifier.t b/perl/t/verifier/basic.t
index 5697ae6..5697ae6 100755
--- a/perl/t/verifier.t
+++ b/perl/t/verifier/basic.t
diff --git a/perl/t/verifier-ldap-attr.t b/perl/t/verifier/ldap-attr.t
index d8e416b..d8e416b 100755
--- a/perl/t/verifier-ldap-attr.t
+++ b/perl/t/verifier/ldap-attr.t
diff --git a/perl/t/verifier-netdb.t b/perl/t/verifier/netdb.t
index d8fe561..d8fe561 100755
--- a/perl/t/verifier-netdb.t
+++ b/perl/t/verifier/netdb.t
diff --git a/tests/client/full-t.in b/tests/client/full-t.in
index b73a375..9822b37 100644
--- a/tests/client/full-t.in
+++ b/tests/client/full-t.in
@@ -15,7 +15,7 @@ BEGIN { $ENV{WALLET_CONFIG} = "$ENV{SOURCE}/data/wallet.conf" }
BEGIN { our $total = 59 }
use Test::More tests => $total;
-use lib "$ENV{SOURCE}/../perl";
+use lib "$ENV{SOURCE}/../perl/lib";
use Wallet::Admin;
use lib "$ENV{SOURCE}/../perl/t/lib";
diff --git a/tests/client/prompt-t.in b/tests/client/prompt-t.in
index 566d1a4..8467411 100644
--- a/tests/client/prompt-t.in
+++ b/tests/client/prompt-t.in
@@ -3,7 +3,7 @@
# Password prompting tests for the wallet client.
#
# Written by Russ Allbery <eagle@eyrie.org>
-# Copyright 2008, 2010
+# Copyright 2008, 2010, 2014
# The Board of Trustees of the Leland Stanford Junior University
#
# See LICENSE for licensing terms.
@@ -11,7 +11,7 @@
BEGIN { our $total = 5 }
use Test::More tests => $total;
-use lib "$ENV{SOURCE}/..//perl";
+use lib "$ENV{SOURCE}/../perl/lib";
use Wallet::Admin;
use lib "$ENV{SOURCE}/../perl/t/lib";
diff --git a/tests/data/cmd-wrapper b/tests/data/cmd-wrapper
index 79b1943..b5b6d26 100755
--- a/tests/data/cmd-wrapper
+++ b/tests/data/cmd-wrapper
@@ -5,4 +5,4 @@
WALLET_CONFIG="$SOURCE/data/wallet.conf"
export WALLET_CONFIG
-exec perl -I"$SOURCE/../perl" "$SOURCE/../server/wallet-backend" -q "$@"
+exec perl -I"$SOURCE/../perl/lib" "$SOURCE/../server/wallet-backend" -q "$@"