From 7c87e9956212e10070c94f02caf0d9998e4cc433 Mon Sep 17 00:00:00 2001 From: Marius Gavrilescu Date: Sun, 11 Aug 2013 16:08:42 +0300 Subject: [PATCH] Add the aap-passwd utility and the AAP_ROOTDIR environment variable --- Changes | 9 +++- MANIFEST | 1 + Makefile.PL | 2 + README | 3 +- aap-passwd | 85 ++++++++++++++++++++++++++++++++ lib/Apache2/Authen/Passphrase.pm | 24 ++++++++- t/Apache2-Authen-Passphrase.t | 3 +- 7 files changed, 120 insertions(+), 7 deletions(-) create mode 100644 aap-passwd diff --git a/Changes b/Changes index f93cd70..383c9c9 100644 --- a/Changes +++ b/Changes @@ -1,6 +1,11 @@ Revision history for Perl extension Apache2::Authen::Passphrase. +0.002 Sun 11 Aug 16:05:32 EEST 2013 + - Add the aap-passwd utility + - Talk about the rootdir in the documentation + - Support setting the rootdir via an evironment variable +0.001001 Sun 4 Aug 20:10:24 EEST 2013 + - Fix the broken previous release + 0.001 Sun 4 Aug 19:47:54 EEST 2013 - Initial Release -0.001001 Sun 4 Aug 20:10:24 EEST 2013 - - Fix the broken previous release \ No newline at end of file diff --git a/MANIFEST b/MANIFEST index 757c281..fe6f207 100644 --- a/MANIFEST +++ b/MANIFEST @@ -2,5 +2,6 @@ Changes Makefile.PL MANIFEST README +aap-passwd t/Apache2-Authen-Passphrase.t lib/Apache2/Authen/Passphrase.pm diff --git a/Makefile.PL b/Makefile.PL index bb06469..3ac11e8 100644 --- a/Makefile.PL +++ b/Makefile.PL @@ -7,12 +7,14 @@ WriteMakefile( AUTHOR => 'Marius Gavrilescu ', MIN_PERL_VERSION => '5.14.0', LICENSE => 'perl', + EXE_FILES => [ 'aap-passwd' ], PREREQ_PM => { Apache2::RequestRec => 0, Apache2::Access => 0, Apache2::Const => 0, Authen::Passphrase => 0, Authen::Passphrase::BlowfishCrypt => 0, + IO::Prompter => 0, YAML::Any => 0, }, ); diff --git a/README b/README index 26e3bf9..286257e 100644 --- a/README +++ b/README @@ -1,4 +1,4 @@ -Apache2-Authen-Passphrase version 0.001001 +Apache2-Authen-Passphrase version 0.002 ========================================== Apache2::Authen::Passphrase is a perl module which provides easy-to-use Apache2 authentication. It exports some utility functions and it contains a PerlAuthenHandler. @@ -21,6 +21,7 @@ This module requires these other modules and libraries: * mod_perl2 * Authen::Passphrase * YAML::Any +* IO::Prompter COPYRIGHT AND LICENCE diff --git a/aap-passwd b/aap-passwd new file mode 100644 index 0000000..68dee6b --- /dev/null +++ b/aap-passwd @@ -0,0 +1,85 @@ +#!/usr/bin/perl -wT +use v5.14; +use strict; + +use Apache2::Authen::Passphrase qw/pwset USER_REGEX/; + +use IO::Prompter [qw/-e* -stdio/]; + +die "Usage: aap-passwd [rootdir] username\n" unless $#ARGV >= 0 && $#ARGV <= 1; +($Apache2::Authen::Passphrase::rootdir) = (shift =~ /(.*)/) if $#ARGV == 1; + +my $username = shift; +die "Invalid username" unless $username =~ USER_REGEX; +($username) = ($username =~ /(.*)/); + +my $passwd = prompt 'Enter new Apache2::Authen::Passphrase password: '; +my $confirm = prompt 'Retype new Apache2::Authen::Passphrase password: '; + +die "Sorry, passwords do not match\n" unless $passwd eq $confirm; +pwset $username, $passwd; +say "Password updated successfully"; + +__END__ + +=head1 NAME + +aap-passwd - passwd utility for Apache2::Authen::Passphrase + +=head1 SYNOPSIS + + user@hostname:~$ aap-passwd /path/to/rootdir marius + Enter new Apache2::Authen::Passphrase password: *** + Retype new Apache2::Authen::Passphrase password: *** + Password updated successfully + +=head1 DESCRIPTION + +aap-passwd updates the password of an Apache2::Authen::Passphrase user. + +It is used like this: + + aap-passwd /path/to/rootdir username + +where the C is the first argument and the username whose password is to be changed is the second argument, or like this: + + aap-passwd username + +where the C is taken from the environment and the username is the only argument. + +=head1 ENVIRONMENT + +=over + +=item AAP_ROOTDIR + +The default Apache2::Authen::Passphrase C, used if the C is not explicitly given. + +=back + +=head1 AUTHOR + +Marius Gavrilescu C<< >> + +=head1 COPYRIGHT AND LICENSE + +Copyright 2013 Marius Gavrilescu + +This file is part of fonbotd. + +fonbotd is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +fonbotd is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Affero General Public License for more details. + +You should have received a copy of the GNU Affero General Public License +along with fonbotd. If not, see + + +=cut + diff --git a/lib/Apache2/Authen/Passphrase.pm b/lib/Apache2/Authen/Passphrase.pm index 4beea0e..bea2bca 100644 --- a/lib/Apache2/Authen/Passphrase.pm +++ b/lib/Apache2/Authen/Passphrase.pm @@ -1,4 +1,6 @@ -package Apache2::Authen::Passphrase 0.001001; +package Apache2::Authen::Passphrase; + +our $VERSION = 0.002; use 5.014000; use strict; @@ -23,7 +25,7 @@ our @EXPORT_OK = qw/pwset pwcheck pwhash USER_REGEX PASSPHRASE_VERSION INVALID_U ################################################## -our $rootdir; +our $rootdir //= $ENV{AAP_ROOTDIR}; sub pwhash{ my ($pass)=@_; @@ -103,6 +105,14 @@ Apache2::Authen::Passphrase - basic authentication with Authen::Passphrase Apache2::Authen::Passphrase is a perl module which provides easy-to-use Apache2 authentication. It exports some utility functions and it contains a PerlAuthenHandler. +The password hashes are stored in YAML files in an directory (called the C), one file per user. + +Set the C like this: + + $Apache2::Authen::Passphrase::rootdir = '/path/to/rootdir'; + +or by setting the C enviroment variable to the desired value. + =head1 FUNCTIONS =over @@ -149,6 +159,16 @@ Uses C with a cost factor of 10 =back +=head1 ENVIRONMENT + +=over + +=item AAP_ROOTDIR + +If the C is not explicitly set, it is taken from this environment variable. + +=back + =head1 AUTHOR Marius Gavrilescu, Emarius@ieval.roE diff --git a/t/Apache2-Authen-Passphrase.t b/t/Apache2-Authen-Passphrase.t index 0ebf90d..7b54518 100644 --- a/t/Apache2-Authen-Passphrase.t +++ b/t/Apache2-Authen-Passphrase.t @@ -4,10 +4,9 @@ use warnings; use File::Temp qw/tempdir/; use Test::More tests => 7; +BEGIN { $ENV{AAP_ROOTDIR} = tempdir CLEANUP => 1 } BEGIN { use_ok('Apache2::Authen::Passphrase', qw/pwset pwcheck/) }; -$Apache2::Authen::Passphrase::rootdir = tempdir CLEANUP => 1; - sub pw_ok { my ($user, $pass, $testname) = @_; eval { pwcheck $user, $pass }; -- 2.39.2