いくつかの調査の後、私は実際の解決策を見つけました。私はApache THRIFTからのパッチと共にcyrus-saslプロジェクトを使用しました。
まず、安全なクラスタでハイブサービスを実行しているTTransportを作成します。
boost::shared_ptr<TTransport> socket(new TSocket("hive_host", hive_port));
boost::shared_ptr<TTransport> transport(new TBufferedTransport(socket));
クライアントで& getsecretから& シンプルとパスワードからユーザ名を取得するためにコールバックの配列を作成します。
static sasl_callback_t callbacks[] ={
{
SASL_CB_USER, (sasl_callback_ft)&simple, NULL
}, {
SASL_CB_AUTHNAME, (sasl_callback_ft)&simple, NULL
}, {
SASL_CB_PASS, (sasl_callback_ft)&getsecret, NULL
}, {
SASL_CB_LIST_END, NULL, NULL
}
};
メカニズムとサービスを選択するには、saslimpl.cppのlibSaslClientを使用します。これにより、クライアントが初期化されます。また、このクライアントをTSaslTransportで使用して、接続を開き、サーバーと通信します。
map<string, string> props;
sasl::libSaslClient libSaslClient("PLAIN", "", "ldap", "host", props, callbacks);
boost::shared_ptr<TSaslTransport> tsaslTransport(new TSaslTransport(&libSaslClient, transport));
tsaslTransport->open();
tsaslTransport->close();
成功したオープンでは、あなたは正しいユーザー名とパスワードを指定したセキュアクラスタと通信することができるようになります。