components/trousers/patches/tddl_tddl.c.patch
author Craig Mohrman <craig.mohrman@oracle.com>
Thu, 04 Aug 2016 08:26:36 -0700
changeset 6548 24913c16931e
parent 6268 447a28fa6a83
permissions -rw-r--r--
PSARC/2016/303 enable rsyslog as default Solaris logger 24362425 rsyslog should degrade service if syslog.conf has been modified

# Define Solaris-specific device paths.
# Add error message if path can't be opened.
# This change was implemented in-house.
# Except for the open() error message, it is not suitable for upstream use.
#
--- src/tddl/tddl.c	2014-04-24 11:05:44.000000000 -0700
+++ src/tddl/tddl.c	2016-06-20 11:45:31.929095585 -0700
@@ -18,13 +18,17 @@
 
 #include "trousers/tss.h"
 #include "trousers_types.h"
+#ifndef SOLARIS
 #include "linux/tpm.h"
+#endif
 #include "tcslog.h"
 #include "tddl.h"
 
 struct tpm_device_node tpm_device_nodes[] = {
+#ifndef SOLARIS
 	{"/dev/tpm0", TDDL_UNDEF, TDDL_UNDEF},
 	{"/udev/tpm0", TDDL_UNDEF, TDDL_UNDEF},
+#endif
 	{"/dev/tpm", TDDL_UNDEF, TDDL_UNDEF},
 	{NULL, 0, 0}
 };
@@ -42,6 +46,18 @@
 #include <netdb.h>
 #include <fcntl.h>
 
+#ifdef SOLARIS
+int
+get_device_fd(void)
+{
+	if (opened_device != NULL) {
+		return (opened_device->fd);
+	} else {
+		LogDebug("No opened TPM device");
+		return (-1);
+	}
+}
+#endif
 
 int
 open_device()
@@ -55,7 +71,7 @@
 		if ((tcp_device_hostname = getenv("TCSD_TCP_DEVICE_HOSTNAME")) == NULL)
 			tcp_device_hostname = "localhost";
 		if ((un_socket_device_path = getenv("TCSD_UN_SOCKET_DEVICE_PATH")) == NULL)
-			un_socket_device_path = "/var/run/tpm/tpmd_socket:0";
+			un_socket_device_path = TCSD_DEFAULT_SOCKET;
 		if ((tcp_device_port_string = getenv("TCSD_TCP_DEVICE_PORT")) != NULL)
 			tcp_device_port = atoi(tcp_device_port_string);
 		else
@@ -63,7 +79,7 @@
 	 
 		
 		fd = socket(AF_INET, SOCK_STREAM, 0);
-		if (fd > 0) {
+		if (fd >= 0) {
 			struct hostent *host = gethostbyname(tcp_device_hostname);
 			if (host != NULL) {   
 				struct sockaddr_in addr;
@@ -105,12 +121,16 @@
 		/* tpm_device_paths is filled out in tddl.h */
 		for (i = 0; tpm_device_nodes[i].path != NULL; i++) {
 			errno = 0;
-			if ((fd = open(tpm_device_nodes[i].path, O_RDWR)) >= 0)
+			if ((fd = open(tpm_device_nodes[i].path, O_RDWR)) >= 0) {
 				break;
+			} else {
+				fprintf(stderr, "Error opening %s: %s\n",
+				    tpm_device_nodes[i].path, strerror(errno));
+			}
 		}
 	}
-	
-	if (fd > 0) {
+
+	if (fd >= 0) {
 		opened_device = &(tpm_device_nodes[i]);
 		tpm_device_nodes[i].fd = fd;
 	}
@@ -181,11 +201,13 @@
 			/* fall through */
 		case TDDL_TRANSMIT_IOCTL:
 			errno = 0;
+#ifndef SOLARIS
 			if ((sizeResult = ioctl(opened_device->fd, TPMIOC_TRANSMIT, txBuffer)) != -1) {
 				opened_device->transmit = TDDL_TRANSMIT_IOCTL;
 				break;
 			}
 			LogWarn("ioctl: (%d) %s", errno, strerror(errno));
+#endif
 			LogInfo("Falling back to Read/Write device support.");
 			/* fall through */
 		case TDDL_TRANSMIT_RW:
@@ -255,6 +277,7 @@
 
 TSS_RESULT Tddli_Cancel(void)
 {
+#ifndef SOLARIS
 	int rc;
 
 	if (opened_device->transmit == TDDL_TRANSMIT_IOCTL) {
@@ -270,4 +293,7 @@
 	} else {
 		return TDDLERR(TSS_E_NOTIMPL);
 	}
+#else
+	return TDDLERR(TSS_E_NOTIMPL);
+#endif /* SOLARIS */
 }