c包装到perl脚本,该脚本接受包装器中硬编码的参数

时间:2014-03-12 21:12:44

标签: c wrapper

我的问题可能被描述为“通过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);
}

感谢任何线索。 约翰

1 个答案:

答案 0 :(得分:2)

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

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