diff options
author | Martin Willi <martin@strongswan.org> | 2009-06-22 14:42:04 +0200 |
---|---|---|
committer | Martin Willi <martin@strongswan.org> | 2009-06-22 15:47:18 +0200 |
commit | 4f2c48cd3db818e3c9d0a279d5bb5a442afda3e3 (patch) | |
tree | 8a49ca94c84c4950c65f1aabf645cb21e500e72c /src/checksum | |
parent | da2834a280a8c396be2980b171d0ab873359b17f (diff) | |
download | strongswan-4f2c48cd3db818e3c9d0a279d5bb5a442afda3e3.tar.bz2 strongswan-4f2c48cd3db818e3c9d0a279d5bb5a442afda3e3.tar.xz |
build and verify on disk file integrity of pluto and charon executables
Diffstat (limited to 'src/checksum')
-rw-r--r-- | src/checksum/Makefile.am | 5 | ||||
-rw-r--r-- | src/checksum/checksum_builder.c | 36 |
2 files changed, 27 insertions, 14 deletions
diff --git a/src/checksum/Makefile.am b/src/checksum/Makefile.am index aaed128dc..c089acba8 100644 --- a/src/checksum/Makefile.am +++ b/src/checksum/Makefile.am @@ -11,7 +11,10 @@ CLEANFILES = checksum.c checksum_builder INCLUDES = -I$(top_srcdir)/src/libstrongswan AM_CFLAGS = -rdynamic -libs = $(shell find $(top_builddir)/src -name 'libstrongswan*.so') +libs = $(shell find $(top_builddir)/src/libstrongswan $(top_builddir)/src/charon \ + -name 'libstrongswan*.so') \ + $(top_builddir)/src/charon/.libs/charon \ + $(top_builddir)/src/pluto/.libs/pluto checksum.c : checksum_builder $(libs) ./checksum_builder $(libs) > checksum.c diff --git a/src/checksum/checksum_builder.c b/src/checksum/checksum_builder.c index ca8667969..d2c042d55 100644 --- a/src/checksum/checksum_builder.c +++ b/src/checksum/checksum_builder.c @@ -46,7 +46,7 @@ int main(int argc, char* argv[]) printf("integrity_checksum_t checksums[] = {\n"); for (i = 1; i < argc; i++) { - char *name, *path, *sname; + char *name, *path, *sname = NULL; void *handle, *symbol; u_int32_t fsum, ssum; @@ -65,6 +65,14 @@ int main(int argc, char* argv[]) name = strdup("libstrongswan\","); sname = "library_init"; } + else if (strstr(path, "charon")) + { + name = strdup("charon\","); + } + else if (strstr(path, "pluto")) + { + name = strdup("pluto\","); + } else { fprintf(stderr, "don't know how to handle '%s', ignored", path); @@ -73,25 +81,27 @@ int main(int argc, char* argv[]) fsum = integrity->build_file(integrity, path); ssum = 0; - handle = dlopen(path, RTLD_LAZY); - if (handle) + if (sname) { - symbol = dlsym(handle, sname); - if (symbol) + handle = dlopen(path, RTLD_LAZY); + if (handle) { - ssum = integrity->build_segment(integrity, symbol); + symbol = dlsym(handle, sname); + if (symbol) + { + ssum = integrity->build_segment(integrity, symbol); + } + else + { + fprintf(stderr, "symbol lookup failed: %s\n", dlerror()); + } + dlclose(handle); } else { - fprintf(stderr, "symbol lookup failed: %s\n", dlerror()); + fprintf(stderr, "dlopen failed: %s\n", dlerror()); } - dlclose(handle); } - else - { - fprintf(stderr, "dlopen failed: %s\n", dlerror()); - } - printf("\t{\"%-20s0x%08x, 0x%08x},\n", name, fsum, ssum); free(name); } |