---- Rainer Jung <rainer.j...@kippdata.de> wrote: 
> On 22.06.2012 06:10, Joe Lewis wrote:
> > On 6/21/12 10:02 PM, oh...@cox.net wrote:
> >> ---- Joe Lewis<j...@joe-lewis.com>  wrote:
> >>> On 6/21/12 9:39 PM, oh...@cox.net wrote:
> >>>> ---- oh...@cox.net wrote:
> >>>>> ---- oh...@cox.net wrote:
> >>>>>> ---- Joe Lewis<j...@joe-lewis.com>   wrote:
> >>>>>>> On 6/21/12 7:32 PM, oh...@cox.net wrote:
> >>>>>>>> ---- oh...@cox.net wrote:
> >>>>>>>>> ---- Joe Lewis<j...@joe-lewis.com>    wrote:
> >>>>>>>>>> On 6/21/12 6:46 PM, oh...@cox.net wrote:
> >>>>>>>>>>> ---- Joe Lewis<j...@joe-lewis.com>     wrote:
> >>>>>>>>>>>> On 6/21/12 5:49 PM, oh...@cox.net wrote:
> >>>>>>>>>>>>> ---- oh...@cox.net wrote:
> >>>>>>>>>>>>>> ---- Sorin Manolache<sor...@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/
> >>>
> >>
> >> Hi,
> >>
> >> I'm basically using the original mod_headers.c as a starter code, and
> >> stuck some stuff in there.  Haven't done anything with the hooks etc.
> >> yet, so whatever was there is there:
> >>
> >> static void register_hooks(apr_pool_t *p)
> >> {
> >>      printf("mod_headers-jl V0.09 - start calling OAM API\n");
> >>      printf("In register_hooks\n");
> >>      ap_register_output_filter("FIXUP_HEADERS_OUT",
> >> ap_headers_output_filter,
> >>                                NULL, AP_FTYPE_CONTENT_SET);
> >>      ap_register_output_filter("FIXUP_HEADERS_ERR",
> >> ap_headers_error_filter,
> >>                                NULL, AP_FTYPE_CONTENT_SET);
> >>      ap_hook_pre_config(header_pre_config,NULL,NULL,APR_HOOK_MIDDLE);
> >>      ap_hook_post_config(header_post_config,NULL,NULL,APR_HOOK_MIDDLE);
> >>      ap_hook_insert_filter(ap_headers_insert_output_filter, NULL,
> >> NULL, APR_HOOK_LAST);
> >>      ap_hook_insert_error_filter(ap_headers_insert_error_filter,
> >>                                  NULL, NULL, APR_HOOK_LAST);
> >>      ap_hook_fixups(ap_headers_fixup, NULL, NULL, APR_HOOK_LAST);
> >>      ap_hook_post_read_request(ap_headers_early, NULL, NULL,
> >> APR_HOOK_FIRST);
> >> }
> >>
> >> module AP_MODULE_DECLARE_DATA headers_module =
> >> {
> >>      STANDARD20_MODULE_STUFF,
> >>      create_headers_dir_config,  /* dir config creater */
> >>      merge_headers_config,       /* dir merger --- default is to
> >> override */
> >>      NULL,                       /* server config */
> >>      NULL,                       /* merge server configs */
> >>      headers_cmds,               /* command apr_table_t */
> >>      register_hooks              /* register hooks */
> >> };
> >>
> >> I guess that there is a:
> >>
> >> ap_hook_post_config(header_post_config,NULL,NULL,APR_HOOK_MIDDLE);
> >>
> >> in that register_hooks(), but it was there from the original code.
> >>
> >> BTW, I was checking, and it looks like there's an X509_free() function
> >> in both openssl and in libobaccess.so (used 'nm --dynamic<file>), so
> >> I'm wondering if things are confused, and maybe Apache code expects to
> >> call the openssl X509_free, but somehow ends up calling the
> >> X509_free() in libobaccess.so?
> >>
> >> What would cause something like that?  If two .so files have the same
> >> function, how to avoid conflicts?
> >>
> >> Jim
> >
> > Jim, you may have hit that on the head.  I'm not sure of the load order
> > and looking up symbols, but it could very well change things.  Try
> > re-ordering or adding a LoadFile before the SSL module and see if that
> > changes things.
> 
> Look up order usually is load order. So if mod_ssl loads first and loads 
> its dependency libcrypto, the symbol will always be found there even if 
> the implementation in libobaccess.so is needed - and vice versa.
> 
> On Solaris there is a -Bdirect linker flag which changes runtime search 
> order so that each module would find a needed symbol first inits direct 
> dependencies. Unfortunately AFAIK notihing similar exists for Linux.
> 
> You would need to find ssl libs and libobaccess with compatible symbols. 
> Best would be a libobaccess which is dynamically linked against a 
> compatible version of libcrypto instead of - as it seems - being 
> statically linked against it.
> 
> Regards,
> 
> Rainer
> 


Hi Rainer,

Here's exactly what I found:

[root@apachemodule ~]# ldd /apps/netpoint/lib64/libobaccess.so
        libnsl.so.1 => /lib64/libnsl.so.1 (0x0000002a95ab8000)
        libdl.so.2 => /lib64/libdl.so.2 (0x0000002a95bd0000)
        libpthread.so.0 => /lib64/tls/libpthread.so.0 (0x0000002a95cd3000)
        libstdc++.so.6 => /lib64/libstdc++.so.6 (0x0000002a95de9000)
        libm.so.6 => /lib64/tls/libm.so.6 (0x0000002a95fd9000)
        libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x0000002a9615f000)
        libc.so.6 => /lib64/tls/libc.so.6 (0x0000002a9626d000)
        /lib64/ld-linux-x86-64.so.2 (0x000000552aaaa000)
