File Coverage

blib/lib/X500/RDN.pm
Criterion Covered Total %
statement 38 38 100.0
branch 4 4 100.0
condition n/a
subroutine 11 11 100.0
pod 7 7 100.0
total 60 60 100.0


line stmt bran cond sub pod time code
1             # Copyright (c) 2002 Robert Joop
2             # All rights reserved.
3             # This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
4              
5             package X500::RDN;
6              
7 2     2   6882 use strict;
  2         4  
  2         75  
8 2     2   10 use Carp;
  2         4  
  2         1200  
9              
10             sub new
11             {
12 29     29 1 131053 my $class = shift;
13 29         85 my $self = { @_ };
14 29         87 bless $self, $class;
15 29         583 return $self;
16             }
17              
18             sub isMultivalued
19             {
20 10     10 1 93 my $self = shift;
21 10         24 return $self->getAttributeTypes() > 1;
22             }
23              
24             sub getAttributeTypes
25             {
26 13     13 1 33 my $self = shift;
27 13         178 return keys (%$self);
28             }
29              
30             sub getAttributeValue
31             {
32 20     20 1 48 my $self = shift;
33 20         29 my $type = shift;
34 20         103 return $self->{$type};
35             }
36              
37             # internal function: quote special AttributeValue characters
38             sub _RFC2253quoteAttributeValue
39             {
40 12     12   15 my $value = shift;
41 12         19 $value =~ s/([,;+"\\<>])/\\$1/g;
42 12         20 $value =~ s/( )$/\\$1/g; # space at end of string
43 12         48 $value =~ s/^([ #])/\\$1/g; # space at beginning of string
44 12         68 return $value;
45             }
46              
47             sub getRFC2253String
48             {
49 8     8 1 13 my $self = shift;
50 8         19 return join ('+', map { "$_=".&_RFC2253quoteAttributeValue ($self->{$_}); } keys (%$self));
  9         31  
51             }
52              
53             sub getX500String
54             {
55 2     2 1 40 my $self = shift;
56 2         4 my $s = join (', ', map { "$_=".&_RFC2253quoteAttributeValue ($self->{$_}) } keys (%$self));
  3         8  
57 2 100       4 $s = "($s)" if ($self->isMultivalued);
58 2         8 return $s;
59             }
60              
61             # internal function: quote special AttributeValue characters
62             sub _OpenSSLquoteAttributeValue
63             {
64 1     1   2 my $value = shift;
65 1         9 $value =~ s/([\\\/])/\\$1/g;
66 1         4 return $value;
67             }
68              
69             sub getOpenSSLString
70             {
71 2     2 1 3 my $self = shift;
72 2 100       6 croak "openssl syntax for multi-valued RDNs is unknown" if ($self->isMultivalued);
73 1         3 my $key = (keys (%$self))[0];
74 1         6 my $s = "$key=".&_OpenSSLquoteAttributeValue ($self->{$key});
75 1         6 return $s;
76             }
77              
78             1;