Changes On Branch dlopen-wrapper

Changes In Branch dlopen-wrapper Excluding Merge-Ins

This is equivalent to a diff from 0c7c510048 to 45c70bc44d

2017-12-27
18:54
Integrated dlmopen() wrapper library (not for general use) check-in: 59356166dc user: rkeene tags: trunk
18:48
Added a wrapper PKCS#11 module which uses GNU dlmopen to segregate loading cackey and its libraries to avoid issues with different linkspaces Closed-Leaf check-in: 45c70bc44d user: rkeene tags: dlopen-wrapper
17:59
Started work on updating DOD certs Leaf check-in: ff2eb37b0a user: rkeene tags: update-dod-certs
17:52
Started work on runtime loading of dependencies Leaf check-in: e14e862239 user: rkeene tags: runtime-loading-of-deps
2017-07-17
13:56
Updated to treat returning a zero-length signed message as an error check-in: 0c7c510048 user: rkeene tags: trunk
13:56
Corrected typo causing debug builds to fail check-in: d02f2af7a5 user: rkeene tags: trunk

Modified .fossil-settings/ignore-glob from [9b544d0473] to [3e95b51b2f].

13
14
15
16
17
18
19



20
21
22
23
24
25
26
libcackey_g.so
libcackey.so
libcackey_g.dll
libcackey.dll
libcackey_g.a
libcackey.a
libcackey.syms



build/certs
test
test-afl
test-afl.data
build/chrome/archive
build/chrome/workdir-*
build/chrome/lib







>
>
>







13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
libcackey_g.so
libcackey.so
libcackey_g.dll
libcackey.dll
libcackey_g.a
libcackey.a
libcackey.syms
libcackey_wrap.so
libcackey_wrap.o
libcackey_wrap.c
build/certs
test
test-afl
test-afl.data
build/chrome/archive
build/chrome/workdir-*
build/chrome/lib

Modified Makefile.in from [6effe24266] to [abdaf2d437].

45
46
47
48
49
50
51








52
53
54
55
56
57
58
	-$(RANLIB) libcackey.a

libcackey_g.a: cackey_g.o
	rm -f libcackey_g.a
	$(AR) rc libcackey_g.a cackey_g.o
	-$(RANLIB) libcackey_g.a









test: test.c libcackey_g.@SHOBJEXT@
	$(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) -o test test.c -Wl,-R,. libcackey_g.@SHOBJEXT@ $(LIBS)

test-afl.data: test
	tmpLogFile='log.$(shell openssl rand -hex 16)'; \
		./test 2> $${tmpLogFile}; \
		echo -ne "$$( \







>
>
>
>
>
>
>
>







45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
	-$(RANLIB) libcackey.a

libcackey_g.a: cackey_g.o
	rm -f libcackey_g.a
	$(AR) rc libcackey_g.a cackey_g.o
	-$(RANLIB) libcackey_g.a

libcackey_wrap.@SHOBJEXT@: libcackey_wrap.o
	$(CC) $(SHOBJFLAGS) $(SHOBJLDFLAGS) -o libcackey_wrap.@SHOBJEXT@ libcackey_wrap.o
	-@WEAKENSYMS@ "libcackey_wrap.@SHOBJEXT@"
	-@REMOVESYMS@ "libcackey_wrap.@SHOBJEXT@"
	
libcackey_wrap.o: libcackey_wrap.c
	$(CC) $(SHOBJFLAGS) -o libcackey_wrap.o -c libcackey_wrap.c

test: test.c libcackey_g.@SHOBJEXT@
	$(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) -o test test.c -Wl,-R,. libcackey_g.@SHOBJEXT@ $(LIBS)

test-afl.data: test
	tmpLogFile='log.$(shell openssl rand -hex 16)'; \
		./test 2> $${tmpLogFile}; \
		echo -ne "$$( \
74
75
76
77
78
79
80

81
82
83
84
85
86
87
88
89
90
91
	cp "libcackey.@SHOBJEXT@" "$(DESTDIR)$(libdir)/"
	-cp "libcackey_g.@SHOBJEXT@" "$(DESTDIR)$(libdir)/"

clean:
	rm -f libcackey.@SHOBJEXT@ libcackey_g.@SHOBJEXT@
	rm -f libcackey.@SHOBJEXT@.def libcackey_g.@SHOBJEXT@.def
	rm -f libcackey.@SHOBJEXT@.a libcackey_g.@SHOBJEXT@.a

	rm -f cackey.o cackey_g.o
	rm -f test
	rm -f splint-cackey.txt

distclean: clean
	rm -f config.log config.status config.h Makefile libcackey.syms

mrproper: distclean
	rm -f configure config.h.in aclocal.m4 *~

.PHONY: all shared static clean distclean mrproper install







>











82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
	cp "libcackey.@SHOBJEXT@" "$(DESTDIR)$(libdir)/"
	-cp "libcackey_g.@SHOBJEXT@" "$(DESTDIR)$(libdir)/"

