--- src/tddl/tddl.c Mon Apr 12 22:24:21 2010
+++ src/tddl/tddl.c.new Thu Sep 22 12:28:25 2011
@@ -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,13 @@
#include <netdb.h>
#include <fcntl.h>
+#ifdef SOLARIS
+int
+get_device_fd()
+{
+ return (opened_device->fd);
+}
+#endif
int
open_device()
@@ -63,7 +74,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 +116,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 +196,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 +272,7 @@
TSS_RESULT Tddli_Cancel(void)
{
+#ifndef SOLARIS
int rc;
if (opened_device->transmit == TDDL_TRANSMIT_IOCTL) {
@@ -270,4 +288,7 @@
} else {
return TDDLERR(TSS_E_NOTIMPL);
}
+#else
+ return TDDLERR(TSS_E_NOTIMPL);
+#endif /* SOLARIS */
}