C ++プログラムでは、システム関数を使用してldapsearchコマンドを実行し、ファイル内のデータを取得しています。ただし、シェルがbashの場合に問題が発生し、ldapsearchに渡された文字列がエラーになり、ユーザーのデフォルトのシェルがcshの場合は正常に機能します。以下のコードをデバッグすると、文字列がコマンドとして渡されます
ldapsearch -h <hostname> -p <port> -D <binddn> -w <passwd> -b \"cn=admin root\" \"(filter)\" cn
今私が考えることができる2つの解決策
- システム関数を呼び出す前に、シェルをcshに設定します。
- または、上記の文字列から「\」を削除して、すべてのシェルがコマンドを理解できるようにします。
この点に関するどんなポインタも素晴らしいでしょう。ここで、std :: stringを使用して以下の最終出力文字列を作成していることに注意してください。これは、同じスニペットです。
std::string ldapSystemCmd;
if(!ldapCosSearchDn.empty()) {
ldapSystemCmd += ldapInitialString;
ldapSystemCmd += "-b \"" + ldapCosSearchDn + "\"";
}
ldapSystemCmd += " \"" + ldapCosSearchFilter + "\"";
ldapSystemCmd += " cn >" + ldapSearchFileName;
int systemOutput = system(ldapSystemCmd.c_str());
または、他の方法があれば、私は同じことを達成できます。