#4985 [RFE] Support Python 3
Closed: fixed Opened by mkosek.

FreeIPA is currently only working in Python 2 environment. The long term plan is to continuously converge to support of both Python 2 and Python 3 environments and then switching to Python 3 only, when the time comes.

Currently known steps required before switching the actual Python 3:

  • Break off ipaldap into a separate subpackage
  • Python 3 support of all FreeIPA Requires and BuildRequires. The biggest blocker is Python 3 support with python-ldap
  • Move to python-gssapi instead of python-kerberos and python-krbV which do not have Python 3 support and it is not planned either
  • (Optional) Fixing the build process of FreeIPA so that Python code is in proper noarch packages

master:

  • b8c46f2a32d0d8c2dc6ef0867f85f63cf076a004 Modernize number literals

master:

  • 28b0bfaefea02fe188b57b602396f5ef62863726 dns plugin: Fix zone normalization under Python 3
  • 05cb4ba4e97d8cbffaf1c16451c488db4a90a878 sysrestore: Iterate over a list of dict keys

ipa-4-3:

  • 1e228f27e9d6314b5cdc58c772c350b0592ebe86 dns plugin: Fix zone normalization under Python 3
  • c8bcf4287f9aa881a6517f26adce001b3dbcd1c2 sysrestore: Iterate over a list of dict keys

master:

  • f753ad322dfdd81907a309827bddfcb1e47917a7 test_xmlrpc: Use absolute imports
  • 6406c7a5935e9fb9cd41af49f67d6200021b3574 xmlrpc_test: Rename exception instance before working with it
  • 890f83b0bbd5ec03397e817ed1282fa66efab7da radiusproxy plugin: Use str(error) rather than error.message
  • 095d0cb7afc3d404829d87bc894d8691be2228ef xmlrpc_test: Expect bytes rather than strings for binary attributes
  • baaa041b8a272e43c99f00f69fc645a2e92216db ipalib.rpc: Send base64-encoded data as string under Python 3
  • 14aba1c7c16e3b4e6375305990fffbd86cefbfdd range plugin tests: Use bytes with MockLDAP under Python 3
  • bdee89001455825bfe2c7e820c6b2d651f1f45eb radiusproxy plugin tests: Expect bytes, not text, for ipatokenradiussecret
  • 6ddf0d657f70eb03d17af2e63eb52d6ef33305be certprofile plugin: Use binary mode for file with binary data
  • 20a6a42567f0fa21945f02aa58420c31bc0c9127 test_add_remove_cert_cmd: Use bytes for base64.b64encode()

ipa-4-3:

  • 5750c3ece9359ca5a1c9ddbbf727eb63862709ce test_xmlrpc: Use absolute imports
  • ba3d77253a54e862249476e3d289ebf01f1a9f9a xmlrpc_test: Rename exception instance before working with it
  • a514ebdc81548f37e5fedb7bb43ca7ddab473af8 radiusproxy plugin: Use str(error) rather than error.message
  • 4c68bd671a89f3ddda0c09f9abffe0e1b87098cb xmlrpc_test: Expect bytes rather than strings for binary attributes
  • 72fb2674117ee8c3c1cafa17512e524ea437f966 ipalib.rpc: Send base64-encoded data as string under Python 3
  • 8f637bc9b1343979a0ead7346a5b0d771f133420 range plugin tests: Use bytes with MockLDAP under Python 3
  • aa052a0976ce3ab643fd54a10bc5428711dd9b61 radiusproxy plugin tests: Expect bytes, not text, for ipatokenradiussecret
  • ffb8fcc20848b570bff7a7776ad08d23ac882ff5 certprofile plugin: Use binary mode for file with binary data
  • c009ea8a7622a567de2101d8577955942e67a44d test_add_remove_cert_cmd: Use bytes for base64.b64encode()

master:

  • a9a13530988c616b331545ea02f539d39df64e27 Fix remaining relative import and enable Pylint check
  • 5dbb0f6fec59defd795dd501b67740a79616e86b ipalib.cli: Improve reporting of binary values in the CLI
  • 7d4d819b90f23cffbe437566818e29c394800b9e test_cert_plugin: Encode 'certificate' for comparison with 'usercertificate'

