]> granicus.if.org Git - p11-kit/commitdiff
rpc: Add PKCS#11 module that connects to socket
authorDaiki Ueno <dueno@redhat.com>
Wed, 11 Jan 2017 08:32:19 +0000 (09:32 +0100)
committerDaiki Ueno <ueno@gnu.org>
Fri, 17 Feb 2017 09:25:55 +0000 (10:25 +0100)
This patch adds a PKCS#11 module that connects to the p11-kit server
exposed on the filesystem.  The filename of the socket is determined in
the following order:

- $P11_KIT_SERVER_ADDRESS, if the envvar is available
- $XDG_RUNTIME_DIR/p11-kit/pkcs11, if the envvar is available
- /run/$(id -u)/p11-kit/pkcs11, if /run/$(id -u) exists
- /var/run/$(id -u)/p11-kit/pkcs11, if /var/run/$(id -u) exists
- ~/.cache/p11-kit/pkcs11.

Note that the program loading this module may have called setuid() and
secure_getenv() which we use for fetching envvars could return NULL.

12 files changed:
Makefile.am
doc/manual/Makefile.am
doc/manual/p11-kit.xml
p11-kit/Makefile.am
p11-kit/client-init.c [new file with mode: 0644]
p11-kit/client.c [new file with mode: 0644]
p11-kit/client.h [new file with mode: 0644]
p11-kit/modules.c
p11-kit/proxy-init.c [new file with mode: 0644]
p11-kit/remote.c
p11-kit/util.c
trust/Makefile.am

index f31006881bf492c1d11cac28c302ce1791e951d3..ff97372e4debe91ec645313ab82dc87612439df0 100644 (file)
@@ -32,6 +32,9 @@ noinst_SCRIPTS =
 
 TESTS = $(CHECK_PROGS)
 
+moduledir = $(p11_module_path)
+module_LTLIBRARIES =
+
 include common/Makefile.am
 include p11-kit/Makefile.am
 
index 7108977f4f673b237aa9f6d9f4599f36c964dd1a..a3c6b662d2cfadfb489c86bd1f8efca69fad9f58 100644 (file)
@@ -60,6 +60,7 @@ IGNORE_HFILES= \
        pkcs11i.h \
        pkcs11x.h \
        private.h \
+       client.h \
        proxy.h \
        rpc.h \
        rpc-message.h \
index 223df62df02315cbbf652937151addbc442419fa..0c813b82827a5c99b33ca5779cc695fc5de3dd84 100644 (file)
@@ -35,6 +35,9 @@
        <cmdsynopsis>
                <command>p11-kit extract</command> ...
        </cmdsynopsis>
+       <cmdsynopsis>
+               <command>p11-kit server</command> ...
+       </cmdsynopsis>
 </refsynopsisdiv>
 
 <refsect1 id="p11-kit-description">
@@ -85,6 +88,20 @@ $ p11-kit list-modules
        for more information</para>
 </refsect1>
 
+<refsect1 id="p11-kit-server">
+       <title>Server</title>
+
+       <para>Run a server process that exposes PKCS#11 module remotely.</para>
+
+<programlisting>
+$ p11-kit server /path/to/pkcs11-module.so
+$ p11-kit server pkcs11:token-uri
+</programlisting>
+
+       <para>This launches a server that exposes the given PKCS#11 module or token on a local socket. To access the socket, use <literal>p11-kit-client.so</literal> module. The server address and PID are printed as a shell-script snippet which sets the appropriate environment variable: <literal>P11_KIT_SERVER_ADDRESS</literal> and <literal>P11_KIT_SERVER_PID</literal>.</para>
+
+</refsect1>
+
 <refsect1 id="p11-kit-extract-trust">
        <title>Extract Trust</title>
 
index d53f51c2e2367c187a788b25bd9281f3405aa594..e30c431d02a1863a5e5f90ba4fb665f59ce72cd8 100644 (file)
@@ -8,7 +8,7 @@ inc_HEADERS += \
        p11-kit/uri.h \
        $(NULL)
 
