/* 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);
	}			
}
예제 #2
0
/* 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);
    }
}
예제 #3
0
/* 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);
}