/mandos/trunk

To get this branch, use:
bzr branch http://bzr.recompile.se/loggerhead/mandos/trunk

« back to all changes in this revision

Viewing changes to mandos

  • Committer: Teddy Hogeborn
  • Date: 2019-02-13 08:55:24 UTC
  • mto: This revision was merged to the branch mainline in revision 1100.
  • Revision ID: teddy@recompile.se-20190213085524-qlzqay28sjfspl4z
Tags: version-1.8.3-3
* debian/changelog (1.8.3-3): Add new entry.

Show diffs side-by-side

added added

removed removed

Lines of Context:
275
275
 
276
276
 
277
277
# Pretend that we have an Avahi module
278
 
class avahi(object):
279
 
    """This isn't so much a class as it is a module-like namespace."""
 
278
class Avahi(object):
 
279
    """This isn't so much a class as it is a module-like namespace.
 
280
    It is instantiated once, and simulates having an Avahi module."""
280
281
    IF_UNSPEC = -1               # avahi-common/address.h
281
282
    PROTO_UNSPEC = -1            # avahi-common/address.h
282
283
    PROTO_INET = 0               # avahi-common/address.h
286
287
    DBUS_INTERFACE_SERVER = DBUS_NAME + ".Server"
287
288
    DBUS_PATH_SERVER = "/"
288
289
 
289
 
    @staticmethod
290
 
    def string_array_to_txt_array(t):
 
290
    def string_array_to_txt_array(self, t):
291
291
        return dbus.Array((dbus.ByteArray(s.encode("utf-8"))
292
292
                           for s in t), signature="ay")
293
293
    ENTRY_GROUP_ESTABLISHED = 2  # avahi-common/defs.h
298
298
    SERVER_RUNNING = 2           # avahi-common/defs.h
299
299
    SERVER_COLLISION = 3         # avahi-common/defs.h
300
300
    SERVER_FAILURE = 4           # avahi-common/defs.h
 
301
avahi = Avahi()
301
302
 
302
303
 
303
304
class AvahiError(Exception):
503
504
 
504
505
 
505
506
# Pretend that we have a GnuTLS module
506
 
class gnutls(object):
507
 
    """This isn't so much a class as it is a module-like namespace."""
 
507
class GnuTLS(object):
 
508
    """This isn't so much a class as it is a module-like namespace.
 
509
    It is instantiated once, and simulates having a GnuTLS module."""
508
510
 
509
511
    library = ctypes.util.find_library("gnutls")
510
512
    if library is None:
511
513
        library = ctypes.util.find_library("gnutls-deb0")
512
514
    _library = ctypes.cdll.LoadLibrary(library)
513
515
    del library
 
516
    _need_version = b"3.3.0"
 
517
    _tls_rawpk_version = b"3.6.6"
 
518
 
 
519
    def __init__(self):
 
520
        # Need to use "self" here, since this method is called before
 
521
        # the assignment to the "gnutls" global variable happens.
 
522
        if self.check_version(self._need_version) is None:
 
523
            raise self.Error("Needs GnuTLS {} or later"
 
524
                             .format(self._need_version))
514
525
 
515
526
    # Unless otherwise indicated, the constants and types below are
516
527
    # all from the gnutls/gnutls.h C header file.
558
569
 
559
570
    # Exceptions
560
571
    class Error(Exception):
 
572
        # We need to use the class name "GnuTLS" here, since this
 
573
        # exception might be raised from within GnuTLS.__init__,
 
574
        # which is called before the assignment to the "gnutls"
 
575
        # global variable has happened.
561
576
        def __init__(self, message=None, code=None, args=()):
562
577
            # Default usage is by a message string, but if a return
563
578
            # code is passed, convert it to a string with
564
579
            # gnutls.strerror()
565
580
            self.code = code
566
581
            if message is None and code is not None:
567
 
                message = gnutls.strerror(code)
568
 
            return super(gnutls.Error, self).__init__(
 
582
                message = GnuTLS.strerror(code)
 
583
            return super(GnuTLS.Error, self).__init__(
569
584
                message, *args)
570
585
 
571
586
    class CertificateSecurityError(Error):
729
744
    check_version.argtypes = [ctypes.c_char_p]
730
745
    check_version.restype = ctypes.c_char_p
731
746
 
732
 
    _need_version = b"3.3.0"
733
 
    if check_version(_need_version) is None:
734
 
        raise self.Error("Needs GnuTLS {} or later"
735
 
                         .format(_need_version))
736
 
 
737
 
    _tls_rawpk_version = b"3.6.6"
738
747
    has_rawpk = bool(check_version(_tls_rawpk_version))
739
748
 
740
749
    if has_rawpk:
801
810
 
802
811
    # Remove non-public functions
803
812
    del _error_code, _retry_on_error
 
813
# Create the global "gnutls" object, simulating a module
 
814
gnutls = GnuTLS()
804
815
 
805
816
 
806
817
def call_pipe(connection,       # : multiprocessing.Connection