X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=blobdiff_plain;f=FS%2FFS%2Fsvc_cert.pm;h=88e4199e8e18472750b25e73de7b2ea77c39c917;hp=36e7582a664fd4c09c95048777534faa5e5e96de;hb=20f03d52cc6c930f610c0b4466eeeeda54fdbb40;hpb=874ad675da1321638b374d0b574231d7fa577196 diff --git a/FS/FS/svc_cert.pm b/FS/FS/svc_cert.pm index 36e7582a6..88e4199e8 100644 --- a/FS/FS/svc_cert.pm +++ b/FS/FS/svc_cert.pm @@ -303,9 +303,30 @@ sub generate_csr { $self->csr($csr); } -#sub check_csr { -# my $self = shift; -#} +sub check_csr { + my $self = shift; + + my $in = $self->csr; + + run( [qw( openssl req -subject -noout ), ], + '<'=>\$in, + '>pipe'=>\*OUT, '2>'=>'/dev/null' + ) + ;#or die "error running openssl: $!"; + + #subject=/CN=cn.example.com/ST=AK/O=Tofuy/OU=Soybean dept./C=US/L=Tofutown + my $line = ; + $line =~ /^subject=\/(.*)$/ or return (); + my $subj = $1; + + map { if ( /^\s*(\w+)=\s*(.*)\s*$/ ) { + ($1=>$2); + } else { + (); + } + } + split('/', $subj); +} sub generate_selfsigned { my $self = shift; @@ -324,8 +345,8 @@ sub generate_selfsigned { ) or die "error running openssl: $!"; #XXX error checking - my $csr = join('', ); - $self->certificate($csr); + my $certificate = join('', ); + $self->certificate($certificate); } #openssl x509 -in cert -noout -subject -issuer -dates -serial @@ -335,10 +356,13 @@ sub generate_selfsigned { #notAfter=Nov 6 05:07:42 2012 GMT #serial=B1DBF1A799EF207B -sub check_certificate { - my $self = shift; +sub check_certificate { shift->check_x509('certificate'); } +sub check_cacert { shift->check_x509('cacert'); } + +sub check_x509 { + my( $self, $field ) = ( shift, shift ); - my $in = $self->certificate; + my $in = $self->$field; run( [qw( openssl x509 -noout -subject -issuer -dates -serial )], '<'=>\$in, '>pipe'=>\*OUT, '2>'=>'/dev/null' @@ -357,7 +381,7 @@ sub check_certificate { $hash{$f} = { map { if ( /^\s*(\w+)=\s*(.*)\s*$/ ) { ($1=>$2); } else { - (''=>''); + (); } } split('/', $hash{$f})