Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python2.7
- #
- # requires python-avahi, python-dbus, python-gdbm
- import avahi, dbus
- from encodings.idna import ToASCII
- from time import sleep
- ttl = 60
- def publish(name):
- name = unicode(name, locale.getpreferredencoding())
- bus = dbus.SystemBus()
- server = dbus.Interface(bus.get_object(avahi.DBUS_NAME, avahi.DBUS_PATH_SERVER), avahi.DBUS_INTERFACE_SERVER)
- group = dbus.Interface(bus.get_object(avahi.DBUS_NAME, server.EntryGroupNew()), avahi.DBUS_INTERFACE_ENTRY_GROUP)
- rdata = create_rr(server.GetHostNameFqdn())
- cname = encode_dns(name)
- group.AddRecord(avahi.IF_UNSPEC, avahi.PROTO_UNSPEC, dbus.UInt32(0), cname, 0x01, 0x05, ttl, rdata)
- group.Commit()
- def encode_dns(name):
- return '.'.join([ToASCII(part) for part in name.split('.') if part])
- def create_rr(name):
- return ''.join(["%s%s" % (chr(len(part)), ToASCII(part)) for part in name.split('.') if part]) + '\0'
- def load_aliases(filename):
- with open(filename, 'r') as f:
- aliases = f.readlines()
- return [alias.strip() for alias in aliases if alias and not alias.startswith('#')]
- if __name__ == '__main__':
- import sys, locale
- if len(sys.argv) > 1:
- for hostname in sys.argv[1:]:
- publish(hostname)
- else:
- for hostname in load_aliases('/etc/avahi/aliases'):
- publish(hostname)
- while True:
- sleep(30)
Add Comment
Please, Sign In to add comment