diff options
Diffstat (limited to 'ipa-python')
-rw-r--r-- | ipa-python/Makefile | 11 | ||||
-rw-r--r-- | ipa-python/README | 0 | ||||
-rw-r--r-- | ipa-python/__init__.py | 0 | ||||
-rwxr-xr-x | ipa-python/freeipa-python.spec | 45 | ||||
-rwxr-xr-x | ipa-python/freeipa-python.spec.in | 45 | ||||
-rw-r--r-- | ipa-python/rpcclient.py | 102 |
6 files changed, 203 insertions, 0 deletions
diff --git a/ipa-python/Makefile b/ipa-python/Makefile new file mode 100644 index 00000000..bc6554be --- /dev/null +++ b/ipa-python/Makefile @@ -0,0 +1,11 @@ +PYTHONLIBDIR ?= $(shell python -c "from distutils.sysconfig import *; print get_python_lib(1)") +PACKAGEDIR ?= $(DESTDIR)/$(PYTHONLIBDIR)/ipa + +all: ; + +install: + -mkdir -p $(PACKAGEDIR) + install -m 644 *.py $(PACKAGEDIR) + +clean: + rm -f *~ *.pyc
\ No newline at end of file diff --git a/ipa-python/README b/ipa-python/README new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/ipa-python/README diff --git a/ipa-python/__init__.py b/ipa-python/__init__.py new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/ipa-python/__init__.py diff --git a/ipa-python/freeipa-python.spec b/ipa-python/freeipa-python.spec new file mode 100755 index 00000000..61be3a5d --- /dev/null +++ b/ipa-python/freeipa-python.spec @@ -0,0 +1,45 @@ +Name: freeipa-python +Version: 0.1.0 +Release: 1%{?dist} +Summary: FreeIPA authentication server + +Group: System Environment/Base +License: GPL +URL: http://www.freeipa.org +Source0: %{name}-%{version}.tgz +BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) +BuildArch: noarch + +Requires: python + +%{!?python_sitelib: %define python_sitelib %(%{__python} -c "from distutils.sysconfig import get_python_lib; print get_python_lib()")} + +%define pkgpythondir %{python_sitelib}/ipa + +%description +FreeIPA is a server for identity, policy, and audit. + +%prep +%setup -q + +%install +rm -rf %{buildroot} +mkdir -p %{buildroot}%{pkgpythondir} + +make install DESTDIR=%{buildroot} + + +%clean +rm -rf %{buildroot} + + +%files +%defattr(-,root,root,-) +%{pkgpythondir}/* + + +%changelog +* Fri Jul 27 2007 Karl MacMillan <kmacmill@localhost.localdomain> - 0.1.0-1 +- Initial rpm version + + diff --git a/ipa-python/freeipa-python.spec.in b/ipa-python/freeipa-python.spec.in new file mode 100755 index 00000000..90a135b4 --- /dev/null +++ b/ipa-python/freeipa-python.spec.in @@ -0,0 +1,45 @@ +Name: freeipa-python +Version: VERSION +Release: 1%{?dist} +Summary: FreeIPA authentication server + +Group: System Environment/Base +License: GPL +URL: http://www.freeipa.org +Source0: %{name}-%{version}.tgz +BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) +BuildArch: noarch + +Requires: python + +%{!?python_sitelib: %define python_sitelib %(%{__python} -c "from distutils.sysconfig import get_python_lib; print get_python_lib()")} + +%define pkgpythondir %{python_sitelib}/ipa + +%description +FreeIPA is a server for identity, policy, and audit. + +%prep +%setup -q + +%install +rm -rf %{buildroot} +mkdir -p %{buildroot}%{pkgpythondir} + +make install DESTDIR=%{buildroot} + + +%clean +rm -rf %{buildroot} + + +%files +%defattr(-,root,root,-) +%{pkgpythondir}/* + + +%changelog +* Fri Jul 27 2007 Karl MacMillan <kmacmill@localhost.localdomain> - 0.1.0-1 +- Initial rpm version + + diff --git a/ipa-python/rpcclient.py b/ipa-python/rpcclient.py new file mode 100644 index 00000000..41602662 --- /dev/null +++ b/ipa-python/rpcclient.py @@ -0,0 +1,102 @@ +#! /usr/bin/python -E +# Authors: Rob Crittenden <rcritten@redhat.com> +# +# Copyright (C) 2007 Red Hat +# see file 'COPYING' for use and warranty information +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; version 2 or later +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# + +#!/usr/bin/python + +try: + import krbV +except ImportError: + pass +import xmlrpclib +import socket +import os +import base64 + +# Some errors to catch +# http://cvs.fedora.redhat.com/viewcvs/ldapserver/ldap/servers/plugins/pam_passthru/README?root=dirsec&rev=1.6&view=auto + +# FIXME: do we want this set somewhere else? +server = xmlrpclib.ServerProxy("http://localhost:80/ipa") + +def get_user(username): + """Get a specific user""" + + try: + result = server.get_user(username) + myuser = result + except xmlrpclib.Fault, fault: + raise xmlrpclib.Fault(fault.faultCode, fault.faultString) + return None + except socket.error, (value, msg): + raise xmlrpclib.Fault(value, msg) + return None + + return myuser + +def add_user(user): + """Add a new user""" + + # FIXME: Get the realm from somewhere + realm="GREYOAK.COM" + + # FIXME: This should be dynamic and can include just about anything + # Let us add in some missing attributes + if user.get('homeDirectory') is None: + user['homeDirectory'] ='/home/%s' % user['uid'] + if user.get('gecos') is None: + user['gecos'] = user['uid'] + + # FIXME: This can be removed once the DS plugin is installed + user['uidNumber'] ='501' + + # FIXME: What is the default group for users? + user['gidNumber'] ='501' + user['krbPrincipalName'] = "%s@%s" % (user['uid'], realm) + user['cn'] = "%s %s" % (user['gn'], user['sn']) + if user.get('gn'): + del user['gn'] + + try: + result = server.add_user(user) + return result + except xmlrpclib.Fault, fault: + raise xmlrpclib.Fault(fault.faultCode, fault.faultString) + return None + except socket.error, (value, msg): + raise xmlrpclib.Fault(value, msg) + return None + +def get_add_schema(): + """Get the list of attributes we need to ask when adding a new + user. + """ + + # FIXME: Hardcoded and designed for the TurboGears GUI. Do we want + # this for the CLI as well? + try: + result = server.get_add_schema() + except xmlrpclib.Fault, fault: + raise xmlrpclib.Fault(fault,faultCode, fault.faultString) + return None + except socket.error, (value, msg): + raise xmlrpclib.Fault(value, msg) + return None + + return result |