ipa-4-3:

  • 2c5b29fe9247ee4b96c63406499ea40ed8e968cf Fix remaining relative import and enable Pylint check
  • 39132fd1f3a9798957e8c96529bc235ed14c5db3 ipalib.cli: Improve reporting of binary values in the CLI
  • 0ebbb48dc4cf0b9df78363f6a683c388634c595f test_cert_plugin: Encode 'certificate' for comparison with 'usercertificate'

master:

  • 36094b2a542a9472506034dc6c86a573e95c71de ipaldap: Keep attribute names as text, not bytes
  • 75d0a73bbc426e9b6cabc38f2e932d701b25a762 ipapython.secrets.kem: Use ConfigParser from six.moves
  • 9477cddfeb9adc03e039155ce3b8a0b560f71098 test_topology_plugin: Don't rely on order of an attribute's values
  • 9ca450ac436344afd3a46d9852d8329a2e9a48d2 test_rpcserver: Expect updated error message under Python 3
  • 743828b0f47ca4934125cfb8dc57f79283b95a4d ipaplatform.redhat: Use bytestrings when calling rpm.so for version comparison
  • 25560f0e1db0c432de35a2496d9c1f8e63dc3dfd test_ipaserver.test_ldap: Use bytestrings for raw LDAP values
  • c192c1ae3e080597995b906d93cc7607ffc605c0 ipaldap: Convert dict items to list before iterating
  • 037eae26d0cd8467d3a559bb4cc585c61b626734 test_ipaserver.test_ldap: Adjust tests to Python 3's KeyView

ipa-4-3:

  • f01b5e506c720181f56e54aa89925a4720642d83 ipaldap: Keep attribute names as text, not bytes
  • 546b1d0fe6cefd2cbaa3d56f0b1d2939fbdff291 ipapython.secrets.kem: Use ConfigParser from six.moves
  • 937ebf43745dff7c9894954262bab2d71d9afc71 test_topology_plugin: Don't rely on order of an attribute's values
  • 74e3fd1d4ae4067caf0d4bda9e962e7c5ceb821c test_rpcserver: Expect updated error message under Python 3
  • 12e73c95ccd26b5d8156abfddd59ddaca0689a6b ipaplatform.redhat: Use bytestrings when calling rpm.so for version comparison
  • 3c610bee162f6b420ae91592d90303b662249b7e test_ipaserver.test_ldap: Use bytestrings for raw LDAP values
  • a78c350589733585b78d6cd7ece63276c2b57634 ipaldap: Convert dict items to list before iterating
  • 1933e604fb0822bc08caa4aec499be949f731d3b test_ipaserver.test_ldap: Adjust tests to Python 3's KeyView

master:

  • 38e8719f728e6d54289507fe2c7f79f9272c45c0 Python3 pylint fixes
  • 7fef9cbec725beed62eb425449083c59416ed975 Fix Python 3 bugs discovered by pylint
  • fef6f18aa27c3c5286c48dce4419db6ff9ac967b Silence import warnings for Samba bindings
  • 6bbbce44733761fda1fc588397b8baddbc7f8de3 wrap long line

master:

  • 84a9611cb885f04c72cd657c3a3e7bc4aff39d93 ipaldap: properly escape raw binary values in LDAP filters

master:

  • 23239bccc18f2fdc10431134a1c6a777f450704e py3: create_cert_db: write to file in a compatible way
  • e0641092770530e3b93c00de415172751d031210 py3: service.py: replace mkstemp by NamedTemporaryFile
  • 63b5d4a8594c5c6bc9ade69996fbbc1bcf19a2bf py3: open temporary ldif file in text mode
  • bbe8849a654ed0764e1834f24d1837df41a79881 py3: ldap modlist must have keys as string, not bytes
  • 7ae5e5f66919141821fdffbd6f8683c6d7afddd7 py3: ipautil: open tempfiles in text mode
  • 0d4074b4f1a57ed6545d819aa5a48e4b35237568 py3: CA/KRA: config parser requires string
  • 2547bca8df69e6c4d5f4c67a63fbc3c06ccc95c6 py3: write CA/KRA config into file opened in text mode
  • 232ceed5bbfb0afa45078d8e95b84dabe4d7cafd py3: cainstance: replace mkstemp with NamedTemporaryFile
  • c0b5c6709d9e3a51117994fc8b605ba54e6263d7 py3: _httplib_request: don't convert string to bytes
  • 51578882fc8456788d69a57de1a1d45ead58ba14 py3: HTTPResponse has no 'dict' attribute in 'msg'
  • 0a1d7f2e01819ad6e4a19d0416b3a01883dea7d0 py3: add_entry_to_group: attribute name must be string not bytes
  • 4b148c8ca3d022020fa6caccf02729c090c8dbcb py3: __add_acl: use standard ipaldap methods
  • 746d4ffc583a847834a592150644fa4270486c89 py3: make_filter_from_attr: use string instead of bytes
  • 1e0f98a146ecedf84b8e3e07fbd41a897ddd399d py3: convert_attribute_members: don't use bytes as parameter for DN
  • 0eb5a0e0ec2d232d2921ae5f9e8d0885146a5610 dogtag.py: fix exception logging of JSON data
  • 18337bf7f7c31a47fe0c7280f82fca043b548bd5 py3: decode bytes for json.loads()

