在一个 c++ 程序中,我使用系统函数来执行 ldapsearch 命令来获取文件中的数据。但是当 shell 是 bash 传递给 ldapsearch 的字符串导致错误并且如果用户的默认 shell 是 csh 时它工作正常,就会出现问题。当我调试下面观察到的代码时,字符串作为命令传递
ldapsearch -h <hostname> -p <port> -D <binddn> -w <passwd> -b \"cn=admin root\" \"(filter)\" cn
现在我能想到两个解决方案
- 在调用系统函数之前将 shell 设置为 csh。
- 或者从上面的字符串中删除“\”,以便任何 shell 都可以理解该命令。
在这方面的任何指针都会很棒。这里需要注意的一点是,我使用 std::string 创建下面的最终输出字符串是相同的片段。
std::string ldapSystemCmd;
if(!ldapCosSearchDn.empty()) {
ldapSystemCmd += ldapInitialString;
ldapSystemCmd += "-b \"" + ldapCosSearchDn + "\"";
}
ldapSystemCmd += " \"" + ldapCosSearchFilter + "\"";
ldapSystemCmd += " cn >" + ldapSearchFileName;
int systemOutput = system(ldapSystemCmd.c_str());
或者,如果有任何其他方式我可以达到同样的效果。