[Swan-dev] oid.c
D. Hugh Redelmeier
hugh at mimosa.com
Wed Apr 30 00:05:43 EEST 2014
| From: D. Hugh Redelmeier <hugh at mimosa.com>
| OID 89 is terminal but has no name
|
| I don't know what OID names are used for, but this is the only
| terminal that has no name. Odd.
|
| Should we see what look to see if StrongSwan has improved the table?
Yes, we should. OID 89's anomaly indicated a bug, fixed by
strongswan over 3 years ago.
<http://wiki.strongswan.org/projects/strongswan/repository/revisions/ba1ad6c430fbabc3dd24e5e9fc13926bae042110>
-------------- next part --------------
/*
* Check Libreswan's oid_names table
*
* compile: gcc -g -Iinclude -Wall check-oid.c
*
* DHR 2014 Apr 28
*/
#include <stdio.h>
#include <assert.h>
#include "lib/libswan/oid.c"
static const int max_oid = sizeof(oid_names) / sizeof(oid_names[0]);
static void check_subtable(int basement, int oid, int roof)
{
assert(oid <= roof);
while (oid != roof) {
const oid_t *o = &oid_names[oid];
/* next alternative (or end) */
int alt = o->next == 0 ? roof : o->next;
assert(oid < alt);
assert(alt <= roof);
assert(oid_names[alt-1].down == 0); /* must be terminal */
if (o->octet <= basement)
printf("OID %d octet code steps backward from 0x%2x to 0x%2x\n",
oid, basement, o->octet);
assert(o->down == 0 || o->down == 1); /* down is bool */
assert(o->next != 0 || o->down == 1 || oid + 1 == roof);
if (o->down) {
check_subtable(-1, oid + 1, alt);
} else {
/* terminal */
assert(oid + 1 == alt);
if (o->name[0] == '\0')
printf("OID %d is terminal but has no name\n", oid);
}
basement = o->octet;
oid = alt;
}
}
int main()
{
check_subtable(-1, 0, max_oid);
return 0;
}
More information about the Swan-dev
mailing list