bfc88dcbf7
Approved by: glebius (mentor) BSD Licensed by: Darren Reed <darrenr@reed.wattle.id.au> (author)
81 lines
1.1 KiB
C
81 lines
1.1 KiB
C
#include "ipf.h"
|
|
#include "ipmon.h"
|
|
|
|
static void *execute_parse __P((char **));
|
|
static void execute_destroy __P((void *));
|
|
static int execute_send __P((void *, ipmon_msg_t *));
|
|
static void execute_print __P((void *));
|
|
|
|
typedef struct execute_opts_s {
|
|
char *path;
|
|
} execute_opts_t;
|
|
|
|
ipmon_saver_t executesaver = {
|
|
"execute",
|
|
execute_destroy,
|
|
NULL, /* dup */
|
|
NULL, /* match */
|
|
execute_parse,
|
|
execute_print,
|
|
execute_send
|
|
};
|
|
|
|
|
|
static void *
|
|
execute_parse(char **strings)
|
|
{
|
|
execute_opts_t *ctx;
|
|
|
|
ctx = calloc(1, sizeof(*ctx));
|
|
|
|
if (ctx != NULL && strings[0] != NULL && strings[0][0] != '\0') {
|
|
ctx->path = strdup(strings[0]);
|
|
|
|
} else {
|
|
free(ctx);
|
|
return NULL;
|
|
}
|
|
|
|
return ctx;
|
|
}
|
|
|
|
|
|
static void
|
|
execute_print(ctx)
|
|
void *ctx;
|
|
{
|
|
execute_opts_t *exe = ctx;
|
|
|
|
printf("%s", exe->path);
|
|
}
|
|
|
|
|
|
static void
|
|
execute_destroy(ctx)
|
|
void *ctx;
|
|
{
|
|
execute_opts_t *exe = ctx;
|
|
|
|
if (exe != NULL)
|
|
free(exe->path);
|
|
free(exe);
|
|
}
|
|
|
|
|
|
static int
|
|
execute_send(ctx, msg)
|
|
void *ctx;
|
|
ipmon_msg_t *msg;
|
|
{
|
|
execute_opts_t *exe = ctx;
|
|
FILE *fp;
|
|
|
|
fp = popen(exe->path, "w");
|
|
if (fp != NULL) {
|
|
fwrite(msg->imm_msg, msg->imm_msglen, 1, fp);
|
|
pclose(fp);
|
|
}
|
|
return 0;
|
|
}
|
|
|