[Pcsclite-cvs-commit] r5373 - in /trunk/PCSC/src: winscard_clnt.c winscard_msg.c
rousseau at users.alioth.debian.org
rousseau at users.alioth.debian.org
Thu Nov 4 09:50:06 UTC 2010
Author: rousseau
Date: Thu Nov 4 09:49:59 2010
New Revision: 5373
URL: http://svn.debian.org/wsvn/pcsclite/?sc=1&rev=5373
Log:
It is now possible to configure the local socket name to use using the
environment variable PCSCLITE_CSOCK_NAME
This is used by Estobuntu LTSP to redirect the smart card reader on the
light terminal display to the application running on the server.
They use a patched SSH version to redirect /var/run/pcscd/pcscd.comm on
the client to ~/.pcscd.comm on the server.
Modified:
trunk/PCSC/src/winscard_clnt.c
trunk/PCSC/src/winscard_msg.c
Modified: trunk/PCSC/src/winscard_clnt.c
URL: http://svn.debian.org/wsvn/pcsclite/trunk/PCSC/src/winscard_clnt.c?rev=5373&op=diff
==============================================================================
--- trunk/PCSC/src/winscard_clnt.c (original)
+++ trunk/PCSC/src/winscard_clnt.c Thu Nov 4 09:49:59 2010
@@ -3650,13 +3650,15 @@
LONG rv;
struct stat statBuffer;
int need_restart = 0;
-
- rv = stat(PCSCLITE_CSOCK_NAME, &statBuffer);
+ char *socketName;
+
+ socketName = getSocketName();
+ rv = stat(socketName, &statBuffer);
if (rv != 0)
{
- Log2(PCSC_LOG_INFO, "PCSC Not Running: " PCSCLITE_CSOCK_NAME ": %s",
- strerror(errno));
+ Log3(PCSC_LOG_INFO, "PCSC Not Running: %s: %s",
+ socketName, strerror(errno));
return SCARD_E_NO_SERVICE;
}
Modified: trunk/PCSC/src/winscard_msg.c
URL: http://svn.debian.org/wsvn/pcsclite/trunk/PCSC/src/winscard_msg.c?rev=5373&op=diff
==============================================================================
--- trunk/PCSC/src/winscard_msg.c (original)
+++ trunk/PCSC/src/winscard_msg.c Thu Nov 4 09:49:59 2010
@@ -33,6 +33,7 @@
#include <stdio.h>
#include <time.h>
#include <string.h>
+#include <stdlib.h>
#ifdef HAVE_SYS_FILIO_H
#include <sys/filio.h>
#endif
@@ -44,6 +45,7 @@
#include "winscard_msg.h"
#include "sys_generic.h"
#include "utils.h"
+#include "strlcpycat.h"
#ifdef PCSCD
@@ -67,6 +69,25 @@
#else
/* functions used by libpcsclite only */
+
+char *getSocketName(void)
+{
+ static char socketName[sizeof(struct sockaddr_un)];
+
+ if ('\0' == socketName[0])
+ {
+ /* socket name not yet initialized */
+ char *socketNameEnv;
+
+ socketNameEnv = getenv("PCSCLITE_CSOCK_NAME");
+ if (socketNameEnv)
+ strlcpy(socketName, socketNameEnv, sizeof(socketName));
+ else
+ strlcpy(socketName, PCSCLITE_CSOCK_NAME, sizeof(socketName));
+ }
+
+ return socketName;
+}
/**
* @brief Prepares a communication channel for the client to talk to the server.
@@ -86,6 +107,7 @@
struct sockaddr_un svc_addr;
int one;
int ret;
+ char *socketName;
ret = socket(PF_UNIX, SOCK_STREAM, 0);
if (ret < 0)
@@ -96,15 +118,15 @@
}
*pdwClientID = ret;
+ socketName = getSocketName();
svc_addr.sun_family = AF_UNIX;
- strncpy(svc_addr.sun_path, PCSCLITE_CSOCK_NAME,
- sizeof(svc_addr.sun_path));
+ strncpy(svc_addr.sun_path, socketName, sizeof(svc_addr.sun_path));
if (connect(*pdwClientID, (struct sockaddr *) &svc_addr,
sizeof(svc_addr.sun_family) + strlen(svc_addr.sun_path) + 1) < 0)
{
Log3(PCSC_LOG_CRITICAL, "Error: connect to client socket %s: %s",
- PCSCLITE_CSOCK_NAME, strerror(errno));
+ socketName, strerror(errno));
(void)close(*pdwClientID);
return -1;
}
@@ -113,7 +135,7 @@
if (ioctl(*pdwClientID, FIONBIO, &one) < 0)
{
Log3(PCSC_LOG_CRITICAL, "Error: cannot set socket %s nonblocking: %s",
- PCSCLITE_CSOCK_NAME, strerror(errno));
+ socketName, strerror(errno));
(void)close(*pdwClientID);
return -1;
}
More information about the Pcsclite-cvs-commit
mailing list