Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

TAO関連の不具合について #1016

Open
Nobu19800 opened this issue Jan 26, 2022 · 0 comments
Open

TAO関連の不具合について #1016

Nobu19800 opened this issue Jan 26, 2022 · 0 comments
Labels
bug Something isn't working

Comments

@Nobu19800
Copy link

Nobu19800 commented Jan 26, 2022

Describe the bug
OpenRTM-aist+TAOでSSLIOP通信させる際に以下の不具合が発生する。

  • RTCの起動に失敗する。
  • マスターマネージャがTAOで動作している場合、スレーブマネージャの登録に失敗する。

To Reproduce
Steps to reproduce the behavior:

  1. 設定ファイルrtc.ssl.confとsvc.ssl.confを用意する。
corba.args: -ORBEndpoint ssliop:// -ORBSvcConf ./svc.ssl.conf -ORBDebugLevel 10

corba.nameservers: corbaloc:ssliop:localhost:2809
corba.master_manager: ssliop://localhost:2810
dynamic SSLIOP_Factory Service_Object *
        TAO_SSLIOP:_make_TAO_SSLIOP_Protocol_Factory()
        "-SSLPrivateKey PEM:server.pem -SSLCertificate PEM:root.crt -SSLPassword passward"
static Advanced_Resource_Factory "-ORBProtocolFactory SSLIOP_Factory"
  1. 以下のコマンドを実行する。
./ConsoleOutComp -d -f rtc.ssl.conf
./ConsoleInComp -f rtc.ssl.conf
  1. 以下のようにTAOのデバッグメッセージを確認したらsvc.ssl.confに-SSLNoProtection オプションを追加して再度コマンドを実行
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'
  1. 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

Reproducibility
100%

Expected behavior

  • RTCが正常に起動する
  • マネージャを登録できる

Screenshots or Logs

Environment

  • OS: Ubuntu 18.04
  • OpenRTM-aist master branch

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のパラメータでポート番号を指定する場合の変換には対応していないため、現状ではマスターマネージャとスレーブマネージャで別々の設定ファイルを用意する必要がある。

  • RTCの起動失敗について

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の以下の部分に修正が必要です。

    // if (this->default_collocated_decision_)  //修正前
    if (this->default_collocated_decision_ && collocated) //修正後
        access_decision = true;
@Nobu19800 Nobu19800 added the bug Something isn't working label Jan 26, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

1 participant