Ticket #39362: patch-smime_keys.diff

File patch-smime_keys.diff, 2.2 KB (added by wjb+macport@…, 11 years ago)
  • smime_keys.pl

    a b  
    8080# OPS
    8181#
    8282
     83sub get_certs {
     84    my $file = shift;
     85    return undef unless (defined($file) && -e $file);
     86
     87    open IN, "<$file";
     88
     89    my @certs = ();
     90    my $in_cert = 0;
     91    my $cert = q{};
     92    while ( <IN> ) {
     93        $in_cert = 1 if ( /^-----BEGIN CERTIFICATE-----$/ );
     94        $cert .= $_;
     95
     96        if ( /^-----END CERTIFICATE-----$/ )  {
     97            push @certs, $cert;
     98            $cert = q{};
     99            $in_cert = 0;
     100        }
     101    }
     102
     103    return @certs;
     104}
     105
    83106if(@ARGV == 1 and $ARGV[0] eq "init") {
    84107    init_paths;
    85108}
     
    90113    change_label($ARGV[1]);
    91114}
    92115elsif(@ARGV == 2 and $ARGV[0] eq "add_cert") {
    93     my $format = -B $ARGV[1] ? 'DER' : 'PEM';
    94     my $cmd = "$opensslbin x509 -noout -hash -in $ARGV[1] -inform $format";
     116    foreach my $cert ( get_certs( $ARGV[1] ) ) {
     117
     118        my $file = sprintf( '/tmp/smime-%d.%d', $$, int(rand( 999999 ) ) );
     119        print STDERR "TMPFILE: $file\n";
     120        if ( -e $file ) {
     121            die( "ERROR: TMPFILE $file existss?!?!" );
     122        }
     123        open OUT, ">$file";
     124        print OUT $cert;
     125        close OUT;
     126
     127        my $format = -B $file ? 'DER' : 'PEM';
     128        my $cmd = "$opensslbin x509 -noout -hash -in $file -inform $format";
    95129    my $cert_hash = `$cmd`;
    96130    $? and die "'$cmd' returned $?";
    97131    chomp($cert_hash);
    98132    my $label = query_label;
    99     &add_certificate($ARGV[1], \$cert_hash, 1, $label, '?');
     133        &add_certificate($file, \$cert_hash, 1, $label, '?');
     134        unlink $file;
     135    }
    100136}
    101137elsif(@ARGV == 2 and $ARGV[0] eq "add_pem") {
    102138    -e $ARGV[1] and -s $ARGV[1] or die("$ARGV[1] is nonexistent or empty.");
     
    380416    print "the key ID. This has to be _one_ word (no whitespaces).\n\n";
    381417
    382418    print "Enter label: ";
    383     chomp($input = <STDIN>);
     419    $input = <STDIN>;
     420    chomp($input) if ( defined($input) );
    384421
    385     my ($label, $junk) = split(/\s/, $input, 2);     
     422    my ($label, $junk) = split(/\s/, $input, 2) if ( defined($input) );
    386423   
    387424    defined $junk
    388425        and print "\nUsing '$label' as label; ignoring '$junk'\n";