httpd-modules-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Joe Lewis <...@joe-lewis.com>
Subject Re: UNSOLVED was Re: SOLVED was Re: How to compiling/link/use Apache module that uses shared library?
Date Fri, 22 Jun 2012 03:53:04 GMT
On 6/21/12 9:39 PM, ohaya@cox.net wrote:
> ---- ohaya@cox.net wrote:
>> ---- ohaya@cox.net wrote:
>>> ---- Joe Lewis<joe@joe-lewis.com>  wrote:
>>>> On 6/21/12 7:32 PM, ohaya@cox.net wrote:
>>>>> ---- ohaya@cox.net wrote:
>>>>>> ---- Joe Lewis<joe@joe-lewis.com>   wrote:
>>>>>>> On 6/21/12 6:46 PM, ohaya@cox.net wrote:
>>>>>>>> ---- Joe Lewis<joe@joe-lewis.com>    wrote:
>>>>>>>>> On 6/21/12 5:49 PM, ohaya@cox.net wrote:
>>>>>>>>>> ---- ohaya@cox.net wrote:
>>>>>>>>>>> ---- Sorin Manolache<sorinm@gmail.com>
    wrote:
>>>>>>>>>>>> And I forgot to say: run gdb in some sort
of environment where you see
>>>>>>>>>>>> your current source code line and a couple
of surrounding lines. You
>>>>>>>>>>>> could achieve this with the "list" command,
but I prefer running gdb in
>>>>>>>>>>>> emacs and let emacs do the nice listing of
source code in a different panel.
>>>>>>>>>>>>
>>>>>>>>>>>> S
>>>>>>>>>>> Here's the function from my source.  It's the
original from mod_headers.c, plus my printf:
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> static int header_post_config(apr_pool_t *pconf,
apr_pool_t *plog,
>>>>>>>>>>>                                   apr_pool_t
*ptemp, server_rec *s)
>>>>>>>>>>> {
>>>>>>>>>>>         printf("In header_post_config\n");
>>>>>>>>>>>         header_ssl_lookup = APR_RETRIEVE_OPTIONAL_FN(ssl_var_lookup);
>>>>>>>>>>>         return OK;
>>>>>>>>>>> }
>>>>>>>>>>>
>>>>>>>>>>> Jim
>>>>>>>>>> Hi,
>>>>>>>>>>
>>>>>>>>>> I was able to get the segfault to go away.  Here's
what I had to do:
>>>>>>>>>>
>>>>>>>>>> - Created /etc/ld.so.conf.d/my.conf, and added the
directory where my libobaccess.so was
>>>>>>>>>> - Run 'ldconfig' to activate.
>>>>>>>>>> - In the apxs command, DON'T include the -L and -l
arguments
>>>>>>>>>>
>>>>>>>>>> After that, Apache appears to start ok, without segfault
:)!!
>>>>>>>>>>
>>>>>>>>>> Thanks for all of the great help, esp. the suggestion
about checking "ldconfig -p".  I still don't understand why, but I'm just glad that I can
get past this piece so now I can debug my module :)...
>>>>>>>>>>
>>>>>>>>>> Later,
>>>>>>>>>> Jim
>>>>>>>>> I'm just glad this list is as good as it is!
>>>>>>>>>
>>>>>>>>> FYI, the ldconfig is the dynamic linker control, and
those
>>>>>>>>> /etc/ld.so.conf.d files provide additional search directories
for the
>>>>>>>>> linker to check in when loading a library.
>>>>>>>>>
>>>>>>>>> Joe
>>>>>>>>> --
>>>>>>>>> http://www.silverhawk.net/
>>>>>>>> Hi,
>>>>>>>>
>>>>>>>> Sorry to report, but my earlier report was a "false positive"
:)...
>>>>>>>>
>>>>>>>> I forgot that the mod_headers.c that I was doing the earlier
testing with had all references to the libobaccess.so removed :(!!
>>>>>>>>
>>>>>>>> So, I'm still stuck with basically the same problem, now,
working with my "full" code, with the calls in it:
>>>>>>>>
>>>>>>>> - If I compile with -L and -l, Apache segfaults when it starts
>>>>>>>>
>>>>>>>> - If I compile without -L and -l, then I get "undefined symbol"
errors when I try to start Apache, e.g.:
>>>>>>>>
>>>>>>>> [root@apachemodule build-mod_headers]# /apps/httpd2222/bin/apachectl
-k start -X
>>>>>>>> httpd: Syntax error on line 84 of /apps/httpd2222/conf/httpd.conf:
Cannot load /apps/httpd2222/modules/mod_headers.so into server: /apps/httpd2222/modules/mod_headers.so:
undefined symbol: ObResource_isProtected
>>>>>>>>
>>>>>>>> That "ObResource_isProtected" should be a symbol in libobaccess.so,
and in fact, if I do "nm --dynamic", I get:
>>>>>>>>
>>>>>>>> [root@apachemodule build-mod_headers]# nm --dynamic /apps/netpoint/lib64/libobaccess.so
| grep "ObResource_isProtected"
>>>>>>>> 00000000000a6d80 T ObResource_isProtected
>>>>>>>> [root@apachemodule build-mod_headers]#
>>>>>>>>
>>>>>>>>
>>>>>>>> I'm *assuming* that the reason for the "undefined symbol"
error is that libobaccess.so is actually not being loaded, but then when I try to load libobaccess.so,
either via -L and -l in the apxs, or using LoadFile in httpd.conf, I get the segfault (same
gdb info, BTW).
>>>>>>>>
>>>>>>>> Catch-22?
>>>>>>>>
>>>>>>>> Sorry for the false alarm :(!!
>>>>>>>>
>>>>>>>> Jim
>>>>>>>>
>>>>>>>>
>>>>>>> Not a catch-22.  The -L and -l specify linker options when assembling
>>>>>>> the code.  The ldconfig is a run-time thing.  If you are getting
the
>>>>>>> stderr messages, you are making it all the way into your library.
 I'd
>>>>>>> suggest commenting out the following line and see if you get
farther :
>>>>>>>
>>>>>>> header_ssl_lookup = APR_RETRIEVE_OPTIONAL_FN(ssl_var_lookup);
>>>>>>>
>>>>>>> That should tell you if the problem is the ssl_var_lookup.
>>>>>>>
>>>>>>> Joe
>>>>>>> --
>>>>>>> http://www.silverhawk.net/
>>>>>> Hi,
>>>>>>
>>>>>> Thanks for the suggestion.  I just tried what you suggested, and
got a segfault when I started Apache with the modified module.
>>>>>>
>>>>>> Jim
>>>>>>
>>>>>>
>>>>> Hi,
>>>>>
>>>>> As a reminder, here's the gdb with the library loaded:
>>>>>
>>>>>
>>>>> (gdb) b header_post_config
>>>>> Function "header_post_config" not defined.
>>>>> Make breakpoint pending on future shared library load? (y or [n]) y
>>>>> Breakpoint 1 (header_post_config) pending.
>>>>> (gdb) run -d /apps/httpd2222/ -f /apps/httpd2222/conf/httpd.conf
>>>>> Starting program: /apps/httpd2222/bin/httpd -d /apps/httpd2222/ -f /apps/httpd2222/conf/httpd.conf
>>>>> [Thread debugging using libthread_db enabled]
>>>>> [New Thread 182897610272 (LWP 11317)]
>>>>> Breakpoint 2 at 0x2a9751ea90: file mod_headers.c, line 1121.
>>>>> Pending breakpoint "header_post_config" resolved
>>>>> mod_headers-jl V0.09 - start calling OAM API
>>>>> In register_hooks
>>>>> In create_headers_dir_config
>>>>> In create_headers_dir_config
>>>>> In header_cmd
>>>>> In header_inout_cmd
>>>>> In parse_format_tag
>>>>> In parse_misc_string
>>>>> In create_headers_dir_config
>>>>> In header_cmd
>>>>> In header_inout_cmd
>>>>> In parse_format_tag
>>>>> In parse_misc_string
>>>>> [Switching to Thread 182897610272 (LWP 11317)]
>>>>>
>>>>> Breakpoint 2, header_post_config (pconf=0x573138, plog=0x5a52c8, ptemp=0x5a72d8,
s=0x59d3a8) at mod_headers.c:1121
>>>>> 1121        printf("In header_post_config\n");
>>>>> (gdb) n
>>>>> 1120    {
>>>>> (gdb) n
>>>>> 1121        printf("In header_post_config\n");
>>>>> (gdb) n
>>>>> In header_post_config
>>>>> 1122        header_ssl_lookup = APR_RETRIEVE_OPTIONAL_FN(ssl_var_lookup);
>>>>> (gdb) n
>>>>> 1124    }
>>>>> (gdb) n
>>>>> 0x00000000004360c7 in ap_run_post_config (pconf=0x573138, plog=0x5a52c8,
ptemp=0x5a72d8, s=0x59d3a8) at config.c:91
>>>>> 91      AP_IMPLEMENT_HOOK_RUN_ALL(int, post_config,
>>>>> (gdb) n
>>>>>
>>>>> Program received signal SIGSEGV, Segmentation fault.
>>>>> 0x0000003518d6c1e1 in BN_num_bits () from /lib64/libcrypto.so.4
>>>>>
>>>>>
>>>>> So, it's actually blowing up in "BN_num_bits()" in /lib64/libcrypto.so.4?
>>>>>
>>>>> Jim
>>>> When you see the :
>>>>
>>>> Program received signal SIGSEGV, Segmentation fault.
>>>> 0x0000003518d6c1e1 in BN_num_bits () from /lib64/libcrypto.so.4
>>>>
>>>>
>>>> in gdb, type "bt" and hit enter.  It should show the back trace and how
>>>> you got to the BN_num_bits() function.
>>>>
>>>> Joe
>>>> --
>>>> http://www.silverhawk.net/
>>>
>>> Hi,
>>>
>>> Here's the bt full:
>>>
>>>
>>> In header_inout_cmd
>>> In parse_format_tag
>>> In parse_misc_string
>>> [Switching to Thread 182897610272 (LWP 6676)]
>>>
>>> Breakpoint 2, header_post_config (pconf=0x573138, plog=0x5a52c8, ptemp=0x5a72d8,
s=0x59d3a8) at mod_headers.c:1121
>>> 1121        printf("In header_post_config\n");
>>> (gdb) n
>>> 1120    {
>>> (gdb) n
>>> 1121        printf("In header_post_config\n");
>>> (gdb) n
>>> In header_post_config
>>> 1122        header_ssl_lookup = APR_RETRIEVE_OPTIONAL_FN(ssl_var_lookup);
>>> (gdb) n
>>> 1124    }
>>> (gdb) n
>>> 0x00000000004360c7 in ap_run_post_config (pconf=0x573138, plog=0x5a52c8, ptemp=0x5a72d8,
s=0x59d3a8) at config.c:91
>>> 91      AP_IMPLEMENT_HOOK_RUN_ALL(int, post_config,
>>> (gdb) n
>>>
>>> Program received signal SIGSEGV, Segmentation fault.
>>> 0x0000003518d6c1e1 in BN_num_bits () from /lib64/libcrypto.so.4
>>> (gdb) bt full
>>> #0  0x0000003518d6c1e1 in BN_num_bits () from /lib64/libcrypto.so.4
>>> No symbol table info available.
>>> #1  0x0000003518da8f4e in X509_ATTRIBUTE_create () from /lib64/libcrypto.so.4
>>> No symbol table info available.
>>> #2  0x0000003518dadea2 in asn1_ex_i2c () from /lib64/libcrypto.so.4
>>> No symbol table info available.
>>> #3  0x0000003518dadf79 in asn1_ex_i2c () from /lib64/libcrypto.so.4
>>> No symbol table info available.
>>> #4  0x0000003518dae0e1 in ASN1_item_ex_i2d () from /lib64/libcrypto.so.4
>>> No symbol table info available.
>>> #5  0x0000003518dae5f2 in ASN1_template_i2d () from /lib64/libcrypto.so.4
>>> No symbol table info available.
>>> #6  0x0000003518dae28e in ASN1_item_ex_i2d () from /lib64/libcrypto.so.4
>>> No symbol table info available.
>>> #7  0x0000003518dae3c6 in ASN1_item_i2d () from /lib64/libcrypto.so.4
>>> No symbol table info available.
>>> #8  0x0000002a987d9d3a in ssl_pphrase_Handle (s=0x59d3a8, p=0x5a72d8) at ssl_engine_pphrase.c:505
>>>          mc = (SSLModConfigRec *) 0x571738
>>>          sc = (SSLSrvConfigRec *) 0x668c38
>>>          pServ = (server_rec *) 0x65fa48
>>>          cpVHostID = 0x60add0 "www.example.com:443"
>>>          szPath = "/apps/httpd2222/conf/certs/apache1.whatever.com.key\000\177\000\000\000Ü×ÿ¿\177\000\000\000à×ÿ¿\177",
'\0'<rep                                                eats 15 times>, "\001\000\000\000°åÿ¿\177\000\000\000;\000\000\000+\000\000\000\020Ûÿ¿\177",
'\0'<repeats 35 times>, "à\224k", '                                               
---Type<return>  to continue, or q<return>  to quit---
>>> \0'<repeats 13 times>, "øéÿ¿\177\000\000\000\020\000\000\000;\000\000\000\016\000\000\000\001\000\001\000\001",
'\0'<repeats 15 times>, "n\000\000\000\000\004\000\000°åÿ¿\177", '\0'<repeats
11 times>, "\020Ûÿ¿\177\000\000\000+\000\000\000;", '\0'<repeats 35 times>...
>>>          pPrivateKey = (EVP_PKEY *) 0x6ba670
>>>          asn1 = Variable "asn1" is not available.
>>> (gdb)
>>>
>>>
>>> Not really sure what to make of that though :(...
>>>
>>> Jim
>>
>> Hi,
>>
>> Ok, something interesting.  I noticed that the servername in the gdb output was example.whatever.com,
so I changed ServerName in extras/httpd-ssl.conf to "apache1.whatever.com".  Apache still
segfaulted after that.
>>
>> I noticed that igdb was showing my router IP address for "mod_unique_id" (whatever
that is), so I thought it was because I didn't have the hostname in /etc/hosts.  So, I added
"apache1.whatever.com" to /etc/hosts, and also turned Apache LogLevel to debug, and now I
get a different error:
>>
>> [root@apachemodule dev]# /apps/httpd2222/bin/apachectl -k start -X
>> mod_headers-jl V0.09 - start calling OAM API
>> In register_hooks
>> In create_headers_dir_config
>> In create_headers_dir_config
>> In header_cmd
>> In header_inout_cmd
>> In parse_format_tag
>> In parse_misc_string
>> In create_headers_dir_config
>> In header_cmd
>> In header_inout_cmd
>> In parse_format_tag
>> In parse_misc_string
>> In header_post_config
>> *** glibc detected *** corrupted double-linked list: 0x00000000006b9710 ***
>> /apps/httpd2222/bin/apachectl: line 78:  7599 Aborted                 $HTTPD $ARGV
>> [root@apachemodule dev]#
>>
>>
>> Here's the Apache error_log:
>>
>> [Thu Jun 21 23:24:11 2012] [info] mod_unique_id: using ip addr 72.215.225.9
>> [Thu Jun 21 23:24:12 2012] [info] Init: Seeding PRNG with 144 bytes of entropy
>> [Thu Jun 21 23:24:12 2012] [info] Loading certificate&  private key of SSL-aware
server
>> [Thu Jun 21 23:29:51 2012] [info] mod_unique_id: using ip addr 72.215.225.9
>> [Thu Jun 21 23:29:52 2012] [info] Init: Seeding PRNG with 144 bytes of entropy
>> [Thu Jun 21 23:29:52 2012] [info] Loading certificate&  private key of SSL-aware
server
>> [Thu Jun 21 23:29:56 2012] [info] mod_unique_id: using ip addr 72.215.225.9
>> [Thu Jun 21 23:29:57 2012] [info] Init: Seeding PRNG with 144 bytes of entropy
>> [Thu Jun 21 23:29:57 2012] [info] Loading certificate&  private key of SSL-aware
server
>> [root@apachemodule dev]#
>>
>>
>> and here's the gdb backtrace:
>>
>> (gdb) b header_post_config
>> Function "header_post_config" not defined.
>> Make breakpoint pending on future shared library load? (y or [n]) y
>> Breakpoint 1 (header_post_config) pending.
>> (gdb) run -d /apps/httpd2222/ -f /apps/httpd2222/conf/httpd.conf
>> Starting program: /apps/httpd2222/bin/httpd -d /apps/httpd2222/ -f /apps/httpd2222/conf/httpd.conf
>> [Thread debugging using libthread_db enabled]
>> [New Thread 182897610272 (LWP 7644)]
>> Breakpoint 2 at 0x2a9751ea90: file mod_headers.c, line 1121.
>> Pending breakpoint "header_post_config" resolved
>> mod_headers-jl V0.09 - start calling OAM API
>> In register_hooks
>> In create_headers_dir_config
>> In create_headers_dir_config
>> In header_cmd
>> In header_inout_cmd
>> In parse_format_tag
>> In parse_misc_string
>> In create_headers_dir_config
>> In header_cmd
>> In header_inout_cmd
>> In parse_format_tag
>> In parse_misc_string
>> [Switching to Thread 182897610272 (LWP 7644)]
>>
>> Breakpoint 2, header_post_config (pconf=0x573138, plog=0x5a52c8, ptemp=0x5a72d8,
s=0x59d3a8) at mod_headers.c:1121
>> 1121        printf("In header_post_config\n");
>> (gdb) n
>> 1120    {
>> (gdb) n
>> 1121        printf("In header_post_config\n");
>> (gdb) n
>> In header_post_config
>> 1122        header_ssl_lookup = APR_RETRIEVE_OPTIONAL_FN(ssl_var_lookup);
>> (gdb) n
>> 1124    }
>> (gdb) n
>> 0x00000000004360c7 in ap_run_post_config (pconf=0x573138, plog=0x5a52c8, ptemp=0x5a72d8,
s=0x59d3a8) at config.c:91
>> 91      AP_IMPLEMENT_HOOK_RUN_ALL(int, post_config,
>> (gdb) n
>> *** glibc detected *** corrupted double-linked list: 0x00000000006b9710 ***
>>
>> Program received signal SIGABRT, Aborted.
>> 0x000000351432e26d in raise () from /lib64/tls/libc.so.6
>> (gdb) bt full
>> #0  0x000000351432e26d in raise () from /lib64/tls/libc.so.6
>> No symbol table info available.
>> #1  0x000000351432fa6e in abort () from /lib64/tls/libc.so.6
>> No symbol table info available.
>> #2  0x0000003514363641 in __libc_message () from /lib64/tls/libc.so.6
>> No symbol table info available.
>> #3  0x0000003514369512 in _int_free () from /lib64/tls/libc.so.6
>> No symbol table info available.
>> #4  0x0000003514369846 in free () from /lib64/tls/libc.so.6
>> No symbol table info available.
>> #5  0x0000002a9790b6ba in R_free () from /apps/netpoint/lib64/libobaccess.so
>> No symbol table info available.
>> #6  0x0000002a9792bc41 in X509_CINF_free () from /apps/netpoint/lib64/libobaccess.so
>> No symbol table info available.
>> #7  0x0000002a9790ed98 in X509_free () from /apps/netpoint/lib64/libobaccess.so
>> No symbol table info available.
>> #8  0x0000002a987d97b6 in ssl_pphrase_Handle (s=0x59d3a8, p=0x5a72d8) at ssl_engine_pphrase.c:243
>>          mc = (SSLModConfigRec *) 0x571738
>>          sc = (SSLSrvConfigRec *) 0x668c38
>>          pServ = (server_rec *) 0x65fa48
>>          cpVHostID = 0x60add0 "apache1.whatever.com:443"
>>          szPath = "/apps/httpd2222/conf/certs/apache1.whatever.com.crt\000\177\000\000\000Ü×ÿ¿\177\000\000\000à×ÿ¿\177",
'\0'<repeats 15 times>, "\001\000\000\000°åÿ¿\177\000\000\000;\000\000\000+\000\000\000\020Ûÿ¿\177",
'\0'<repeats 35 times>, "à\224k", '\0'<repeats 13 times>, "øéÿ¿\177\000\000\000\020\000\000\000;\000\000\000\016\000\000\000\001\000\001\000\001",
'\0'<repeats 15 times>, "n\000\000\000\000\004\000\000°åÿ¿\177", '\0'<repeats
11 times>, "\020Ûÿ¿\177\000\000\000+\000\000\000;", '\0'<repeats 35 times>...
>>          pPrivateKey = Variable "pPrivateKey" is not available.
>> (gdb)
>>
>>
>> Jim
>>
>
> I guess the thing that I'm puzzled about is why it goes from  ssl_pphrase_Handle (which
is part of Apache code?) to X509_free () in the libobaccess.so?  Apache shouldn't even be
aware of the libobaccess stuff yet (since I think that Apache is still trying to initialize
SSL processing)?
>
> Jim

It shouldn't unless you've declared a shutdown hook or a clean up hook 
of sorts. The looks of that stack trace look strikingly like an 
exception handler firing off.  What are all of the hooks you have running?

Joe
--
http://www.silverhawk.net/


Mime
View raw message