From d4af9e4c5c40e0e20831255346effc5696611384 Mon Sep 17 00:00:00 2001 From: Patrik Lundin Date: Sun, 25 Nov 2012 03:24:49 +0100 Subject: [PATCH] Use shlex for rc.conf parsing. This makes the line parsing a lot more robust (and easier to read). Code supplied by @dhozac, thanks! Remove re import because this is not used anywhere. --- library/service | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/library/service b/library/service index 355eb2be7c1..3889e4fefe9 100644 --- a/library/service +++ b/library/service @@ -72,8 +72,8 @@ examples: import platform import os -import re import tempfile +import shlex class Service(object): """ @@ -209,11 +209,10 @@ class Service(object): # Build a list containing the possibly modified file. for rcline in RCFILE: - # Only parse non-comment and non-empty lines. - if not re.search('^(#.*)?$', rcline): - key = rcline.split('=')[0] - # We need to strip any newline and " signs from the value. - value = rcline.split('=')[1].strip('\n"') + # Parse line removing whitespaces, quotes, etc. + rcarray = shlex.split(rcline, comments=True) + if len(rcarray) >= 1 and '=' in rcarray[0]: + (key, value) = rcarray[0].split("=", 1) if key == self.rcconf_key: if value == self.rcconf_value: # Since the proper entry already exists we can stop iterating.