1#!/usr/bin/perl 2# 3# Copyright (c) 2010 Kungliga Tekniska Högskolan 4# (Royal Institute of Technology, Stockholm, Sweden). 5# All rights reserved. 6# 7# Redistribution and use in source and binary forms, with or without 8# modification, are permitted provided that the following conditions 9# are met: 10# 11# 1. Redistributions of source code must retain the above copyright 12# notice, this list of conditions and the following disclaimer. 13# 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. 17# 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. 21# 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 32# SUCH DAMAGE. 33 34require 'getopts.pl'; 35 36my $output; 37my $CFILE, $HFILE; 38my $onlybase; 39my $header = 0; 40my $export_file = 0; 41 42Getopts('b:he') || die "foo"; 43 44if($opt_b) { 45 $onlybase = $opt_b; 46} 47 48$export_file = 1 if ($opt_e); 49$header = 1 if ($opt_h); 50 51printf "/* Generated file */\n"; 52if ($header) { 53 printf "#ifndef GSSAPI_GSSAPI_OID\n"; 54 printf "#define GSSAPI_GSSAPI_OID 1\n\n"; 55} else { 56 printf "#include \"mech_locl.h\"\n\n"; 57} 58 59my %tables; 60my %types; 61 62while(<>) { 63 64 if (/^\w*#(.*)/) { 65 my $comment = $1; 66 67 if ($header) { 68 printf("$comment\n"); 69 } 70 71 } elsif (/^oid\s+([\w\.]+)\s+(\w+)\s+([\w\.]+)/) { 72 my ($base, $name, $oid) = ($1, $2, $3); 73 74 next if (defined $onlybase and $onlybase ne $base); 75 76 my $store = "__" . lc($name) . "_oid_desc"; 77 78 # encode oid 79 80 my @array = split(/\./, $oid); 81 my $length = 0; 82 my $data = ""; 83 84 my $num; 85 86 $n = $#array; 87 while ($n > 1) { 88 $num = $array[$n]; 89 90 my $p = int($num % 128); 91 $data = sprintf("\\x%02x", $p) . $data; 92 93 $num = int($num / 128); 94 95 $length += 1; 96 97 while ($num > 0) { 98 $p = int($num % 128) + 128; 99 $num = int($num / 128); 100 $data = sprintf("\\x%02x", $p) . $data; 101 $length += 1; 102 } 103 $n--; 104 } 105 $num = int($array[0] * 40 + $array[1]); 106 107 $data = sprintf("\\x%x", $num) . $data; 108 $length += 1; 109 110 if ($export_file) { 111 printf "&$store\n"; 112 } elsif ($header) { 113 printf "extern GSSAPI_LIB_VARIABLE gss_OID_desc $store;\n"; 114 printf "#define $name (&$store)\n\n"; 115 } else { 116 printf "/* $name - $oid */\n"; 117 printf "gss_OID_desc GSSAPI_LIB_VARIABLE $store = { $length, rk_UNCONST(\"$data\") };\n\n"; 118 } 119 } elsif (/^desc\s+([\w]+)\s+(\w+)\s+(\"[^\"]*\")\s+(\"[^\"]*\")/) { 120 my ($type, $oid, $short, $long) = ($1, $2, $3, $4); 121 my $object = { type=> $type, oid => $oid, short => $short, long => $long }; 122 123 $tables{$oid} = \$object; 124 $types{$type} = 1; 125 } 126 127} 128 129foreach my $k (keys %types) { 130 if (!$header && !$export_file) { 131 print "struct _gss_oid_name_table _gss_ont_" . $k . "[] = {\n"; 132 foreach my $m (values %tables) { 133 if ($$m->{type} eq $k) { 134 printf " { %s, \"%s\", %s, %s },\n", $$m->{oid}, $$m->{oid}, $$m->{short}, $$m->{long}; 135 } 136 } 137 printf " { NULL }\n"; 138 printf "};\n\n"; 139 140 } 141} 142 143if ($header) { 144 printf "#endif /* GSSAPI_GSSAPI_OID */\n"; 145} 146