#!/usr/bin/perl -w

# Copyright 2003 Brian Candler

use strict;

# Script to convert FreeRADIUS dictionary to OpenRADIUS dictionary
# (likely to need manual tweaking afterwards)

my %vtmap = (
	'integer'	=> 'Integer',
	'ipaddr'	=> 'IPAddr',
	'abinary'	=> 'String',
);

my $defvendor="";
my $defitem="";

print <<END;
# Converted from FreeRADIUS dictionary file
#
END

while(<>) {
	chomp;
	my @F = split;
	if (!defined $F[0]) {
		print "\n";
		next;
	}
	elsif ($F[0] eq 'ATTRIBUTE') {
		$F[4] = "None" unless $F[4];
		$F[4] = ucfirst(lc($F[4]));
		if ($F[4] ne $defvendor) {
			$defvendor = $F[4];
			if($defvendor ne 'None') {
				print <<END;

\$set default vendor=$defvendor

\$set default space=RAD-VSA-STD
             len_ofs=1 len_size=1 len_adj=0
             val_ofs=2 val_size=-2 val_type=String 
             nodec=0 noenc=0

END
			} else {
				print <<END;

\$set default vendor=None

\$set default space=RAD-ATR
             len_ofs=1 len_size=1  len_adj=0
             val_ofs=2 val_size=-2 val_type=String
             nodec=0 noenc=0

END
			}
		}
		my $val_type=lc($F[3]);
		if ($val_type eq 'string') {
			print "\$add attribute $F[2]\t$F[1]\n";
			next;
		}
		if (exists $vtmap{$val_type}) {
			$val_type=$vtmap{$val_type}
		} else {
			print "### WARNING: Unknown val_type\n";
		}
		print "\$add attribute $F[2]\t$F[1]\tval_type=$val_type\n";
		next;
	}
	elsif ($F[0] eq 'VALUE') {
		if ($F[1] ne $defitem) {
			$defitem = $F[1];
			print "\n\$set default item=$defitem\n\n";
		}
		print "\$add value $F[3]\t$F[2]\n";
		next;
	}
	elsif ($F[0] eq 'VENDOR') {
		$F[1] = ucfirst(lc($F[1]));
		print "\n#\$add vendor $F[2] $F[1]\n\n";
		next;
	}
	else {
		print "$_\n";
	}
}

