Listing 1 

dbLogin.tcl (replace with db username with read only permissions and
put in file without world read permissions):

set dbLogon "username/password@database"
set dbHandle [oralogon $dbLogon]
set dbCursor [oraopen  $dbHandle]
extractUsers.tcl:
#!/usr/local/bin/tclsh
package require Oratcl
proc Usage {} {
        puts stderr "Usage: extractUsers.tcl {free|open}"
        exit 2
}
# check that we have one of [open|free]
if {$argc != 1} {
        Usage
} elseif {[string first "free" [lindex $argv 0]] > -1} {
        set style free
} else {
        set style open
}
set dir "."
source dbLogin.tcl
set sql "select mac_address from wireless_user_mac"
set sqlReturn [orasql $dbCursor "$sql"]

exec cp $dir/users.top $dir/users
set outFile [open "$dir/users" a]

while {[set row [orafetch $dbCursor]] != ""} {
	set regsubReturn [regsub -all -- : $row - macAddress]
	set macAddress [string tolower $macAddress]
	if {$style == "free"} {
		puts $outFile "$macAddress	Password==NOPASSWORD"
	} else {
		puts $outFile "$macAddress	clear-password = \"NOPASSWORD\""
	}
}
close $outFile
exec cat ${dir}/users.end >> ${dir}/users

exit


extractClients.tcl:
#!/usr/local/bin/tclsh
package require Oratcl

proc Usage {} {
	puts stderr "Usage: extractClients.tcl {free|open}"
	exit 2
}

# check that we have one of [open|free]
if {$argc != 1} {
	Usage
} elseif {[string first "free" [lindex $argv 0]] > -1} {
	set style free
	set outFileName "clients.conf"
} else {
	set style open
	set outFileName "clients"
}

# some day make this a command-line parameter maybe
set dir "."
set defaultSecret "blah"
source dbLogin.tcl

set sql "select device_name, ip_address, radius_key from wireless_device"
set sqlReturn [orasql $dbCursor "$sql"]

exec cp $dir/clients-$style.top $dir/$outFileName
set outFile [open "$dir/$outFileName" a]

while {[set row [orafetch $dbCursor]] != ""} {
	set deviceName "[lindex $row 0]".
	set shortName  [lindex [split $deviceName .] 0]
	set ipAddress  [lindex $row 1]
	if {[string length [lindex $row 2]] == 0} {
		set secret	$defaultSecret
	} else {
		set secret	[lindex $row 2]
	if {$style == "free"} {
	        set outString  "client\t$deviceName {\n"
        	append outString "\tsecret=$secret\n"
        	append outString "\tshortname=$shortName\n"
        	append outString "}\n"
        	puts $outFile $outString
	} else {
		puts $outFile "$ipAddress\t$secret"
	}
}

close $outFile
exec cat $dir/clients-$style.end >> $dir/$outFileName

exit
