fix ipv6 parsing. We would not properly handle empty blocks (i.e. ::).
[mirror/userdir-ldap.git] / ud-mailgate
index b40be70..cd6b517 100755 (executable)
@@ -189,10 +189,11 @@ def DoArbChange(Str, Attrs):
         if i.lower() == attrName:
             attrName = i
             break
-    if attrName in ArbChanges:
+    if attrName not in ArbChanges:
         return None
 
-    if re.match(ArbChanges[attrName], G[1]) is None:
+    value = G[1]
+    if re.match(ArbChanges[attrName], value) is None:
         raise UDFormatError("Item does not match the required format" + ArbChanges[attrName])
 
     Attrs.append((ldap.MOD_REPLACE, attrName, value))
@@ -432,7 +433,7 @@ def DoDNS(Str, Attrs, DnRecord):
             if p == "":
                 if seenEmptypart:
                     return "Invalid IPv6 address (%s): more than one :: (nothing in between colons) is not allowed" % (ipv6address)
-            seenEmptypart = True
+                seenEmptypart = True
             sanitized = "%s IN AAAA %s" % (hostname, ipv6address)
     else:
         raise UDFormatError("None of the types I recognize was it.  I shouldn't be here.  confused.")
@@ -493,7 +494,7 @@ def FinishConfirmSudopassword(lc, uid, Attrs, SudoPasswd):
     res = lc.search_s(BaseDn, ldap.SCOPE_ONELEVEL, "uid=" + uid, ['sudoPassword'])
     if len(res) != 1:
         raise UDFormatError("Not exactly one hit when searching for user")
-    if sudoPassword in res[0][1]:
+    if 'sudoPassword' in res[0][1]:
         inldap = res[0][1]['sudoPassword']
     else:
         inldap = []