root/trunk/freewrt/package/busybox/patches/960-ifupdown-env.patch

Revision 3450, 2.7 kB (checked in by spaetzle, 5 years ago)

replaced sprintf by snprintf, requested by tg@

  • old/networking/ifupdown.c

    old new  
    919919{ 
    920920        char **environend; 
    921921        int i; 
    922         const int n_env_entries = iface->n_options + 5; 
     922        int j = 0;  /* iterator pre-up */ 
     923        int k = 0;  /* iterator up */ 
     924        int l = 0;  /* iterator down */ 
     925        int m = 0;  /* iterator post-down */ 
     926        int t_suffix;  /* pre-post-up-down suffix */ 
     927        const int n_env_entries = iface->n_options + 6; 
    923928        char **ppch; 
     929        char *ifupdown_env; 
     930        char t_var_name[16]; 
    924931 
    925932        if (my_environ != NULL) { 
    926933                for (ppch = my_environ; *ppch; ppch++) { 
     
    933940        environend = my_environ; 
    934941 
    935942        for (i = 0; i < iface->n_options; i++) { 
    936                 if (strcmp(iface->option[i].name, "up") == 0 
    937                                 || strcmp(iface->option[i].name, "down") == 0 
    938                                 || strcmp(iface->option[i].name, "pre-up") == 0 
    939                                 || strcmp(iface->option[i].name, "post-down") == 0) { 
     943                if (strcmp(iface->option[i].name, "pre-up") == 0) 
     944                        t_suffix = j++; 
     945                else if (strcmp(iface->option[i].name, "up") == 0) 
     946                        t_suffix = k++; 
     947                else if (strcmp(iface->option[i].name, "down") == 0) 
     948                        t_suffix = l++; 
     949                else if (strcmp(iface->option[i].name, "post-down") == 0) 
     950                        t_suffix = m++; 
     951                else { 
     952                        *(environend++) = setlocalenv("IF_%s=%s", iface->option[i].name, iface->option[i].value); 
    940953                        continue; 
    941954                } 
    942                 *(environend++) = setlocalenv("IF_%s=%s", iface->option[i].name, iface->option[i].value); 
     955 
     956                snprintf(t_var_name, sizeof (t_var_name), "IF_%%s_%i=%%s", t_suffix); 
     957                *(environend++) = setlocalenv(t_var_name, iface->option[i].name, iface->option[i].value); 
    943958        } 
     959         
     960        ifupdown_env = getenv("IFUPDOWN_ENV"); 
     961        if (ifupdown_env == NULL) 
     962                ifupdown_env = ""; 
    944963 
    945964        *(environend++) = setlocalenv("%s=%s", "IFACE", iface->iface); 
    946965        *(environend++) = setlocalenv("%s=%s", "ADDRFAM", iface->address_family->name); 
    947966        *(environend++) = setlocalenv("%s=%s", "METHOD", iface->method->name); 
    948967        *(environend++) = setlocalenv("%s=%s", "MODE", mode); 
    949968        *(environend++) = setlocalenv("%s=%s", "PATH", startup_PATH); 
     969        *(environend++) = setlocalenv("%s=%s", "IFUPDOWN_ENV", ifupdown_env); 
    950970} 
    951971 
    952972static int doit(char *str) 
     
    10011021{ 
    10021022        if (!iface->method->up(iface, check)) return -1; 
    10031023        set_environ(iface, "start"); 
     1024        remove("/tmp/ifupdown/env");    /* cleanup */ 
    10041025        if (!execute_all(iface, "pre-up")) return 0; 
    10051026        if (!iface->method->up(iface, doit)) return 0; 
    10061027        if (!execute_all(iface, "up")) return 0; 
     
    10111032{ 
    10121033        if (!iface->method->down(iface,check)) return -1; 
    10131034        set_environ(iface, "stop"); 
     1035        remove("/tmp/ifupdown/env");    /* cleanup */ 
    10141036        if (!execute_all(iface, "down")) return 0; 
    10151037        if (!iface->method->down(iface, doit)) return 0; 
    10161038        if (!execute_all(iface, "post-down")) return 0; 
Note: See TracBrowser for help on using the browser.