Patch from Lars Kellogg-Stedman, lars at larsshack.org, to
make ifupdown's mapping function work as documented.
This commit is contained in:
parent
d130973f34
commit
233b170a85
@ -49,6 +49,9 @@
|
|||||||
#define EUNDEFVAR 10002
|
#define EUNDEFVAR 10002
|
||||||
#define EUNBALPER 10000
|
#define EUNBALPER 10000
|
||||||
|
|
||||||
|
#ifdef CONFIG_FEATURE_IFUPDOWN_MAPPING
|
||||||
|
#define MAX_INTERFACE_LENGTH 10
|
||||||
|
#endif
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
#define debug_noise(fmt, args...) printf(fmt, ## args)
|
#define debug_noise(fmt, args...) printf(fmt, ## args)
|
||||||
@ -1106,12 +1109,13 @@ static int popen2(FILE **in, FILE **out, char *command, ...)
|
|||||||
/* unreached */
|
/* unreached */
|
||||||
}
|
}
|
||||||
|
|
||||||
static int run_mapping(char *physical, char *logical, int len, struct mapping_defn_t * map)
|
static char * run_mapping(char *physical, char *logical, int len, struct mapping_defn_t * map)
|
||||||
{
|
{
|
||||||
FILE *in, *out;
|
FILE *in, *out;
|
||||||
int i, status;
|
int i, status;
|
||||||
pid_t pid;
|
pid_t pid;
|
||||||
|
|
||||||
|
char *new_logical = NULL;
|
||||||
|
|
||||||
pid = popen2(&in, &out, map->script, physical, NULL);
|
pid = popen2(&in, &out, map->script, physical, NULL);
|
||||||
if (pid == 0) {
|
if (pid == 0) {
|
||||||
@ -1123,16 +1127,18 @@ static int run_mapping(char *physical, char *logical, int len, struct mapping_de
|
|||||||
fclose(in);
|
fclose(in);
|
||||||
waitpid(pid, &status, 0);
|
waitpid(pid, &status, 0);
|
||||||
if (WIFEXITED(status) && WEXITSTATUS(status) == 0) {
|
if (WIFEXITED(status) && WEXITSTATUS(status) == 0) {
|
||||||
if (fgets(logical, len, out)) {
|
new_logical = (char *)xmalloc(MAX_INTERFACE_LENGTH);
|
||||||
char *pch = logical + bb_strlen(logical) - 1;
|
|
||||||
|
|
||||||
while (pch >= logical && isspace(*pch))
|
if (fgets(new_logical, MAX_INTERFACE_LENGTH, out)) {
|
||||||
|
char *pch = new_logical + bb_strlen(new_logical) - 1;
|
||||||
|
|
||||||
|
while (pch >= new_logical && isspace(*pch))
|
||||||
*(pch--) = '\0';
|
*(pch--) = '\0';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
fclose(out);
|
fclose(out);
|
||||||
|
|
||||||
return 1;
|
return new_logical ? new_logical : logical;
|
||||||
}
|
}
|
||||||
#endif /* CONFIG_FEATURE_IFUPDOWN_IPV6 */
|
#endif /* CONFIG_FEATURE_IFUPDOWN_IPV6 */
|
||||||
|
|
||||||
@ -1318,7 +1324,7 @@ extern int ifupdown_main(int argc, char **argv)
|
|||||||
if (verbose) {
|
if (verbose) {
|
||||||
printf("Running mapping script %s on %s\n", currmap->script, liface);
|
printf("Running mapping script %s on %s\n", currmap->script, liface);
|
||||||
}
|
}
|
||||||
run_mapping(iface, liface, sizeof(liface), currmap);
|
liface = run_mapping(iface, liface, sizeof(liface), currmap);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user