Bug 3048

Summary: Server aborts with SSLIOP configuration
Product: TAO Reporter: Vikram Karandikar <softking>
Component: SSLIOP Pluggable ProtocolAssignee: DOC Center Support List (internal) <tao-support>
Status: NEW ---    
Severity: critical    
Priority: P3    
Version: 1.5.8   
Hardware: x86   
OS: Solaris   
Attachments: Test prorgam

Description Vikram Karandikar 2007-08-17 03:29:22 CDT
i am configuring my server with following parameters
    char *options[] = {
        "-ORBSvcConfDirective", "static Server_Strategy_Factory \"-ORBConcurrency thread-per-connection\"" ,
        "-ORBSvcConfDirective", "static Client_Strategy_Factory \"-ORBTransportMuxStrategy EXCLUSIVE\"" ,
        "-ORBSvcConfDirective", "static Advanced_Resource_Factory \"-ORBProtocolFactory SSLIOP_Factory\"" ,
        "-ORBSvcConfDirective", "static SSLIOP_Factory \"-SSLAuthenticate SERVER\"" ,
        "-ORBSvcConfDirective", "static SSLIOP_Factory \"-SSLCertificate PEM:ssl/cacert.pem\"" ,
        "-ORBSvcConfDirective", "static SSLIOP_Factory \"-SSLPrivateKey PEM:ssl/privkey.pem\"" };

after running the server i get following crash

(gdb) r
Starting program: /net/storm4/vkarandi/ipms-clone/master/packages/ipms/obj/bin/ipmsquerymgr
terminate called after throwing an instance of 'PortableInterceptor::ORBInitInfo::InvalidName'

Program received signal SIGABRT, Aborted.
0xfeb60c57 in _lwp_kill () from /lib/libc.so.1
(gdb) where
#0  0xfeb60c57 in _lwp_kill () from /lib/libc.so.1
#1  0xfeb5e40e in thr_kill () from /lib/libc.so.1
#2  0xfeb0d083 in raise () from /lib/libc.so.1
#3  0xfeaf0b19 in abort () from /lib/libc.so.1
#4  0xfecde9ef in __gnu_cxx::__verbose_terminate_handler () from /usr/local/lib/libstdc++.so.6
#5  0xfecdca0c in __cxxabiv1::__terminate () from /usr/local/lib/libstdc++.so.6
#6  0xfecdca44 in std::terminate () from /usr/local/lib/libstdc++.so.6
#7  0xfecdcb90 in __cxa_throw () from /usr/local/lib/libstdc++.so.6
#8  0x0827a2fa in TAO_ORBInitInfo::register_initial_reference (this=0x869b258, id=0x86b4398 "hâM\b°Ck\bð\035k\bT\037ä\222A", obj=0x86b430c)
    at ../../../../TAO/tao/PI/ORBInitInfo.cpp:159
#9  0x08399c88 in TAO::Security::ORBInitializer::pre_init (this=0x86a7220, info=0x869b258)
    at ../../../../../TAO/orbsvcs/orbsvcs/Security/Security_ORBInitializer.cpp:90
#10 0x0827dd43 in TAO::ORBInitializer_Registry::pre_init (this=0x867af70, orb_core=0x8697a58, argc=2, argv=0x8696aa0, slotid=@0x804775c)
    at Array_Base.inl:93
#11 0x08304c45 in CORBA::ORB_init (argc=@0x8047884, argv=0x8696aa0, orbid=0x0) at ORB_Core_Auto_Ptr.inl:16


when i tried to look into the following files TAO/orbsvcs/orbsvcs/Security/Security_ORBInitializer.cpp and TAO/tao/PI/ORBInitInfo.cpp
i observed that the "id" parameter is garbage when it comes to the TAO_ORBInitInfo::register_initial_reference
the call is as following
  // Register the SecurityLevel2::Current object reference with the
  // ORB.
  info->register_initial_reference ("SecurityLevel3:SecurityCurrent",
                                    security_current3.in ());

some more observations

in step #10 i guess this method is called TAO::ORBInitializer_Registry::pre_init(./TAO/tao/PI/ORBInitializer_Registry_Impl.cpp)
which in a for loop calls TAO::Security::ORBInitializer::pre_init (TAO/orbsvcs/orbsvcs/Security/Security_ORBInitializer.cpp)

now in the TAO::ORBInitializer_Registry::pre_init the orb_core parameter is valid (orb_core=0x8697a58) but when the TAO::Security::ORBInitializer::pre_init funciton is called the orb_core becomes NULL

#9  0x08399c88 in TAO::Security::ORBInitializer::pre_init (this=0x86a7220, info=0x869b258)
    at ../../../../../TAO/orbsvcs/orbsvcs/Security/Security_ORBInitializer.cpp:90
(gdb) print *info
$10 = {<CORBA::Object> = {_vptr.Object = 0x84de09c, is_local_ = true, is_evaluated_ = true, ior_ = {<TAO_Var_Base_T<IOP::IOR>> = {
        ptr_ = 0x0}, <No data fields>}, orb_core_ = 0x0, protocol_proxy_ = 0x0, refcount_ = {type_ = TAO_Configurable_Refcount::TAO_THREAD_LOCK,
      null_refcount_ = {own_mutex_ = {lock_ = 0}, impl_ = {mutex_ = @0x869b288, value_ = 1}}, mutex_refcount_ = {value_ = 1,
        static increment_fn_ = 0x834aed8 <(anonymous namespace)::multi_cpu_increment(long volatile*)>,
        static decrement_fn_ = 0x834aeec <(anonymous namespace)::multi_cpu_decrement(long volatile*)>,
        static exchange_fn_ = 0x834af00 <(anonymous namespace)::multi_cpu_exchange(long volatile*, long)>,
        static exchange_add_fn_ = 0x834af10 <(anonymous namespace)::multi_cpu_exchange_add(long volatile*, long)>}}, object_init_lock_ = 0x0},
  _vptr.ORBInitInfo = 0x84ddfe0, static _tc_ObjectId = 0x8670abc, static _tc_DuplicateName = 0x8670aa4, static _tc_InvalidName = 0x8670a8c}
(gdb) up
#10 0x0827dd43 in TAO::ORBInitializer_Registry::pre_init (this=0x867af70, orb_core=0x8697a58, argc=2, argv=0x8696aa0, slotid=@0x804775c)
Comment 1 Vikram Karandikar 2007-08-17 03:30:11 CDT
Created attachment 847 [details]
Test prorgam

the test program is given to reproduce the problem.
Comment 2 Johnny Willemsen 2007-08-20 03:30:48 CDT
important note that this is a static build. We only have shared library builds on solaris at this moment