From 52c1dfca0fbaa43013f7f39e09b66eb97f350367 Mon Sep 17 00:00:00 2001 From: lars Date: Tue, 18 Apr 2006 23:52:16 +0000 Subject: [PATCH] test.pl rewritten (now uses Test module) Makefile.PL completely rewritten documentation updated licence file added --- gpg-Ezmlm/trunk/COPYING | 340 +++++++++++++++++++++++++++ gpg-Ezmlm/trunk/Gpg.pm | 442 ++++++++++++++++-------------------- gpg-Ezmlm/trunk/MANIFEST | 1 + gpg-Ezmlm/trunk/META.yml | 10 - gpg-Ezmlm/trunk/Makefile.PL | 202 ++++++++-------- gpg-Ezmlm/trunk/TODO | 2 - gpg-Ezmlm/trunk/test.pl | 250 +++++--------------- 7 files changed, 685 insertions(+), 562 deletions(-) create mode 100644 gpg-Ezmlm/trunk/COPYING delete mode 100644 gpg-Ezmlm/trunk/META.yml delete mode 100644 gpg-Ezmlm/trunk/TODO diff --git a/gpg-Ezmlm/trunk/COPYING b/gpg-Ezmlm/trunk/COPYING new file mode 100644 index 0000000..b7b5f53 --- /dev/null +++ b/gpg-Ezmlm/trunk/COPYING @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/gpg-Ezmlm/trunk/Gpg.pm b/gpg-Ezmlm/trunk/Gpg.pm index 1325fa2..eaf6c62 100644 --- a/gpg-Ezmlm/trunk/Gpg.pm +++ b/gpg-Ezmlm/trunk/Gpg.pm @@ -22,7 +22,7 @@ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # # ========================================================================== -# POD is at the end of this file. Search for '=head' to find it + package Mail::Ezmlm::Gpg; use strict; @@ -40,14 +40,33 @@ require Exporter; @EXPORT = qw( ); -$VERSION = '0.01'; +$VERSION = '0.1'; require 5.005; +=head1 NAME + +Mail::Ezmlm::Gpg - Object Methods for encrypted Ezmlm Mailing Lists + +=head1 SYNOPSIS + + use Mail::Ezmlm::Gpg; + $list = new Mail::Ezmlm::Gpg(DIRNAME); + +The rest is a bit complicated for a Synopsis, see the description. + +=head1 DESCRIPTION + +Mail::Ezmlm::Gpg is a Perl module that is designed to provide an object +interface to encrypted mailing lists based upon gpg-ezmlm. +See the ezmlm web page (http://www.synacklabs.net/projects/crypt-ml/) for +a this software. + +=cut + # == Begin site dependant variables == -$GPG_EZMLM_BASE = '/usr/local/bin'; #Autoinserted by Makefile.PL -$GPG_BIN = '/usr/bin/gpg'; -# == End site dependant variables == +$GPG_EZMLM_BASE = '/usr/bin'; # Autoinserted by Makefile.PL +$GPG_BIN = '/usr/bin/gpg'; # Autoinserted by Makefile.PL # == check the ezmlm-make path == $GPG_EZMLM_BASE = '/usr/local/bin/ezmlm' @@ -64,6 +83,18 @@ $GPG_EZMLM_BASE = '/usr/bin' unless (-e "$GPG_EZMLM_BASE/gpg-ezmlm-manage.pl"); # == check the gpg path == +$GPG_BIN = '/usr/local/bin/gpg' + unless (-e "$GPG_BIN"); +$GPG_BIN = '/usr/bin/gpg' + unless (-e "$GPG_BIN"); +$GPG_BIN = '/bin/gpg' + unless (-e "$GPG_BIN"); +$GPG_BIN = '/usr/local/bin/gpg2' + unless (-e "$GPG_BIN"); +$GPG_BIN = '/usr/bin/gpg2' + unless (-e "$GPG_BIN"); +$GPG_BIN = '/bin/gpg2' + unless (-e "$GPG_BIN"); $GPG_BIN = '/usr/local/bin/gpg' unless (-e "$GPG_BIN"); $GPG_BIN = '/bin/gpg' @@ -82,7 +113,19 @@ local $ENV{'PATH'} = $GPG_EZMLM_BASE; "VerifiedKeyReq", "allowKeySubmission"); + # == Initialiser - Returns a reference to the object == + +=head2 Setting up a new Ezmlm::Gpg object: + + use Mail::Ezmlm::Gpg; + $list = new Mail::Ezmlm::Gpg('/home/user/lists/moolist'); + +new() returns the value of thislist() for success, undefined if there was a +problem. + +=cut + sub new { my($class, $list) = @_; my $self = {}; @@ -94,6 +137,16 @@ sub new { } # == convert an existing list to gpg-ezmlm == + +=head2 Converting a plaintext mailing list to an encrypted list: + +You have to create a normal list before you can convert it. +Use Mail::Ezmlm to do this. + + $list->convert_to_encrypted(); + +=cut + sub convert_to_encrypted { my($self) = @_; @@ -140,6 +193,13 @@ sub convert_to_encrypted { } # == convert an encrypted list back to plaintext == + +=head2 Converting an encryted mailing list to a plaintext list: + + $list->convert_to_plaintext(); + +=cut + sub convert_to_plaintext { my($self) = @_; @@ -186,6 +246,13 @@ sub convert_to_plaintext { } # == Update the current list == + +=head2 Updating the configuration of the current list: + + $list->update({ 'allowKeySubmission' => 1 }); + +=cut + sub update { my($self, %switches) = @_; my %ok_switches; @@ -272,6 +339,16 @@ sub update { # == Get a list of options for the current list == + +=head2 Getting the current configuration of the current list: + + $list->getconfig; + +getconfig() returns a hash including all available settings +(undefined settings are returned with their default value). + +=cut + sub getconfig { my($self) = @_; my(%options); @@ -316,6 +393,14 @@ sub getconfig { # == Return the directory of the current list == + +=head2 Determining which list we are currently altering: + + $whichlist = $list->thislist; + print $list->thislist; + +=cut + sub thislist { my($self) = shift; $self->_seterror(undef); @@ -324,6 +409,13 @@ sub thislist { # == Set the current mailing list == + +=head2 Changing which list the Mail::Ezmlm::Gpg object points at: + + $list->setlist('/home/user/lists/moolist'); + +=cut + sub setlist { my($self, $list) = @_; if ($list =~ m/^([\w\d\_\-\.\/]+)$/) { @@ -343,6 +435,15 @@ sub setlist { # == is the list encrypted? == + +=head2 Checking the state of a list: + +To determine, if a list is encrypted or not, call is_gpg(). + + $list->is_gpg(); + +=cut + sub is_gpg { my($self) = @_; ($self->_seterror(-1, 'must setlist() before is_gpg()') && return 0) unless(defined($self->{'LIST_NAME'})); @@ -356,6 +457,17 @@ sub is_gpg { # == retrieve file contents == + +=head2 Getting the content of file in a mailing list directory: + + @part = $list->getpart('headeradd'); + $part = $list->getpart('headeradd'); + +getpart() can be used to retrieve the contents of various text files such as +headeradd, headerremove, mimeremove, etc. + +=cut + sub getpart { my($self, $part) = @_; my(@contents, $content); @@ -378,6 +490,21 @@ sub getpart { # == export a key == + +=head2 Export a key: + +You may export public keys of the keyring of a list. + +The key can be identified by its id or other (unique) patterns (like the +gnupg program). + + $list->export_key($key_id); + $list->export_key($email_address); + +The return value is a string containing the ascii armored key data. + +=cut + sub export_key { my ($self, $keyid) = @_; my $gpg = $self->_get_gpg_object(); @@ -393,6 +520,17 @@ sub export_key { # == import a new key == + +=head2 Import a key: + +You can import public or secret keys into the keyring of the list. + +The key should be ascii armored. + + $list->import_key($ascii_armored_key_date); + +=cut + sub import_key { my ($self, $key) = @_; my $gpg = $self->_get_gpg_object(); @@ -405,6 +543,18 @@ sub import_key { # == delete a key == + +=head2 Delete a key: + +Remove a public key (and the matching secret key if it exists) from the keyring +of the list. + +The argument is the id of the key or any other unique pattern. + + $list->delete_key($keyid); + +=cut + sub delete_key { my ($self, $keyid) = @_; my $gpg = $self->_get_gpg_object(); @@ -421,6 +571,15 @@ sub delete_key { # == generate new private key == + +=head2 Generate a new key: + + $list->generate_key($name, $comment, $email_address, $keysize, $expire); + +Refer to the documentation of gnupg for the format of the arguments. + +=cut + sub generate_private_key { my ($self, $name, $comment, $email, $keysize, $expire) = @_; my $gpg = $self->_get_gpg_object(); @@ -440,6 +599,32 @@ sub generate_private_key { # == get_public_keys == + +=head2 Getting public keys: + +Return an array of key hashes each containing the following elements: + +=over + +=item * +name + +=item * +email + +=item * +id + +=item * +expires + +=back + + $list->get_public_keys(); + $list->get_secret_keys(); + +=cut + sub get_public_keys { my ($self) = @_; my @keys = $self->_get_keys("pub"); @@ -448,12 +633,14 @@ sub get_public_keys { # == get_private_keys == +# for POD see above (get_public_keys) sub get_secret_keys { my ($self) = @_; my @keys = $self->_get_keys("sec"); return @keys; } + # == internal function for creating a gpg object == sub _get_gpg_object() { my ($self) = @_; @@ -567,246 +754,6 @@ sub _checkaddress { 1; -__END__ - -=head1 NAME - -Ezmlm - Object Methods for Ezmlm Mailing Lists - -=head1 SYNOPSIS - - use Mail::Ezmlm; - $list = new Mail::Ezmlm; - -The rest is a bit complicated for a Synopsis, see the description. - -=head1 ABSTRACT - -Ezmlm is a Perl module that is designed to provide an object interface to -the ezmlm mailing list manager software. See the ezmlm web page -(http://www.ezmlm.org/) for a complete description of the software. - -This version of the module is designed to work with ezmlm version 0.53. -It is fully compatible with ezmlm's IDX extensions (version 0.4xx and 5.0 ). Both -of these can be obtained via anon ftp from ftp://ftp.ezmlm.org/pub/patches/ - -=head1 DESCRIPTION - -=head2 Setting up a new Ezmlm object: - - use Mail::Ezmlm; - $list = new Mail::Ezmlm; - $list = new Mail::Ezmlm('/home/user/lists/moolist'); - -=head2 Changing which list the Ezmlm object points at: - - - $list->setlist('/home/user/lists/moolist'); - -=head2 Getting a list of current subscribers: - -=item Two methods of listing subscribers is provided. The first prints a list -of subscribers, one per line, to the supplied FILEHANDLE. If no filehandle is -given, this defaults to STDOUT. An optional second argument specifies the -part of the list to display (mod, digest, allow, deny). If the part is -specified, then the FILEHANDLE must be specified. - - $list->list; - $list->list(\*STDERR); - $list->list(\*STDERR, 'deny'); - -=item The second method returns an array containing the subscribers. The -optional argument specifies which part of the list to display (mod, digest, -allow, deny). - - @subscribers = $list->subscribers; - @subscribers = $list->subscribers('allow'); - -=head2 Testing for subscription: - - $list->issub('nobody@on.web.za'); - $list->issub(@addresses); - $list->issub(@addresses, 'mod'); - -issub() returns 1 if all the addresses supplied are found as subscribers -of the current mailing list, otherwise it returns undefined. The optional -argument specifies which part of the list to check (mod, digest, allow, -deny). - -=head2 Subscribing to a list: - - $list->sub('nobody@on.web.za'); - $list->sub(@addresses); - $list->sub(@addresses, 'digest'); - -sub() takes a LIST of addresses and subscribes them to the current mailing list. -The optional argument specifies which part of the list to subscribe to (mod, -digest, allow, deny). - - -=head2 Unsubscribing from a list: - - $list->unsub('nobody@on.web.za'); - $list->unsub(@addresses); - $list->unsub(@addresses, 'mod'); - -unsub() takes a LIST of addresses and unsubscribes them (if they exist) from the -current mailing list. The optional argument specifies which part of the list -to unsubscribe from (mod, digest, allow, deny). - - -=head2 Creating a new list: - - $list->make(-dir=>'/home/user/list/moo', - -qmail=>'/home/user/.qmail-moo', - -name=>'user-moo', - -host=>'on.web.za', - -user=>'onwebza', - -switches=>'mPz'); - -make() creates the list as defined and sets it to the current list. There are -three variables which must be defined in order for this to occur; -dir, -qmail and -name. - -=over 6 - -=item -dir is the full path of the directory in which the mailing list is to -be created. - -=item -qmail is the full path and name of the .qmail file to create. - -=item -name is the local part of the mailing list address (eg if your list -was user-moo@on.web.za, -name is 'user-moo'). - -=item -host is the name of the host that this list is being created on. If -this item is omitted, make() will try to determine your hostname. If -host is -not the same as your hostname, then make() will attempt to fix DIR/inlocal for -a virtual host. - -=item -user is the name of the user who owns this list. This item only needs to -be defined for virtual domains. If it exists, it is prepended to -name in DIR/inlocal. -If it is not defined, the make() will attempt to work out what it should be from -the qmail control files. - -=item -switches is a list of command line switches to pass to ezmlm-make(1). -Note that the leading dash ('-') should be ommitted from the string. - -=back - -make() returns the value of thislist() for success, undefined if there was a -problem with the ezmlm-make system call and 0 if there was some other problem. - -See the ezmlm-make(1) man page for more details - -=head2 Determining which list we are currently altering: - - $whichlist = $list->thislist; - print $list->thislist; - -=head2 Getting the current configuration of the current list: - - $list->getconfig; - -getconfig() returns a string that contains the command line switches that -would be necessary to re-create the current list. It does this by reading the -DIR/config file (idx < v5.0) or DIR/flags (idx >= v5.0) if one of them exists. -If it can't find these files it attempts to work things out for itself (with -varying degrees of success). If both these methods fail, then getconfig() -returns undefined. - - $list->ismodpost; - $list->ismodsub; - $list->isremote; - $list->isdeny; - $list->isallow; - -The above five functions test various features of the list, and return a 1 -if the list has that feature, or a 0 if it doesn't. These functions are -considered DEPRECATED as their result is not reliable. Use "getconfig" instead. - -=head2 Updating the configuration of the current list: - - $list->update('msPd'); - -update() can be used to rebuild the current mailing list with new command line -options. These options can be supplied as a string argument to the procedure. -Note that you do not need to supply the '-' or the 'e' command line switch. - - @part = $list->getpart('headeradd'); - $part = $list->getpart('headeradd'); - -getpart() can be used to retrieve the contents of various text files such as -headeradd, headerremove, mimeremove, etc. - -=head2 Manage language dependent text files - - $list->get_available_text_files; - $list->get_text_content('sub-ok'); - $list->set_text_content('sub-ok', @content); - -These functions allow you to manipulate the text files, that are used for -automatic replies by ezmlm. - - $list->is_text_default('sub-ok'); - $list->reset_text('sub-ok'); - -These two functions are available if you are using ezmlm-idx v5.0 or higher. -is_text_default() checks, if there is a customized text file defined for this list. -reset_text() removes the customized text file from this list. Ezmlm-idx will use -system-wide default text file, if there is no customized text file for this list. - -=head2 Change the list's settings (for ezmlm-idx >= 5.0) - - Mail::Ezmlm->get_config_dir; - $list->get_config_dir; - $list->set_config_dir('/etc/ezmlm-local'); - -These function access the file 'conf-etc' in the mailing list's directory. The -static function always returns the default configuration directory of ezmlm-idx -(/etc/ezmlm). - - $list->get_available_languages; - $list->get_lang; - $list->set_lang('de'); - $list->get_charset; - $list->set_charset('iso-8859-1:Q'); - -These functions allow you to change the language of the text files, that are used -for automatic replies of ezmlm-idx (since v5.0 the configured language is stored -in 'conf-lang' within the mailing list's directory). Customized files (in the 'text' -directory of a mailing list directory) override the default language files. -Empty strings for set_lang() and set_charset() reset the setting to its default value. - -=head2 Get the installed version of ezmlm - - Mail::Ezmlm->get_version; - -The result is one of the following: - 0 - unknown - 3 - ezmlm 0.53 - 4 - ezmlm-idx 0.4xx - 5 - ezmlm-idx 5.x - -=head2 Creating MySQL tables: - - $list->createsql(); - -Currently only works for MySQL. - -createsql() will attempt to create the table specified in the SQL connect -options of the current mailing list. It will return an error if the current -mailing list was not configured to use SQL, or is Ezmlm was not compiled -with MySQL support. See the MySQL info pages for more information. - -=head2 Checking the Mail::Ezmlm and ezmlm version numbers - -The version number of the Mail::Ezmlm module is stored in the variable -$Mail::Ezmlm::VERSION. The compatibility of this version of Mail::Ezmlm -with your system installed version of ezmlm can be checked with - - $list->check_version(); - -This returns 0 for compatible, or the version string of ezmlm-make(2) if -the module is incompatible with your set up. =head1 RETURN VALUES @@ -837,7 +784,6 @@ that they know about nothing :) =head1 AUTHOR - Guy Antony Halse Lars Kruse =head1 BUGS @@ -852,8 +798,8 @@ that they know about nothing :) ezmlm(5), ezmlm-make(2), ezmlm-sub(1), ezmlm-unsub(1), ezmlm-list(1), ezmlm-issub(1) - http://rucus.ru.ac.za/~guy/ezmlm/ - https://systemausfall.org/toolforge/ezmlm-web + https://systemausfall.org/toolforge/ezmlm-web/ + http://www.synacklabs.net/projects/crypt-ml/ http://www.ezmlm.org/ http://www.qmail.org/ diff --git a/gpg-Ezmlm/trunk/MANIFEST b/gpg-Ezmlm/trunk/MANIFEST index e56386e..c12610a 100644 --- a/gpg-Ezmlm/trunk/MANIFEST +++ b/gpg-Ezmlm/trunk/MANIFEST @@ -4,4 +4,5 @@ MANIFEST README Makefile.PL test.pl +COPYING META.yml diff --git a/gpg-Ezmlm/trunk/META.yml b/gpg-Ezmlm/trunk/META.yml deleted file mode 100644 index 54e8589..0000000 --- a/gpg-Ezmlm/trunk/META.yml +++ /dev/null @@ -1,10 +0,0 @@ -# http://module-build.sourceforge.net/META-spec.html -#XXXXXXX This is a prototype!!! It will change in the future!!! XXXXX# -name: Ezmlm -version: 0.07.1 -version_from: Ezmlm.pm -installdirs: site -requires: - -distribution_type: module -generated_by: ExtUtils::MakeMaker version 6.17 diff --git a/gpg-Ezmlm/trunk/Makefile.PL b/gpg-Ezmlm/trunk/Makefile.PL index 965fce9..5b29e0a 100644 --- a/gpg-Ezmlm/trunk/Makefile.PL +++ b/gpg-Ezmlm/trunk/Makefile.PL @@ -1,131 +1,111 @@ -# $Id: Makefile.PL,v 1.3 2005/03/05 14:15:20 guy Exp $ +# $Id$ use ExtUtils::MakeMaker; # See lib/ExtUtils/MakeMaker.pm for details of how to influence # the contents of the Makefile that is written. WriteMakefile( - 'CONFIGURE' => \&set_paths, - 'NAME' => 'Mail::Ezmlm::Gpg', - 'VERSION_FROM' => 'Gpg.pm', # finds $VERSION - 'DISTNAME' => 'Ezmlm-Gpg', - 'dist' => { COMPRESS => 'gzip', SUFFIX => 'gz' }, - 'clean' => { FILES => 'gpg-ezmlmtmp' } + 'CONFIGURE' => \&set_paths, + 'NAME' => 'Mail::Ezmlm::Gpg', + 'VERSION_FROM' => 'Gpg.pm', # finds $VERSION + 'DISTNAME' => 'Mail-Ezmlm-Gpg', + 'PREREQ_PM' => { 'Mail::Ezmlm' => 0.05 }, + 'dist' => { COMPRESS => 'gzip', SUFFIX => 'gz' }, + 'clean' => { FILES => 'gpg-ezmlmtmp' } ); +use strict; + sub set_paths { - my($qmail_path, $ezmlm_path); + my ($gpg_path, $GPG_EZMLM_BASE); - # special case to handle the FreeBSD ports system - if ($ENV{BSD_BATCH_INSTALL}) { - print STDERR "\$BSD_BATCH_INSTALL is set in your environment, assuming port defaults\n"; - return {}; - } - - print << 'EOM'; - -We now need to know where some things live on your system. I'll try and make -some intelligent guesses - if I get it right, please just press enter at the -prompt. If I get them wrong, please type in the correct path for me and then -press enter. - -First I need to know where the Ezmlm binaries live (ie where I can find -ezmlm-make, ezmlm-sub, etc). - -EOM - - *prompt = \&ExtUtils::MakeMaker::prompt; - - # guess default - $ezmlm_path = '/usr/local/bin/ezmlm'; - $ezmlm_path = '/usr/local/bin/ezmlm-idx' unless (-e "$ezmlm_path/ezmlm-make"); - $ezmlm_path = '/usr/local/bin' unless (-e "$ezmlm_path/ezmlm-make"); - $ezmlm_path = '/usr/bin/ezmlm' unless (-e "$ezmlm_path/ezmlm-make"); - $ezmlm_path = '/usr/bin/ezmlm-idx' unless (-e "$ezmlm_path/ezmlm-make"); - $ezmlm_path = '/usr/bin' unless (-e "$ezmlm_path/ezmlm-make"); - # return to default, if nothing can be found - $ezmlm_path = '/usr/local/bin/ezmlm' unless (-e "$ezmlm_path/ezmlm-make"); - - foreach (1..10) { - $ezmlm_path = prompt('Ezmlm binary directory?', "$ezmlm_path"); - last if (-e "$ezmlm_path/ezmlm-make"); - print "I can't find $ezmlm_path/ezmlm-make. Please try again\n"; - } - unless (-e "$ezmlm_path/ezmlm-make") { - print STDERR "Warning: No correct input after $_ attempts. Continuing with warnings ...\n"; + # special case to handle the FreeBSD ports system + if ($ENV{BSD_BATCH_INSTALL}) { + print STDERR "\$BSD_BATCH_INSTALL is set in your environment, assuming port defaults\n"; + return {}; } - print << 'EOM'; + print "\nTo work correctly, I need to know, where your gnupg program is located.\n\n"; -Now I need to know where Qmail resides on your system. The Qmail base -directory is the one in which the Qmail bin, control, etc directories -live in. + *prompt = \&ExtUtils::MakeMaker::prompt; + + # guess default + $gpg_path = '/usr/local/bin/gpg' + unless (-e "$gpg_path"); + $gpg_path = '/usr/bin/gpg' + unless (-e "$gpg_path"); + $gpg_path = '/bin/gpg' + unless (-e "$gpg_path"); + $gpg_path = '/usr/local/bin/gpg2' + unless (-e "$gpg_path"); + $gpg_path = '/usr/bin/gpg2' + unless (-e "$gpg_path"); + $gpg_path = '/bin/gpg2' + unless (-e "$gpg_path"); + # return to default, if nothing can be found + $gpg_path = '/usr/bin/gpg' + unless (-e "$gpg_path"); + + foreach (1..10) { + $gpg_path = prompt('Location of your gnupg program?', "$gpg_path"); + last if (-e "$gpg_path"); + print "I can't find '$gpg_path'. Please try again\n"; + } + unless (-e "$gpg_path") { + $gpg_path = '/usr/bin'; + print STDERR "Warning: No correct input after 10 attempts. Using default ($gpg_path) ...\n"; + } + + + print "\n\nI also need to know, where to find your gpg-ezmlm binaries.\n\n"; + # guess the location of the gpg-ezmlm program files + $GPG_EZMLM_BASE = '/usr/local/bin/ezmlm' + unless (-e "$GPG_EZMLM_BASE/gpg-ezmlm-manage.pl"); + $GPG_EZMLM_BASE = '/usr/local/bin/ezmlm-idx' + unless (-e "$GPG_EZMLM_BASE/gpg-ezmlm-manage.pl"); + $GPG_EZMLM_BASE = '/usr/local/bin' + unless (-e "$GPG_EZMLM_BASE/gpg-ezmlm-manage.pl"); + $GPG_EZMLM_BASE = '/usr/bin/ezmlm' + unless (-e "$GPG_EZMLM_BASE/gpg-ezmlm-manage.pl"); + $GPG_EZMLM_BASE = '/usr/bin/ezmlm-idx' + unless (-e "$GPG_EZMLM_BASE/gpg-ezmlm-manage.pl"); + $GPG_EZMLM_BASE = '/usr/bin' + unless (-e "$GPG_EZMLM_BASE/gpg-ezmlm-manage.pl"); + + foreach (1..10) { + $GPG_EZMLM_BASE = prompt('Location of your gpg-ezmlm binaries?', "$GPG_EZMLM_BASE"); + last if (-e "$GPG_EZMLM_BASE/gpg-ezmlm-manage.pl"); + print "I can't find '$GPG_EZMLM_BASE/gpg-ezmlm-manage.pl'. Please try again\n"; + } + unless (-e "$GPG_EZMLM_BASE/gpg-ezmlm-manage.pl") { + $GPG_EZMLM_BASE = '/usr/bin'; + print STDERR "Warning: No correct input after 10 attempts. Using default ($GPG_EZMLM_BASE) ...\n"; + } + + + print << 'EOM'; + +Thank you. I will use this information to configure Mail::Ezmlm::Gpg for you EOM - foreach (1..10) { - $qmail_path = prompt('Qmail base directory?', '/var/qmail'); - last if (-e "$qmail_path/control"); - print "I can't find $qmail_path/control. Please try again\n"; - } - if (! -e "$qmail_path/control") { - print STDERR "Warning: No correct input after $_ attempts. Continuing with warnings ...\n"; - } + # Back up file + open(GPG, 'Gpg.pm.tmp.$$") or die "Unable to create temp file: $!"; + while() { print TMP; } + close TMP; close GPG; - if(`strings $ezmlm_path/ezmlm-sub | grep -i 'MySQL'`) { + # Do variable substitution + open(GPG, '>Gpg.pm') or die "Unable to open Gpg.pm for write: $!"; + open(TMP, ") { + s{^\$GPG_BIN\s*=\s*['"].+?['"]\s*;\s*(#.*|)$}{\$GPG_BIN = '$gpg_path'; # Autoinserted by Makefile.PL}; + s{^\$GPG_EZMLM_BASE\s*=\s*['"].+?['"]\s*;\s*(#.*|)$}{\$GPG_EZMLM_BASE = '$GPG_EZMLM_BASE'; # Autoinserted by Makefile.PL}; + print GPG; + } + close TMP; close GPG; - print << 'EOM'; + unlink "Gpg.pm.tmp.$$"; -It appears you have compiled MySQL support into your version of Ezmlm. If -this is correct, I now need to know where the MySQL client (mysql) lives on -your machine. - -Please leave this blank if you do not want to enable MySQL support in the -Mail::Ezmlm module. - -EOM - - $mysql_path = '/usr/bin'; - $mysql_path = '/usr/local/bin' unless (-e "$mysql_path/mysql"); - # return to default - if nothing works - $mysql_path = '/usr/bin' unless (-e "$mysql_path/mysql"); - - foreach (1..10) { - $mysql_path = prompt('MySQL binary directory?', "$mysql_path"); - last if (-e "$mysql_path/mysql" || $mysql_path eq ''); - print "I can't find $mysql_path/mysql. Please enter the full path\n"; - print "or leave this option blank if you don't want to use MySQL\n"; - } - unless ((-e "$mysql_path/mysql") || ($mysql_path eq '')) { - print STDERR "Warning: No correct input after $_ attempts. Continuing with warnings ...\n"; - } - - } - - print << 'EOM'; - -Thank you. I will use this information to configure Mail::Ezmlm for you - -EOM - - # Back up file - open(EZMLM, 'Ezmlm.pm.tmp.$$") or die "Unable to create temp file: $!"; - while() { print TMP; } - close TMP; close EZMLM; - - # Do variable substitution - open(EZMLM, '>Ezmlm.pm') or die "Unable to open Ezmlm.pm for write: $!"; - open(TMP, ") { - s{^\$EZMLM_BASE\s*=\s*['"].+?['"]\s*;\s*(#.*|)$}{\$EZMLM_BASE = '$ezmlm_path'; #Autoinserted by Makefile.PL}; - s{^\$QMAIL_BASE\s*=\s*['"].+?['"]\s*;\s*(#.*|)$}{\$QMAIL_BASE = '$qmail_path'; #Autoinserted by Makefile.PL}; - s{^\$MYSQL_BASE\s*=\s*['"].*?['"]\s*;\s*(#.*|)$}{\$MYSQL_BASE = '$mysql_path'; #Autoinserted by Makefile.PL}; - print EZMLM; - } - close TMP; close EZMLM; - - unlink "Ezmlm.pm.tmp.$$"; - - return {}; + return {}; } diff --git a/gpg-Ezmlm/trunk/TODO b/gpg-Ezmlm/trunk/TODO deleted file mode 100644 index 3945bcb..0000000 --- a/gpg-Ezmlm/trunk/TODO +++ /dev/null @@ -1,2 +0,0 @@ -all - diff --git a/gpg-Ezmlm/trunk/test.pl b/gpg-Ezmlm/trunk/test.pl index 4e0d4ee..cf0ebcf 100644 --- a/gpg-Ezmlm/trunk/test.pl +++ b/gpg-Ezmlm/trunk/test.pl @@ -3,232 +3,100 @@ # $Id: test.pl,v 1.5 2005/03/05 14:08:30 guy Exp $ # Test suite for Mail::Ezmlm # -# Copyright (C) 1999, Guy Antony Halse, All Rights Reserved. -# Please send bug reports and comments to guy-ezmlm@rucus.ru.ac.za +# Copyright (C) 02006, Lars Kruse, All Rights Reserved. +# Please send bug reports and comments to devel@sumpfralle.de # # This program is subject to the restrictions set out in the copyright -# agreement that can be found in the Ezmlm.pm file in this distribution +# agreement that can be found in the Gpg.pm file in this distribution # # ========================================================================== # Before `make install' is performed this script should be runnable with # `make test'. After `make install' it should work as `perl test.pl' -######################### We start with some black magic to print on failure. -$failed = 0; +use Test; +BEGIN { plan tests => 5 } + +print "Trying to load the Mail::Ezmlm module: "; +eval { require Mail::Ezmlm; return 1;}; +ok($@,''); +croak() if $@; # If Mail::Ezmlm didn't load... bail hard now + +print "Trying to load the Mail::Ezmlm::Gpg module: "; +eval { require Mail::Ezmlm::Gpg; return 1;}; +ok($@,''); +croak() if $@; # Mail::Ezmlm::Gpg is essential ... -BEGIN { $| = 1; print "1..9\n"; } -END {($failed++ && print "not ok 1\n") unless $loaded;} -use Mail::Ezmlm; -$loaded = 1; -print "Loading: ok 1\n"; ######################### End of black magic. -# Insert your test code below (better if it prints "ok 13" -# (correspondingly "not ok 13") depending on the success of chunk 13 -# of the test code): - use Cwd; -use File::Find; $list = new Mail::Ezmlm; # create a temp directory if necessary -$TMP = cwd() . '/ezmlmtmp'; +$TMP = cwd() . '/gpg-ezmlmtmp'; mkdir $TMP, 0755 unless (-d $TMP); -print 'Checking list creation: '; +print 'Checking list creation with Mail::Ezmlm: '; $test1 = $list->make(-name=>"ezmlm-test1-$$", -qmail=>"$TMP/.qmail-ezmlm-test1-$$", -dir=>"$TMP/ezmlm-test1-$$"); -if($test1 eq "$TMP/ezmlm-test1-$$") { - print "ok 2\n"; -} else { - print 'not ok 2 [', $list->errmsg(), "]\n"; - $failed++; -} -print 'Checking vhost list creation: '; -$test2 = $list->make(-name=>"ezmlm-test2-$$", - -qmail=>"$TMP/.qmail-ezmlm-test2-$$", - -dir=>"$TMP/ezmlm-test2-$$", - -host=>'on.web.za', - -user=>'onwebza'); -if($test2 eq "$TMP/ezmlm-test2-$$") { - open(INLOCAL, "<$TMP/ezmlm-test2-$$/inlocal"); - chomp($test2 = ); - close INLOCAL; - if($test2 eq "onwebza-ezmlm-test2-$$") { - print "ok 3\n"; - } else { - print 'not ok 3 [', $list->errmsg(), "]\n"; - $failed++; - } -} else { - print 'not ok 3 [', $list->errmsg(), "]\n"; - $failed++; -} +ok($test1 eq "$TMP/ezmlm-test1-$$"); -print 'Testing list update: '; -if($list->update('ms')) { - print "ok 4\n"; -} else { - print 'not ok 4 [', $list->errmsg(), "]\n"; - $failed++; -} +# backup the created to list to check clean conversion later +system("cp", "-a", $list->{'LIST_NAME'}, $list->{'LIST_NAME'} . ".backup"); -print 'Testing setlist() and thislist(): '; -$list->setlist("$TMP/ezmlm-test1-$$"); -if($list->thislist eq "$TMP/ezmlm-test1-$$") { - print "ok 5\n"; -} else { - print 'not ok 5 [', $list->errmsg(), "]\n"; - $failed++; -} -print 'Testing list subscription and subscription listing: '; -$list->sub('nobody@on.web.za'); -$list->sub('anonymous@on.web.za', 'test@on.web.za'); -@subscribers = $list->subscribers; -if($subscribers[1] =~ /nobody\@on.web.za/) { - print "ok 6\n"; -} else { - print 'not ok 6 [', $list->errmsg(), "]\n"; - $failed++; -} +print 'Testing list conversion from plaintext to encryption: '; +$gpg_list = new Mail::Ezmlm::Gpg($list->{'LIST_NAME'}); +ok($gpg_list->convert_to_encrypted() && $gpg_list->is_gpg()); -print 'Testing issub(): '; -if(defined($list->issub('nobody@on.web.za'))) { - if(defined($list->issub('some@non.existant.address'))) { - print 'not ok 7 [', $list->errmsg(), "]\n"; - $failed++; - } else { - print "ok 7\n"; - } -} else { - print 'not ok 7 [', $list->errmsg(), "]\n"; - $failed++; -} -print 'Testing list unsubscription: '; -$list->unsub('nobody@on.web.za'); -$list->unsub('anonymous@on.web.za', 'test@on.web.za'); -@subscribers = $list->subscribers; -unless(@subscribers) { - print "ok 8\n"; -} else { - print 'not ok 8 [', $list->errmsg(), "]\n"; - $failed++; -} +print 'Testing list conversion from encryption to plaintext: '; +ok($gpg_list->convert_to_plaintext() && !($gpg_list->is_gpg())); -print 'Testing installed version of ezmlm: '; -my($version) = $list->check_version(); -if ($version) { - $version =~ s/\n//; - print 'not ok 9 [Warning: Ezmlm.pm is designed to work with ezmlm-idx > 0.40. Your version reports as: ', $version, "]\n"; -} else { - print "ok 9\n"; -} -print 'Testing retrieving of text files: '; -if ($list->get_text_content('sub-ok') ne '') { - print "ok 10\n"; -} else { - print 'not ok 10 [', $list->errmsg(), "]\n"; - $failed++; -} +print 'Testing if back and forth conversion was clean: '; +ok(system("diff -qr --exclude=.gnupg --exclude=tmp --exclude=text '" . $list->{'LIST_NAME'} . "' '" . $list->{'LIST_NAME'} . '.backup' . "' 2>/dev/null") == 0); -print 'Testing changing of text files: '; -$list->set_text_content('sub-ok', "testing message\n"); -if ($list->get_text_content('sub-ok') eq "testing message\n") { - print "ok 11\n"; -} else { - print 'not ok 11 [', $list->errmsg(), "]\n"; - $failed++; -} -print 'Testing if text file is marked as customized (only idx >= 5.0): '; -if ($list->get_version() >= 5) { - if ($list->is_text_default('sub-ok')) { - print 'not ok 12 [', $list->errmsg(), "]\n"; - $failed++; - } else { - print "ok 12\n"; - } -} else { - print "ok 12 [skipped]\n"; -} +print 'Testing getconfig: '; +$gpg_list->convert_to_encrypted(); +ok($gpg_list->getconfig()); -print 'Testing resetting text files (only idx >= 5.0): '; -if ($list->get_version() >= 5) { - $list->reset_text('sub-ok'); - if ($list->is_text_default('sub-ok')) { - print "ok 13\n"; - } else { - print 'not ok 13 [', $list->errmsg(), "]\n"; - $failed++; - } -} else { - print "ok 13 [skipped]\n"; -} -print 'Testing retrieving available languages (only idx >= 5.0): '; -if ($list->get_version() >= 5) { - my @avail_langs = $list->get_available_languages(); - if ($#avail_langs > 0) { - print "ok 14\n"; - } else { - print 'not ok 14 [', $list->errmsg(), "]\n"; - $failed++; - } -} else { - print "ok 14 [skipped]\n"; +print 'Testing update: '; +# toggle a setting and check, if it works +$gpg_list->update((requireSigs => 1)); +my %list_config = $gpg_list->getconfig(); +my $update_failed = ($list_config{requireSigs} == 1)? 0 : 1; +unless ($update_failed) { + $gpg_list->update((requireSigs => 0)); + %list_config = $gpg_list->getconfig(); + $update_failed = ($list_config{requireSigs} == 0)? 0 : 1; } +ok(!$update_failed); -print 'Testing changing the configured language (only idx >= 5.0): '; -if ($list->get_version() >= 5) { - my @avail_langs = $list->get_available_languages(); - $list->set_lang($avail_langs[$#avail_langs-1]); - if ($list->get_lang() eq $avail_langs[$#avail_langs-1]) { - print "ok 15\n"; - } else { - print 'not ok 15 [', $list->errmsg(), "]\n"; - $failed++; - } -} else { - print "ok 15 [skipped]\n"; -} -print 'Testing getting the configuration directory (only idx >= 5.0): '; -if ($list->get_version() >= 5) { - if ($list->get_config_dir() ne '') { - print "ok 16\n"; - } else { - print 'not ok 16 [', $list->errmsg(), "]\n"; - $failed++; - } -} else { - print "ok 16 [skipped]\n"; -} +print 'Testing key generation: '; +ok($gpg_list->generate_private_key("Name", "Comment", "mail@addr.ess", 1024, 0)); -print 'Testing changing the configuration directory (only idx >= 5.0): '; -if ($list->get_version() >= 5) { - $list->set_config_dir('/etc/ezmlm-local'); - if ($list->get_config_dir() eq '/etc/ezmlm-local') { - print "ok 17\n"; - } else { - print 'not ok 17 [', $list->errmsg(), "]\n"; - $failed++; - } -} else { - print "ok 17 [skipped]\n"; -} -if($failed > 0) { - print "\n$failed tests were failed\n"; - exit $failed; -} else { - print "\nSuccessful :-)\n"; - finddepth(sub { (-d $File::Find::name) ? rmdir ($File::Find::name) : unlink ($File::Find::name) }, cwd() . "/ezmlmtmp"); - exit; -} +print 'Testing key retrieval: '; +my @pub_keys = $gpg_list->get_public_keys(); +my @sec_keys = $gpg_list->get_secret_keys(); +ok((@pub_keys == 1) && (@sec_keys == 1)); + + +print 'Testing key export: '; +my $keyid = $pub_keys[0]{id}; +ok($gpg_list->export_key($keyid)); + + +print 'Testing key deletion: '; +$gpg_list->delete_key($keyid); +@pub_keys = $gpg_list->get_public_keys(); +@sec_keys = $gpg_list->get_secret_keys(); +ok((@pub_keys == 0) && (@sec_keys == 0)); +