Create a gist now

Instantly share code, notes, and snippets.

a ruby script to generate IDN BIND configuration
#!/usr/bin/env ruby18
#
# == IDN zone generator
#
# = Usage:
#
# $ mkdomains_idn крутой.домен.рф ...
#
# = What does it do?
#
# - Creates a punycode name from an IDN input
# - Makes a zone file of this name and writes zone stub into it
# - adds zone information to *.conf BIND config file (see config section)
#
# Author:: Pavel Argentov <argentoff@gmail.com>
#
require 'rubygems'
require 'iconv'
require 'date'
require 'idn' # see on rubygems.org for Ruby 1.8, on GitHub for 1.9
##### Editable config ###
CONFIG = {
:local_enc => 'KOI8-R',
:bind_file => 'cyr.conf', # where to write zone config
:dns => [
'ns1.mydomain.net',
'ns2.mydomain.net'
],
:admin => 'admin.mydomain.net.'
}
#########################
date = Date.today.strftime("%Y%m%d")
dir = Dir.pwd
ARGV.each do |d|
n = IDN::Idna.toASCII(Iconv.conv('UTF-8', CONFIG[:local_enc], d))
open(n,"a") do |io|
io.print <<EOF
; IDN: "#{d}" ==> "#{n}"
; this part is autogenerated; edit it if you know what'ya doing
$ORIGIN #{n}.
$TTL 3600
@ IN SOA #{CONFIG[:dns][0]}. #{CONFIG[:admin]} (
#{date}01
28800
7200
604800
86400 )
IN NS #{CONFIG[:dns][0]}.
IN NS #{CONFIG[:dns][1]}.
; end of autogen part
; editable section below
;
; end of editable section
EOF
end
open(CONFIG[:bind_file],"a") do |io|
io.print <<EOF
// domain for "#{d}"
zone "#{n}" {
type master;
file "#{File.join(dir.gsub(/\/var\/named/,''), n)}";
};
EOF
end
puts "Generating #{Iconv.conv(CONFIG[:local_enc], "UTF-8", IDN::Idna.toUnicode(n))} ==> #{n} DONE"
end
#!/usr/bin/env ruby18
#
# == IDN zone generator, slave DNS variant
#
# = Usage:
#
# $ mkdomains_idn крутой.домен.рф ...
#
# = What does it do?
#
# - Creates a punycode name from an IDN input
# - Makes a zone file of this name and writes zone stub into it
# - adds zone information to *.conf BIND config file (see config section)
#
# Author:: Pavel Argentov <argentoff@gmail.com>
#
require 'rubygems'
require 'iconv'
require 'idn' # see on rubygems.org for Ruby 1.8, on GitHub for 1.9
##### Editable config ###
CONFIG = {
:local_enc => 'KOI8-R',
:bind_file => 'slave.conf', # where to write zone config
:m_dns => [
'1.1.1.1',
'2.2.2.2'
]
}
#########################
def m_dnses()
CONFIG[:m_dns].join("; ") + "; "
end
dir = Dir.pwd
ARGV.each do |d|
n = IDN::Idna.toASCII(Iconv.conv('UTF-8', CONFIG[:local_enc], d))
open(CONFIG[:bind_file],"a") do |io|
io.print <<EOF
// domain for "#{d}"
zone "#{n}" {
type slave;
masters { #{m_dnses()}};
file "#{File.join(dir.gsub(/\/var\/named/,''), n)}";
};
EOF
end
puts "Generating #{Iconv.conv(CONFIG[:local_enc], "UTF-8", IDN::Idna.toUnicode(n))} ==> #{n} DONE"
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment