changeset acc93f97ada0 in /home/hg/repos/gajim

details:http://hg.gajim.org/gajim?cmd=changeset;node=acc93f97ada0
description: fix starting Gajim when pyasn1 is not installed. see #7066

diffstat:

 src/common/check_X509.py |  301 ++++++++++++++++++++++++----------------------
 1 files changed, 156 insertions(+), 145 deletions(-)

diffs (truncated from 324 to 300 lines):

diff -r 89bb2e72f909 -r acc93f97ada0 src/common/check_X509.py
--- a/src/common/check_X509.py  Mon Jan 02 16:39:06 2012 +0100
+++ b/src/common/check_X509.py  Mon Jan 02 17:01:31 2012 +0100
@@ -1,164 +1,175 @@
-from pyasn1.type import univ, constraint, char, namedtype, tag
-from pyasn1.codec.der.decoder import decode
-from common.helpers import prep, InvalidFormat
+import logging
+log = logging.getLogger('gajim.c.check_X509')
 
-MAX = 64
-oid_xmppaddr = '(1, 3, 6, 1, 5, 5, 7, 8, 5)'
-oid_dnssrv   = '(1, 3, 6, 1, 5, 5, 7, 8, 7)'
+try:
+    import OpenSSL.SSL
+    import OpenSSL.crypto
+    from pyasn1.type import univ, constraint, char, namedtype, tag
+    from pyasn1.codec.der.decoder import decode
+    from common.helpers import prep, InvalidFormat
 
+    MAX = 64
+    oid_xmppaddr = '(1, 3, 6, 1, 5, 5, 7, 8, 5)'
+    oid_dnssrv   = '(1, 3, 6, 1, 5, 5, 7, 8, 7)'
 
 
-class DirectoryString(univ.Choice):
-    componentType = namedtype.NamedTypes(
-        namedtype.NamedType(
-            'teletexString', char.TeletexString().subtype(
-                subtypeSpec=constraint.ValueSizeConstraint(1, MAX))),
-        namedtype.NamedType(
-            'printableString', char.PrintableString().subtype(
-                subtypeSpec=constraint.ValueSizeConstraint(1, MAX))),
-        namedtype.NamedType(
-            'universalString', char.UniversalString().subtype(
-                subtypeSpec=constraint.ValueSizeConstraint(1, MAX))),
-        namedtype.NamedType(
-            'utf8String', char.UTF8String().subtype(
-                subtypeSpec=constraint.ValueSizeConstraint(1, MAX))),
-        namedtype.NamedType(
-            'bmpString', char.BMPString().subtype(
-                subtypeSpec=constraint.ValueSizeConstraint(1, MAX))),
-        namedtype.NamedType(
-            'ia5String', char.IA5String().subtype(
-                subtypeSpec=constraint.ValueSizeConstraint(1, MAX))),
-        namedtype.NamedType(
-            'gString', univ.OctetString().subtype(
-                subtypeSpec=constraint.ValueSizeConstraint(1, MAX))),
-        )
 
-class AttributeValue(DirectoryString):
-    pass
+    class DirectoryString(univ.Choice):
+        componentType = namedtype.NamedTypes(
+            namedtype.NamedType(
+                'teletexString', char.TeletexString().subtype(
+                    subtypeSpec=constraint.ValueSizeConstraint(1, MAX))),
+            namedtype.NamedType(
+                'printableString', char.PrintableString().subtype(
+                    subtypeSpec=constraint.ValueSizeConstraint(1, MAX))),
+            namedtype.NamedType(
+                'universalString', char.UniversalString().subtype(
+                    subtypeSpec=constraint.ValueSizeConstraint(1, MAX))),
+            namedtype.NamedType(
+                'utf8String', char.UTF8String().subtype(
+                    subtypeSpec=constraint.ValueSizeConstraint(1, MAX))),
+            namedtype.NamedType(
+                'bmpString', char.BMPString().subtype(
+                    subtypeSpec=constraint.ValueSizeConstraint(1, MAX))),
+            namedtype.NamedType(
+                'ia5String', char.IA5String().subtype(
+                    subtypeSpec=constraint.ValueSizeConstraint(1, MAX))),
+            namedtype.NamedType(
+                'gString', univ.OctetString().subtype(
+                    subtypeSpec=constraint.ValueSizeConstraint(1, MAX))),
+            )
 
-class AttributeType(univ.ObjectIdentifier):
-    pass
+    class AttributeValue(DirectoryString):
+        pass
 
-class AttributeTypeAndValue(univ.Sequence):
-    componentType = namedtype.NamedTypes(
-        namedtype.NamedType('type', AttributeType()),
-        namedtype.NamedType('value', AttributeValue()),
-        )
+    class AttributeType(univ.ObjectIdentifier):
+        pass
 
