我的问题可能被描述为“通过C setuid包装器传递cmd行参数......”的反向。该问题询问如何运行此./cwrapper perl.pl --option1 --option2
就我而言,Perl脚本嵌入在包装器中。这个包装器来自第570页“Programming Perl”。它的工作原理---直到我在包装器中的脚本后添加一个参数。
这个工作 - perl_script.pl输出预期结果:
#define REAL_SCRIPT "/path/to/script/perl_script.pl"
main (ac, av)
char **av;
{
execv(REAL_SCRIPT, av);
}
这不起作用 - 例如perl_script不向stdin或stderr输出任何内容。注意“arg = 12345”:
#define REAL_SCRIPT "/path/to/script/perl_script.pl arg=12345"
main (ac, av)
char **av;
{
execv(REAL_SCRIPT, av);
}
感谢任何线索。 约翰
答案 0 :(得分:2)
execv()
的第一个参数是要执行的可执行文件的路径。将args作为第二个参数传递给execv()
时,它会起作用,但是当您将可执行文件名称中的额外参数传递给execv()
时,perror()
会失败。
我注意到您的示例中缺少错误处理。我推断,由于缺少上面报告的错误消息,您没有检查并处理来自execv()的错误。它可能告诉你为什么它不会运行你的程序。它返回整数,如果非零,则应使用{{1}}查找错误。