summaryrefslogtreecommitdiffstats
path: root/ipa-python
diff options
context:
space:
mode:
authorKarl MacMillan <kmacmill@redhat.com>2007-12-11 12:42:13 -0500
committerKarl MacMillan <kmacmill@redhat.com>2007-12-11 12:42:13 -0500
commitd2378f13d0ce867175952346302d42c7a9a9fb2b (patch)
treeadbff5e6e1715f855d08aea20e995c188dcdc248 /ipa-python
parentd53915954e68ad2fa1625ed016e7e65cd6f4e4e0 (diff)
parentb75d735b7e15198fbc0e7baad582696a97f0d5ec (diff)
downloadfreeipa-d2378f13d0ce867175952346302d42c7a9a9fb2b.tar.gz
freeipa-d2378f13d0ce867175952346302d42c7a9a9fb2b.tar.xz
freeipa-d2378f13d0ce867175952346302d42c7a9a9fb2b.zip
Merge.
Diffstat (limited to 'ipa-python')
-rw-r--r--ipa-python/ipaclient.py17
-rw-r--r--ipa-python/ipaerror.py5
-rw-r--r--ipa-python/ipautil.py32
-rw-r--r--ipa-python/rpcclient.py18
4 files changed, 49 insertions, 23 deletions
diff --git a/ipa-python/ipaclient.py b/ipa-python/ipaclient.py
index 168f01d38..d815afa7b 100644
--- a/ipa-python/ipaclient.py
+++ b/ipa-python/ipaclient.py
@@ -117,9 +117,6 @@ class IPAClient:
user_dict = user.toDict()
- # dn is set on the server-side
- del user_dict['dn']
-
# convert to a regular dict before sending
result = self.transport.add_user(user_dict, user_container)
return result
@@ -386,6 +383,20 @@ class IPAClient:
def add_service_principal(self, princ_name):
return self.transport.add_service_principal(princ_name)
+ def find_service_principal(self, criteria, sattrs=None, searchlimit=0, timelimit=-1):
+ """Return a list: counter followed by a Entity object for each host that
+ matches the criteria. If the results are truncated, counter will
+ be set to -1"""
+ result = self.transport.find_service_principal(criteria, sattrs, searchlimit, timelimit)
+ counter = result[0]
+
+ hosts = [counter]
+ for attrs in result[1:]:
+ if attrs is not None:
+ hosts.append(entity.Entity(attrs))
+
+ return hosts
+
def get_keytab(self, princ_name):
return self.transport.get_keytab(princ_name)
diff --git a/ipa-python/ipaerror.py b/ipa-python/ipaerror.py
index 2f9a98363..e34963365 100644
--- a/ipa-python/ipaerror.py
+++ b/ipa-python/ipaerror.py
@@ -177,3 +177,8 @@ CONFIG_DEFAULT_GROUP = gen_error_code(
CONFIGURATION_CATEGORY,
0x0002,
"You cannot remove the default users group.")
+
+CONFIG_INVALID_OC = gen_error_code(
+ CONFIGURATION_CATEGORY,
+ 0x0003,
+ "Invalid object class.")
diff --git a/ipa-python/ipautil.py b/ipa-python/ipautil.py
index e98aa4c6e..ffe75a90b 100644
--- a/ipa-python/ipautil.py
+++ b/ipa-python/ipautil.py
@@ -25,14 +25,11 @@ import logging
import subprocess
from random import Random
from time import gmtime
-import os
+import os, sys, traceback, readline
import stat
-import socket
-import readline
-import traceback
+
from types import *
-from string import lower
import re
import xmlrpclib
import datetime
@@ -82,7 +79,7 @@ def run(args, stdin=None):
logging.info(stderr)
if p.returncode != 0:
- raise self.CalledProcessError(p.returncode, ' '.join(args))
+ raise CalledProcessError(p.returncode, ' '.join(args))
def file_exists(filename):
try:
@@ -121,24 +118,24 @@ class CIDict(dict):
self.update(default or {})
def __getitem__(self,key):
- return super(CIDict,self).__getitem__(lower(key))
+ return super(CIDict,self).__getitem__(string.lower(key))
def __setitem__(self,key,value):
- lower_key = lower(key)
+ lower_key = string.lower(key)
self._keys[lower_key] = key
- return super(CIDict,self).__setitem__(lower(key),value)
+ return super(CIDict,self).__setitem__(string.lower(key),value)
def __delitem__(self,key):
- lower_key = lower(key)
+ lower_key = string.lower(key)
del self._keys[lower_key]
- return super(CIDict,self).__delitem__(lower(key))
+ return super(CIDict,self).__delitem__(string.lower(key))
def update(self,dict):
for key in dict.keys():
self[key] = dict[key]
def has_key(self,key):
- return super(CIDict, self).has_key(lower(key))
+ return super(CIDict, self).has_key(string.lower(key))
def get(self,key,failobj=None):
try:
@@ -373,7 +370,7 @@ def format_list(items, quote=None, page_width=80):
'''
left_quote = right_quote = ''
num_items = len(items)
- if not num_items: return text
+ if not num_items: return ""
if quote is not None:
if type(quote) in StringTypes:
@@ -458,7 +455,7 @@ def read_pairs_file(filename):
fd = open(filename)
text = fd.read()
text = comment_re.sub('', text) # kill comments
- pairs = ipautil.parse_key_value_pairs(text)
+ pairs = parse_key_value_pairs(text)
if fd != sys.stdin: fd.close()
return pairs
@@ -470,7 +467,7 @@ def read_items_file(filename):
fd = open(filename)
text = fd.read()
text = comment_re.sub('', text) # kill comments
- items = ipautil.parse_items(text)
+ items = parse_items(text)
if fd != sys.stdin: fd.close()
return items
@@ -568,11 +565,6 @@ class AttributeValueCompleter:
readline.set_completer_delims(self.prev_completer_delims)
readline.set_completer(self.prev_completer)
- def _debug(self):
- print >> output_fd, "lhs='%s' lhs_complete=%s operator='%s' operator_complete=%s rhs='%s'" % \
- (self.lhs, self.lhs_complete, self.operator, self.operator_complete, self.rhs)
-
-
def parse_input(self):
'''We are looking for 3 tokens: <lhs,op,rhs>
Extract as much of each token as possible.
diff --git a/ipa-python/rpcclient.py b/ipa-python/rpcclient.py
index 6f039f9fa..5656b99d9 100644
--- a/ipa-python/rpcclient.py
+++ b/ipa-python/rpcclient.py
@@ -703,6 +703,24 @@ class RPCClient:
return ipautil.unwrap_binary_data(result)
+ def find_service_principal (self, criteria, sattrs=None, searchlimit=0, timelimit=-1):
+ """Return a list: counter followed by a Entity object for each host that
+ matches the criteria. If the results are truncated, counter will
+ be set to -1"""
+
+ server = self.setup_server()
+ try:
+ # None values are not allowed in XML-RPC
+ if sattrs is None:
+ sattrs = "__NONE__"
+ result = server.find_service_principal(criteria, sattrs, searchlimit, timelimit)
+ except xmlrpclib.Fault, fault:
+ raise ipaerror.gen_exception(fault.faultCode, fault.faultString)
+ except socket.error, (value, msg):
+ raise xmlrpclib.Fault(value, msg)
+
+ return ipautil.unwrap_binary_data(result)
+
def get_keytab(self, princ_name):
server = self.setup_server()