master:

  • a9fec1de1aa2b3c0f4c4ec6eff25ff2e75c774b0 py3: session.py decode server name to str
  • 9739d0354a8ac5fd357f7d131b3f75aa05df058b py3: rpcserver: decode input because json requires string
  • 7e8eb533752bbf5e2f05ec6bfb0ffefa8e9dcddf Py3: Fix undefined variable
  • 35e135c4e3a7f0bf21ed4c838b8f76b43701a047 py3: session: fix r/w ccache data
  • cca9aa43e146f15e235eee1197209d0ca88eb39c py3: WSGI executioners must return bytes in list
  • aa036e5f332ef0b1ebbff6b824e236b1eeaf076e py3: rpcserver fix undefined variable
  • dd3d9f1ca61946ea5d7daa17ba1d8a883922d526 py3: ipaldap: update encode/decode methods
  • 49333058c869dd4bd654a7974e6e144ffd3f0dc3 py3: get_effective_rights: values passed to ldap must be bytes
  • b37d18288d40b4ec0b5a8df676456e09ae5f26c1 py3: can_read: attributelevelrights is already string
  • deaf9ae2473833dacb64c4961db3ae9f7c570ebd Use dict comprehension
  • 1023cfebff99af165212dee94290a05754297270 Principal: validate type of input parameter
  • d5ab0637fe89cbcb61491fe08b7376aeaf7ccdb8 py3: fix CSR encoding inside framework
  • 47e76e16ef2e5d714881f3cce204611a95b4e5c8 py3: fingerprint_hex_sha256: fix encoding/decoding
  • b8d6524d43dd0667184aebc79fb77a9b8a46939a py3: strip_header: support both bytes and unicode
  • 980c8a5f9e4ccbcd3c11def9cab33d0e61e945ae py3: normalize_certificate: support both bytes and unicode

master:

  • 5de70e31999eb219bd47aa81b0c003a6c15cf748 py3: tests_xmlrpc: do not call str() on bytes

master:

  • 91ab650ac42d34d4958e33da7ef0641842511a89 py3: x509.py: return principal as unicode string

master:

  • 66fa0585aa3a7219aa3f5b548a0a84f052d62b8e pki: add missing depedency pki-base[-python3]
  • bd83fdf51621fe777c1f7823dcb13c4dfa26fa8e pki-base: use pki-base-python2 as dependency

master:

  • caa560ca79e4038b161b27d11e3f144606dbbcdb py3: base64 encoding/decoding returns always bytes don't mix it
  • a93b2bea5ce88a934ba2ab39bdaa518fb55064c4 py3: remove_entry_from_group: attribute name must be string
  • a3d3b0ad2537c9d11d9c6108c31e079f0dfcf31c py3: _ptrrecord_precallaback: use bytes with labels
  • 03d0a55e8a21a334ca4dc625527cae93633a7314 py3: DNS: get_record_entry_attrs: do not modify dict during iteration
  • a584758cfb87567a9c640ae107903b0f6c9fec30 py3: _convert_to_idna: fix bytes/unicode mistmatch
  • ab53d80883320060769b7bfada2a813b345b9e4a py3: ipaldap: properly encode DNSName to bytes
  • 4c84341b8bc14cd19a4e2c2df4c13b95ff7eeb05 py3: send Decimal number as string instead of base64 encoded value

master:

  • d38540acd614bcaa489023401fc8db7c02cd3892 py3: DN: fix BytesWarning
  • 6bb5af7bea21d44b4e5ee20cfaa2f76b12ea0929 py3: get_memberofindirect: fix ByteWarnings
  • a5ccdc16cbcec433ef061dfe65515e32c3021ea2 py3: test_ipaserver: fix BytesWarnings

