Skip to content

Commit 22242c9

Browse files
committed
Initial Commit -- implemented high-level creds API
0 parents  commit 22242c9

39 files changed

+4809
-0
lines changed

.gitignore

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
.coverage
2+
*.egg-info
3+
*.egg
4+
*~
5+
*.pyc
6+
/build/
7+
*.swp
8+
*.swo
9+
*.so
10+
.tox
11+
dist
12+
gssapi/**/*.c
13+
docs/build

LICENSE.txt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
Copyright (c) 2013, Solly Ross
2+
All rights reserved.
3+
4+
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
5+
6+
* Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
7+
* Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
8+
9+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

MANIFEST.in

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
include *.txt
2+
recursive-include docs *.txt
3+
4+
recursive-include sys_src *.h
5+
6+
recursive-include gssapi *.pxd

README.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
./README.txt

README.txt

Lines changed: 169 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,169 @@
1+
========
2+
PyGSSAPI
3+
========
4+
5+
.. role:: python(code)
6+
:language: python
7+
8+
.. role:: bash(code)
9+
:language: bash
10+
11+
PyGSSAPI provides both low-level and high level wrappers around the GSSAPI
12+
C libraries. While it focuses on the Kerberos mechanism, it should also be
13+
useable with other GSSAPI mechanisms that do not rely on mechanism-specific
14+
C values that cannot easily be translated into Python.
15+
16+
Requirements
17+
============
18+
19+
* A working implementation of GSSAPI (such as from MIT Kerberos)
20+
which includes header files
21+
22+
* a C compiler (such as GCC)
23+
24+
* Cython (*NEW*, to compile from scratch)
25+
26+
* the `flufl.enum` Python package
27+
28+
* the `nose` package (for tests)
29+
30+
* the `shouldbe` package (for tests)
31+
32+
Installation
33+
============
34+
35+
Easy Way
36+
--------
37+
38+
.. code-block:: bash
39+
40+
$ pip install pygssapi
41+
42+
From the Git Repo
43+
-----------------
44+
45+
.. code-block:: bash
46+
47+
$ git clone https://github.com/DirectXMan12/python-gssapi.git
48+
$ python setup.py build
49+
$ python setup.py install
50+
51+
Tests
52+
=====
53+
54+
I have written some tests of PyGSSAPI; they live in the `gssapi.tests`
55+
directory. Currently the basic :python:`gssapi.raw` commands and
56+
:python:`gssapi.client.BasicGSSClient` have been tested. Before running
57+
the tests, a valid 'host/[FQDN]' (e.g. 'host/some.domain') must have been
58+
:bash:`kinit`-ed. If you run :bash:`tox`, it will do this for you (you will
59+
likely need to run :bash:`tox` with :bash:`sudo`).
60+
61+
.. code-block:: bash
62+
63+
$ sudo tox
64+
65+
or
66+
67+
.. code-block:: bash
68+
69+
$ sudo kinit host/some.domain -k
70+
$ sudo setup.py nosetests
71+
72+
Structure
73+
=========
74+
75+
PyGSSAPI is composed of two parts: the low-level, C-style wrapper and the
76+
high-level, Python-style wrapper (which is a wrapper around the low-level
77+
API). Modules written in C are denoted by '(C)', whereas those written
78+
in Python are denoted '(Py)'
79+
80+
Low-Level API
81+
-------------
82+
83+
The low-level API lives in `gssapi.raw`. The methods contained therein
84+
are designed to match closely with the original GSSAPI C methods. They
85+
follow the given format:
86+
87+
* Names are camelCased versions of the C method names, with the
88+
:python:`gssapi_` prefix removed
89+
90+
* Parameters which use C int constants as enums have
91+
:python:`flufl.enum.IntEnum` classes defined, and thus may be passed
92+
either the enum members or integers
93+
94+
* In cases where a specific constant is passed in the C API to represent
95+
a default value, :python:`None` should be passed instead
96+
97+
* In cases where non-integer C constants are passed, `flufl.enum.Enum`
98+
classes are defined for common values
99+
100+
* Major and minor error codes are returned via :python:`gssapi.raw.GSSError`
101+
102+
* All other relevant output values are returned in a tuple in the return
103+
value of the method (in cases where a non-error major status code may
104+
be returned, an additional member of the tuple is provided)
105+
106+
Structure
107+
~~~~~~~~~
108+
109+
gssapi : /
110+
base : /
111+
*includes all sub-packages automatically*
112+
113+
impl : (C)
114+
core C-API methods
115+
status_utils : (C)
116+
utilities for dealing with status codes
117+
types : (Py)
118+
Enumerations and Exception Types
119+
120+
Examples
121+
~~~~~~~~
122+
123+
.. code-block:: python
124+
125+
import gssapi.raw as gb
126+
127+
TODO(sross): provide more examples
128+
129+
High-Level API
130+
--------------
131+
132+
The high-level API lives directly under :python:`gssapi`. The classes
133+
contained in each file are designed to provide a more Python, Object-Oriented
134+
view of GSSAPI. Currently, they are designed for the basic GSSAPI tasks, but
135+
will be expanded upon in the future.
136+
137+
Structure
138+
~~~~~~~~~
139+
140+
gssapi : /
141+
client : (Py)
142+
*basic clients*
143+
144+
BasicGSSClient
145+
a client capable of performing basic GSS negotiation/encryption
146+
BasicSASLGSSClient
147+
a helper class to simplify working with SASL GSSAPI
148+
type_wrappers : (Py)
149+
provides useful wrappers around some Python capsule objects
150+
151+
Examples
152+
~~~~~~~~
153+
154+
.. code-block:: python
155+
156+
import gssapi.client as gss
157+
158+
client = gss.BasicGSSClient('vnc@some.host', security_type='encrypted')
159+
160+
init_token = client.setupBaseSecurityContext()
161+
# send to server, get response back...
162+
next_token = client.updateSecurityContext(server_resp)
163+
# encrypt a message
164+
msg_enc = client.encrypt('WARNING: this is secret')
165+
# send the message, get response back...
166+
msg_unenc = client.decrypt(server_encrypted_message)
167+
168+
# freeing of resources (such as deleting the security context and releasing
169+
# the names) is handled automatically