-MODULE_SRCS = \
+COMMON_SRCS = \
        p11-kit/util.c \
        p11-kit/conf.c p11-kit/conf.h \
        p11-kit/iter.c \
@@ -19,7 +19,6 @@ MODULE_SRCS = \
        p11-kit/pin.c \
        p11-kit/pkcs11.h \
        p11-kit/private.h \
-       p11-kit/proxy.c p11-kit/proxy.h \
        p11-kit/messages.c \
        p11-kit/rpc-transport.c p11-kit/rpc.h \
        p11-kit/rpc-message.c p11-kit/rpc-message.h \
@@ -32,7 +31,7 @@ MODULE_SRCS = \
 lib_LTLIBRARIES += \
        libp11-kit.la
 
-libp11_kit_la_CFLAGS = \
+COMMON_CFLAGS = \
        -DP11_SYSTEM_CONFIG_FILE=\""$(p11_system_config_file)"\" \
        -DP11_SYSTEM_CONFIG_MODULES=\""$(p11_system_config_modules)"\" \
        -DP11_PACKAGE_CONFIG_MODULES=\""$(p11_package_config_modules)"\" \
@@ -42,26 +41,44 @@ libp11_kit_la_CFLAGS = \
        $(LIBFFI_CFLAGS) \
        $(NULL)
 
+COMMON_LIBS = \
+       libp11-common.la \
+       libp11-library.la \
+       $(LIBFFI_LIBS) \
+       $(LTLIBINTL) \
+       $(NULL)
+
+libp11_kit_la_CFLAGS = $(COMMON_CFLAGS)
+
 libp11_kit_la_LDFLAGS = \
        -no-undefined \
        -version-info $(P11KIT_LT_RELEASE) \
        -export-symbols-regex '^C_GetFunctionList|^p11_kit_'
 
-libp11_kit_la_SOURCES = $(MODULE_SRCS)
+libp11_kit_la_SOURCES = \
+       p11-kit/proxy.c p11-kit/proxy.h p11-kit/proxy-init.c
+       $(NULL)
 
 libp11_kit_la_LIBADD = \
-       libp11-common.la \
-       libp11-library.la \
-       $(LIBFFI_LIBS) \
-       $(LTLIBINTL) \
+       libp11-kit-internal.la \
+       $(COMMON_LIBS) \
        $(NULL)
 
 noinst_LTLIBRARIES += \
-       libp11-kit-testable.la
+       libp11-kit-internal.la \
+       libp11-kit-testable.la \
+       $(NULL)
+
+libp11_kit_internal_la_LDFLAGS = -no-undefined
+libp11_kit_internal_la_CFLAGS = $(COMMON_CFLAGS)
+libp11_kit_internal_la_SOURCES = $(COMMON_SRCS)
 
 libp11_kit_testable_la_LDFLAGS = -no-undefined
-libp11_kit_testable_la_SOURCES = $(MODULE_SRCS)
-libp11_kit_testable_la_LIBADD = $(libp11_kit_la_LIBADD)
+libp11_kit_testable_la_SOURCES = \
+       $(libp11_kit_internal_la_SOURCES) \
+       $(libp11_kit_la_SOURCES) \
+       $(NULL)
+libp11_kit_testable_la_LIBADD = $(COMMON_LIBS)
 
 if OS_WIN32
 
@@ -112,6 +129,25 @@ systemduser_DATA = \
        p11-kit/p11-kit-remote.socket \
        p11-kit/p11-kit-remote@.service
 
