- correct patch version
This commit is contained in:
parent
119bde2aaa
commit
c77899c6a7
145
netplug-1.2.9-execshield.patch
Normal file
145
netplug-1.2.9-execshield.patch
Normal file
@ -0,0 +1,145 @@
|
||||
--- net-tools-1.60/netplug-1.2.9/main.c.execshield2 2004-05-15 04:57:33.000000000 +0200
|
||||
+++ net-tools-1.60/netplug-1.2.9/main.c 2005-02-28 12:26:32.157391408 +0100
|
||||
@@ -166,6 +166,23 @@
|
||||
|
||||
/* Poll the existing interface state, so we can catch any state
|
||||
changes for which we may not have neen a netlink message. */
|
||||
+static int pollflags(struct if_info *info, long param) {
|
||||
+ struct ifreq ifr;
|
||||
+
|
||||
+ if (!if_match(info->name))
|
||||
+ return 0;
|
||||
+
|
||||
+ memcpy(ifr.ifr_name, info->name, sizeof(ifr.ifr_name));
|
||||
+ if (ioctl(param, SIOCGIFFLAGS, &ifr) < 0)
|
||||
+ do_log(LOG_ERR, "%s: can't get flags: %m", info->name);
|
||||
+ else {
|
||||
+ ifsm_flagchange(info, ifr.ifr_flags);
|
||||
+ ifsm_flagpoll(info);
|
||||
+ }
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
static void
|
||||
poll_interfaces(void)
|
||||
{
|
||||
@@ -180,24 +197,13 @@
|
||||
close_on_exec(sockfd);
|
||||
}
|
||||
|
||||
- int pollflags(struct if_info *info) {
|
||||
- struct ifreq ifr;
|
||||
-
|
||||
- if (!if_match(info->name))
|
||||
- return 0;
|
||||
-
|
||||
- memcpy(ifr.ifr_name, info->name, sizeof(ifr.ifr_name));
|
||||
- if (ioctl(sockfd, SIOCGIFFLAGS, &ifr) < 0)
|
||||
- do_log(LOG_ERR, "%s: can't get flags: %m", info->name);
|
||||
- else {
|
||||
- ifsm_flagchange(info, ifr.ifr_flags);
|
||||
- ifsm_flagpoll(info);
|
||||
- }
|
||||
-
|
||||
- return 0;
|
||||
- }
|
||||
+ for_each_iface(pollflags, sockfd);
|
||||
+}
|
||||
|
||||
- for_each_iface(pollflags);
|
||||
+static int poll_flags(struct if_info *i, long param) {
|
||||
+ if (if_match(i->name))
|
||||
+ ifsm_flagpoll(i);
|
||||
+ return 0;
|
||||
}
|
||||
|
||||
int debug = 0;
|
||||
@@ -329,17 +335,11 @@
|
||||
{ child_handler_pipe[0], POLLIN, 0 },
|
||||
};
|
||||
|
||||
- {
|
||||
- /* Run over each of the interfaces we know and care about, and
|
||||
- make sure the state machine has done the appropriate thing
|
||||
- for their current state. */
|
||||
- int poll_flags(struct if_info *i) {
|
||||
- if (if_match(i->name))
|
||||
- ifsm_flagpoll(i);
|
||||
- return 0;
|
||||
- }
|
||||
- for_each_iface(poll_flags);
|
||||
- }
|
||||
+ /* Run over each of the interfaces we know and care about, and
|
||||
+ make sure the state machine has done the appropriate thing
|
||||
+ for their current state. */
|
||||
+ for_each_iface(poll_flags, 0);
|
||||
+
|
||||
|
||||
for(;;) {
|
||||
int ret;
|
||||
--- net-tools-1.60/netplug-1.2.9/if_info.c.execshield2 2004-04-25 05:55:15.000000000 +0200
|
||||
+++ net-tools-1.60/netplug-1.2.9/if_info.c 2005-02-28 12:26:32.155391712 +0100
|
||||
@@ -95,15 +95,16 @@
|
||||
return buf;
|
||||
}
|
||||
|
||||
-void
|
||||
-for_each_iface(int (*func)(struct if_info *))
|
||||
+struct if_info *
|
||||
+for_each_iface(int (*func)(struct if_info *, long), long param)
|
||||
{
|
||||
for(int i = 0; i < INFOHASHSZ; i++) {
|
||||
for(struct if_info *info = if_info[i]; info != NULL; info = info->next) {
|
||||
- if ((*func)(info))
|
||||
- return;
|
||||
+ if ((*func)(info, param))
|
||||
+ return info;
|
||||
}
|
||||
}
|
||||
+ return NULL;
|
||||
}
|
||||
|
||||
/* Reevaluate the state machine based on the current state and flag settings */
|
||||
@@ -285,22 +286,20 @@
|
||||
}
|
||||
|
||||
/* handle a script termination and update the state accordingly */
|
||||
+int find_pid(struct if_info *i, long param) {
|
||||
+ if (i->worker == param) {
|
||||
+ return 1;
|
||||
+ }
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
void ifsm_scriptdone(pid_t pid, int exitstatus)
|
||||
{
|
||||
int exitok = WIFEXITED(exitstatus) && WEXITSTATUS(exitstatus) == 0;
|
||||
struct if_info *info;
|
||||
assert(WIFEXITED(exitstatus) || WIFSIGNALED(exitstatus));
|
||||
|
||||
- int find_pid(struct if_info *i) {
|
||||
- if (i->worker == pid) {
|
||||
- info = i;
|
||||
- return 1;
|
||||
- }
|
||||
- return 0;
|
||||
- }
|
||||
-
|
||||
- info = NULL;
|
||||
- for_each_iface(find_pid);
|
||||
+ info = for_each_iface(find_pid, pid);
|
||||
|
||||
if (info == NULL) {
|
||||
do_log(LOG_INFO, "Unexpected child %d exited with status %d",
|
||||
--- net-tools-1.60/netplug-1.2.9/netplug.h.execshield2 2004-04-25 05:55:15.000000000 +0200
|
||||
+++ net-tools-1.60/netplug-1.2.9/netplug.h 2005-02-28 12:26:32.154391864 +0100
|
||||
@@ -83,7 +83,7 @@
|
||||
struct rtattr *attrs[]);
|
||||
int if_info_save_interface(struct nlmsghdr *hdr, void *arg);
|
||||
void parse_rtattrs(struct rtattr *tb[], int max, struct rtattr *rta, int len);
|
||||
-void for_each_iface(int (*func)(struct if_info *));
|
||||
+struct if_info *for_each_iface(int (*func)(struct if_info *, long), long param);
|
||||
|
||||
void ifsm_flagpoll(struct if_info *info);
|
||||
void ifsm_flagchange(struct if_info *info, unsigned int newflags);
|
Loading…
Reference in New Issue
Block a user