--- trousers-0.3.11.2/src/tddl/tddl.c.orig +++ trousers-0.3.11.2/src/tddl/tddl.c @@ -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 #include +#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 */ }