From b7438c3da29cc2bd190da8c656bf4f0c85da5019 Mon Sep 17 00:00:00 2001 From: Rob Crittenden Date: Wed, 22 Apr 2009 14:31:18 -0400 Subject: Use XML rather than string routines to handle response from dogtag Remove trailing CR/LF from the password file --- ipaserver/plugins/ra.py | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) (limited to 'ipaserver') diff --git a/ipaserver/plugins/ra.py b/ipaserver/plugins/ra.py index de14cbd3a..1238f5036 100644 --- a/ipaserver/plugins/ra.py +++ b/ipaserver/plugins/ra.py @@ -53,7 +53,14 @@ from ipapython import nsslib import nss.nss as nss import nss.ssl as ssl from nss.error import NSPRError +import xml.dom.minidom +def get_xml_value(doc, tagname): + try: + item_node = doc.getElementsByTagName(tagname) + return item_node[0].childNodes[0].data + except IndexError: + return None class ra(Backend): """ @@ -71,7 +78,7 @@ class ra(Backend): self.ipa_certificate_nickname = "ipaCert" self.ca_certificate_nickname = "caCert" f = open(self.pwd_file, "r") - self.password = f.readline() + self.password = f.readline().strip() f.close() super(ra, self).__init__() @@ -229,23 +236,27 @@ class ra(Backend): ) response = {} if (status == 200): - status = self.__find_substring(stdout, "", "") + doc = xml.dom.minidom.parseString(stdout) + + status = get_xml_value(doc, "Status") if status is not None: response["status"] = status - request_id = self.__find_substring(stdout, "", "") + request_id = get_xml_value(doc, "Id") if request_id is not None: response["request_id"] = request_id - serial_number = self.__find_substring(stdout, "", "") + serial_number = get_xml_value(doc, "serialno") if serial_number is not None: response["serial_number"] = ("0x%s" % serial_number) - subject = self.__find_substring(stdout, "", "") + subject = get_xml_value(doc, "SubjectDN") if subject is not None: response["subject"] = subject - certificate = self.__find_substring(stdout, "", "") + certificate = get_xml_value(doc, "b64") if certificate is not None: response["certificate"] = certificate if response.has_key("status") is False: response["status"] = "2" + + doc.unlink() else: response["status"] = str(status) return response -- cgit