Reverse engineering is a quite important skill to have when working with OpenAM, and this is even more the case for the web policy agents. Determining the version of the NSS and NSPR libraries may prove important when trying to build the agents, so here is a trick I’ve used in the past to determine the version of the bundled libraries.
To determine the version for NSPR, create nspr.c with the following content:
#include <dlfcn.h> #include <stdio.h> int main() { void* lib = dlopen("/opt/web_agents/apache24_agent/lib/libnspr4.so", RTLD_NOW); const char* (*func)() = dlsym(lib, "PR_GetVersion"); printf("%sn", func()); dlclose(lib); return 0; }
Compile it using the following command (of course, make sure the path to the library is actually correct), then run the command:
$ gcc nspr.c -ldl $ ./a.out 4.10.6
Here is the equivalent source for NSS, saved under nss.c:
#include <dlfcn.h> #include <stdio.h> int main() { void* lib = dlopen("/opt/web_agents/apache24_agent/lib/libnss3.so", RTLD_NOW); const char* (*func)() = dlsym(lib, "NSS_GetVersion"); printf("%sn", func()); dlclose(lib); return 0; }
And an example output would look like:
$ gcc nss.c -ldl $ ./a.out 3.16.3 Basic ECC
To determine the correct symbol names I’ve been using the following command:
nm -D libns{s,p}*.so | grep -i version
NOTE: While this code works nicely on Linux, for Windows and Solaris you will probably need a few adjustments, or there are potentially other/better ways to get information on the libraries.