#include "checkers.h"
#include "vector.h"
#include "structs.h"
+#include "util.h"
#include "debug.h"
-#define PROGRAM_SIZE 100
-#define FIELD_PROGRAM
-
-#define strfieldcpy(to, from) \
-do { \
- to[sizeof(to)-1] = '\0'; \
- strncpy(to, from, sizeof(to)-1); \
-} while (0)
-
int execute_program(char *path, char *value, int len)
{
int retval;
int fds[2], null_fd;
pid_t pid;
char *pos;
- char arg[PROGRAM_SIZE];
- char *argv[sizeof(arg) / 2];
+ char arg[CALLOUT_MAX_SIZE];
+ int argc = sizeof(arg) / 2;
+ char *argv[argc + 1];
int i;
i = 0;
if (strchr(path, ' ')) {
- strfieldcpy(arg, path);
+ strlcpy(arg, path, sizeof(arg));
pos = arg;
- while (pos != NULL) {
+ while (pos != NULL && i < argc) {
if (pos[0] == '\'') {
/* don't separate if in apostrophes */
pos++;
null_fd = open("/dev/null", O_WRONLY);
if (null_fd > 0) {
close(STDERR_FILENO);
- dup(null_fd);
+ retval = dup(null_fd);
close(null_fd);
}
if (status == 0)
retval = 0;
else
- condlog(0, "%s exitted with %d", argv[0], status);
+ condlog(0, "%s exited with %d", argv[0], status);
}
else if (WIFSIGNALED(status))
condlog(0, "%s was terminated by signal %d", argv[0], WTERMSIG(status));
}
pos++;
- if (!*pos)
+ if (!*pos) {
+ condlog(3, "formatted callout = %s", dst);
return 0;
+ }
len = strlen(pos) + 1;
myfree -= len;
return 1;
snprintf(p, len, "%s", pos);
- condlog(3, "reformated callout = %s", dst);
+ condlog(3, "reformatted callout = %s", dst);
return 0;
}
-