[Cluster-devel] conga/ricci/ricci ClientInstance.cpp Ricci.cpp ...

rmccabe at sourceware.org rmccabe at sourceware.org
Sun Sep 9 01:06:17 UTC 2007


CVSROOT:	/cvs/cluster
Module name:	conga
Changes by:	rmccabe at sourceware.org	2007-09-09 01:06:15

Modified files:
	ricci/ricci    : ClientInstance.cpp Ricci.cpp SSLInstance.cpp 
	                 Server.cpp 

Log message:
	Fix a couple of bugs that caused certificates to not be saved and batch queue files to not be written correctly

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/ricci/ClientInstance.cpp.diff?cvsroot=cluster&r1=1.9&r2=1.10
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/ricci/Ricci.cpp.diff?cvsroot=cluster&r1=1.26&r2=1.27
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/ricci/SSLInstance.cpp.diff?cvsroot=cluster&r1=1.9&r2=1.10
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/ricci/Server.cpp.diff?cvsroot=cluster&r1=1.7&r2=1.8

--- conga/ricci/ricci/ClientInstance.cpp	2007/08/30 17:08:44	1.9
+++ conga/ricci/ricci/ClientInstance.cpp	2007/09/09 01:06:15	1.10
@@ -106,6 +106,7 @@
 		}
 
 		bool authed = _ssl.client_cert_authed();
+		bool was_authed = authed;
 
 		// send hello
 		send(ricci.hello(authed));
@@ -130,15 +131,11 @@
 			XMLObject response = ricci.request(request, authed,
 									save_cert, remove_cert, done);
 
-			if (!authed && save_cert) {
+			if (!was_authed && save_cert)
 				_ssl.save_client_cert();
-				authed = true;
-			}
 
-			if (authed && remove_cert) {
+			if (was_authed && remove_cert)
 				_ssl.remove_client_cert();
-				authed = false;
-			}
 			send(response);
 		}
 		send(XMLObject("bye"));
--- conga/ricci/ricci/Ricci.cpp	2007/08/30 17:07:14	1.26
+++ conga/ricci/ricci/Ricci.cpp	2007/09/09 01:06:15	1.27
@@ -156,6 +156,7 @@
 			success = RRC_SUCCESS;
 			remove_cert = true;
 		}
+		authenticated = false;
 	} else if (function == "list_modules") {
 		// available modules
 		if (!authenticated) {
@@ -290,29 +291,32 @@
 	}
 
 	// create file
-	int fd = open(path_tmp.c_str(), O_RDONLY | O_CREAT | O_EXCL, 0640);
+	int fd = open(path_tmp.c_str(), O_RDWR | O_CREAT | O_EXCL, 0640);
 	if (fd == -1)
 		throw String("unable to create batch file: ") + String(strerror(errno));
 
-	// write file
-	FILE *file = fdopen(fd, "w+");
-	if (!file)
-		throw String("unable to open batch file: ") + String(strerror(errno));
-
 	try {
 		// save request
 		String xml_str(generateXML(_report));
-		if (fwrite(xml_str.c_str(), xml_str.size(), 1, file) != 1) {
-			throw String("unable to write batch request: ")
-					+ String(strerror(errno));
+		while (xml_str.size()) {
+			ssize_t ret = write(fd, xml_str.c_str(), xml_str.size());
+			if (ret < 0) {
+				if (errno == EINTR)
+					continue;
+				throw String("unable to write batch request: ")
+						+ String(strerror(errno));
+			}
+			xml_str = xml_str.substr(ret);
 		}
-		fclose(file);
+
+		close(fd);
+
 		if (rename(path_tmp.c_str(), _path.c_str())) {
 			throw String("failed to rename batch file: ")
 					+ String(strerror(errno));
 		}
 	} catch ( ... ) {
-		fclose(file);
+		close(fd);
 		unlink(path_tmp.c_str());
 		throw;
 	}
--- conga/ricci/ricci/SSLInstance.cpp	2007/08/30 17:07:14	1.9
+++ conga/ricci/ricci/SSLInstance.cpp	2007/09/09 01:06:15	1.10
@@ -450,8 +450,10 @@
 			iter != authorized_certs.end() ;
 			iter++)
 	{
-		if (iter->cert == _cert_pem)
-			unlink(iter->file.c_str());
+		if (iter->cert == _cert_pem) {
+			if (unlink(iter->file.c_str()) != 0)
+				throw String("error removing certificate");
+		}
 	}
 
 	load_client_certs();
@@ -469,6 +471,8 @@
 {
 	want_read = want_write = false;
 
+	int err = errno;
+
 	String e;
 	switch (SSL_get_error(_ssl, value)) {
 		case SSL_ERROR_NONE:
@@ -499,5 +503,5 @@
 			e = "SSL_ERROR_SSL";
 			break;
 	}
-	throw String("SSL_read() error: ") + e;
+	throw String("SSL_read() error: ") + e + ": " + String(strerror(err));
 }
--- conga/ricci/ricci/Server.cpp	2007/08/30 17:07:14	1.7
+++ conga/ricci/ricci/Server.cpp	2007/09/09 01:06:15	1.8
@@ -131,8 +131,8 @@
 		}
 
 		if (poll_data.revents & (POLLERR | POLLHUP | POLLNVAL))
-			throw String("server socket error????");
-	} // while
+			throw String("server socket error");
+	}
 }
 
 void




More information about the Cluster-devel mailing list