aboutsummaryrefslogtreecommitdiff
path: root/openssl/trunk/crypto/x509v3/v3_addr.c
diff options
context:
space:
mode:
authorRob Austein <sra@hactrn.net>2006-08-01 19:41:44 +0000
committerRob Austein <sra@hactrn.net>2006-08-01 19:41:44 +0000
commit0c4d5324c5f9cfa0fd3ab3784dd997b66eda9d9c (patch)
treed2e1f66961a4f350237c59ff8d24ac7824061e9f /openssl/trunk/crypto/x509v3/v3_addr.c
parent18d7eb493833e7a4e05defb92218d6f2d7cb2c14 (diff)
Cleanup
svn path=/openssl/trunk/crypto/x509v3/v3_addr.c; revision=129
Diffstat (limited to 'openssl/trunk/crypto/x509v3/v3_addr.c')
-rw-r--r--openssl/trunk/crypto/x509v3/v3_addr.c59
1 files changed, 32 insertions, 27 deletions
diff --git a/openssl/trunk/crypto/x509v3/v3_addr.c b/openssl/trunk/crypto/x509v3/v3_addr.c
index 270a5429..d87acffd 100644
--- a/openssl/trunk/crypto/x509v3/v3_addr.c
+++ b/openssl/trunk/crypto/x509v3/v3_addr.c
@@ -77,6 +77,30 @@ IMPLEMENT_ASN1_FUNCTIONS(IPAddressFamily)
#define ADDR_TXT_BUF_LEN 48
/*
+ * What's the address length associated with this AFI?
+ */
+static int length_from_afi(const unsigned afi)
+{
+ switch (afi) {
+ case IANA_AFI_IPV4:
+ return 4;
+ case IANA_AFI_IPV6:
+ return 16;
+ default:
+ return 0;
+ }
+}
+
+/*
+ * Extract the AFI from an IPAddressFamily.
+ */
+static unsigned afi_from_addressfamily(const IPAddressFamily *f)
+{
+ return ((f->addressFamily->data[0] << 8) |
+ (f->addressFamily->data[1]));
+}
+
+/*
* Expand the bitstring form of an address into a raw byte array.
* At the moment this is coded for simplicity, not speed.
*/
@@ -181,8 +205,7 @@ static int i2r_IPAddrBlocks(X509V3_EXT_METHOD *method,
int i;
for (i = 0; i < sk_IPAddressFamily_num(addr); i++) {
IPAddressFamily *f = sk_IPAddressFamily_value(addr, i);
- const unsigned afi = ((f->addressFamily->data[0] << 8) |
- (f->addressFamily->data[1]));
+ const unsigned afi = afi_from_addressfamily(f);
switch (afi) {
case IANA_AFI_IPV4:
BIO_printf(out, "%*sIPv4", indent, "");
@@ -563,21 +586,6 @@ static int addr_add_prefix(IPAddrBlocks *addr,
}
/*
- * I'm getting tired of typing this.
- */
-static int addr_length_from_afi(const unsigned afi)
-{
- switch (afi) {
- case IANA_AFI_IPV4:
- return 4;
- case IANA_AFI_IPV6:
- return 16;
- default:
- return 0;
- }
-}
-
-/*
* Add a range.
*/
static int addr_add_range(IPAddrBlocks *addr,
@@ -588,7 +596,7 @@ static int addr_add_range(IPAddrBlocks *addr,
{
IPAddressOrRanges *aors = make_prefix_or_range(addr, afi, safi);
IPAddressOrRange *aor;
- int length = addr_length_from_afi(afi);
+ int length = length_from_afi(afi);
if (aors == NULL)
return 0;
if (!make_addressRange(&aor, min, max, length))
@@ -605,7 +613,7 @@ static int addr_add_range(IPAddrBlocks *addr,
static int IPAddressOrRanges_canonize(IPAddressOrRanges *aors,
const unsigned afi)
{
- int i, j, length = addr_length_from_afi(afi);
+ int i, j, length = length_from_afi(afi);
/*
* Sort the IPAddressOrRanges sequence.
@@ -861,8 +869,7 @@ static void *v2i_IPAddrBlocks(struct v3_ext_method *method,
*/
for (i = 0; i < sk_IPAddressFamily_num(addr); i++) {
IPAddressFamily *f = sk_IPAddressFamily_value(addr, i);
- unsigned afi = ((f->addressFamily->data[0] << 8) |
- (f->addressFamily->data[1]));
+ unsigned afi = afi_from_addressfamily(f);
if (f->ipAddressChoice->type == IPAddressChoice_addressesOrRanges &&
!IPAddressOrRanges_canonize(f->ipAddressChoice->u.addressesOrRanges,
afi))
@@ -1028,18 +1035,16 @@ int v3_addr_validate_path(X509_STORE_CTX *ctx)
*/
for (j = 0; j < sk_IPAddressFamily_num(child); j++) {
IPAddressFamily *fc = sk_IPAddressFamily_value(child, j);
- unsigned afi = ((fc->addressFamily->data[0] << 8) |
- (fc->addressFamily->data[1]));
- int length = addr_length_from_afi(afi);
+
int k = sk_IPAddressFamily_find(parent, fc);
if (k < 0)
validation_err(X509_V_ERR_UNNESTED_RESOURCE);
if (k >= 0 &&
fc->ipAddressChoice->type == IPAddressChoice_addressesOrRanges) {
IPAddressFamily *fp = sk_IPAddressFamily_value(parent, k);
- IPAddressOrRanges *aor_p = fp->ipAddressChoice->u.addressesOrRanges;
- IPAddressOrRanges *aor_c = fc->ipAddressChoice->u.addressesOrRanges;
- if (!addr_contains(aor_p, aor_c, length))
+ if (!addr_contains(fp->ipAddressChoice->u.addressesOrRanges,
+ fc->ipAddressChoice->u.addressesOrRanges,
+ length_from_afi(afi_from_addressfamily(fc))))
validation_err(X509_V_ERR_UNNESTED_RESOURCE);
IPAddressFamily_free(fp);
sk_IPAddressFamily_set(parent, k, fc);