From f5bc174ba37501c0679cfd0745611761be9dd726 Mon Sep 17 00:00:00 2001 From: Corentin Chary <cchary@commonit.com> Date: Tue, 16 Feb 2010 10:57:09 +0100 Subject: [PATCH] pkcs11: win32 port Signed-off-by: Corentin Chary <cchary@commonit.com> --- CMakeLists.txt | 19 +++++++++++++++++-- config.h | 15 ++++++++++++++- ext/include/dlfcn.h | 45 ++++++++++++++++++++++++++++++++++++++++++++ ext/lib/libdl.a | Bin 0 -> 2460 bytes gck-rpc-dispatch.c | 18 +++--------------- gck-rpc-module.c | 12 +++++++++--- 6 files changed, 88 insertions(+), 21 deletions(-) create mode 100644 ext/include/dlfcn.h create mode 100644 ext/lib/libdl.a diff --git a/CMakeLists.txt b/CMakeLists.txt index 65d4007..24421d4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,7 +2,22 @@ cmake_minimum_required (VERSION 2.6) project (pkcs11 C) +set(PKCS11_PROXY_SRCS gck-rpc-module.c gck-rpc-message.c gck-rpc-util.c egg-buffer.c) +set(PKCS11_DAEMON_SRCS egg-buffer.c gck-rpc-daemon-standalone.c gck-rpc-dispatch.c gck-rpc-message.c gck-rpc-util.c) + add_definitions(-Wall) -add_library(pkcs11-proxy.so SHARED gck-rpc-module.c gck-rpc-message.c egg-buffer.c) -add_executable (pkcs11-daemon egg-buffer.c gck-rpc-daemon-standalone.c gck-rpc-dispatch.c gck-rpc-message.c gck-rpc-util.c) +add_library(pkcs11-proxy SHARED ${PKCS11_PROXY_SRCS}) +add_executable (pkcs11-daemon ${PKCS11_DAEMON_SRCS}) + +if (WIN32) + include_directories("ext/include") + + add_library(dl STATIC IMPORTED) + set_property(TARGET dl PROPERTY + IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/ext/lib/libdl.a) + target_link_libraries (pkcs11-daemon ws2_32) + target_link_libraries (pkcs11-proxy ws2_32) +endif () + +target_link_libraries (pkcs11-proxy pthread) target_link_libraries (pkcs11-daemon dl pthread) diff --git a/config.h b/config.h index deb9594..35be6f9 100644 --- a/config.h +++ b/config.h @@ -6,11 +6,12 @@ # include <stdint.h> # include <stdlib.h> # include <limits.h> +# include <winsock2.h> typedef uint32_t __uid32_t; typedef uint32_t __gid32_t; typedef uint32_t uid_t; -typedef size_t socklen_t; +typedef int socklen_t; struct sockaddr_un { uint16_t sun_family; @@ -23,6 +24,18 @@ enum { SHUT_RDWR /* No more receptions or transmissions. */ }; +#ifdef __MINGW32__ +static inline int inet_aton(const char * cp, struct in_addr *pin) +{ + int rc = inet_addr(cp); + if (rc == -1 && strcmp(cp, "255.255.255.255")) + return 0; + + pin->s_addr = rc; + return 1; +} +#endif + #endif #endif /* CONFIG_H */ diff --git a/ext/include/dlfcn.h b/ext/include/dlfcn.h new file mode 100644 index 0000000..dfc2551 --- /dev/null +++ b/ext/include/dlfcn.h @@ -0,0 +1,45 @@ +/* + * dlfcn-win32 + * Copyright (c) 2007 Ramiro Polla + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef DLFCN_H +#define DLFCN_H + +/* POSIX says these are implementation-defined. + * To simplify use with Windows API, we treat them the same way. + */ + +#define RTLD_LAZY 0 +#define RTLD_NOW 0 + +#define RTLD_GLOBAL (1 << 1) +#define RTLD_LOCAL (1 << 2) + +/* These two were added in The Open Group Base Specifications Issue 6. + * Note: All other RTLD_* flags in any dlfcn.h are not standard compliant. + */ + +#define RTLD_DEFAULT 0 +#define RTLD_NEXT 0 + +void *dlopen ( const char *file, int mode ); +int dlclose( void *handle ); +void *dlsym ( void *handle, const char *name ); +char *dlerror( void ); + +#endif /* DLFCN_H */ diff --git a/ext/lib/libdl.a b/ext/lib/libdl.a new file mode 100644 index 0000000000000000000000000000000000000000..24371c2d76496c10690224c9606a0c799c993dc0 GIT binary patch literal 2460 zcmZ`*ZERCj7=F8zuGDIW6oEOgEG0@HqpdKQ4Ab&4h#9f6!1x$+U3&{_$~tdvmtpw9 zY)f`m3)SF1|Cnf^{4mClh(Jhnqm1~6Oih+xOiUC<Is>Q-Ld@!O&S~$u3~zGIdEV#! zI`296o^w~V_~pRy*G=nfb04S6wR!W#W@mGg&F0{$%HC$%xS?#{Wg;Ry+B=oa7mP@< z9F++mcJc%pqJ2^?8v~JOOd<+KLV@1KsFwKuGCCcOrY6k7<=V7K<m@uF=~zOdDg)6< zj`X@lMH)~z7TwiqqKkm1gekoYY$HckW6-boE9{;I-Q>tMcE@6sIveRKMUGFCJJ%@B z4QPg@uavXwfOzhYYZ2ha0@kx<WM9Yr_QaG~y*|lAb%))U%2|>{;LD6~P8XJBhtAXj zwr(4onSsKRG{IMWFkF?)#ed5WG96{Eu_5)RCHV_R_5Pz<3yQEsth0AO4DX}lxFvZT z(0S8&yI{(y-w#{YB*zuwko6@`^SAMP>R4W1L+V(j-l0xBx|O-Y0%pGCQKl_tKNqgK zuNn$wb!_<kD#&m*4OweE%@5*J>X`anUcZzw^~>H0(<SD%X2P3EuqfW+?9C`D_WCd# zCosI$jK2C%;<2vZobk?_zRc{NRh}0s!-T}B`S4NSk&)AvERam`-}CP>nhHOsik4Je zu~>BG?!JlP8@4ES|Cs@C6I2t^j05xngtB6Nt!c&nO8S(2-R#PD>=!FOa_~qhr<m1= za>7s+`w<p%RIh_=&MPZG?c?^4)yI>q$TsV7jnB)NP4^p9)5?!&0|Ne?m@;;FODPT< zO5Ij|t&CAPm+2>L{ovF(Y-akRy#>SU<ia}Pc?0QE)0QM(eH4}Hv@a|?H>9uIrrsKS zQVk!aZdh+f=9I-P>*Igq^>v+^CVnTs!@7{XVPlxuMY#L{7A%YDPABaf;9aF`y~HLT z%5HHeuCyC3U;N<}UXDJLRY%g>8S{uOh`CgLEs8U$+l}f0z3PCXLxjFRILa!)mW?p$ z((>im{B!XMFE$<@DP=ygFNalWIunyK{}zjh(b~e->cr$<z=bc^*WgHZ+FNE9qda*Y zOKHGTF5=%tc1xYolHO}fjmIB4bExcmE-`99e00RyE|PWHS7@2ei%fIu(r*}3Hx)yA zn_l(k(WA0zb+-}o-&-zrj(r0)yoR%5V09ny&zHTJ2C6|XP#w@>G%Kw|zX;7hP3VPo zuZ9k4=z@mEfP}|=jWb}WtdOj<3`j&-rJ>atdR0U0EfRKv8hQ_C36F9C=mn0h0xjj} zC(Z7jW=HtAg?1&7h_?o48TS|fTF%i2n)VY7T>*NLYkvR|9(RF6-X}n!${L)@E4bZS zAdzDu5L-hl?b5hoK*Hl~AmQ;DP(8P64E02CiSUOV1IKjYJ_(dKHfVPcu#Rk0g*u=1 zu)~@i%LvY!*h_ZiFfYautwLjruqj<?)Q5;XGBcs|ysxm~H=Y@l3!C!YXG0LdRNh%^ za@9I^Yq6VZ_NlzD5DGT4x-zP~tN09cHe{IlRNhmp;%eP9a}7$;)(V#8Bib{M>6*vL z^O!U9m=EVMpUz|Wp;Th4$algYi9`b>89PY6kSvw=orp8BKDnn?2?-;{+yL|i;<7CD zD!$TRNX*|aG3<*e_$T3{uR9(JNsvN4a!m0>yTejIA>S@ZY4gXFo$T+$?I2%kR6gNX z_DHdq|Cr=)yEbzZuN)0{f<YOyTQGZ~!FWX4?eE2(kH@`%eB0T7j*ywyE{T}1lbGBV a^#|K}x@Et7a_4}@?Q|g(YAaE&F#QMU{w2}? literal 0 HcmV?d00001 diff --git a/gck-rpc-dispatch.c b/gck-rpc-dispatch.c index dc2ff76..7dab038 100644 --- a/gck-rpc-dispatch.c +++ b/gck-rpc-dispatch.c @@ -2006,7 +2006,7 @@ static int read_all(int sock, unsigned char *data, size_t len) while (len > 0) { - r = recv(sock, data, len, 0); + r = recv(sock, (void *)data, len, 0); if (r == 0) { /* Connection was closed on client */ @@ -2035,7 +2035,7 @@ static int write_all(int sock, unsigned char *data, size_t len) while (len > 0) { - r = send(sock, data, len, 0); + r = send(sock, (void *)data, len, 0); if (r == -1) { if (errno == EPIPE) { @@ -2204,18 +2204,6 @@ void gck_rpc_layer_accept(void) pkcs11_dispatchers = ds; } -#ifdef __MINGW32__ -int inet_aton(const char * cp, struct in_addr *pin) -{ - int rc = inet_addr(cp); - if (rc == -1 && strcmp(cp, "255.255.255.255")) - return 0; - - pin->s_addr = rc; - return 1; -} -#endif - int gck_rpc_layer_initialize(const char *prefix, CK_FUNCTION_LIST_PTR module) { struct sockaddr_un addr; @@ -2281,7 +2269,7 @@ int gck_rpc_layer_initialize(const char *prefix, CK_FUNCTION_LIST_PTR module) } if (setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, - &one, sizeof(one)) == -1) { + (char *)&one, sizeof(one)) == -1) { gck_rpc_warn ("couldn't create set pkcs11 socket options : %s", strerror(errno)); diff --git a/gck-rpc-module.c b/gck-rpc-module.c index c4d0751..228dc01 100644 --- a/gck-rpc-module.c +++ b/gck-rpc-module.c @@ -30,11 +30,15 @@ #include <sys/types.h> #include <sys/param.h> -#include <sys/socket.h> -#include <sys/un.h> +#ifdef __MINGW32__ +# include <winsock2.h> +#else +# include <sys/socket.h> +# include <sys/un.h> #include <arpa/inet.h> #include <netinet/in.h> #include <netinet/tcp.h> +#endif #include <stdlib.h> #include <limits.h> @@ -280,12 +284,14 @@ static CK_RV call_connect(CallState * cs) } } - /* close on exec */ +#ifndef __MINGW32__ + /* close on exec */ if (fcntl(sock, F_SETFD, 1) == -1) { close(sock); warning(("couldn't secure socket: %s", strerror(errno))); return CKR_DEVICE_ERROR; } +#endif if (connect(sock, (struct sockaddr *)&addr, sizeof(addr)) < 0) { close(sock); -- GitLab