econnman/pnac.py

115 lines
3.5 KiB
Python

import sys
import logging
log = logging.getLogger("econnman.pnac")
CONF_FILE = "/var/lib/connman/econnman.config"
# python2 backwards compatibility
try:
from configparser import SafeConfigParser
except ImportError:
from ConfigParser import SafeConfigParser
class PNACConfig(SafeConfigParser):
"""A custom config parser for IEEE802.1x (PNAC)
Section names are prefixed with service_
"""
def __init__(self):
SafeConfigParser.__init__(self)
self.optionxform = str
def read(self):
args = CONF_FILE, 'r'
kwargs = {}
if sys.hexversion >= 0x03000000:
kwargs["encoding"] = 'utf8'
try:
with open(*args, **kwargs) as fd:
self.readfp(fd)
except IOError:
log.error(
"Econnman cannot read the configuration file \"%s\" used by "
"connman to configure your ieee802.1x networks. Make sure the "
"user running econnman is able to read/write it.",
CONF_FILE
)
#raise
# defaults()
# sections()
def add_section(self, service_name):
secname = 'service_' + service_name
SafeConfigParser.add_section(self, secname)
self.set(service_name, 'Type', 'wifi')
self.set(service_name, 'Name', service_name)
def has_section(self, service_name): # config_exists
return bool(self.section_get(service_name))
# options()
def has_option(self, service_name, key):
secname = self.section_get(service_name)
return SafeConfigParser.has_option(secname, key)
# read()
# readfp()
def get(self, service_name, key): # config_option_get
secname = self.section_get(service_name)
if self.has_option(service_name, key):
return SafeConfigParser.get(self, secname, key)
return None
# getint()
# getfloat()
# getboolean()
# items()
def set(self, service_name, key, value): # config_set
secname = self.section_get(service_name)
if not self.has_section(service_name):
self.add_section(service_name)
if value is not None:
SafeConfigParser.set(self, secname, key, value)
elif self.has_option(secname, key):
self.remove_option(secname, key)
#self.write()
def write(self):
try:
with open(CONF_FILE, 'w', encoding='utf8') as configfile:
SafeConfigParser.write(self, configfile)
except IOError:
log.error(
"Econnman cannot write to the configuration file \"%s\" used "
"by connman to configure your ieee802.1x networks. Make sure "
"the user running econnman is able to read/write it.",
CONF_FILE
)
def remove_option(self, service_name, key):
secname = self.section_get(service_name)
SafeConfigParser.remove_option(self, secname, key)
def remove_section(self, service_name): # config_del
secname = self.section_get(service_name)
ret = SafeConfigParser.remove_section(self, secname)
#self.write()
return ret
def section_get(self, service_name): # config_get
#secname = 'service_' + service_name
for sec in self.sections():
if self.has_option(sec, 'Name') and \
self.get(sec, 'Name') == service_name:
return sec
else:
return None