+if !OS_WIN32
+module_LTLIBRARIES += \
+       p11-kit-client.la
+
+p11_kit_client_la_LDFLAGS = \
+       -no-undefined -module -avoid-version \
+       -version-info $(P11KIT_LT_RELEASE) \
+       -export-symbols-regex '^C_GetFunctionList' \
+       $(NULL)
+
+p11_kit_client_la_CFLAGS = $(COMMON_CFLAGS)
+
+p11_kit_client_la_SOURCES = \
+       p11-kit/client.c p11-kit/client.h p11-kit/client-init.c \
+       $(NULL)
+
+p11_kit_client_la_LIBADD = $(libp11_kit_la_LIBADD)
+endif
+
 pkgconfigdir = $(libdir)/pkgconfig
 pkgconfig_DATA = p11-kit/p11-kit-1.pc
 
diff --git a/p11-kit/client-init.c b/p11-kit/client-init.c
new file mode 100644 (file)
index 0000000..d016053
--- /dev/null
@@ -0,0 +1,109 @@
+/*
+ * Copyright (c) 2011 Collabora Ltd
+ * Copyright (c) 2012 Stef Walter
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *     * Redistributions of source code must retain the above
+ *       copyright notice, this list of conditions and the
+ *       following disclaimer.
+ *     * Redistributions in binary form must reproduce the
+ *       above copyright notice, this list of conditions and
+ *       the following disclaimer in the documentation and/or
+ *       other materials provided with the distribution.
+ *     * The names of contributors to this software may not be
+ *       used to endorse or promote products derived from this
+ *       software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
+ * THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ *
+ * CONTRIBUTORS
+ *  Stef Walter <stef@thewalter.net>
+ */
+
+#include "config.h"
+
+#include "client.h"
+#include "library.h"
+#include "pkcs11.h"
+
+/* p11_proxy_module_check() is defined as a weak symbol in modules.c */
+#ifndef __GNUC__
+bool       p11_proxy_module_check                    (CK_FUNCTION_LIST_PTR module);
+
+bool
+p11_proxy_module_check (CK_FUNCTION_LIST_PTR module)
+{
+       return false;
+}
+#endif
+
+#ifdef OS_UNIX
+
+void _p11_kit_init (void);
+
+void _p11_kit_fini (void);
+
+#ifdef __GNUC__
+__attribute__((constructor))
+#endif
+void
+_p11_kit_init (void)
+{
+       p11_library_init_once ();
+}
+
+#ifdef __GNUC__
+__attribute__((destructor))
+#endif
+void
+_p11_kit_fini (void)
+{
+       p11_client_module_cleanup ();
+       p11_library_uninit ();
+}
+
+#endif /* OS_UNIX */
+
+#ifdef OS_WIN32
+
+BOOL WINAPI DllMain (HINSTANCE, DWORD, LPVOID);
+
+BOOL WINAPI
+DllMain (HINSTANCE instance,
+         DWORD reason,
+         LPVOID reserved)
+{
+       switch (reason) {
+       case DLL_PROCESS_ATTACH:
+               p11_library_init ();
+               break;
+       case DLL_THREAD_DETACH:
+               p11_library_thread_cleanup ();
+               break;
+       case DLL_PROCESS_DETACH:
+               p11_client_module_cleanup ();
+               p11_library_uninit ();
+               break;
+       default:
+               break;
+       }
+
+       return TRUE;
+}
+
+#endif /* OS_WIN32 */
diff --git a/p11-kit/client.c b/p11-kit/client.c
new file mode 100644 (file)
index 0000000..75aebe8
--- /dev/null
@@ -0,0 +1,215 @@
+/*
+ * Copyright (C) 2016 Red Hat Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *     * Redistributions of source code must retain the above
+ *       copyright notice, this list of conditions and the
+ *       following disclaimer.
+ *     * Redistributions in binary form must reproduce the
+ *       above copyright notice, this list of conditions and
+ *       the following disclaimer in the documentation and/or
+ *       other materials provided with the distribution.
+ *     * The names of contributors to this software may not be
+ *       used to endorse or promote products derived from this
+ *       software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
+ * THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * Author: Daiki Ueno
+ */
+
+#include "config.h"
+
+#include "client.h"
+#include "compat.h"
+#include "library.h"
+#include "path.h"
+#include "rpc.h"
+
+#include <pwd.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+typedef struct _State {
+       p11_virtual virt;
+       p11_rpc_transport *rpc;
+       CK_FUNCTION_LIST *wrapped;
+       struct _State *next;
+} State;
+
+static State *all_instances = NULL;
+
+static CK_RV
+get_runtime_directory (char **directoryp)
+{
+       const char *envvar;
+       static const char * const bases[] = { "/run", "/var/run", NULL };
+       char prefix[13 + 1 + 20 + 6 + 1];
+       char *directory;
+       uid_t uid;
+       struct stat sb;
+       struct passwd pwbuf, *pw;
+       char buf[1024];
+       int i;
+
+       /* We can't always assume the XDG_RUNTIME_DIR envvar here,
+        * because the PKCS#11 module can be loaded by a program that
+        * calls setuid().  */
+       envvar = secure_getenv ("XDG_RUNTIME_DIR");
+
+       if (envvar != NULL && envvar[0] != '\0') {
+               directory = strdup (envvar);
+               if (!directory)
+                       return CKR_HOST_MEMORY;
+
+               *directoryp = directory;
+               return CKR_OK;
+       }
+
+       uid = getuid ();
+
+       for (i = 0; bases[i] != NULL; i++) {
+               snprintf (prefix, sizeof prefix, "%s/user/%u",
+                         bases[i], (unsigned int) uid);
+               if (stat (prefix, &sb) != -1 && S_ISDIR (sb.st_mode)) {
+                       directory = strdup (prefix);
+                       if (!directory)
+                               return CKR_HOST_MEMORY;
+                       *directoryp = directory;
+                       return CKR_OK;
+               }
+       }
+
+       /* We can't use /run/user/<UID>, fallback to ~/.cache.  */
+       if (getpwuid_r (uid, &pwbuf, buf, sizeof buf, &pw) < 0 ||
+           pw == NULL || pw->pw_dir == NULL || *pw->pw_dir != '/')
+               return CKR_GENERAL_ERROR;
+
+       if (asprintf (&directory, "%s/.cache", pw->pw_dir) < 0)
+               return CKR_HOST_MEMORY;
+       *directoryp = directory;
+       return CKR_OK;
+}
+
+static CK_RV
+get_server_address (char **addressp)
+{
+       const char *envvar;
+       char *path;
+       char *encoded;
+       char *address;
+       char *directory;
+       int ret;
+       CK_RV rv;
+
+       envvar = secure_getenv ("P11_KIT_SERVER_ADDRESS");
+       if (envvar != NULL && envvar[0] != '\0') {
+               address = strdup (envvar);
+               if (!address)
+                       return CKR_HOST_MEMORY;
+               *addressp = address;
+               return CKR_OK;
+       }
+
+       rv = get_runtime_directory (&directory);
+       if (rv != CKR_OK)
+               return rv;
+
+       ret = asprintf (&path, "%s/p11-kit/pkcs11", directory);
+       free (directory);
+       if (ret < 0)
+               return CKR_HOST_MEMORY;
+
+       encoded = p11_path_encode (path);
+       free (path);
+       if (!encoded)
+               return CKR_HOST_MEMORY;
+
+       ret = asprintf (&address, "unix:path=%s", encoded);
+       free (encoded);
+       if (ret < 0)
+               return CKR_HOST_MEMORY;
+
+       *addressp = address;
+       return CKR_OK;
+}
+
+#ifdef OS_WIN32
+__declspec(dllexport)
+#endif
+CK_RV
+C_GetFunctionList (CK_FUNCTION_LIST_PTR_PTR list)
+{
+       char *address = NULL;
+       State *state;
+       CK_FUNCTION_LIST_PTR module = NULL;
+       CK_RV rv = CKR_OK;
+
+       p11_library_init_once ();
+       p11_lock ();
+
+       rv = get_server_address (&address);
+
+       if (rv == CKR_OK) {
+               state = calloc (1, sizeof (State));
+               if (!state)
+                       rv = CKR_HOST_MEMORY;
+       }
+
+       if (rv == CKR_OK) {
+               state->rpc = p11_rpc_transport_new (&state->virt,
+                                                   address,
+                                                   "client");
+               if (!state->rpc)
+                       rv = CKR_GENERAL_ERROR;
+       }
+
+       if (rv == CKR_OK) {
+               module = p11_virtual_wrap (&state->virt, free);
+               if (!module)
+                       rv = CKR_GENERAL_ERROR;
+       }
+
+       if (rv == CKR_OK) {
+               *list = module;
+               state->wrapped = module;
+               state->next = all_instances;
+               all_instances = state;
+       }
+
+       p11_unlock ();
+
+       free (address);
+
+       return rv;
+}
+
+void
+p11_client_module_cleanup (void)
+{
+       State *state, *next;
+
+       state = all_instances;
+       all_instances = NULL;
+
+       for (; state != NULL; state = next) {
+               next = state->next;
+               p11_virtual_unwrap (state->wrapped);
+               p11_rpc_transport_free (state->rpc);
+       }
+}
diff --git a/p11-kit/client.h b/p11-kit/client.h
new file mode 100644 (file)
index 0000000..65e88dc
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+ * Copyright (c) 2013 Red Hat Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *     * Redistributions of source code must retain the above
+ *       copyright notice, this list of conditions and the
+ *       following disclaimer.
+ *     * Redistributions in binary form must reproduce the
+ *       above copyright notice, this list of conditions and
+ *       the following disclaimer in the documentation and/or
+ *       other materials provided with the distribution.
+ *     * The names of contributors to this software may not be
+ *       used to endorse or promote products derived from this
+ *       software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
+ * THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * Author: Stef Walter <stefw@redhat.com>
+ */
+
+#ifndef __P11_CLIENT_H__
+#define __P11_CLIENT_H__
+
+void       p11_client_module_cleanup                  (void);
+
+
+#endif /* __P11_CLIENT_H__ */
index 85eb53eed5a4acb9ac1e1190f589049231e78691..f1b992aab08e715511155a7cb934a10769a3d533 100644 (file)
@@ -289,6 +289,16 @@ alloc_module_unlocked (void)
        return mod;
 }
 
