~ubuntu-branches/ubuntu/utopic/openssl/utopic

« back to all changes in this revision

Viewing changes to .pc/perl-path.diff/util/mkstack.pl

  • Committer: Bazaar Package Importer
  • Author(s): Kurt Roeckx
  • Date: 2011-04-02 13:19:19 UTC
  • mfrom: (1.2.1 upstream) (11.2.2 experimental)
  • mto: This revision was merged to the branch mainline in revision 55.
  • Revision ID: james.westby@ubuntu.com-20110402131919-anszuslper64ey9e
Tags: 1.0.0d-1
* New upstream version
  - Fixes CVE-2011-0014
* Make libssl-doc Replaces/Breaks with old libssl-dev packages
  (Closes: #607609)
* Only export the symbols we should, instead of all.
* Add symbol file.
* Upload to unstable

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
#!/usr/local/bin/perl -w
2
 
 
3
 
# This is a utility that searches out "DECLARE_STACK_OF()"
4
 
# declarations in .h and .c files, and updates/creates/replaces
5
 
# the corresponding macro declarations in crypto/stack/safestack.h.
6
 
# As it's not generally possible to have macros that generate macros,
7
 
# we need to control this from the "outside", here in this script.
8
 
#
9
 
# Geoff Thorpe, June, 2000 (with massive Perl-hacking
10
 
#                           help from Steve Robb)
11
 
 
12
 
my $safestack = "crypto/stack/safestack";
13
 
 
14
 
my $do_write;
15
 
while (@ARGV) {
16
 
        my $arg = $ARGV[0];
17
 
        if($arg eq "-write") {
18
 
                $do_write = 1;
19
 
        }
20
 
        shift @ARGV;
21
 
}
22
 
 
23
 
 
24
 
@source = (<crypto/*.[ch]>, <crypto/*/*.[ch]>, <ssl/*.[ch]>);
25
 
foreach $file (@source) {
26
 
        next if -l $file;
27
 
 
28
 
        # Open the .c/.h file for reading
29
 
        open(IN, "< $file") || die "Can't open $file for reading: $!";
30
 
 
31
 
        while(<IN>) {
32
 
                if (/^DECLARE_STACK_OF\(([^)]+)\)/) {
33
 
                        push @stacklst, $1;
34
 
                } if (/^DECLARE_ASN1_SET_OF\(([^)]+)\)/) {
35
 
                        push @asn1setlst, $1;
36
 
                } if (/^DECLARE_PKCS12_STACK_OF\(([^)]+)\)/) {
37
 
                        push @p12stklst, $1;
38
 
                }
39
 
        }
40
 
        close(IN);
41
 
}
42
 
 
43
 
 
44
 
 
45
 
my $old_stackfile = "";
46
 
my $new_stackfile = "";
47
 
my $inside_block = 0;
48
 
my $type_thing;
49
 
 
50
 
open(IN, "< $safestack.h") || die "Can't open input file: $!";
51
 
while(<IN>) {
52
 
        $old_stackfile .= $_;
53
 
 
54
 
        if (m|^/\* This block of defines is updated by util/mkstack.pl, please do not touch! \*/|) {
55
 
                $inside_block = 1;
56
 
        }
57
 
        if (m|^/\* End of util/mkstack.pl block, you may now edit :-\) \*/|) {
58
 
                $inside_block = 0;
59
 
        } elsif ($inside_block == 0) {
60
 
                $new_stackfile .= $_;
61
 
        }
62
 
        next if($inside_block != 1);
63
 
        $new_stackfile .= "/* This block of defines is updated by util/mkstack.pl, please do not touch! */";