master:

  • b24787a67fd8b19b9222979a963a8f28b22153ee py3: ldapupdate: fix logging str(bytes) issue

master:

  • 88b192a37ead1538e6d840c2f686f8d21a948542 py3: modify_s: attribute name must be str not bytes
  • 2674a217acc2864a5fed98d7ef1e7031eae4f866 py3: configparser: use raw keyword
  • c27a46177c710fb18bf5b02beab4bd82c191a4bc py3: custodia: basedn must be unicode
  • 8660b9e96801a764e808ca69c3c14a4a019d4eb8 py3: kem.py: user bytes with ldap values
  • d4aa75d10582443b38447985c3fce8e65fcd48a6 custodia: kem.set_keys: replace too-broad exception
  • f31d73b79aaa1746f7d32576658fcd4136870115 py3: upgradeinstance: open dse.ldif in textual mode
  • 7fd36e4d3651f327a8c3a2f13b92a2a304352dfd py3: upgradeinstance: decode data before storing them as backup...
  • 47f912e16ba6de2f3579de610b0d902cf3e621a2 py3: upgradeinstance: use bytes literals with LDIF operations
  • 488d01ced715929d47f6766a63b7d6c597125562 py3: create DNS zonefile: use textual mode
  • 69072cb80f8c4b7f6eff0c7cdfe6545fe59ea7b5 py3: change_admin_password: use textual mode
  • dd119f8aadb13e95e4db43053bc36c70977b001e py3: ipa_generate_password: do not compare None and Int

mass moving python3 tickets to FreeIPA 4.6 which should be smaller release targeted mainly on python3 porting.

Metadata Update from @mkosek:
- Issue assigned to mbasti
- Issue set to the milestone: FreeIPA 4.6

master:

  • 35675ca2bbe9c044f115764a2daac45f7468be00 Change ConfigParser to RawConfigParser

master:

  • 6e679783561eaa755691f6d193481e998efb7617 py3: add missing py3 pylint depedencies
  • cba678d846056606e8d1c2d29177baaa345fdbdb travis: fix pylint execution with py3

master:

  • 89eb162fcd60861ed4c628dab4e1aaf10c6160bb py3: fix regression in schemaupdate

Metadata Update from @mbasti:
- Issue close_status updated to: None

master:

  • a2147de6e2eb217163d6f106d3220c7b1e7570b5 Explicitly ask for py2 dependencies in py2 packages

master:

  • d665224a85610cccbe7d291e9ed41d2ce7e5b61c session_storage: Correctly handle string/byte types

master:

  • 1cab1e980c7cad65943e2984158a458a6472c9d2 ipadiscovery: Return realm as a string
  • c8cc62564b09959c451522b1d7eb122566594867 Docstring+refactor of IPADiscovery.ipadnssearchkrbrealm()

master:

  • 7c163c90b8445fe441612f6857174b5fd5d505f4 LDAPEntry: rename _orig to _orig_raw
  • db01767acf4cb002995a3609061a45ca90cde573 py3: LDAPClient: remove del method
  • 0487f993fdba5487bd622ffcc9c64e516077e745 py3: ipaldap: fix encoding of datetime objects

master:

  • a83b2583ab9eaeffc1b37ceb9009bdc7d5de084c adtrustinstance: pep8 fix
  • 8311069d1890d6b742b5aac17dfaaf79a6e1bf62 adtrustinstance: write the conf as a string

master:

  • b0e51688417ee422196006b700499ef7b8bb5737 py3: secrets: remove iteritems usage

master:

  • b35db9152c12f8029086fc5c3720b63c4b2b58d7 py3: travis: enable tests for plugins that are aleready working
  • c422206cc7e5de9cd94c30811489e78817290c59 py3: dogtag.py: fix bytes warnings
  • 8116a7b450581cc2bc6e0e9a58b511f43addde42 py3: test_kerberos_principal_aliases: fix code scope
  • 10d4fb7ea859cb07240b09acdb805f23782b3dc9 py3: test_location_plugin: fix iteration over changed dict
  • 3f59721c5548a62ec63a72bad0c08021e0dd536e py3: vault: data must be bytes

