aboutsummaryrefslogtreecommitdiffstats
path: root/src/checksum
diff options
context:
space:
mode:
authorMartin Willi <martin@strongswan.org>2009-06-22 14:42:04 +0200
committerMartin Willi <martin@strongswan.org>2009-06-22 15:47:18 +0200
commit4f2c48cd3db818e3c9d0a279d5bb5a442afda3e3 (patch)
tree8a49ca94c84c4950c65f1aabf645cb21e500e72c /src/checksum
parentda2834a280a8c396be2980b171d0ab873359b17f (diff)
downloadstrongswan-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.am5
-rw-r--r--src/checksum/checksum_builder.c36
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);
}