Guest User

Untitled

a guest
Nov 20th, 2017
59
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.27 KB | None | 0 0
  1. #!/usr/bin/env python2.7
  2. #
  3. # requires python-avahi, python-dbus, python-gdbm
  4.  
  5. import avahi, dbus
  6. from encodings.idna import ToASCII
  7. from time import sleep
  8.  
  9. ttl = 60
  10.  
  11. def publish(name):
  12. name = unicode(name, locale.getpreferredencoding())
  13.  
  14. bus = dbus.SystemBus()
  15. server = dbus.Interface(bus.get_object(avahi.DBUS_NAME, avahi.DBUS_PATH_SERVER), avahi.DBUS_INTERFACE_SERVER)
  16. group = dbus.Interface(bus.get_object(avahi.DBUS_NAME, server.EntryGroupNew()), avahi.DBUS_INTERFACE_ENTRY_GROUP)
  17.  
  18. rdata = create_rr(server.GetHostNameFqdn())
  19. cname = encode_dns(name)
  20.  
  21. group.AddRecord(avahi.IF_UNSPEC, avahi.PROTO_UNSPEC, dbus.UInt32(0), cname, 0x01, 0x05, ttl, rdata)
  22. group.Commit()
  23.  
  24. def encode_dns(name):
  25. return '.'.join([ToASCII(part) for part in name.split('.') if part])
  26.  
  27. def create_rr(name):
  28. return ''.join(["%s%s" % (chr(len(part)), ToASCII(part)) for part in name.split('.') if part]) + '\0'
  29.  
  30. def load_aliases(filename):
  31. with open(filename, 'r') as f:
  32. aliases = f.readlines()
  33. return [alias.strip() for alias in aliases if alias and not alias.startswith('#')]
  34.  
  35. if __name__ == '__main__':
  36. import sys, locale
  37. if len(sys.argv) > 1:
  38. for hostname in sys.argv[1:]:
  39. publish(hostname)
  40. else:
  41. for hostname in load_aliases('/etc/avahi/aliases'):
  42. publish(hostname)
  43.  
  44. while True:
  45. sleep(30)
Add Comment
Please, Sign In to add comment