[root@apachemodule ~]#
[root@apachemodule ~]# nm --dynamic /apps/netpoint/lib64/libobaccess.so | grep 
"X509_free"
00000000002d8d60 T X509_free


[root@apachemodule ~]# ldd /lib64/libssl.so.0.9.7a
        libgssapi_krb5.so.2 => /usr/lib64/libgssapi_krb5.so.2 
(0x0000003518700000)
        libkrb5.so.3 => /usr/lib64/libkrb5.so.3 (0x0000003519000000)
        libcom_err.so.2 => /lib64/libcom_err.so.2 (0x0000003518500000)
        libk5crypto.so.3 => /usr/lib64/libk5crypto.so.3 (0x0000003518900000)
        libcrypto.so.4 => /lib64/libcrypto.so.4 (0x0000003518d00000)
        libdl.so.2 => /lib64/libdl.so.2 (0x0000003514800000)
        libz.so.1 => /usr/lib64/libz.so.1 (0x0000003514c00000)
        libc.so.6 => /lib64/tls/libc.so.6 (0x0000003514300000)
        libresolv.so.2 => /lib64/libresolv.so.2 (0x0000003518300000)
        /lib64/ld-linux-x86-64.so.2 (0x000000552aaaa000)
[root@apachemodule ~]#
[root@apachemodule ~]# nm --dynamic /lib64/libssl.so.0.9.7a | grep "X509_free"
                 U X509_free


[root@apachemodule ~]# ldd /lib64/libcrypto.so.0.9.7a
        libgssapi_krb5.so.2 => /usr/lib64/libgssapi_krb5.so.2 
(0x0000003518700000)
        libkrb5.so.3 => /usr/lib64/libkrb5.so.3 (0x0000003519000000)
        libcom_err.so.2 => /lib64/libcom_err.so.2 (0x0000003518500000)
        libk5crypto.so.3 => /usr/lib64/libk5crypto.so.3 (0x0000003518900000)
        libdl.so.2 => /lib64/libdl.so.2 (0x0000003514800000)
        libz.so.1 => /usr/lib64/libz.so.1 (0x0000003514c00000)
        libc.so.6 => /lib64/tls/libc.so.6 (0x0000003514300000)
        libresolv.so.2 => /lib64/libresolv.so.2 (0x0000003518300000)
        /lib64/ld-linux-x86-64.so.2 (0x000000552aaaa000)
[root@apachemodule ~]#
[root@apachemodule ~]# nm --dynamic /lib64/libcrypto.so.0.9.7a | grep 
"X509_free"
0000003518da9860 T X509_free


So:

- liboaccess.so doesn't REFERENCE libcrypto, but it HAS an X509_free() function 
in it.
- libssl.so.REFERENCES libcrypto, AND it HAS an X509_free function in it.
- libcrypto also has an X509_free function in it.

>From your msg above, are you saying that this situation can't be resolved by 
>trying to change load order?

And the only way is what you said in your last paragraph (find another 
libobccess.so)?

Jim


Reply via email to