115 lines
3.5 KiB
Python
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
|