master:

  • db4d0998fdd37422ed9dcb0d88ea5adf6ac98412 wsgi plugins: mod_wsgi expects bytes as an output
  • d308abac2e6758014ebb39bcbd0fc3bd61a57db2 rpcserver: remove addition of str and bytes

master:

  • 8416d5772d5e14829df58dabb24b30721c302c07 py3: Remove comparison >=2 of debnug log level
  • 24eadd3a39f472669585355c5db00fc430acac1b py3: ipa_otptoken_import: fix lamba code inspection
  • e53674e741fa8a2268e4a663c3ffbc00d891123c py3: ipa_otptoken_import: fix calling unicode on bytes
  • 637d259361306bcbc4af86bbedf17a7ff6875716 py3: ipa_otptoken_import: fix hex decoding
  • 902f736a2b288fac5d080b7f146f6a8b16f882f1 py3: test_otptoken_import: fix bytes usage

master:

  • 17103e53cbbf6d4cfb42d727d3f2edb7b56c8e9c py3: temporary set dependencies to both py2 and py3 packages
  • aa1c0cf3e8f2a77e27d548f73694d99aa0497459 py3: run already ported scripts under py3 by default

master:

  • 4375ef860fdd8221baeff23e88f9217b0cddc5ac Split x509.load_certificate() into PEM/DER functions
  • b5732efda6d27f588adbc3f41259bc4511716f43 x509: Make certificates represented as objects
  • 43c74d33337d4c65947816ba31de5eaa53e001ff Introduce load_unknown_x509_certificate()
  • bf4dae70e0d163f4d485771d7d163169748fa6b3 tests: fix failing HTTPS connection
  • 5ff1de84909dd65c44b9aa48000b9e73a7a93716 parameters: relax type checks
  • 5a44ca638310913ab6b0c239374f4b0ddeeedeb3 Create a Certificate parameter
  • 1521296297d99ea9f6e8f67b30d8e11c6bd56426 x509,certdb: handle certificates as bytes
  • e1f88c844e704246e4a948dc74489513f66633d5 Fixup of not-so-good PEM certs

Metadata Update from @mbasti:
- Issue assigned to stlaz (was: mbasti)

master:

  • 276bef101b9fa0f83e5de353bc733270d958ee41 krainstance: fix writing str to file

master:

  • 0c848b791df7368a32434b3ac87a45728abc2d0f ca: TypeError fix

master:

  • c95617e71495fff4bf2352fdeb5089e3e02bd79b cainstance: read cert file as bytes

master:

  • 6f8d90d97a5f3751252f2ab99f13a5d012247f22 client: make ipa-client-install py3 compatible

master:

  • 9fc2cab972c3506b96d49b8d341259360b486eb1 certs: write and read bytes as such
  • 1124eee2ffc8fed933c2f061f4c65a0a17b519cb replica-prepare: run the script in py3 by default

master:

  • 76904ba84dce182ea003d0f88e66fc09778f51eb replica: fix SetuptoolsVersion comparison

master:

  • d147948fccd7fda1909a809a691f86722cb6de6b server plugin: pass bytes to ldap.modify_s

master:

  • 5f0332905132b7c8fa65d6ed16cd2c028e5a0ed5 Misc Python 3 fixes for ipaserver.secrets

master:

  • dbeb41efd6ad2067f24a099f27c02cab88a8d84b kerberos: fix sorting Principal objects
  • 31a5cf588e1171bcfd58d6a08a76867552dfe811 conncheck: fix progression on failure

master:

  • b1fbdbefdb201fc036e41e84a25e3e0725d8e3d2 ipautil: port host_port_open() to python 3

master:

  • 7bf6eb7e19ecdb24be185ab2a4d0a549029b9cf0 py3: Depend on newer pyldap for server-upgrade

master:

  • 5965e27b304dd21482228e4b9134549bdc9dd1ab Turn IPA scripts to python3 -bb for testing
  • 9869d52bab70bb144d51835dc4e70a61a5788ffa Make the IPA server run under Python 3 by default

master:

  • 32be3ef62210d77dc07f94837be739c82be17661 certmonger: fix storing retrieved certificates
  • 0412625a2bfc20b9f9b85ba6cb4b1e087e4630e9 certmonger: finish refactoring for request script
  • a3c11b01afa4d0f33a507c03bfdd4299fdf987dc crtmgr: fix bug if CERTMONGER_CERTIFICATE not set
  • 7ef6de931bf2dda4be022c912012974d9e494fac python3: port certmonger requests script

