Files
core/system/base/baselayout/comar/stack.py
T
2015-02-24 11:18:35 +02:00

175 lines
4.5 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/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)