-class RelativeDistinguishedName(univ.SetOf):
-    componentType = AttributeTypeAndValue()
+    class AttributeTypeAndValue(univ.Sequence):
+        componentType = namedtype.NamedTypes(
+            namedtype.NamedType('type', AttributeType()),
+            namedtype.NamedType('value', AttributeValue()),
+            )
 
-class RDNSequence(univ.SequenceOf):
-    componentType = RelativeDistinguishedName()
+    class RelativeDistinguishedName(univ.SetOf):
+        componentType = AttributeTypeAndValue()
 
-class Name(univ.Choice):
-    componentType = namedtype.NamedTypes(
-        namedtype.NamedType('', RDNSequence()),
-        )
+    class RDNSequence(univ.SequenceOf):
+        componentType = RelativeDistinguishedName()
 
-class GeneralName(univ.Choice):
-    componentType = namedtype.NamedTypes(
-        namedtype.NamedType('otherName', univ.Sequence().subtype(
-            implicitTag=tag.Tag(tag.tagClassContext,
-            tag.tagFormatConstructed, 0x0))),
-        namedtype.NamedType('rfc822Name', char.IA5String().subtype(
-            implicitTag=tag.Tag(tag.tagClassContext,
-            tag.tagFormatSimple, 1))),
-        namedtype.NamedType('dNSName', char.IA5String().subtype(
-            implicitTag=tag.Tag(tag.tagClassContext,
-            tag.tagFormatSimple, 2))),
-        namedtype.NamedType('x400Address', univ.Sequence().subtype(
-            implicitTag=tag.Tag(tag.tagClassContext,
-            tag.tagFormatConstructed, 0x3))),
-        namedtype.NamedType('directoryName', Name().subtype(
-            implicitTag=tag.Tag(tag.tagClassContext,
-            tag.tagFormatConstructed, 0x4))),
-        namedtype.NamedType('ediPartyName', univ.Sequence().subtype(
-            implicitTag=tag.Tag(tag.tagClassContext,
-            tag.tagFormatConstructed, 0x5))),
-        namedtype.NamedType('uniformResourceIdentifier',
-            char.IA5String().subtype(
-            implicitTag=tag.Tag(tag.tagClassContext,
-            tag.tagFormatSimple, 6))),
-        namedtype.NamedType('iPAddress', univ.OctetString().subtype(
-            implicitTag=tag.Tag(tag.tagClassContext,
-            tag.tagFormatSimple, 7))),
-        namedtype.NamedType('registeredID', univ.ObjectIdentifier().subtype(
-            implicitTag=tag.Tag(tag.tagClassContext,
-            tag.tagFormatSimple, 8))),
-        )
+    class Name(univ.Choice):
+        componentType = namedtype.NamedTypes(
+            namedtype.NamedType('', RDNSequence()),
+            )
 
-class GeneralNames(univ.SequenceOf):
-    componentType = GeneralName()
-    sizeSpec = univ.SequenceOf.sizeSpec + constraint.ValueSizeConstraint(1, 
MAX)
+    class GeneralName(univ.Choice):
+        componentType = namedtype.NamedTypes(
+            namedtype.NamedType('otherName', univ.Sequence().subtype(
+                implicitTag=tag.Tag(tag.tagClassContext,
+                tag.tagFormatConstructed, 0x0))),
+            namedtype.NamedType('rfc822Name', char.IA5String().subtype(
+                implicitTag=tag.Tag(tag.tagClassContext,
+                tag.tagFormatSimple, 1))),
+            namedtype.NamedType('dNSName', char.IA5String().subtype(
+                implicitTag=tag.Tag(tag.tagClassContext,
+                tag.tagFormatSimple, 2))),
+            namedtype.NamedType('x400Address', univ.Sequence().subtype(
+                implicitTag=tag.Tag(tag.tagClassContext,
+                tag.tagFormatConstructed, 0x3))),
+            namedtype.NamedType('directoryName', Name().subtype(
+                implicitTag=tag.Tag(tag.tagClassContext,
+                tag.tagFormatConstructed, 0x4))),
+            namedtype.NamedType('ediPartyName', univ.Sequence().subtype(
+                implicitTag=tag.Tag(tag.tagClassContext,
+                tag.tagFormatConstructed, 0x5))),
+            namedtype.NamedType('uniformResourceIdentifier',
+                char.IA5String().subtype(
+                implicitTag=tag.Tag(tag.tagClassContext,
+                tag.tagFormatSimple, 6))),
+            namedtype.NamedType('iPAddress', univ.OctetString().subtype(
+                implicitTag=tag.Tag(tag.tagClassContext,
+                tag.tagFormatSimple, 7))),
+            namedtype.NamedType('registeredID', 
univ.ObjectIdentifier().subtype(
+                implicitTag=tag.Tag(tag.tagClassContext,
+                tag.tagFormatSimple, 8))),
+            )
 
+    class GeneralNames(univ.SequenceOf):
+        componentType = GeneralName()
+        sizeSpec = univ.SequenceOf.sizeSpec + 
constraint.ValueSizeConstraint(1, MAX)
 