master:

  • 6fc7a96e11b3f5de88f971478dc9365bf91c069e cacert_manage: fix CA cert renewal

master:

  • 928374ca7de5c0bec54e848a35b6bacda9f55343 dcerpc: support Python 3

master:

  • 2151ab02c19d0a74d90d3784a1ac1b14877a7b96 py3: fix caless to CA promotion on replica

master:

  • 31142ead830b441c81ee1439e81210426792cac5 Unify storing certificates in LDAP

master:

  • 6ca8787cc7f4865cfce20241440f17d3a41bef78 Uninstall: fix BytesWarning exception

master:

  • e6a9de8a2ea453843e71ff717bee7dd74383db64 py3: remove Exception.message appearances
  • 2bc5b7f044435921b9fa1d5728731a843919102e py3: remove relative import

master:

  • b1e1109679c0a95aadbd63ce2587561b58d7a050 py3: fix schema response for py2 server with py3 client

master:

  • cac7357ebdd7c7218f1d847ca7374735d7e411cd cert: fix application of 'str' to bytes when formatting otherName

master:

  • e09b6c260288b955c1f7d63209ff6b932f363ad1 rpc: don't encode bytes
  • 1b78f79283e633abc5dd901ca4db99cea36aca1a cert: fix wrong assumption of cert-show result type

master:

  • 3aff58c804145716a34b38a0d7009df62be17d0d spec: remove python3 workaround
  • 263217ff46f7ec260629c2ace5640bd281be9914 spec: have the scripts depend on py3 packages
  • aa969da461a2bbdfc2fc2de49c3f21b6de23e9e1 spec: remove strict options from shebangs

master:

  • 5dcb0e6fc772f459a29693867f9b73f1ac811b9a dnssec: keep dnssec daemons in Python2

Metadata Update from @tkrizek:
- Issue close_status updated to: fixed
- Issue status updated to: Closed (was: Open)

Fixes that are not part of the 4.6.0 release: https://pagure.io/freeipa/issue/7131

master:

  • 84a10ee372d99bec82569ad2490f5f355f72e383 py3: ipa-dnskeysyncd: fix bytes issues
  • 53f202bdcc0ec996d51d01bff450c1344e2c32d6 py3: bindmgr: fix iteration over bytes
  • 005d85ff688ad97d0b785f3cc906c142eea4d7cd py3: bindmgr: fix bytes issues
  • efded2264f79c740ac7dbe4aca24705e734c19b8 py3 dnssec: convert hexlify to str
  • 575e513b15586b49f15428655c5d4aa6e6fc2867 More DNSSEC house keeping
  • 7670dcb8533e7c5b1a89f50af39d1128d344fb38 Run DNSSEC under Python 3
  • 6a54146bc0902e768a659e68394e454ba3993a0b Decode ODS commands
  • f39d855af446f5a98a16cbd8971d2f2463b019af DNSSEC: Reformat lines to address PEP8 violations
  • 6f65abfd1156803c047a76ab6c839d1e83d3d3ad DNSSEC code cleanup

ipa-4-6:

  • 6ba2f1e7623469f429deb042595974f71a3b325c py3: ipa-dnskeysyncd: fix bytes issues
  • 329178baf0d5d89b0e6d45b7339edd82d806b303 py3: bindmgr: fix iteration over bytes
  • cf2d2396226ee00375e7b70c87398acfac1d8639 py3: bindmgr: fix bytes issues
  • ac2b6a4104cb2dd383f5c43e04d491ff5bfcb11d py3 dnssec: convert hexlify to str
  • bc0ad3ed26f3988b98708736bd9888c5520f2dbb More DNSSEC house keeping
  • c4786391e32bbcbb9c5c802cc76ed74ca4a6a2f6 Run DNSSEC under Python 3
  • 7021b8cd36600bc928e6c5b0f996a7a4cd4b1eaa Decode ODS commands
  • 349fa4ac5d65411e589297f5af1f3d3afc5bbb57 DNSSEC: Reformat lines to address PEP8 violations
  • 1afdd51e014de650470a8e14a172f2af761269a8 DNSSEC code cleanup

master:

  • f31797c70ac6d1fe4a651def1f87350bec16d194 Have all the scripts run in python 3 by default

master:

  • a349629fbad8bcb0179c1a1f6babe76464be89d2 ipa-custodia-checker now uses python3 shebang
Metadata