提交 4b2799c1 编写于 作者: R Richard Levitte

util/mkerr.pl: allow module names prefixed with OSSL_ or OPENSSL_

To make sure that our symbols don't clash with other libraries, we
claim the namespaces OSSL and OPENSSL.  Because C doesn't provide
namespaces, the only solution is to have them as prefixes on symbols,
thus we allow OSSL_ and OPENSSL_ as prefixes.

These namespace prefixes are optional for the foreseeable future, and
will only be used for new modules as needed on a case by case basis,
until further notice.

For extra safety, there's an added requirement that module names -
apart from the namespace prefix - be at least 2 characters long.
Reviewed-by: NRich Salz <rsalz@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/3781)
上级 4b8515ba
......@@ -9,6 +9,17 @@
Changes between 1.1.0f and 1.1.1 [xx XXX xxxx]
*) Module names can prefixed with OSSL_ or OPENSSL_. This affects
util/mkerr.pl, which is adapted to allow those prefixes, leading to
error code calls like this:
OSSL_FOOerr(OSSL_FOO_F_SOMETHING, OSSL_FOO_R_WHATEVER);
With this change, we claim the namespaces OSSL and OPENSSL in a manner
that can be encoded in C. For the foreseeable future, this will only
affect new modules.
[Richard Levitte and Tim Hudson]
*) Removed BSD cryptodev engine.
[Rich Salz]
......
......@@ -7,7 +7,7 @@
Major changes between OpenSSL 1.1.0f and OpenSSL 1.1.1 [under development]
o
o Claim the namespaces OSSL and OPENSSL, represented as symbol prefixes
Major changes between OpenSSL 1.1.0e and OpenSSL 1.1.0f [25 May 2017]
......
......@@ -198,14 +198,14 @@ if ( ! $reindex && $statefile ) {
die "Bad line in $statefile:\n$_\n";
}
my $lib = $name;
$lib =~ s/_.*//;
$lib =~ s/^((?:OSSL_|OPENSSL_)?[^_]{2,}).*$/$1/;
$lib = "SSL" if $lib =~ /TLS/;
if ( !defined $errorfile{$lib} ) {
print "Skipping $_";
$skippedstate++;
next;
}
if ( $name =~ /^[A-Z0-9]+_R_/ ) {
if ( $name =~ /^(?:OSSL_|OPENSSL_)?[A-Z0-9]{2,}_R_/ ) {
die "$lib reason code $code collision at $name\n"
if $rassigned{$lib} =~ /:$code:/;
$rassigned{$lib} .= "$code:";
......@@ -213,7 +213,7 @@ if ( ! $reindex && $statefile ) {
$rmax{$lib} = $code if $code > $rmax{$lib};
}
$rcodes{$name} = $code;
} elsif ( $name =~ /^[A-Z0-9]+_F_/ ) {
} elsif ( $name =~ /^(?:OSSL_|OPENSSL_)?[A-Z0-9]{2,}_F_/ ) {
die "$lib function code $code collision at $name\n"
if $fassigned{$lib} =~ /:$code:/;
$fassigned{$lib} .= "$code:";
......@@ -378,7 +378,7 @@ foreach my $file ( @source ) {
$func = $1;
}
if ( /(([A-Z0-9]+)_F_([A-Z0-9_]+))/ ) {
if ( /(((?:OSSL_|OPENSSL_)?[A-Z0-9]{2,})_F_([A-Z0-9_]+))/ ) {
next unless exists $errorfile{$2};
next if $1 eq "BIO_F_BUFFER_CTX";
$usedfuncs{$1} = 1;
......@@ -395,7 +395,7 @@ foreach my $file ( @source ) {
print STDERR " Function $1 = $fcodes{$1}\n"
if $debug;
}
if ( /(([A-Z0-9]+)_R_[A-Z0-9_]+)/ ) {
if ( /(((?:OSSL_|OPENSSL_)?[A-Z0-9]{2,})_R_[A-Z0-9_]+)/ ) {
next unless exists $errorfile{$2};
$usedreasons{$1} = 1;
if ( !exists $rcodes{$1} ) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册