docs/Makefile

Lines changed: 177 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,177 @@
1+
# Makefile for Sphinx documentation
2+
#
3+
4+
# You can set these variables from the command line.
5+
SPHINXOPTS =
6+
SPHINXBUILD = sphinx-build
7+
PAPER =
8+
BUILDDIR = build
9+
10+
# User-friendly check for sphinx-build
11+
ifeq ($(shell which $(SPHINXBUILD) >/dev/null 2>&1; echo $$?), 1)
12+
$(error The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx installed, then set the SPHINXBUILD environment variable to point to the full path of the '$(SPHINXBUILD)' executable. Alternatively you can add the directory with the executable to your PATH. If you don't have Sphinx installed, grab it from http://sphinx-doc.org/)
13+
endif
14+
15+
# Internal variables.
16+
PAPEROPT_a4 = -D latex_paper_size=a4
17+
PAPEROPT_letter = -D latex_paper_size=letter
18+
ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source
19+
# the i18n builder cannot share the environment and doctrees with the others
20+
I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source
21+
22+
.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext
23+
24+
help:
25+
@echo "Please use \`make <target>' where <target> is one of"
26+
@echo " html to make standalone HTML files"
27+
@echo " dirhtml to make HTML files named index.html in directories"
28+
@echo " singlehtml to make a single large HTML file"
29+
@echo " pickle to make pickle files"
30+
@echo " json to make JSON files"
31+
@echo " htmlhelp to make HTML files and a HTML help project"
32+
@echo " qthelp to make HTML files and a qthelp project"
33+
@echo " devhelp to make HTML files and a Devhelp project"
34+
@echo " epub to make an epub"
35+
@echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter"
36+
@echo " latexpdf to make LaTeX files and run them through pdflatex"
37+
@echo " latexpdfja to make LaTeX files and run them through platex/dvipdfmx"
38+
@echo " text to make text files"
39+
@echo " man to make manual pages"
40+
@echo " texinfo to make Texinfo files"
41+
@echo " info to make Texinfo files and run them through makeinfo"
42+
@echo " gettext to make PO message catalogs"
43+
@echo " changes to make an overview of all changed/added/deprecated items"
44+
@echo " xml to make Docutils-native XML files"
45+
@echo " pseudoxml to make pseudoxml-XML files for display purposes"
46+
@echo " linkcheck to check all external links for integrity"
47+
@echo " doctest to run all doctests embedded in the documentation (if enabled)"
48+
49+
clean:
50+
rm -rf $(BUILDDIR)/*
51+
52+
html:
53+
$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
54+
@echo
55+
@echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
56+
57+
dirhtml:
58+
$(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml
59+
@echo
60+
@echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml."
61+
62+
singlehtml:
63+
$(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml
64+
@echo
65+
@echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml."
66+
67+
pickle:
68+
$(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle
69+
@echo
70+
@echo "Build finished; now you can process the pickle files."
71+
72+
json:
73+
$(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json
74+
@echo
75+
@echo "Build finished; now you can process the JSON files."
76+
77+
htmlhelp:
78+
$(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp
79+
@echo
80+
@echo "Build finished; now you can run HTML Help Workshop with the" \
81+
".hhp project file in $(BUILDDIR)/htmlhelp."
82+
83+
qthelp:
84+
$(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp
85+
@echo
86+
@echo "Build finished; now you can run "qcollectiongenerator" with the" \
87+
".qhcp project file in $(BUILDDIR)/qthelp, like this:"
88+
@echo "# qcollectiongenerator $(BUILDDIR)/qthelp/PyGSSAPI.qhcp"
89+
@echo "To view the help file:"
90+
@echo "# assistant -collectionFile $(BUILDDIR)/qthelp/PyGSSAPI.qhc"
91+
92+
devhelp:
93+
$(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp
94+
@echo
95+
@echo "Build finished."
96+
@echo "To view the help file:"
97+
@echo "# mkdir -p $$HOME/.local/share/devhelp/PyGSSAPI"
98+
@echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/PyGSSAPI"
99+
@echo "# devhelp"
100+
101+
epub:
102+
$(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub
103+
@echo
104+
@echo "Build finished. The epub file is in $(BUILDDIR)/epub."
105+
106+
latex:
107+
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
108+
@echo
109+
@echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex."
110+
@echo "Run \`make' in that directory to run these through (pdf)latex" \
111+
"(use \`make latexpdf' here to do that automatically)."
112+
113+
latexpdf:
114+
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
115+
@echo "Running LaTeX files through pdflatex..."
116+
$(MAKE) -C $(BUILDDIR)/latex all-pdf
117+
@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
118+
119+
latexpdfja:
120+
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
121+
@echo "Running LaTeX files through platex and dvipdfmx..."
122+
$(MAKE) -C $(BUILDDIR)/latex all-pdf-ja
123+
@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
124+
125+
text:
126+
$(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text
127+
@echo
128+
@echo "Build finished. The text files are in $(BUILDDIR)/text."
129+
130+
man:
131+
$(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man
132+
@echo
133+
@echo "Build finished. The manual pages are in $(BUILDDIR)/man."
134+
135+
texinfo:
136+
$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
137+
@echo
138+
@echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo."
139+
@echo "Run \`make' in that directory to run these through makeinfo" \
140+
"(use \`make info' here to do that automatically)."
141+
142+
info:
143+
$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
144+
@echo "Running Texinfo files through makeinfo..."
145+
make -C $(BUILDDIR)/texinfo info
146+
@echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo."
147+
148+
gettext:
149+
$(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale
150+
@echo
151+
@echo "Build finished. The message catalogs are in $(BUILDDIR)/locale."
152+
153+
changes:
154+
$(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes
155+
@echo
156+
@echo "The overview file is in $(BUILDDIR)/changes."
157+
158+
linkcheck:
159+
$(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck
160+
@echo
161+
@echo "Link check complete; look for any errors in the above output " \
162+
"or in $(BUILDDIR)/linkcheck/output.txt."
163+
164+
doctest:
165+
$(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest
166+
@echo "Testing of doctests in the sources finished, look at the " \
167+
"results in $(BUILDDIR)/doctest/output.txt."
168+
169+
xml:
170+
$(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml
171+
@echo
172+
@echo "Build finished. The XML files are in $(BUILDDIR)/xml."
173+
174+
pseudoxml:
175+
$(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml
176+
@echo
177+
@echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml."

0 commit comments

Comments
 (0)