#include <stdio.h> #include <sys/types.h> #include <stdlib.h> #include <unistd.h> #define MAXARGS 255 /*#define DEBUG 1*/ const char* perl = "/usr/bin/perl"; const char* path = "/home/nagios/libexec/check_perc5i.pl"; int main(int argc, char* argv[]) { char* new_args[MAXARGS + 2]; int i; if (argc >= MAXARGS) { printf ("arg overflow (> %d args)\n", MAXARGS); return 1; } setuid(0); seteuid(0); new_args[0] = (char*) perl; new_args[1] = (char*) path; for (i=1; i<argc; i++) { new_args[i+1] = argv[i]; } new_args[argc+1] = NULL; #ifdef DEBUG i = 0; while (new_args[i] != NULL) { printf ("%d = %s\n", i, new_args[i]); i++; } #endif execv(perl, new_args); perror("Unable to exec perl!"); return 1; }