clean:
	rm -f libcackey.@SHOBJEXT@ libcackey_g.@SHOBJEXT@
	rm -f libcackey.@SHOBJEXT@.def libcackey_g.@SHOBJEXT@.def
	rm -f libcackey.@SHOBJEXT@.a libcackey_g.@SHOBJEXT@.a
	rm -f libcackey_wrap.@SHOBJEXT@ libcackey_wrap.o
	rm -f cackey.o cackey_g.o
	rm -f test
	rm -f splint-cackey.txt

distclean: clean
	rm -f config.log config.status config.h Makefile libcackey.syms

mrproper: distclean
	rm -f configure config.h.in aclocal.m4 *~

.PHONY: all shared static clean distclean mrproper install

Modified autogen.sh from [daf2ac0fe1] to [de474aeb75].

1
2
3
4



5
6
7
8
9
10
11
#! /bin/sh

rm -f aclocal.m4




${MAKE:-make} -C aclocal
autoconf; autoheader

rm -rf autom4te.cache/

for basefile in install-sh config.sub config.guess; do
	for path in /usr/share/automake-*; do




>
>
>







1
2
3
4
5
6
7
8
9
10
11
12
13
14
#! /bin/sh

rm -f aclocal.m4

rm -f libcackey_wrap.c
./build/make-libcackey_wrap > libcackey_wrap.c

${MAKE:-make} -C aclocal
autoconf; autoheader

rm -rf autom4te.cache/

for basefile in install-sh config.sub config.guess; do
	for path in /usr/share/automake-*; do

Added build/libcackey_wrap.c.in version [4c95cbc88b].























































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#define _GNU_SOURCE
#include <dlfcn.h>

#include "config.h"

#include <stdlib.h>
#include <string.h>
#include <stdio.h>

#define CK_PTR *
#define CK_DEFINE_FUNCTION(returnType, name) returnType name
#define CK_DECLARE_FUNCTION(returnType, name) returnType name
#define CK_DECLARE_FUNCTION_POINTER(returnType, name) returnType (* name)
#define CK_CALLBACK_FUNCTION(returnType, name) returnType (* name)
#ifndef NULL_PTR
#  define NULL_PTR 0
#endif

#include "./pkcs11/pkcs11.h"

static void *libcackey_wrap_handle = NULL_PTR;

static void libcackey_wrap_init(void) {
	Dl_info libinfo;
	int dladdr_ret;
	char *library, *libraryDir, *libraryDirLastSlash;

	if (libcackey_wrap_handle) {
		return;
	}

	dladdr_ret = dladdr(libcackey_wrap_init, &libinfo);
	if (dladdr_ret == 0) {
		fprintf(stderr, "Unable to resolve path: %s\n", dlerror());

		abort();

		return;
	}

	if (!libinfo.dli_fname) {
		fprintf(stderr, "Unable to lookup filename\n");

		abort();

		return;
	}

	libraryDir = strdup(libinfo.dli_fname);
	libraryDirLastSlash = strrchr(libraryDir, '/');
	if (!libraryDirLastSlash) {
		fprintf(stderr, "File name returned is not an absolute path: %s\n", libraryDir);

		abort();

		return;
	}
	*libraryDirLastSlash = '\0';

	asprintf(&library, "%s/libcackey.so", libraryDir);

	libcackey_wrap_handle = dlmopen(LM_ID_NEWLM, library, RTLD_LOCAL | RTLD_NOW);

	if (!libcackey_wrap_handle) {
		fprintf(stderr, "Unable to load \"%s\": %s\n", library, dlerror());

		abort();

		return;
	}

	free(library);

	return;
}

Added build/make-libcackey_wrap version [833dbdb173].































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#! /usr/bin/env bash

cd "$(dirname "${BASH_SOURCE[0]}")" || exit 1

cat libcackey_wrap.c.in

grep '^CK_DEFINE_FUNCTION' ../cackey.c | while IFS='' read -r line; do
	function="$(echo "${line}" | cut -f 2 -d , | cut -f 1 -d ')' | sed 's@ *@@g')"
	args="$(echo "${line}" | cut -f 3 -d '(' | cut -f 1 -d ')' | tr ',' $'\n' | sed 's@^ *@@')"
	argNames=()
	while read argType argName; do
		argNames=("${argNames[@]}" "${argName}")
	done <<<"${args}"

	argNamesList=''
	for argName in "${argNames[@]}"; do
		argNamesList="${argNamesList}, ${argName}"
	done
	argNamesList="$(echo "${argNamesList}" | cut -c 3-)"

	echo ''
	echo "${line}"
	echo $'\t'"CK_RV (*func)($(echo "${args}" | tr $'\n' ',' | sed 's@,*$@@;s@,@, @g'));"
	echo ''
	echo $'\t''libcackey_wrap_init();'
	echo ''
	echo $'\t'"func = dlsym(libcackey_wrap_handle, \"${function}\");"
	echo ''
	echo $'\t'"return(func($argNamesList));"
	echo '}'
done