+#ifdef __GNUC__
+bool       p11_proxy_module_check                    (CK_FUNCTION_LIST_PTR module) __attribute__((weak));
+
+bool
+p11_proxy_module_check (CK_FUNCTION_LIST_PTR module)
+{
+       return false;
+}
+#endif
+
 static CK_RV
 dlopen_and_get_function_list (Module *mod,
                               const char *path,
diff --git a/p11-kit/proxy-init.c b/p11-kit/proxy-init.c
new file mode 100644 (file)
index 0000000..397949b
--- /dev/null
@@ -0,0 +1,98 @@
+/*
+ * Copyright (c) 2011 Collabora Ltd
+ * Copyright (c) 2012 Stef Walter
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *     * Redistributions of source code must retain the above
+ *       copyright notice, this list of conditions and the
+ *       following disclaimer.
+ *     * Redistributions in binary form must reproduce the
+ *       above copyright notice, this list of conditions and
+ *       the following disclaimer in the documentation and/or
+ *       other materials provided with the distribution.
+ *     * The names of contributors to this software may not be
+ *       used to endorse or promote products derived from this
+ *       software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
+ * THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ *
+ * CONTRIBUTORS
+ *  Stef Walter <stef@thewalter.net>
+ */
+
+#include "config.h"
+
+#include "library.h"
+#include "p11-kit.h"
+#include "proxy.h"
+
+#ifdef OS_UNIX
+
+void _p11_kit_init (void);
+
+void _p11_kit_fini (void);
+
+#ifdef __GNUC__
+__attribute__((constructor))
+#endif
+void
+_p11_kit_init (void)
+{
+       p11_library_init_once ();
+}
+
+#ifdef __GNUC__
+__attribute__((destructor))
+#endif
+void
+_p11_kit_fini (void)
+{
+       p11_proxy_module_cleanup ();
+       p11_library_uninit ();
+}
+
+#endif /* OS_UNIX */
+
+#ifdef OS_WIN32
+
+BOOL WINAPI DllMain (HINSTANCE, DWORD, LPVOID);
+
+BOOL WINAPI
+DllMain (HINSTANCE instance,
+         DWORD reason,
+         LPVOID reserved)
+{
+       switch (reason) {
+       case DLL_PROCESS_ATTACH:
+               p11_library_init ();
+               break;
+       case DLL_THREAD_DETACH:
+               p11_library_thread_cleanup ();
+               break;
+       case DLL_PROCESS_DETACH:
+               p11_proxy_module_cleanup ();
+               p11_library_uninit ();
+               break;
+       default:
+               break;
+       }
+
+       return TRUE;
+}
+
+#endif /* OS_WIN32 */
index eaff134e41f5c908d7933e341d3e58c3eba5bb40..37d8d5e7be4ce622ea3015648a1448a4facdc7be 100644 (file)
@@ -73,7 +73,7 @@ serve_module_from_uri (const char *uri_string)
                goto out;
        }
 
