From 776ae1d92d28d2c291f4cd42471eb87441f29fe5 Mon Sep 17 00:00:00 2001 From: Robbie Harwood Date: Mon, 19 Feb 2018 16:47:44 -0500 Subject: [PATCH] Port to python-gssapi As part of this, migrate any urllib2_kerberos code to urllib-gssapi. --- .travis.yml | 2 +- Makefile | 2 +- did.spec | 7 +++++-- did/cli.py | 8 ++++---- did/plugins/jira.py | 4 ++-- did/plugins/rt.py | 18 ++++++++++-------- docs/conf.py | 2 +- examples/dockerfile | 2 +- setup.py | 6 +++--- 9 files changed, 28 insertions(+), 23 deletions(-) diff --git a/Makefile b/Makefile index cd0514b..2c1ac9b 100644 --- a/Makefile +++ b/Makefile @@ -79,7 +79,7 @@ clean: run_docker: build_docker @echo @echo "Please note: this is a first cut at doing a container version as a result; known issues:" - @echo "* kerberos auth may not be working correctly" + @echo "* GSSAPI auth may not be working correctly" @echo "* container runs as privileged to access the conf file" @echo "* output directory may not be quite right" @echo diff --git a/did/cli.py b/did/cli.py index 623f3e4..8ea5c52 100644 --- a/did/cli.py +++ b/did/cli.py @@ -12,7 +12,7 @@ from __future__ import unicode_literals, absolute_import import re import sys import argparse -import kerberos +import gssapi from dateutil.relativedelta import relativedelta as delta import did.base @@ -205,7 +205,7 @@ def main(arguments=None): did.base.Config.path(), did.base.Config.example().strip())) raise - except kerberos.GSSError as error: - log.debug(error) + except gssapi.exceptions.GSSError as error: + log.debug(error.gen_msg()) raise did.base.ConfigError( - "Kerberos authentication failed. Try kinit.") + "GSSAPI authentication failed. Try kinit.") diff --git a/did/plugins/jira.py b/did/plugins/jira.py index 874b21f..9c62a1d 100644 --- a/did/plugins/jira.py +++ b/did/plugins/jira.py @@ -39,7 +39,7 @@ import urllib import urllib2 import cookielib import dateutil.parser -import urllib2_kerberos +import urllib_gssapi from did.utils import log, pretty, listed from did.base import Config, ReportError @@ -254,7 +254,7 @@ class JiraStats(StatsGroup): urllib2.HTTPSHandler(debuglevel=0), urllib2.HTTPRedirectHandler, urllib2.HTTPCookieProcessor(cookie), - urllib2_kerberos.HTTPKerberosAuthHandler) + urllib_gssapi.HTTPSPNEGOAuthHandler) log.debug("Connecting to {0}".format(self.auth_url)) if self.auth_type == 'basic': diff --git a/did/plugins/rt.py b/did/plugins/rt.py index a6f470b..f75f700 100644 --- a/did/plugins/rt.py +++ b/did/plugins/rt.py @@ -15,7 +15,9 @@ from __future__ import absolute_import, unicode_literals import httplib import urllib import urlparse -import kerberos +import gssapi + +from base64 import b64encode, b64decode from did.utils import log, pretty from did.base import ReportError, Config @@ -36,18 +38,18 @@ class RequestTracker(object): self.url_string = parent.url def get(self, path): - """ Perform a GET request with Kerberos authentication """ - # Prepare Kerberos ticket granting ticket """ - _, ctx = kerberos.authGSSClientInit( - 'HTTP@{0}'.format(self.url.netloc)) - kerberos.authGSSClientStep(ctx, "") - tgt = kerberos.authGSSClientResponse(ctx) + """ Perform a GET request with GSSAPI authentication """ + # Generate token + service_name = gssapi.Name('HTTP@{0}'.format(self.url.netloc), + gssapi.NameType.hostbased_service) + ctx = gssapi.SecurityContext(usage="initiate", name=service_name) + data = b64encode(ctx.step()).decode() # Make the connection connection = httplib.HTTPSConnection(self.url.netloc, 443) log.debug("GET {0}".format(path)) connection.putrequest("GET", path) - connection.putheader("Authorization", "Negotiate {0}".format(tgt)) + connection.putheader("Authorization", "Negotiate {0}".format(data)) connection.putheader("Referer", self.url_string) connection.endheaders() diff --git a/examples/dockerfile b/examples/dockerfile index e289169..92a2f6e 100644 --- a/examples/dockerfile +++ b/examples/dockerfile @@ -1,7 +1,7 @@ FROM fedora MAINTAINER langdon RUN yum clean all && yum -y update -RUN yum -y install python python-pip make gcc krb5-devel python-devel python-setuptools python-kerberos python-nitrate python-dateutil python-urllib2_kerberos +RUN yum -y install python python-pip make gcc krb5-devel python-devel python-setuptools python-gssapi python-nitrate python-dateutil python-urllib-gssapi RUN yum clean all COPY . /opt/did -- 2.16.1