Module Name: src Committed By: roy Date: Fri Apr 6 10:47:47 UTC 2018
Modified Files: src/external/bsd/dhcpcd/dist/src: dhcpcd.c if-options.c Log Message: Sync To generate a diff of this commit: cvs rdiff -u -r1.9 -r1.10 src/external/bsd/dhcpcd/dist/src/dhcpcd.c cvs rdiff -u -r1.7 -r1.8 src/external/bsd/dhcpcd/dist/src/if-options.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/external/bsd/dhcpcd/dist/src/dhcpcd.c diff -u src/external/bsd/dhcpcd/dist/src/dhcpcd.c:1.9 src/external/bsd/dhcpcd/dist/src/dhcpcd.c:1.10 --- src/external/bsd/dhcpcd/dist/src/dhcpcd.c:1.9 Tue Mar 27 06:16:34 2018 +++ src/external/bsd/dhcpcd/dist/src/dhcpcd.c Fri Apr 6 10:47:47 2018 @@ -577,7 +577,7 @@ dhcpcd_selectprofile(struct interface *i } else *ifp->profile = '\0'; - free_options(ifp->options); + free_options(ifp->ctx, ifp->options); ifp->options = ifo; if (profile) { add_options(ifp->ctx, ifp->name, ifp->options, @@ -995,6 +995,7 @@ dhcpcd_handleinterface(void *arg, int ac } /* Check if we already have the interface */ iff = if_find(ctx->ifaces, ifp->name); + if (iff != NULL) { if (iff->active) logdebugx("%s: interface updated", iff->name); @@ -1013,9 +1014,12 @@ dhcpcd_handleinterface(void *arg, int ac } iff = ifp; } - if_learnaddrs(ctx, ifs, &ifaddrs); - if (action > 0 && iff->active) - dhcpcd_prestartinterface(iff); + + if (action > 0) { + if_learnaddrs(ctx, ifs, &ifaddrs); + if (iff->active) + dhcpcd_prestartinterface(iff); + } /* Free our discovered list */ while ((ifp = TAILQ_FIRST(ifs))) { @@ -1161,7 +1165,7 @@ reload_config(struct dhcpcd_ctx *ctx) if (ctx->options & DHCPCD_DAEMONISED) ifo->options |= DHCPCD_DAEMONISED; ctx->options = ifo->options; - free_options(ifo); + free_options(ctx, ifo); } static void @@ -1519,6 +1523,8 @@ main(int argc, char **argv) #ifdef INET ctx.udp_fd = -1; #endif + rt_init(&ctx); + logopts = LOGERR_ERR|LOGERR_LOG|LOGERR_LOG_DATE|LOGERR_LOG_PID; i = 0; while ((opt = getopt_long(argc, argv, @@ -1613,7 +1619,7 @@ main(int argc, char **argv) if (i == 2) { printf("Interface options:\n"); if (optind == argc - 1) { - free_options(ifo); + free_options(&ctx, ifo); ifo = read_config(&ctx, argv[optind], NULL, NULL); if (ifo == NULL) goto exit_failure; @@ -1929,8 +1935,6 @@ printpidfile: } } - rt_init(&ctx); - TAILQ_FOREACH(ifp, ctx.ifaces, next) { if (ifp->active) dhcpcd_initstate1(ifp, argc, argv, 0); @@ -1981,7 +1985,7 @@ printpidfile: handle_exit_timeout, &ctx); } } - free_options(ifo); + free_options(&ctx, ifo); ifo = NULL; if_sortinterfaces(&ctx); @@ -2018,6 +2022,7 @@ exit1: } free(ctx.ifaces); } + free_options(&ctx, ifo); rt_dispose(&ctx); free(ctx.duid); if (ctx.link_fd != -1) { @@ -2025,7 +2030,6 @@ exit1: close(ctx.link_fd); } if_closesockets(&ctx); - free_options(ifo); free_globals(&ctx); ipv6_ctxfree(&ctx); dev_stop(&ctx); Index: src/external/bsd/dhcpcd/dist/src/if-options.c diff -u src/external/bsd/dhcpcd/dist/src/if-options.c:1.7 src/external/bsd/dhcpcd/dist/src/if-options.c:1.8 --- src/external/bsd/dhcpcd/dist/src/if-options.c:1.7 Mon Jan 29 11:13:06 2018 +++ src/external/bsd/dhcpcd/dist/src/if-options.c Fri Apr 6 10:47:47 2018 @@ -1086,14 +1086,8 @@ parse_option(struct dhcpcd_ctx *ctx, con strncmp(arg, "ms_classless_static_routes=", strlen("ms_classless_static_routes=")) == 0) { - struct interface *ifp; struct in_addr addr3; - ifp = if_find(ctx->ifaces, ifname); - if (ifp == NULL) { - logerrx("static routes require an interface"); - return -1; - } fp = np = strwhite(p); if (np == NULL) { logerrx("all routes need a gateway"); @@ -1107,7 +1101,7 @@ parse_option(struct dhcpcd_ctx *ctx, con *fp = ' '; return -1; } - if ((rt = rt_new(ifp)) == NULL) { + if ((rt = rt_new0(ctx)) == NULL) { *fp = ' '; return -1; } @@ -1117,16 +1111,9 @@ parse_option(struct dhcpcd_ctx *ctx, con TAILQ_INSERT_TAIL(&ifo->routes, rt, rt_next); *fp = ' '; } else if (strncmp(arg, "routers=", strlen("routers=")) == 0) { - struct interface *ifp; - - ifp = if_find(ctx->ifaces, ifname); - if (ifp == NULL) { - logerrx("static routes require an interface"); - return -1; - } if (parse_addr(&addr, NULL, p) == -1) return -1; - if ((rt = rt_new(ifp)) == NULL) + if ((rt = rt_new0(ctx)) == NULL) return -1; addr2.s_addr = INADDR_ANY; sa_in_init(&rt->rt_dest, &addr2); @@ -2367,7 +2354,7 @@ read_config(struct dhcpcd_ctx *ctx, buf = malloc(buflen); if (buf == NULL) { logerr(__func__); - free_options(ifo); + free_options(ctx, ifo); return NULL; } ldop = edop = NULL; @@ -2381,7 +2368,7 @@ read_config(struct dhcpcd_ctx *ctx, if (nbuf == NULL) { logerr(__func__); free(buf); - free_options(ifo); + free_options(ctx, ifo); return NULL; } buf = nbuf; @@ -2545,7 +2532,7 @@ read_config(struct dhcpcd_ctx *ctx, free(buf); if (profile && !have_profile) { - free_options(ifo); + free_options(ctx, ifo); errno = ENOENT; return NULL; } @@ -2590,7 +2577,7 @@ add_options(struct dhcpcd_ctx *ctx, cons } void -free_options(struct if_options *ifo) +free_options(struct dhcpcd_ctx *ctx, struct if_options *ifo) { size_t i; struct dhcp_opt *opt; @@ -2612,7 +2599,7 @@ free_options(struct if_options *ifo) free(ifo->config[i++]); free(ifo->config); } - rt_headclear(&ifo->routes, AF_UNSPEC); + rt_headclear0(ctx, &ifo->routes, AF_UNSPEC); free(ifo->script); free(ifo->arping); free(ifo->blacklist);