2014-03-12 36 views
0

我的问题可能被描述为“通过C setuid包装器传递cmd行参数”的反面。这个问题问如何运行这个./cwrapper perl.pl --option1 --option2c包装到perl脚本,它接受在包装中硬编码的参数

在我的情况下,Perl脚本嵌入在包装。这个包装来自第570页“编程Perl”。它的工作原理---直到我在包装器中的脚本后面添加一个参数。

此工程 - perl_script.pl产出预期结果:

#define REAL_SCRIPT "/path/to/script/perl_script.pl" 
main (ac, av) 
    char **av; 
{ 
    execv(REAL_SCRIPT, av); 
} 

这并不工作 - 例如perl_script输出没有什么标准输入或标准错误。注意“arg = 12345”:

#define REAL_SCRIPT "/path/to/script/perl_script.pl arg=12345" 
main (ac, av) 
    char **av; 
{ 
    execv(REAL_SCRIPT, av); 
} 

感谢您的任何线索。 John

回答

2

execv()的第一个参数是要执行的可执行文件的路径。它在您将参数作为第二个参数传递给execv()时起作用,但是当您将额外参数作为可执行文件名称的一部分传递时,execv()将失败。

我注意到你的例子中缺少错误处理。我从上面报告的缺少错误消息推断出,您没有检查并处理来自execv()的错误。它可能会告诉你为什么它不会运行你的程序。它返回整数,如果非零,则应该使用perror()查找错误。