python: use raw string for regex with escape
authorDouglas Bagnall <douglas.bagnall@catalyst.net.nz>
Thu, 6 Feb 2020 22:25:27 +0000 (11:25 +1300)
committerNoel Power <npower@samba.org>
Fri, 7 Feb 2020 10:37:37 +0000 (10:37 +0000)
Python regards 'GPT\.INI$' as a string containing an invalid escape
sequence '\.', which is ignored (i.e. treated as the literal sequence
of those 2 characters), but only after Python has grumbled to itself,
and to you if you enabled DeprecationWarnings.

The proper thing to do here is use r-strings, like r'GPT\.INI$', which
tell Python that all backslashes are literal. Alternatively (as we do
once in this patch), the backslash can itself be escaped ('\\').

There are more problems of this nature in the build scripts.

Signed-off-by: Douglas Bagnall <douglas.bagnall@catalyst.net.nz>
Reviewed-by: Noel Power <npower@samba.org>
python/samba/gp_parse/gp_inf.py
python/samba/netcmd/drs.py
python/samba/netcmd/dsacl.py
python/samba/netcmd/gpo.py
python/samba/netcmd/ldapcmp.py

index a3c828fa82d34bc17868fa6cb5edce2d0e125142..4480bbb589d19783ba14e1a409e76a3a99538fdc 100644 (file)
@@ -319,7 +319,7 @@ class GptTmplInfParser(GPParser):
         current_header_name = None
 
         for line in inf_file.splitlines():
-            match = re.match('\[(.*)\]', line)
+            match = re.match(r'\[(.*)\]', line)
             if match:
                 header_name = match.group(1)
                 if header_name in self.sections:
index 9d6e8087e87a80ce4ebff3b568e66e5ac9c67b6c..cebcca5f48919f9d06aaabab43c2bec1edbb799f 100644 (file)
@@ -156,7 +156,7 @@ class cmd_drs_showrepl(Command):
                 raise
         try:
             (site, server) = drs_parse_ntds_dn(n.source_dsa_obj_dn)
-            d["DSA"] = "%s\%s" % (site, server)
+            d["DSA"] = "%s\\%s" % (site, server)
         except RuntimeError:
             pass
         return d
index 92570760d40e7a478089bba31d032af4c5779254..d3b8b5f554e34f4f1f8b9212a2703dc37c85f6d2 100644 (file)
@@ -114,11 +114,11 @@ class cmd_dsacl_set(Command):
         """Add new ace explicitly."""
         desc = self.read_descriptor(samdb, object_dn)
         new_ace = security.descriptor.from_sddl("D:" + new_ace,self.get_domain_sid(samdb))
-        new_ace_list = re.findall("\(.*?\)",new_ace.as_sddl())
+        new_ace_list = re.findall(r"\(.*?\)",new_ace.as_sddl())
         for new_ace in new_ace_list:
             desc_sddl = desc.as_sddl(self.get_domain_sid(samdb))
             # TODO add bindings for descriptor manipulation and get rid of this
-            desc_aces = re.findall("\(.*?\)", desc_sddl)
+            desc_aces = re.findall(r"\(.*?\)", desc_sddl)
             for ace in desc_aces:
                 if ("ID" in ace):
                     desc_sddl = desc_sddl.replace(ace, "")
index 76ba9fa18a954779e0beb65f83cb07d206b0ca75..a210922da01b2af2d53fc3253676c19ddcffd670 100644 (file)
@@ -248,29 +248,29 @@ def parse_unc(unc):
 
 
 def find_parser(name, flags=re.IGNORECASE):
-    if re.match('fdeploy1\.ini$', name, flags=flags):
+    if re.match(r'fdeploy1\.ini$', name, flags=flags):
         return GPFDeploy1IniParser()
-    if re.match('audit\.csv$', name, flags=flags):
+    if re.match(r'audit\.csv$', name, flags=flags):
         return GPAuditCsvParser()
-    if re.match('GptTmpl\.inf$', name, flags=flags):
+    if re.match(r'GptTmpl\.inf$', name, flags=flags):
         return GptTmplInfParser()
-    if re.match('GPT\.INI$', name, flags=flags):
+    if re.match(r'GPT\.INI$', name, flags=flags):
         return GPTIniParser()
     if re.match('scripts.ini$', name, flags=flags):
         return GPScriptsIniParser()
     if re.match('psscripts.ini$', name, flags=flags):
         return GPScriptsIniParser()
-    if re.match('GPE\.INI$', name, flags=flags):
+    if re.match(r'GPE\.INI$', name, flags=flags):
         # This file does not appear in the protocol specifications!
         #
         # It appears to be a legacy file used to maintain gPCUserExtensionNames
         # and gPCMachineExtensionNames. We should just copy the file as binary.
         return GPParser()
-    if re.match('.*\.ini$', name, flags=flags):
+    if re.match(r'.*\.ini$', name, flags=flags):
         return GPIniParser()
-    if re.match('.*\.pol$', name, flags=flags):
+    if re.match(r'.*\.pol$', name, flags=flags):
         return GPPolParser()
-    if re.match('.*\.aas$', name, flags=flags):
+    if re.match(r'.*\.aas$', name, flags=flags):
         return GPAasParser()
 
     return GPParser()
index 6051b55b31a0f9308af6ac8183b5bb43dd16f546..1d830e3082fe412ad3483d39f70123998fefdc46 100644 (file)
@@ -37,7 +37,7 @@ from samba.netcmd import (
     Option,
 )
 
-RE_RANGED_RESULT = re.compile("^([^;]+);range=(\d+)-(\d+|\*)$")
+RE_RANGED_RESULT = re.compile(r"^([^;]+);range=(\d+)-(\d+|\*)$")
 
 
 class LDAPBase(object):
@@ -274,9 +274,9 @@ class Descriptor(object):
         """
         try:
             if "S:" in self.sddl:
-                res = re.search("D:(.*?)(\(.*?\))S:", self.sddl).group(2)
+                res = re.search(r"D:(.*?)(\(.*?\))S:", self.sddl).group(2)
             else:
-                res = re.search("D:(.*?)(\(.*\))", self.sddl).group(2)
+                res = re.search(r"D:(.*?)(\(.*\))", self.sddl).group(2)
         except AttributeError:
             return []
         return re.findall("(\(.*?\))", res)