123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175 |
- #!/usr/bin/python
- # -*- coding: utf-8 -*-
- import os
- import string
- import subprocess
- # Translations
- MSG_HOSTNAME = {
- "en": "Hostname contains invalid characters: '%s'",
- "tr": "Makine ismi geçersiz karakterler içeriyor: '%s'",
- "fr": "Le nom d'hôte contient des caractères invalides: '%s'",
- "nl": "Hostnaam bevat ongeldige lettertekens: '%s'",
- }
- # Translations End
- HEADER_DEFAULT = """# Default DNS settings
- #
- """
- HEADER_DYNAMIC = """# This file is automatically generated by COMAR
- # Use network-manager to set default DNS settings or edit "resolv.default.conf"
- #
- # Bu dosya COMAR tarafından otomatik olarak üretilir.
- # Öntanımlı DNS ayalarını değiştirmek için network-manager uygulamasını kullanın
- # veya "resolv.default.conf" dosyasını düzenleyin.
- #
- """
- MAX_SERVERS = 3
- HOST_CHARS = string.ascii_letters + string.digits + '.' + '_' + '-'
- NAME_PATH = "/etc/env.d/01hostname"
- CMD_ENV = "/sbin/update-environment"
- HOSTS_PATH = "/etc/hosts"
- RESOLV_USER = "/etc/resolv.default.conf"
- RESOLV_PISILINUX = "/usr/share/baselayout/resolv.conf"
- def getSearchDomain():
- if not os.access(RESOLV_USER, os.R_OK):
- return None
- for line in file(RESOLV_USER):
- line = line.strip()
- if line.startswith("search"):
- return line.split()[1]
- return None
- def getPisiLinuxNameServers():
- servers = []
- if not os.access(RESOLV_PISILINUX, os.R_OK):
- return servers
- for line in file(RESOLV_PISILINUX):
- line = line.strip()
- if line.startswith("nameserver"):
- ip = line.split()[1]
- if ip not in servers:
- servers.append(ip)
- return servers
- # Network.Stack methods
- def getNameServers():
- servers = []
- if not os.access(RESOLV_USER, os.R_OK):
- return servers
- for line in file(RESOLV_USER):
- line = line.strip()
- if line.startswith("nameserver"):
- ip = line.split()[1]
- if ip not in servers:
- servers.append(ip)
- return servers
- def setNameServers(nameservers, searchdomain):
- f = file("/etc/resolv.default.conf", "w")
- f.write(HEADER_DEFAULT)
- for server in nameservers:
- f.write("nameserver %s\n" % server)
- if searchdomain:
- f.write("searchdomain %s\n" % searchdomain)
- f.close()
- def useNameServers(nameservers, searchdomain):
- # Append default name servers
- nameservers.extend(getNameServers())
- nameservers.extend(getPisiLinuxNameServers())
- servers = []
- for server in nameservers:
- if server not in servers:
- servers.append(server)
- f = file("/etc/resolv.conf", "w")
- f.write(HEADER_DYNAMIC)
- for server in servers[:MAX_SERVERS]:
- f.write("nameserver %s\n" % server)
- if searchdomain:
- f.write("search %s\n" % searchdomain)
- elif getSearchDomain():
- f.write("search %s\n" % getSearchDomain())
- f.close()
- def registerNameServers(iface, nameservers, searchdomain):
- useNameServers(nameservers, searchdomain)
- def unregisterNameServers(iface, nameservers, searchdomain):
- # Remove nameservers from list
- nameservers = getNameServers()
- for server in nameservers:
- try:
- nameservers.remove(server)
- except ValueError:
- pass
- # Set search domain to "" if it's active one
- if searchdomain == getSearchDomain():
- searchdomain = ""
- useNameServers(nameservers, searchdomain)
- def flushNameCache():
- pass
- def getHostName():
- cmd = subprocess.Popen(["/usr/bin/hostname"], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
- a = cmd.communicate()
- if a[1] == "":
- return a[0].rstrip("\n")
- return ""
- def setHostName(hostname):
- if not hostname:
- return
- invalid = filter(lambda x: not x in HOST_CHARS, hostname)
- if len(invalid) > 0:
- fail(_(MSG_HOSTNAME) % ("".join(invalid)))
- # hostname
- if os.path.exists(NAME_PATH):
- import re
- f = file(NAME_PATH)
- data = f.read()
- f.close()
- data = re.sub('HOSTNAME="(.*)"', 'HOSTNAME="%s"' % hostname, data)
- else:
- data = 'HOSTNAME="%s"\n' % hostname
- f = file(NAME_PATH, "w")
- f.write(data)
- f.close()
- # hosts
- f = file(HOSTS_PATH)
- data = f.readlines()
- f.close()
- f = file(HOSTS_PATH, "w")
- flag = 1
- for line in data:
- if line.startswith("127.0.0.1"):
- line = "127.0.0.1 localhost %s\n" % hostname
- flag = 0
- f.write(line)
- if flag:
- f.write("127.0.0.1 localhost %s\n" % hostname)
- f.close()
- # update environment
- os.system(CMD_ENV)
|