在c ++程序中,我使用系统函数执行ldapsearch命令来获取文件中的数据。但是问题发生在shell将bash传递给ldapsearch的字符串结果变成错误时,如果用户的默认shell是csh,它就可以正常工作。当我调试代码时,我在下面观察到字符串作为命令传递
ldapsearch -h <hostname> -p <port> -D <binddn> -w <passwd> -b \"cn=admin root\" \"(filter)\" cn
现在我能想到的两个解决方案
这方面的任何指针都会很棒。这里有一点需要注意,我使用std :: string来创建下面的最终输出字符串是相同的片段。
std::string ldapSystemCmd;
if(!ldapCosSearchDn.empty()) {
ldapSystemCmd += ldapInitialString;
ldapSystemCmd += "-b \"" + ldapCosSearchDn + "\"";
}
ldapSystemCmd += " \"" + ldapCosSearchFilter + "\"";
ldapSystemCmd += " cn >" + ldapSearchFileName;
int systemOutput = system(ldapSystemCmd.c_str());
或者如果有其他方法我可以达到同样的目的。
答案 0 :(得分:0)
尝试将\"
替换为'
并查看是否有帮助。
答案 1 :(得分:0)
我建议您使用fork
+ execlp
(或Windows上的spawnl
)函数或其邻居。这样你就不需要转义你的参数,因为你将直接调用该程序而不使用shell。
答案 2 :(得分:0)
我怀疑命令字符串是否包含反斜杠,而我认为你误解了调试器输出。问题可能出在 port , binddn 或 passwd 的字符中;如果它们包含标点符号,也可以引用它们。