64
 
                
65
 
        foreach $type_thing (sort @stacklst) {
66
 
                $new_stackfile .= <<EOF;
67
 
 
68
 
#define sk_${type_thing}_new(st) SKM_sk_new($type_thing, (st))
69
 
#define sk_${type_thing}_new_null() SKM_sk_new_null($type_thing)
70
 
#define sk_${type_thing}_free(st) SKM_sk_free($type_thing, (st))
71
 
#define sk_${type_thing}_num(st) SKM_sk_num($type_thing, (st))
72
 
#define sk_${type_thing}_value(st, i) SKM_sk_value($type_thing, (st), (i))
73
 
#define sk_${type_thing}_set(st, i, val) SKM_sk_set($type_thing, (st), (i), (val))
74
 
#define sk_${type_thing}_zero(st) SKM_sk_zero($type_thing, (st))
75
 
#define sk_${type_thing}_push(st, val) SKM_sk_push($type_thing, (st), (val))
76
 
#define sk_${type_thing}_unshift(st, val) SKM_sk_unshift($type_thing, (st), (val))
77
 
#define sk_${type_thing}_find(st, val) SKM_sk_find($type_thing, (st), (val))
78
 
#define sk_${type_thing}_find_ex(st, val) SKM_sk_find_ex($type_thing, (st), (val))
79
 
#define sk_${type_thing}_delete(st, i) SKM_sk_delete($type_thing, (st), (i))
80
 
#define sk_${type_thing}_delete_ptr(st, ptr) SKM_sk_delete_ptr($type_thing, (st), (ptr))
81
 
#define sk_${type_thing}_insert(st, val, i) SKM_sk_insert($type_thing, (st), (val), (i))
82
 
#define sk_${type_thing}_set_cmp_func(st, cmp) SKM_sk_set_cmp_func($type_thing, (st), (cmp))
83
 
#define sk_${type_thing}_dup(st) SKM_sk_dup($type_thing, st)
84
 
#define sk_${type_thing}_pop_free(st, free_func) SKM_sk_pop_free($type_thing, (st), (free_func))
85
 
#define sk_${type_thing}_shift(st) SKM_sk_shift($type_thing, (st))
86
 
#define sk_${type_thing}_pop(st) SKM_sk_pop($type_thing, (st))
87
 
#define sk_${type_thing}_sort(st) SKM_sk_sort($type_thing, (st))
88
 
#define sk_${type_thing}_is_sorted(st) SKM_sk_is_sorted($type_thing, (st))
89
 
EOF
90
 
        }
91
 
        foreach $type_thing (sort @asn1setlst) {
92
 
                $new_stackfile .= <<EOF;
93
 
 
94
 
#define d2i_ASN1_SET_OF_${type_thing}(st, pp, length, d2i_func, free_func, ex_tag, ex_class) \\
95
 
        SKM_ASN1_SET_OF_d2i($type_thing, (st), (pp), (length), (d2i_func), (free_func), (ex_tag), (ex_class)) 
96
 
#define i2d_ASN1_SET_OF_${type_thing}(st, pp, i2d_func, ex_tag, ex_class, is_set) \\
97
 
        SKM_ASN1_SET_OF_i2d($type_thing, (st), (pp), (i2d_func), (ex_tag), (ex_class), (is_set))
98
 
#define ASN1_seq_pack_${type_thing}(st, i2d_func, buf, len) \\
99
 
        SKM_ASN1_seq_pack($type_thing, (st), (i2d_func), (buf), (len))
100
 
#define ASN1_seq_unpack_${type_thing}(buf, len, d2i_func, free_func) \\
101
 
        SKM_ASN1_seq_unpack($type_thing, (buf), (len), (d2i_func), (free_func))
102
 
EOF
103
 
        }
104
 
        foreach $type_thing (sort @p12stklst) {
105
 
                $new_stackfile .= <<EOF;
106
 
 
107
 
#define PKCS12_decrypt_d2i_${type_thing}(algor, d2i_func, free_func, pass, passlen, oct, seq) \\
108
 
        SKM_PKCS12_decrypt_d2i($type_thing, (algor), (d2i_func), (free_func), (pass), (passlen), (oct), (seq))
109
 
EOF
110
 
        }
111
 
        $new_stackfile .= "/* End of util/mkstack.pl block, you may now edit :-) */\n";
112
 
        $inside_block = 2;
113
 
}
114
 
 
115
 
 
116
 
if ($new_stackfile eq $old_stackfile) {
117
 
        print "No changes to $safestack.h.\n";
118
 
        exit 0; # avoid unnecessary rebuild
119
 
}
120
 
 
121
 
if ($do_write) {
122
 
        print "Writing new $safestack.h.\n";
123
 
        open OUT, ">$safestack.h" || die "Can't open output file";
124
 
        print OUT $new_stackfile;
125
 
        close OUT;
126
 
}