3 # Copyright (c) 2010 Kungliga Tekniska Högskolan
4 # (Royal Institute of Technology, Stockholm, Sweden).
7 # Redistribution and use in source and binary forms, with or without
8 # modification, are permitted provided that the following conditions
11 # 1. Redistributions of source code must retain the above copyright
12 # notice, this list of conditions and the following disclaimer.
14 # 2. Redistributions in binary form must reproduce the above copyright
15 # notice, this list of conditions and the following disclaimer in the
16 # documentation and/or other materials provided with the distribution.
18 # 3. Neither the name of the Institute nor the names of its contributors
19 # may be used to endorse or promote products derived from this software
20 # without specific prior written permission.
22 # THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
23 # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
24 # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
25 # ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
26 # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
27 # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
28 # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
29 # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30 # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
31 # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
41 Getopts
('b:h') || die "foo";
47 $header = 1 if ($opt_h);
49 printf "/* Generated file */\n";
51 printf "#ifndef GSSAPI_GSSAPI_OID\n";
52 printf "#define GSSAPI_GSSAPI_OID 1\n\n";
54 printf "#include \"mech_locl.h\"\n\n";
69 } elsif (/^oid\s+([\w\.]+)\s+(\w+)\s+([\w\.]+)/) {
70 my ($base, $name, $oid) = ($1, $2, $3);
72 next if (defined $onlybase and $onlybase ne $base);
74 my $store = "__" . lc($name) . "_oid_desc";
78 my @array = split(/\./, $oid);
88 my $p = int($num % 128);
89 $data = sprintf("\\x%02x", $p) . $data;
91 $num = int($num / 128);
96 $p = int($num % 128) + 128;
97 $num = int($num / 128);
98 $data = sprintf("\\x%02x", $p) . $data;
103 $num = int($array[0] * 40 + $array[1]);
105 $data = sprintf("\\x%x", $num) . $data;
109 printf "extern GSSAPI_LIB_VARIABLE gss_OID_desc $store;\n";
110 printf "#define $name (&$store)\n\n";
112 printf "/* $name - $oid */\n";
113 printf "gss_OID_desc GSSAPI_LIB_VARIABLE $store = { $length, rk_UNCONST(\"$data\") };\n\n";
115 } elsif (/^desc\s+([\w]+)\s+(\w+)\s+(\"[^\"]*\")\s+(\"[^\"]*\")/) {
116 my ($type, $oid, $short, $long) = ($1, $2, $3, $4);
117 my $object = { type
=> $type, oid
=> $oid, short
=> $short, long
=> $long };
119 $tables{$oid} = \
$object;
125 foreach my $k (keys %types) {
127 print "struct _gss_oid_name_table _gss_ont_" . $k . "[] = {\n";
128 foreach my $m (values %tables) {
129 if ($$m->{type
} eq $k) {
130 printf " { %s, \"%s\", %s, %s },\n", $$m->{oid
}, $$m->{oid
}, $$m->{short
}, $$m->{long
};
133 printf " { NULL }\n";
140 printf "#endif /* GSSAPI_GSSAPI_OID */\n";