---- 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