-       iter = p11_kit_iter_new (uri, P11_KIT_ITER_WANT_TOKENS);
+       iter = p11_kit_iter_new (uri, P11_KIT_ITER_WITH_TOKENS | P11_KIT_ITER_WITHOUT_OBJECTS);
        p11_kit_uri_free (uri);
        if (iter == NULL)
                goto out;
index 325d66904c3576c84a4b6e179015c1edb5d82a6d..1e21f80a53bfd6c08766bd2b0143c1fae9c3d099 100644 (file)
@@ -44,7 +44,6 @@
 #include "message.h"
 #include "p11-kit.h"
 #include "private.h"
-#include "proxy.h"
 
 #include <assert.h>
 #include <stdarg.h>
@@ -237,59 +236,3 @@ _p11_get_progname_unlocked (void)
                return NULL;
        return p11_my_progname;
 }
-
-#ifdef OS_UNIX
-
-void _p11_kit_init (void);
-
-void _p11_kit_fini (void);
-
-#ifdef __GNUC__
-__attribute__((constructor))
-#endif
-void
-_p11_kit_init (void)
-{
-       p11_library_init_once ();
-}
-
-#ifdef __GNUC__
-__attribute__((destructor))
-#endif
-void
-_p11_kit_fini (void)
-{
-       p11_proxy_module_cleanup ();
-       p11_library_uninit ();
-}
-
-#endif /* OS_UNIX */
-
-#ifdef OS_WIN32
-
-BOOL WINAPI DllMain (HINSTANCE, DWORD, LPVOID);
-
-BOOL WINAPI
-DllMain (HINSTANCE instance,
-         DWORD reason,
-         LPVOID reserved)
-{
-       switch (reason) {
-       case DLL_PROCESS_ATTACH:
-               p11_library_init ();
-               break;
-       case DLL_THREAD_DETACH:
-               p11_library_thread_cleanup ();
-               break;
-       case DLL_PROCESS_DETACH:
-               p11_proxy_module_cleanup ();
-               p11_library_uninit ();
-               break;
-       default:
-               break;
-       }
-
-       return TRUE;
-}
-
-#endif /* OS_WIN32 */
index 6df75a17d0bb21860fbd3c75a3b6e83a72631594..2ae62d4b077fb5db56a69b2f566094be33b668b5 100644 (file)
@@ -38,8 +38,7 @@ TRUST_SRCS = \
 configdir = $(p11_package_config_modules)
 config_DATA = trust/p11-kit-trust.module
 
-moduledir = $(p11_module_path)
-module_LTLIBRARIES = \
+module_LTLIBRARIES += \
        p11-kit-trust.la
 
 p11_kit_trust_la_CFLAGS = \