/* Call a script with a par file and env vars */ void run_script(struct dhcpMessage *packet, const char *name) { int pid; char **envp; if (client_config.script == NULL) return; /* call script */ pid = fork(); if (pid) { waitpid(pid, NULL, 0); return; } else if (pid == 0) { envp = fill_envp(packet); /* close fd's? */ /* exec script */ DEBUG(LOG_INFO, "execle'ing %s", client_config.script); #ifndef BRECIS execle(client_config.script, client_config.script, name, NULL, envp); #else /* BRECIS */ execle("/bin/sh", "/bin/sh", client_config.script, name, NULL, envp); #endif /* BRECIS */ LOG(LOG_INFO, "script '%s' (%s) failed: %s", client_config.script, name, strerror(errno)); exit(1); } }
/* Call a script with a par file and env vars */ void run_script(struct dhcpMessage *packet, const char *name) { int pid; char **envp; if (client_config.script == NULL) return; /* call script */ pid = fork(); if (pid) { waitpid(pid, NULL, 0); return; } else if (pid == 0) { envp = fill_envp(packet); /* close fd's? */ /* exec script */ DEBUG(LOG_INFO, "execle'ing %s", client_config.script); execle(client_config.script, client_config.script, name, NULL, envp); LOG(LOG_ERR, "script %s failed: %s", client_config.script, strerror(errno)); exit(1); } }
/* Call a script with a par file and env vars */ void FAST_FUNC udhcp_run_script(struct dhcp_packet *packet, const char *name) { char **envp, **curr; char *argv[3]; if (client_config.script == NULL) return; envp = fill_envp(packet); /* call script */ log1("Executing %s", client_config.script); argv[0] = (char*) client_config.script; argv[1] = (char*) name; argv[2] = NULL; wait4pid(spawn(argv)); for (curr = envp; *curr; curr++) { log2(" %s", *curr); bb_unsetenv(*curr); free(*curr); } free(envp); }