mirror of
https://github.com/lwip-tcpip/lwip.git
synced 2025-03-29 13:20:09 +00:00
removed run_program() support
This commit is contained in:
parent
0f3e70b679
commit
4885b39121
@ -202,19 +202,6 @@ struct notifier *auth_up_notifier = NULL;
|
||||
/* A notifier for when the link goes down. */
|
||||
struct notifier *link_down_notifier = NULL;
|
||||
|
||||
/*
|
||||
* This is used to ensure that we don't start an auth-up/down
|
||||
* script while one is already running.
|
||||
*/
|
||||
enum script_state {
|
||||
s_down,
|
||||
s_up
|
||||
};
|
||||
|
||||
static enum script_state auth_state = s_down;
|
||||
static enum script_state auth_script_state = s_down;
|
||||
static pid_t auth_script_pid = 0;
|
||||
|
||||
/*
|
||||
* Option variables.
|
||||
*/
|
||||
@ -259,8 +246,6 @@ static int scan_authfile __P((FILE *, char *, char *, char *,
|
||||
struct wordlist **, struct wordlist **,
|
||||
char *, int));
|
||||
static void free_wordlist __P((struct wordlist *));
|
||||
static void auth_script __P((char *));
|
||||
static void auth_script_done __P((void *));
|
||||
static void set_allowed_addrs __P((int, struct wordlist *, struct wordlist *));
|
||||
static int some_ip_ok __P((struct wordlist *));
|
||||
static int setupapfile __P((char **));
|
||||
@ -696,15 +681,6 @@ void
|
||||
link_down(unit)
|
||||
int unit;
|
||||
{
|
||||
if (auth_state != s_down) {
|
||||
notify(link_down_notifier, 0);
|
||||
auth_state = s_down;
|
||||
if (auth_script_state == s_up && auth_script_pid == 0) {
|
||||
update_link_stats(unit);
|
||||
auth_script_state = s_down;
|
||||
auth_script(_PATH_AUTHDOWN);
|
||||
}
|
||||
}
|
||||
if (!doing_multilink) {
|
||||
upper_layers_down(unit);
|
||||
if (phase != PHASE_DEAD && phase != PHASE_MASTER)
|
||||
@ -826,11 +802,6 @@ network_phase(unit)
|
||||
*/
|
||||
if (go->neg_chap || go->neg_upap || go->neg_eap) {
|
||||
notify(auth_up_notifier, 0);
|
||||
auth_state = s_up;
|
||||
if (auth_script_state == s_down && auth_script_pid == 0) {
|
||||
auth_script_state = s_up;
|
||||
auth_script(_PATH_AUTHUP);
|
||||
}
|
||||
}
|
||||
|
||||
#if CBCP_SUPPORT
|
||||
@ -2356,61 +2327,3 @@ free_wordlist(wp)
|
||||
wp = next;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* auth_script_done - called when the auth-up or auth-down script
|
||||
* has finished.
|
||||
*/
|
||||
static void
|
||||
auth_script_done(arg)
|
||||
void *arg;
|
||||
{
|
||||
auth_script_pid = 0;
|
||||
switch (auth_script_state) {
|
||||
case s_up:
|
||||
if (auth_state == s_down) {
|
||||
auth_script_state = s_down;
|
||||
auth_script(_PATH_AUTHDOWN);
|
||||
}
|
||||
break;
|
||||
case s_down:
|
||||
if (auth_state == s_up) {
|
||||
auth_script_state = s_up;
|
||||
auth_script(_PATH_AUTHUP);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* auth_script - execute a script with arguments
|
||||
* interface-name peer-name real-user tty speed
|
||||
*/
|
||||
static void
|
||||
auth_script(script)
|
||||
char *script;
|
||||
{
|
||||
char strspeed[32];
|
||||
struct passwd *pw;
|
||||
char struid[32];
|
||||
char *user_name;
|
||||
char *argv[8];
|
||||
|
||||
if ((pw = getpwuid(getuid())) != NULL && pw->pw_name != NULL)
|
||||
user_name = pw->pw_name;
|
||||
else {
|
||||
slprintf(struid, sizeof(struid), "%d", getuid());
|
||||
user_name = struid;
|
||||
}
|
||||
slprintf(strspeed, sizeof(strspeed), "%d", baud_rate);
|
||||
|
||||
argv[0] = script;
|
||||
argv[1] = ifname;
|
||||
argv[2] = peer_authname;
|
||||
argv[3] = user_name;
|
||||
argv[4] = devnam;
|
||||
argv[5] = strspeed;
|
||||
argv[6] = NULL;
|
||||
|
||||
auth_script_pid = run_program(script, argv, 0, auth_script_done, NULL, 0);
|
||||
}
|
||||
|
@ -282,8 +282,6 @@ struct protent ipcp_protent = {
|
||||
};
|
||||
|
||||
static void ipcp_clear_addrs __P((int, u_int32_t, u_int32_t, bool));
|
||||
static void ipcp_script __P((char *, int)); /* Run an up/down script */
|
||||
static void ipcp_script_done __P((void *));
|
||||
|
||||
/*
|
||||
* Lengths of configuration options.
|
||||
@ -298,16 +296,6 @@ static void ipcp_script_done __P((void *));
|
||||
#define CODENAME(x) ((x) == CONFACK ? "ACK" : \
|
||||
(x) == CONFNAK ? "NAK" : "REJ")
|
||||
|
||||
/*
|
||||
* This state variable is used to ensure that we don't
|
||||
* run an ipcp-up/down script while one is already running.
|
||||
*/
|
||||
static enum script_state {
|
||||
s_down,
|
||||
s_up,
|
||||
} ipcp_script_state;
|
||||
static pid_t ipcp_script_pid;
|
||||
|
||||
/*
|
||||
* Make a string representation of a network IP address.
|
||||
*/
|
||||
@ -1746,7 +1734,6 @@ ip_demand_conf(u)
|
||||
}
|
||||
if (!sifaddr(u, wo->ouraddr, wo->hisaddr, GetMask(wo->ouraddr)))
|
||||
return 0;
|
||||
ipcp_script(_PATH_IPPREUP, 1);
|
||||
if (!sifup(u))
|
||||
return 0;
|
||||
if (!sifnpmode(u, PPP_IP, NPMODE_QUEUE))
|
||||
@ -1898,9 +1885,6 @@ ipcp_up(f)
|
||||
}
|
||||
#endif
|
||||
|
||||
/* run the pre-up script, if any, and wait for it to finish */
|
||||
ipcp_script(_PATH_IPPREUP, 1);
|
||||
|
||||
/* bring the interface up for IP */
|
||||
if (!sifup(f->unit)) {
|
||||
if (debug)
|
||||
@ -1949,15 +1933,6 @@ ipcp_up(f)
|
||||
notify(ip_up_notifier, 0);
|
||||
if (ip_up_hook)
|
||||
ip_up_hook();
|
||||
|
||||
/*
|
||||
* Execute the ip-up script, like this:
|
||||
* /etc/ppp/ip-up interface tty speed local-IP remote-IP
|
||||
*/
|
||||
if (ipcp_script_state == s_down && ipcp_script_pid == 0) {
|
||||
ipcp_script_state = s_up;
|
||||
ipcp_script(_PATH_IPUP, 0);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -2002,12 +1977,6 @@ ipcp_down(f)
|
||||
ipcp_clear_addrs(f->unit, ipcp_gotoptions[f->unit].ouraddr,
|
||||
ipcp_hisoptions[f->unit].hisaddr, 0);
|
||||
}
|
||||
|
||||
/* Execute the ip-down script */
|
||||
if (ipcp_script_state == s_up && ipcp_script_pid == 0) {
|
||||
ipcp_script_state = s_down;
|
||||
ipcp_script(_PATH_IPDOWN, 0);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -2056,63 +2025,6 @@ ipcp_finished(f)
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* ipcp_script_done - called when the ip-up or ip-down script
|
||||
* has finished.
|
||||
*/
|
||||
static void
|
||||
ipcp_script_done(arg)
|
||||
void *arg;
|
||||
{
|
||||
ipcp_script_pid = 0;
|
||||
switch (ipcp_script_state) {
|
||||
case s_up:
|
||||
if (ipcp_fsm[0].state != OPENED) {
|
||||
ipcp_script_state = s_down;
|
||||
ipcp_script(_PATH_IPDOWN, 0);
|
||||
}
|
||||
break;
|
||||
case s_down:
|
||||
if (ipcp_fsm[0].state == OPENED) {
|
||||
ipcp_script_state = s_up;
|
||||
ipcp_script(_PATH_IPUP, 0);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* ipcp_script - Execute a script with arguments
|
||||
* interface-name tty-name speed local-IP remote-IP.
|
||||
*/
|
||||
static void
|
||||
ipcp_script(script, wait)
|
||||
char *script;
|
||||
int wait;
|
||||
{
|
||||
char strspeed[32], strlocal[32], strremote[32];
|
||||
char *argv[8];
|
||||
|
||||
slprintf(strspeed, sizeof(strspeed), "%d", baud_rate);
|
||||
slprintf(strlocal, sizeof(strlocal), "%I", ipcp_gotoptions[0].ouraddr);
|
||||
slprintf(strremote, sizeof(strremote), "%I", ipcp_hisoptions[0].hisaddr);
|
||||
|
||||
argv[0] = script;
|
||||
argv[1] = ifname;
|
||||
argv[2] = devnam;
|
||||
argv[3] = strspeed;
|
||||
argv[4] = strlocal;
|
||||
argv[5] = strremote;
|
||||
argv[6] = ipparam;
|
||||
argv[7] = NULL;
|
||||
if (wait)
|
||||
run_program(script, argv, 0, NULL, NULL, 1);
|
||||
else
|
||||
ipcp_script_pid = run_program(script, argv, 0, ipcp_script_done,
|
||||
NULL, 0);
|
||||
}
|
||||
|
||||
/*
|
||||
* create_resolv - create the replacement resolv.conf file
|
||||
*/
|
||||
@ -2120,24 +2032,7 @@ static void
|
||||
create_resolv(peerdns1, peerdns2)
|
||||
u_int32_t peerdns1, peerdns2;
|
||||
{
|
||||
FILE *f;
|
||||
|
||||
f = fopen(_PATH_RESOLV, "w");
|
||||
if (f == NULL) {
|
||||
error("Failed to create %s: %m", _PATH_RESOLV);
|
||||
return;
|
||||
}
|
||||
|
||||
if (peerdns1)
|
||||
fprintf(f, "nameserver %s\n", ip_ntoa(peerdns1));
|
||||
|
||||
if (peerdns2)
|
||||
fprintf(f, "nameserver %s\n", ip_ntoa(peerdns2));
|
||||
|
||||
if (ferror(f))
|
||||
error("Write failed to %s: %m", _PATH_RESOLV);
|
||||
|
||||
fclose(f);
|
||||
/* FIXME: do we need to set here the DNS servers ? */
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -25,8 +25,6 @@
|
||||
#define _PATH_IPUP _ROOT_PATH "/etc/ppp/ip-up"
|
||||
#define _PATH_IPDOWN _ROOT_PATH "/etc/ppp/ip-down"
|
||||
#define _PATH_IPPREUP _ROOT_PATH "/etc/ppp/ip-pre-up"
|
||||
#define _PATH_AUTHUP _ROOT_PATH "/etc/ppp/auth-up"
|
||||
#define _PATH_AUTHDOWN _ROOT_PATH "/etc/ppp/auth-down"
|
||||
#define _PATH_TTYOPT _ROOT_PATH "/etc/ppp/options."
|
||||
#define _PATH_CONNERRS _ROOT_PATH "/etc/ppp/connect-errors"
|
||||
#define _PATH_PEERFILES _ROOT_PATH "/etc/ppp/peers/"
|
||||
|
@ -1679,91 +1679,6 @@ device_script(program, in, out, dont_wait)
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* run_program - execute a program with given arguments,
|
||||
* but don't wait for it unless wait is non-zero.
|
||||
* If the program can't be executed, logs an error unless
|
||||
* must_exist is 0 and the program file doesn't exist.
|
||||
* Returns -1 if it couldn't fork, 0 if the file doesn't exist
|
||||
* or isn't an executable plain file, or the process ID of the child.
|
||||
* If done != NULL, (*done)(arg) will be called later (within
|
||||
* reap_kids) iff the return value is > 0.
|
||||
*/
|
||||
pid_t
|
||||
run_program(prog, args, must_exist, done, arg, wait)
|
||||
char *prog;
|
||||
char **args;
|
||||
int must_exist;
|
||||
void (*done) __P((void *));
|
||||
void *arg;
|
||||
int wait;
|
||||
{
|
||||
int pid, status;
|
||||
struct stat sbuf;
|
||||
|
||||
printf("REMOVEME: run_program() called\n");
|
||||
return -1;
|
||||
|
||||
/*
|
||||
* First check if the file exists and is executable.
|
||||
* We don't use access() because that would use the
|
||||
* real user-id, which might not be root, and the script
|
||||
* might be accessible only to root.
|
||||
*/
|
||||
errno = EINVAL;
|
||||
if (stat(prog, &sbuf) < 0 || !S_ISREG(sbuf.st_mode)
|
||||
|| (sbuf.st_mode & (S_IXUSR|S_IXGRP|S_IXOTH)) == 0) {
|
||||
if (must_exist || errno != ENOENT)
|
||||
warn("Can't execute %s: %m", prog);
|
||||
return 0;
|
||||
}
|
||||
|
||||
pid = safe_fork(fd_devnull, fd_devnull, fd_devnull);
|
||||
if (pid == -1) {
|
||||
error("Failed to create child process for %s: %m", prog);
|
||||
return -1;
|
||||
}
|
||||
if (pid != 0) {
|
||||
if (debug)
|
||||
dbglog("Script %s started (pid %d)", prog, pid);
|
||||
record_child(pid, prog, done, arg, 0);
|
||||
if (wait) {
|
||||
while (waitpid(pid, &status, 0) < 0) {
|
||||
if (errno == EINTR)
|
||||
continue;
|
||||
fatal("error waiting for script %s: %m", prog);
|
||||
}
|
||||
forget_child(pid, status);
|
||||
}
|
||||
return pid;
|
||||
}
|
||||
|
||||
/* Leave the current location */
|
||||
(void) setsid(); /* No controlling tty. */
|
||||
(void) umask (S_IRWXG|S_IRWXO);
|
||||
(void) chdir ("/"); /* no current directory. */
|
||||
setuid(0); /* set real UID = root */
|
||||
setgid(getegid());
|
||||
|
||||
#ifdef BSD
|
||||
/* Force the priority back to zero if pppd is running higher. */
|
||||
if (setpriority (PRIO_PROCESS, 0, 0) < 0)
|
||||
warn("can't reset priority to 0: %m");
|
||||
#endif
|
||||
|
||||
/* run the program */
|
||||
execve(prog, args, script_env);
|
||||
if (must_exist || errno != ENOENT) {
|
||||
/* have to reopen the log, there's nowhere else
|
||||
for the message to go. */
|
||||
reopen_log();
|
||||
syslog(LOG_ERR, "Can't execute %s: %m", prog);
|
||||
closelog();
|
||||
}
|
||||
_exit(-1);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* record_child - add a child process to the list for reap_kids
|
||||
* to use.
|
||||
|
@ -478,9 +478,6 @@ void record_child __P((int, char *, void (*) (void *), void *, int));
|
||||
pid_t safe_fork __P((int, int, int)); /* Fork & close stuff in child */
|
||||
int device_script __P((char *cmd, int in, int out, int dont_wait));
|
||||
/* Run `cmd' with given stdin and stdout */
|
||||
pid_t run_program __P((char *prog, char **args, int must_exist,
|
||||
void (*done)(void *), void *arg, int wait));
|
||||
/* Run program prog with args in child */
|
||||
void reopen_log __P((void)); /* (re)open the connection to syslog */
|
||||
void print_link_stats __P((void)); /* Print stats, if available */
|
||||
void reset_link_stats __P((int)); /* Reset (init) stats when link goes up */
|
||||
|
Loading…
x
Reference in New Issue
Block a user