aboutsummaryrefslogtreecommitdiff
path: root/networking/ifupdown.c
diff options
context:
space:
mode:
Diffstat (limited to 'networking/ifupdown.c')
-rw-r--r--networking/ifupdown.c48
1 files changed, 18 insertions, 30 deletions
diff --git a/networking/ifupdown.c b/networking/ifupdown.c
index 8ee488364..6429c07e5 100644
--- a/networking/ifupdown.c
+++ b/networking/ifupdown.c
@@ -17,22 +17,10 @@
17 17
18/* TODO: standardise execute() return codes to return 0 for success and 1 for failure */ 18/* TODO: standardise execute() return codes to return 0 for success and 1 for failure */
19 19
20#include <sys/stat.h> 20#include "busybox.h"
21#include <sys/utsname.h> 21#include <sys/utsname.h>
22#include <sys/wait.h>
23
24#include <ctype.h>
25#include <errno.h>
26#include <fcntl.h>
27#include <fnmatch.h> 22#include <fnmatch.h>
28#include <getopt.h> 23#include <getopt.h>
29#include <stdarg.h>
30#include <stdio.h>
31#include <stdlib.h>
32#include <string.h>
33#include <unistd.h>
34
35#include "busybox.h"
36 24
37#define MAX_OPT_DEPTH 10 25#define MAX_OPT_DEPTH 10
38#define EUNBALBRACK 10001 26#define EUNBALBRACK 10001
@@ -628,7 +616,7 @@ static struct interfaces_file_t *read_interfaces(const char *filename)
628 616
629 defn = xzalloc(sizeof(struct interfaces_file_t)); 617 defn = xzalloc(sizeof(struct interfaces_file_t));
630 618
631 f = bb_xfopen(filename, "r"); 619 f = xfopen(filename, "r");
632 620
633 while ((buf = bb_get_chomped_line_from_file(f)) != NULL) { 621 while ((buf = bb_get_chomped_line_from_file(f)) != NULL) {
634 char *buf_ptr = buf; 622 char *buf_ptr = buf;
@@ -649,7 +637,7 @@ static struct interfaces_file_t *read_interfaces(const char *filename)
649 currmap->match = xrealloc(currmap->match, sizeof(currmap->match) * currmap->max_matches); 637 currmap->match = xrealloc(currmap->match, sizeof(currmap->match) * currmap->max_matches);
650 } 638 }
651 639
652 currmap->match[currmap->n_matches++] = bb_xstrdup(firstword); 640 currmap->match[currmap->n_matches++] = xstrdup(firstword);
653 } 641 }
654 currmap->max_mappings = 0; 642 currmap->max_mappings = 0;
655 currmap->n_mappings = 0; 643 currmap->n_mappings = 0;
@@ -701,7 +689,7 @@ static struct interfaces_file_t *read_interfaces(const char *filename)
701 return NULL; 689 return NULL;
702 } 690 }
703 691
704 currif->iface = bb_xstrdup(iface_name); 692 currif->iface = xstrdup(iface_name);
705 693
706 currif->address_family = get_address_family(addr_fams, address_family_name); 694 currif->address_family = get_address_family(addr_fams, address_family_name);
707 if (!currif->address_family) { 695 if (!currif->address_family) {
@@ -741,7 +729,7 @@ static struct interfaces_file_t *read_interfaces(const char *filename)
741 } 729 }
742 730
743 /* Add the interface to the list */ 731 /* Add the interface to the list */
744 llist_add_to_end(&(defn->autointerfaces), bb_xstrdup(firstword)); 732 llist_add_to_end(&(defn->autointerfaces), xstrdup(firstword));
745 debug_noise("\nauto %s\n", firstword); 733 debug_noise("\nauto %s\n", firstword);
746 } 734 }
747 currently_processing = NONE; 735 currently_processing = NONE;
@@ -775,8 +763,8 @@ static struct interfaces_file_t *read_interfaces(const char *filename)
775 opt = xrealloc(currif->option, sizeof(*opt) * currif->max_options); 763 opt = xrealloc(currif->option, sizeof(*opt) * currif->max_options);
776 currif->option = opt; 764 currif->option = opt;
777 } 765 }
778 currif->option[currif->n_options].name = bb_xstrdup(firstword); 766 currif->option[currif->n_options].name = xstrdup(firstword);
779 currif->option[currif->n_options].value = bb_xstrdup(buf_ptr); 767 currif->option[currif->n_options].value = xstrdup(buf_ptr);
780 if (!currif->option[currif->n_options].name) { 768 if (!currif->option[currif->n_options].name) {
781 perror(filename); 769 perror(filename);
782 return NULL; 770 return NULL;
@@ -796,14 +784,14 @@ static struct interfaces_file_t *read_interfaces(const char *filename)
796 bb_error_msg("duplicate script in mapping \"%s\"", buf); 784 bb_error_msg("duplicate script in mapping \"%s\"", buf);
797 return NULL; 785 return NULL;
798 } else { 786 } else {
799 currmap->script = bb_xstrdup(next_word(&buf_ptr)); 787 currmap->script = xstrdup(next_word(&buf_ptr));
800 } 788 }
801 } else if (strcmp(firstword, "map") == 0) { 789 } else if (strcmp(firstword, "map") == 0) {
802 if (currmap->max_mappings == currmap->n_mappings) { 790 if (currmap->max_mappings == currmap->n_mappings) {
803 currmap->max_mappings = currmap->max_mappings * 2 + 1; 791 currmap->max_mappings = currmap->max_mappings * 2 + 1;
804 currmap->mapping = xrealloc(currmap->mapping, sizeof(char *) * currmap->max_mappings); 792 currmap->mapping = xrealloc(currmap->mapping, sizeof(char *) * currmap->max_mappings);
805 } 793 }
806 currmap->mapping[currmap->n_mappings] = bb_xstrdup(next_word(&buf_ptr)); 794 currmap->mapping[currmap->n_mappings] = xstrdup(next_word(&buf_ptr));
807 currmap->n_mappings++; 795 currmap->n_mappings++;
808 } else { 796 } else {
809 bb_error_msg("misplaced option \"%s\"", buf); 797 bb_error_msg("misplaced option \"%s\"", buf);
@@ -833,7 +821,7 @@ static char *setlocalenv(char *format, const char *name, const char *value)
833 char *here; 821 char *here;
834 char *there; 822 char *there;
835 823
836 result = bb_xasprintf(format, name, value); 824 result = xasprintf(format, name, value);
837 825
838 for (here = there = result; *there != '=' && *there; there++) { 826 for (here = there = result; *there != '=' && *there; there++) {
839 if (*there == '-') 827 if (*there == '-')
@@ -922,7 +910,7 @@ static int execute_all(struct interface_defn_t *ifd, const char *opt)
922 } 910 }
923 } 911 }
924 912
925 buf = bb_xasprintf("run-parts /etc/network/if-%s.d", opt); 913 buf = xasprintf("run-parts /etc/network/if-%s.d", opt);
926 if (doit(buf) != 1) { 914 if (doit(buf) != 1) {
927 return 0; 915 return 0;
928 } 916 }
@@ -1013,7 +1001,7 @@ static char *run_mapping(char *physical, struct mapping_defn_t * map)
1013 int i, status; 1001 int i, status;
1014 pid_t pid; 1002 pid_t pid;
1015 1003
1016 char *logical = bb_xstrdup(physical); 1004 char *logical = xstrdup(physical);
1017 1005
1018 /* Run the mapping script. */ 1006 /* Run the mapping script. */
1019 pid = popen2(&in, &out, map->script, physical, NULL); 1007 pid = popen2(&in, &out, map->script, physical, NULL);
@@ -1158,7 +1146,7 @@ int ifupdown_main(int argc, char **argv)
1158 /* iface_down */ 1146 /* iface_down */
1159 const llist_t *list = state_list; 1147 const llist_t *list = state_list;
1160 while (list) { 1148 while (list) {
1161 llist_add_to_end(&target_list, bb_xstrdup(list->data)); 1149 llist_add_to_end(&target_list, xstrdup(list->data));
1162 list = list->link; 1150 list = list->link;
1163 } 1151 }
1164 target_list = defn->autointerfaces; 1152 target_list = defn->autointerfaces;
@@ -1178,15 +1166,15 @@ int ifupdown_main(int argc, char **argv)
1178 int okay = 0; 1166 int okay = 0;
1179 int cmds_ret; 1167 int cmds_ret;
1180 1168
1181 iface = bb_xstrdup(target_list->data); 1169 iface = xstrdup(target_list->data);
1182 target_list = target_list->link; 1170 target_list = target_list->link;
1183 1171
1184 pch = strchr(iface, '='); 1172 pch = strchr(iface, '=');
1185 if (pch) { 1173 if (pch) {
1186 *pch = '\0'; 1174 *pch = '\0';
1187 liface = bb_xstrdup(pch + 1); 1175 liface = xstrdup(pch + 1);
1188 } else { 1176 } else {
1189 liface = bb_xstrdup(iface); 1177 liface = xstrdup(iface);
1190 } 1178 }
1191 1179
1192 if (!force) { 1180 if (!force) {
@@ -1263,7 +1251,7 @@ int ifupdown_main(int argc, char **argv)
1263 llist_t *iface_state = find_iface_state(state_list, iface); 1251 llist_t *iface_state = find_iface_state(state_list, iface);
1264 1252
1265 if (cmds == iface_up) { 1253 if (cmds == iface_up) {
1266 char *newiface = bb_xasprintf("%s=%s", iface, liface); 1254 char *newiface = xasprintf("%s=%s", iface, liface);
1267 if (iface_state == NULL) { 1255 if (iface_state == NULL) {
1268 llist_add_to_end(&state_list, newiface); 1256 llist_add_to_end(&state_list, newiface);
1269 } else { 1257 } else {
@@ -1281,7 +1269,7 @@ int ifupdown_main(int argc, char **argv)
1281 if (!no_act) { 1269 if (!no_act) {
1282 FILE *state_fp = NULL; 1270 FILE *state_fp = NULL;
1283 1271
1284 state_fp = bb_xfopen(statefile, "w"); 1272 state_fp = xfopen(statefile, "w");
1285 while (state_list) { 1273 while (state_list) {
1286 if (state_list->data) { 1274 if (state_list->data) {
1287 fputs(state_list->data, state_fp); 1275 fputs(state_list->data, state_fp);