You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
SSLIOP (18845|18845) Interceptor (context), ssl=0 collocated=1
TAO (18845|18845) SL2_AccessDecision::access_decision(0,get_port_profile) collocated 1 NOT FOUND using default 0
TAO (18845|18845) SL2::access_allowed_ex returned false
terminate called after throwing an instance of 'CORBA::NO_PERMISSION'
TAOのデバッグメッセージを確認すると以下のエラーが発生している。
TAO (17744|17770) - GIOP_Message_State::parse_message_header_i
TAO (17744|17770) - TAO_GIOP_Message_State::parse_magic_bytes, bad �IOP header: magic word [16,03,01,01]
TAO (17744|17770) - Transport[12]::handle_input, error parsing incoming message
TAO (17744|17770) - Resume_Handle::handle_input_return_value_hook, handle_input returning -1, so handle is not resumed.
TAO (17744|17770) - Connection_Handler[12]::handle_input_internal, handle = 12/12, retval = -1
TAO (17744|17770) - Connection_Handler[12]::close_connection_eh, purging entry from cache
TAOのSSLIOPにはCORBAオブジェクトごとにアクセス権限を設定する仕組み(OMG Security Service Specification Version 1.8のThe SecurityLevel2::AccessDecision Interfaceに対応する仕組み)があり、プロセス内からのCORBAオブジェクトへのアクセスはSSLではないため基本的にCORBA::NO_PERMISSION例外を投げるようになっている。
Describe the bug
OpenRTM-aist+TAOでSSLIOP通信させる際に以下の不具合が発生する。
To Reproduce
Steps to reproduce the behavior:
-SSLNoProtection
オプションを追加して再度コマンドを実行Reproducibility
100%
Expected behavior
Screenshots or Logs
Environment
Additional context
マスターマネージャへのスレーブマネージャの登録についてはcorbaloc形式での接続が失敗してから問題が起こっている。
エンドポイントを
ssliop://localhost:2810
という形式ではなく、iiop://localhost:/ssl_port=2809
もしくはssliop://localhost:/ssl_port=2810
のようにssl_port
のパラメータでポート番号を指定すると何故か問題が発生しない。TAOの仕様なのかバグなのかは不明。現在のOpenRTM-aistの実装では
corba.master_manager
の項目に指定したエンドポイントを自動的にcorbaloc形式に変換するようになっているが、上記のようなssl_port
のパラメータでポート番号を指定する場合の変換には対応していないため、現状ではマスターマネージャとスレーブマネージャで別々の設定ファイルを用意する必要がある。TAOのSSLIOPにはCORBAオブジェクトごとにアクセス権限を設定する仕組み(OMG Security Service Specification Version 1.8のThe SecurityLevel2::AccessDecision Interfaceに対応する仕組み)があり、プロセス内からのCORBAオブジェクトへのアクセスはSSLではないため基本的に
CORBA::NO_PERMISSION
例外を投げるようになっている。TAOではデフォルトでアクセスを許可/拒否を設定する
default_decision
関数とプロセス内部からのアクセスを許可/拒否を設定するdefault_collocated_decision
関数が用意されており、特定のCORBAオブジェクトのアクセスの許可/拒否を設定したものを除き、設定していないCORBAオブジェクトについてはデフォルトの設定で許可/拒否を判断する。ただし、現在のTAO(ver. 3.0.6)では
default_collocated_decision
関数が上手く動作しておらず、プロセス内部からのアクセスだけではなく、プロセス外部からの通信の許可/拒否も設定されてしまう。ソースコードを読んでみたのですが、意図が分からなかったのでバグだと思います。
正常に動作させるには、
SL2_SecurityManager.cpp
の以下の部分に修正が必要です。The text was updated successfully, but these errors were encountered: