Hi Claus, try to change your CRL.pm module with the attached one and let me know, put it into:
/usr/local/lib/openca/perl_modules/perl5/OpenCA/CRL.pm Cheers, Max On 03/15/2010 04:24 AM, clau...@bayern-mail.de wrote:
Hi Massimiliano, thanks for your answer and patch. Unfortunatly it didn't solve my problem. Now i get the error on the update process! Error Code: 700 The compilation of the command cmdUpgradeDB failed. Can't locate object method "setHeaderAttribute" via package "OpenCA::CRL" at /usr/local/lib/openca/perl_modules/perl5/OpenCA/CRL.pm line 453.
-- Best Regards, Massimiliano Pala --o------------------------------------------------------------------------ Massimiliano Pala [OpenCA Project Manager] ope...@acm.org project.mana...@openca.org Dartmouth Computer Science Dept Home Phone: +1 (603) 369-9332 PKI/Trust Laboratory Work Phone: +1 (603) 646-8734 --o------------------------------------------------------------------------ People who think they know everything are a great annoyance to those of us who do. -- Isaac Asimov
## OpenCA::CRL ## ## Copyright (C) 1998-1999 Massimiliano Pala (madw...@openca.org) ## All rights reserved. ## ## This library is free for commercial and non-commercial use as long as ## the following conditions are aheared to. The following conditions ## apply to all code found in this distribution, be it the RC4, RSA, ## lhash, DES, etc., code; not just the SSL code. The documentation ## included with this distribution is covered by the same copyright terms ## ## // Copyright remains Massimiliano Pala's, and as such any Copyright notices ## in the code are not to be removed. ## If this package is used in a product, Massimiliano Pala should be given ## attribution as the author of the parts of the library used. ## This can be in the form of a textual message at program startup or ## in documentation (online or textual) provided with the package. ## ## Redistribution and use in source and binary forms, with or without ## modification, are permitted provided that the following conditions ## are met: ## 1. Redistributions of source code must retain the copyright ## notice, this list of conditions and the following disclaimer. ## 2. Redistributions in binary form must reproduce the above copyright ## notice, this list of conditions and the following disclaimer in the ## documentation and/or other materials provided with the distribution. ## 3. All advertising materials mentioning features or use of this software ## must display the following acknowledgement: ## // "This product includes OpenCA software written by Massimiliano Pala ## // (madw...@openca.org) and the OpenCA Group (www.openca.org)" ## 4. If you include any Windows specific code (or a derivative thereof) from ## some directory (application code) you must include an acknowledgement: ## "This product includes OpenCA software (www.openca.org)" ## ## THIS SOFTWARE IS PROVIDED BY OPENCA DEVELOPERS ``AS IS'' AND ## ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE ## IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ## ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE ## FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL ## DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS ## OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ## HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT ## LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY ## OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF ## SUCH DAMAGE. ## ## The licence and distribution terms for any publically available version or ## derivative of this code cannot be changed. i.e. this code cannot simply be ## copied and put under another distribution licence ## [including the GNU Public Licence.] ## ## // the module's errorcode is 76 ## ## functions: ## ## new 11 ## init 12 ## parseCRL 13 ## getHeader 21 ## getBody 22 ## getTXT 31 ## getParsed 41 ## getPEM 32 ## getDER 33 ## getItem 51 ## getSerial 52 ## setParams 61 use strict; package OpenCA::CRL; our ($errno, $errval); ($OpenCA::CRL::VERSION = '$Revision: 1.6 $' )=~ s/(?:^.*: (\d+))|(?:\s+\$$)/defined $1?"0\.9":""/eg; my %params = ( crl => undef, item => undef, pwd => undef, crlFormat => undef, pemCRL => undef, derCRL => undef, txtCRL => undef, parsedItem => undef, backend => undef, beginHeader => undef, endHeader => undef ); sub setError { my $self = shift; if (scalar (@_) == 4) { my $keys = { @_ }; $errval = $keys->{ERRVAL}; $errno = $keys->{ERRNO}; } else { $errno = $_[0]; $errval = $_[1]; } ## support for: return $self->setError (1234, "Something fails.") if (not $xyz); return undef; } sub new { my $that = shift; my $class = ref($that) || $that; my $self = { %params, }; bless $self, $class; my $keys = { @_ }; $self->{crl} = $keys->{DATA}; $self->{pwd} = $keys->{PASSWD}; $self->{crlFormat} = ( $keys->{FORMAT} or $keys->{INFORM} or "PEM"); $self->{backend} = $keys->{SHELL}; $self->{gettext} = $keys->{GETTEXT}; $self->{gettext} = \&$self->gettext if( not $self->{gettext} ); return $self->setError (7611011, $self->{gettext} ("OpenCA::CRL->new: There is no crypto-backend specified.")) if( not $self->{backend} ); my $infile = $keys->{INFILE}; my $cakey = $keys->{CAKEY}; my $cacert = $keys->{CACERT}; my $days = $keys->{DAYS}; my $hours = $keys->{HOURS}; my $exts = $keys->{EXTS}; $self->{beginHeader} = "-----BEGIN HEADER-----"; $self->{endHeader} = "-----END HEADER-----"; if (defined($infile) and ($infile ne "") ) { my $tmpLine; open( FD, "<$infile" ) or return $self->setError (7611021, $self->{gettext} ("OpenCA::CRL->new: Cannot open infile __FILENAME__ for reading.", "__FILENAME__", $infile)); while( $tmpLine = <FD> ) { $self->{crl} .= $tmpLine; } close(FD); } if (not $self->{crl}) { # the can be stored directly in the token ({backend}) # #if( ($cacert) or ($cakey) ) { # return $self->setError (7611031, "OpenCA::CRL->new: You must specify the CA-certificate too ". # "if you want to issue a CRL.") # if (not $cacert); # return $self->setError (7611032, "OpenCA::CRL->new: You must specify the CA's private key too ". # "if you want to issue a CRL.") # if (not $cakey); $self->{crl} = $self->{backend}->issueCrl( CAKEY => $cakey, USE_ENGINE => 1, CACERT => $cacert, OUTFORM => $self->{crlFormat}, DAYS => $days, HOURS => $hours, PASSWD => $self->{pwd}, EXTS => $exts, NOUNIQUEDN => $keys->{NOUNIQUEDN} ); return $self->setError (7611035, $self->{gettext} ("OpenCA::CRL->new: Failed to issue a new CRL (__ERRNO__). __ERRVAL__", "__ERRNO__", $OpenCA::OpenSSL::errno, "__ERRVAL__", $OpenCA::OpenSSL::errval)) if ( not $self->{crl} ); } if ( $self->{crl} ne "" ) { $self->{item} = $self->{crl}; $self->{crl} = $self->getBody( ITEM=>$self->{item} ); if ( not $self->init()) { return $self->setError (7611041, $self->{gettext} ("OpenCA::CRL->new: Failed to issue a new CRL (__ERRNO__). __ERRVAL__", "__ERRNO__", $errno, "__ERRVAL__", $errval)); } } return $self; } sub init { my $self = shift; my $keys = { @_ }; return $self->setError (7612011, $self->{gettext} ("OpenCA::CRL->init: There is no CRL present.")) if (not $self->{crl}); $self->{pemCRL} = ""; $self->{derCRL} = ""; $self->{txtCRL} = ""; $self->{parsedItem} = $self->parseCRL(); return $self->setError (7612021, $self->{gettext} ("OpenCA::CRL->init: Cannot parse CRL (__ERRNO__). __ERRVAL__", "__ERRNO__", $errno, "__ERRVAL__", $errval)) if (not $self->{parsedItem}); return 1; } sub parseCRL { my $self = shift; my $keys = { @_ }; my ( $version, $issuer, $last, $next, $alg, $tmp); my @list; my @certs; my ( $head, $body ); my @attList = ( "VERSION", "ISSUER", "NEXTUPDATE", "LASTUPDATE", "SIGNATURE_ALGORITHM", "REVOKED", "SERIAL" ); my $hret = $self->{backend}->getCRLAttribute( ATTRIBUTE_LIST => \...@attlist, DATA => $self->{crl}, INFORM => $self->{crlFormat}); if (not $hret) { return $self->setError (7613015, $self->{gettext} ("OpenCA::CRL->parseCRL: Cryptobackend fails (__ERRNO__). __ERRVAL__", "__ERRNO__", $OpenCA::OpenSSL::errno, "__ERRVAL__", $OpenCA::OpenSSL::errval)); } ## Parse lines ... @certs = split ( /\n/i, $hret->{REVOKED} ); for (my $i=0; $i<scalar @certs; $i++) { my $serial = "" . $certs[$i++]; my $date = $certs[$i]; my $ext = ""; while ($certs[$i+1] =~ /^ /) { $ext .= $certs[++$i]."\n"; } print STDERR "CRL::Found Entry -> $serial ($i)\n"; my $entry = { SERIAL => $serial, DATE => $date }; @list = ( @list, $entry ); } my $ret = { VERSION => $hret->{VERSION}, ALGORITHM => $hret->{SIGNATURE_ALGORITHM}, ISSUER => $hret->{ISSUER}, LAST_UPDATE => $hret->{LASTUPDATE}, NEXT_UPDATE => $hret->{NEXTUPDATE}, SERIAL => $hret->{SERIAL}, BODY => $self->getBody( ITEM=> $self->{item} ), ITEM => $self->getBody( ITEM=> $self->{item} ), HEADER => $self->getHeader ( ITEM=>$self->{item} ), LIST => [ @list ], FLAG_EXPORT_STATE => 0 }; return $ret; } sub getHeader { my $self = shift; my $keys = { @_ }; my $req = $keys->{ITEM}; my ( $txt, $ret, $i, $key, $val ); my $beginHeader = $self->{beginHeader}; my $endHeader = $self->{endHeader}; if( ($txt) = ( $req =~ /$beginHeader\n([\S\s\n]+)\n$endHeader/m) ) { foreach $i ( split ( /\n/, $txt ) ) { $i =~ s/\s*=\s*/=/; ( $key, $val ) = ( $i =~ /(.*)\s*=\s*(.*)\s*/ ); $ret->{$key} = $val; } } return $ret; } sub getBody { my $self = shift; my $keys = { @_ }; my $ret = $keys->{ITEM}; my $beginHeader = $self->{beginHeader}; my $endHeader = $self->{endHeader}; ## Let us throw away text between the two headers, included $ret =~ s/($beginHeader[\S\s\n]+$endHeader\n)//; return $ret; } sub getParsed { my $self = shift; return $self->setError (7641011, $self->{gettext} ("OpenCA::CRL->getParsed: The CRL was not parsed.")) if ( not $self->{parsedItem} ); return $self->{parsedItem}; } sub getPEM { my $self = shift; if ( $self->{crlFormat} eq 'PEM' ) { $self->{crl} =~ s/^\n*//; $self->{crl} =~ s/\n*$/\n/; return $self->{crl}; } if (not $self->{pemCRL}) { $self->{pemCRL} = $self->{backend}->dataConvert( DATA=>$self->{crl}, DATATYPE=>"CRL", INFORM=>$self->{crlFormat}, OUTFORM=>"PEM" ); return $self->setError (7632011, $self->{gettext} ("OpenCA::CRL->init: Cannot convert CRL to PEM-format (__ERRNO__). __ERRVAL__", "__ERRNO__", $OpenCA::OpenSSL::errno, "__ERRVAL__", $OpenCA::OpenSSL::errval)) if (not $self->{pemCRL}); } return $self->{pemCRL}; } sub getDER { my $self = shift; if ( $self->{crlFormat} eq 'DER' ) { return $self->{crl}; } if (not $self->{derCRL}) { $self->{derCRL} = $self->{backend}->dataConvert( DATA=>$self->{crl}, DATATYPE=>"CRL", INFORM=>$self->{crlFormat}, OUTFORM=>"DER" ); return $self->setError (7633011, $self->{gettext} ("OpenCA::CRL->getDER: Cannot convert CRL to DER-format (__ERRNO__). __ERRVAL__", "__ERRNO__", $OpenCA::OpenSSL::errno, "__ERRVAL__", $OpenCA::OpenSSL::errval)) if (not $self->{derCRL}); } return $self->{derCRL}; } sub getTXT { my $self = shift; if (not $self->{txtCRL}) { $self->{txtCRL} = $self->{backend}->dataConvert( DATA=>$self->{crl}, DATATYPE=>"CRL", INFORM=>$self->{crlFormat}, OUTFORM=>"TXT" ); return $self->setError (7631011, $self->{gettext} ("OpenCA::CRL->getTXT: Cannot convert CRL to TXT-format (__ERRNO__). __ERRVAL__", "__ERRNO__", $OpenCA::OpenSSL::errno, "__ERRVAL__", $OpenCA::OpenSSL::errval)) if (not $self->{txtCRL}); } return $self->{txtCRL}; } sub getItem { my $self = shift; my $txtItem; $txtItem = $self->{beginHeader}."\n"; $txtItem .= $self->getHeader (); $txtItem .= $self->{endHeader}."\n"; $txtItem .= $self->getPEM (); return $txtItem; } sub getSerial { my $self = shift; # return the serial if one is present return "".$self->getParsed()->{SERIAL} if ($self->getParsed()->{SERIAL} >= 0); # new numbering by timestamp return "".$self->{backend}->getNumericDate ( $self->getParsed()->{LAST_UPDATE} ); # old numbering by digest # return $self->{backend}->getDigest ( DATA => $self->getPEM() ); } sub setParams { my $self = shift; my $params = { @_ }; my $key; foreach $key ( keys %{$params} ) { ## we should place the parameters here } return 1; } sub getStatus { my $self = shift; return $self->{STATUS}; } sub setStatus { my $self = shift; my $status = shift; my $status_update = undef; my $now = gmtime; ## Handles special fields like SUSPENDED_AFTER, REVOKED_AFTER, etc. $status =~ s/\_.*//; if (($self->{STATUS} ne $status) and ($status !~ /VALID/)) { $status_update = $status . "_AFTER"; if( $self->getParsed()->{HEADER}->{$status_update} eq "" ) { $self->setHeaderAttribute ( $status_update => $now ); } } $self->{DATATYPE} = $self->{STATUS} . "_CRL"; $self->{STATUS} = $status; return $self->getStatus(); } sub setHeaderAttribute { my $self = shift; my $keys = { @_ }; my $beginHeader = $self->{beginHeader}; my $endHeader = $self->{endHeader}; my $beginAttribute = $self->{beginAttribute}; my $endAttribute = $self->{endAttribute}; ## check format to be PEM return $self->setError (7651011, $self->{gettext} ("OpenCA::CRL->setHeaderAttribute: The request is not in PEM-format.")) if ($self->{reqFormat} !~ /^PEM|CRR|SPKAC$/i); print $self->{gettext} ("CRL->setHeaderAttribute: correct format - PEM")."<br>\n" if ($self->{DEBUG}); ## check for header if ($self->{item} !~ /$beginHeader/) { ## create header $self->{item} = $beginHeader."\n".$endHeader."\n".$self->{item}; } for my $attribute (keys %{$keys}) { # print STDERR "REQ->setHeaderAttribute: $attribute:=". # $keys->{$attribute}."<br>\n"; next if ( not $attribute ); ## insert into item ## find last position in header ## enter attributename ## check fo multirow if ($keys->{$attribute} =~ /\n/) { ## multirow $self->{item} =~ s/${endHeader}/${attribute}=\n${beginAttribute}\n$keys->{$attribute}\n${endAttribute}\n${endHeader}/; } else { # print STDERR "REQ::setHeaderAttribute::Setting $attribute = " . # $keys->{$attribute} . "\n" if ( $self->{DEBUG} ); ## Delete old attribute if ( $self->getParsed()->{HEADER}->{$attribute} ) { $self->{item} =~ s/($attribute[^\n]+\n)//; } ## single row $self->{item} =~ s/${endHeader}/${attribute} = $keys->{$attribute}\n${endHeader}/; # print STDERR "REQ::NEW HEADER\n".$self->{item}."\n"; } } ## if you call init then all information is lost !!! return $self->setError (7651021, $self->{gettext} ("OpenCA::CRL->setHeaderAttribute: Cannot re-initialize the request (__ERRNO__). __ERRVAL__", "__ERRNO__", $errno, "__ERRVAL__", $errval)) if (not $self->init ( REQ => $self->{item}, FORMAT => $self->{reqFormat})); return 1; } ## very simple dummy sub gettext { return $_[0]; } # Below is the stub of documentation for your module. You better edit it! 1;
smime.p7s
Description: S/MIME Cryptographic Signature
------------------------------------------------------------------------------ Download Intel® Parallel Studio Eval Try the new software tools for yourself. Speed compiling, find bugs proactively, and fine-tune applications for parallel performance. See why Intel Parallel Studio got high marks during beta. http://p.sf.net/sfu/intel-sw-dev
_______________________________________________ Openca-Users mailing list Openca-Users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/openca-users