summaryrefslogtreecommitdiffstats
path: root/server/config/ipachangeconf.py
diff options
context:
space:
mode:
authorJakub Hrozek <jhrozek@redhat.com>2009-12-07 21:17:20 +0100
committerStephen Gallagher <sgallagh@redhat.com>2009-12-08 12:31:46 -0500
commit573190f896b4f474e604dd86b11cbfbdd987a236 (patch)
treece39544a739207c227e9c71b3acd7dd76a2d9202 /server/config/ipachangeconf.py
parent4acbe2d18ef16a4a1560fd893fe34224f68b243a (diff)
downloadsssd-573190f896b4f474e604dd86b11cbfbdd987a236.tar.gz
sssd-573190f896b4f474e604dd86b11cbfbdd987a236.tar.xz
sssd-573190f896b4f474e604dd86b11cbfbdd987a236.zip
Handle spaces in config parser
Fixes: #301
Diffstat (limited to 'server/config/ipachangeconf.py')
-rw-r--r--server/config/ipachangeconf.py33
1 files changed, 33 insertions, 0 deletions
diff --git a/server/config/ipachangeconf.py b/server/config/ipachangeconf.py
index 3e5029a94..9635de44f 100644
--- a/server/config/ipachangeconf.py
+++ b/server/config/ipachangeconf.py
@@ -23,6 +23,7 @@ import os
import string
import time
import shutil
+import re
def openLocked(filename, perms):
fd = -1
@@ -460,12 +461,44 @@ class IPAChangeConf:
# A SSSD-specific subclass of IPAChangeConf
class SSSDChangeConf(IPAChangeConf):
+ OPTCRE = re.compile(
+ r'(?P<option>[^:=\s][^:=]*)' # very permissive!
+ r'\s*=\s*' # any number of space/tab,
+ # followed by separator
+ # followed by any # space/tab
+ r'(?P<value>.*)$' # everything up to eol
+ )
+
def __init__(self):
IPAChangeConf.__init__(self, "SSSD")
self.comment = ("#",";")
self.backup_suffix = ".bak"
self.opts = []
+ def parseLine(self, line):
+ """
+ Overrides IPAChangeConf parseLine so that lines are splitted
+ using any separator in self.assign, not just the default one
+ """
+
+ if self.matchEmpty(line):
+ return {'name':'empty', 'type':'empty'}
+
+ value = self.matchComment(line)
+ if value:
+ return {'name':'comment', 'type':'comment', 'value':value.rstrip()}
+
+ mo = self.OPTCRE.match(line)
+ if not mo:
+ raise SyntaxError, 'Syntax Error: Unknown line format'
+
+ try:
+ name, value = mo.group('option', 'value')
+ except IndexError:
+ raise SyntaxError, 'Syntax Error: Unknown line format'
+
+ return {'name':name.strip(), 'type':'option', 'value':value.strip()}
+
def readfp(self, fd):
self.opts.extend(self.parse(fd))