-#s = '0\x1a\x82\rwww.gajim.org\x82\tgajim.org'
-s = 
'0\x81\x86\x82\x0c*.jabber.org\x82\njabber.org\xa0\x1a\x06\x08+\x06\x01\x05\x05\x07\x08\x05\xa0\x0e\x0c\x0c*.jabber.org\xa0\x1a\x06\x08+\x06\x01\x05\x05\x07\x08\x07\xa0\x0e\x16\x0c*.jabber.org\xa0\x18\x06\x08+\x06\x01\x05\x05\x07\x08\x05\xa0\x0c\x0c\njabber.org\xa0\x18\x06\x08+\x06\x01\x05\x05\x07\x08\x07\xa0\x0c\x16\njabber.org'
+    def _parse_asn1(asn1):
+        obj = decode(asn1, asn1Spec=GeneralNames())[0]
+        r = {}
+        for o in obj:
+            name = o.getName()
+            if name == 'dNSName':
+                if name not in r:
+                    r[name] = []
+                r[name].append(str(o.getComponent()))
+            if name == 'otherName':
+                if name not in r:
+                    r[name] = {}
+                tag = str(tuple(o.getComponent())[0])
+                val = str(tuple(o.getComponent())[1])
+                if tag not in r[name]:
+                    r[name][tag] = []
+                r[name][tag].append(val)
+            if name == 'uniformResourceIdentifier':
+                r['uniformResourceIdentifier'] = True
+        return r
 
-def _parse_asn1(asn1):
-    obj = decode(asn1, asn1Spec=GeneralNames())[0]
-    r = {}
-    for o in obj:
-        name = o.getName()
-        if name == 'dNSName':
-            if name not in r:
-                r[name] = []
-            r[name].append(str(o.getComponent()))
-        if name == 'otherName':
-            if name not in r:
-                r[name] = {}
-            tag = str(tuple(o.getComponent())[0])
-            val = str(tuple(o.getComponent())[1])
-            if tag not in r[name]:
-                r[name][tag] = []
-            r[name][tag].append(val)
-        if name == 'uniformResourceIdentifier':
-            r['uniformResourceIdentifier'] = True
-    return r
-
-def check_certificate(cert, domain):
-    cnt = cert.get_extension_count()
-    if '.' in domain:
-        compared_domain = domain.split('.', 1)[1]
-    else:
-        compared_domain = ''
-    srv_domain = '_xmpp-client.' + domain
-    compared_srv_domain = '_xmpp-client.' + compared_domain
-    for i in range(0, cnt):
-        ext = cert.get_extension(i)
-        if ext.get_short_name() == 'subjectAltName':
-            r = _parse_asn1(ext.get_data())
-            if 'otherName' in r:
-                if oid_xmppaddr in r['otherName']:
-                    for host in r['otherName'][oid_xmppaddr]:
-                        try:
-                            host = prep(None, host, None)
-                        except InvalidFormat:
+    def check_certificate(cert, domain):
+        cnt = cert.get_extension_count()
+        if '.' in domain:
+            compared_domain = domain.split('.', 1)[1]
+        else:
+            compared_domain = ''
+        srv_domain = '_xmpp-client.' + domain
+        compared_srv_domain = '_xmpp-client.' + compared_domain
+        for i in range(0, cnt):
+            ext = cert.get_extension(i)
+            if ext.get_short_name() == 'subjectAltName':
+                r = _parse_asn1(ext.get_data())
+                if 'otherName' in r:
+                    if oid_xmppaddr in r['otherName']:
+                        for host in r['otherName'][oid_xmppaddr]:
+                            try:
+                                host = prep(None, host, None)
+                            except InvalidFormat:
+                                continue
+                            if host == domain:
+                                return True
+                    if oid_dnssrv in r['otherName']:
+                        for host in r['otherName'][oid_dnssrv]:
+                            if host.startswith('_xmpp-client.*.'):
+                                if host.replace('*.', '', 1) == 
compared_srv_domain:
+                                    return True
+                                continue
+                            if host == srv_domain:
+                                return True
+                if 'dNSName' in r:
+                    for host in r['dNSName']:
+                        if host.startswith('*.'):
+                            if host[2:] == compared_domain:
+                                return True
                             continue
                         if host == domain:
                             return True
-                if oid_dnssrv in r['otherName']:
-                    for host in r['otherName'][oid_dnssrv]:
-                        if host.startswith('_xmpp-client.*.'):
-                            if host.replace('*.', '', 1) == 
compared_srv_domain:
-                                return True
-                            continue
-                        if host == srv_domain:
-                            return True
-            if 'dNSName' in r:
-                for host in r['dNSName']:
-                    if host.startswith('*.'):
-                        if host[2:] == compared_domain:
-                            return True
-                        continue
-                    if host == domain:
-                        return True
_______________________________________________
Commits mailing list
[email protected]
http://lists.gajim.org/cgi-bin/listinfo/commits

Reply via email to