You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@httpd.apache.org by Prashant Shetty <pr...@hotpop.com> on 2005/01/11 09:31:38 UTC

Problem with Function Pointers in my Module in Apache 1.3.33 on AIX

*The Problem* :
I am using a function pointer in my WebServer module to call  OpenSSL
function - SSL_get_peer_certificate() from the main Apache process. The
function definition is taken from the OpenSSL Library : /libssl.a/ . On
execution, I get the following error in my Apache Error Log file :
/Error: Look up of symbol - SSL_get_peer_certificate failed - Function
not implemented (SSL_get_peer_certificate)./

*Modules used to build Apache WebServer* :
mod_ssl version : *2.8.22-1.3.33*
OpenSSL version : *0.9.7d*  ( openssl-0.9.7e  is giving problem while
building on AIX )
Apache version : *1.3.33*
AIX version :  *4.3* and *5.2*
gcc version : *2.95.3*

*Code* :
----------------------------------------------------------------------------
void * libssl = NULL;
typedef X509* (*funcptr)(SSL*);
funcptr fptr = NULL;

// Get the handle to main Apache process
libssl = dlopen (NULL, RTLD_NOW | RTLD_GLOBAL | RTLD_MEMBER );
fptr = (funcptr) dlsym(libssl, "SSL_get_peer_certificate");
----------------------------------------------------------------------------

*Details :*
Initially, the problem I faced was that the function symbol
/SSL_get_peer_certificate/, was getting garbage collected  ( During
linking and binding on AIX, any unused or unreferenced symbols are
deleted ). This was the output of /nm/ command on /httpd/ executable :
.SSL_get_peer_certificate T   269039260
.. ie .. the function definition was visible only in the Text Section.

Hence, while building Apache, I specifically exported the function
symbol using -u flag with /ld/. The /make /command is :
make MFLAGS="EXTRA_LDFLAGS='-uSSL_get_peer_certificate'"

The output of /nm/ command on /httpd/ executable now is :
.SSL_get_peer_certificate T   269039260
SSL_get_peer_certificate D   536993772
SSL_get_peer_certificate d   536993772      12
Now, the function is visible in the Data Section both at global and
local level.

But I am still not able to access the function using the pointer. Same
is the case with accessing the functions in my own module, using a pointer.

*Further Observations :*
- If we do a /dlsym /to get the handle of a function defined *inside
Apache Code*, there is no such problem.
- There is no problem using function pointers in the rest of our
application.

Has anybody else faced a similar problem? Any pointers or related links
would be of great help.

Thanks in Advance,
Prashant.