From 5fddfb89152a008c8de3e883ff1af28dc8b2cc70 Mon Sep 17 00:00:00 2001 From: Robert Greenwalt Date: Thu, 12 Dec 2013 12:37:39 -0800 Subject: [PATCH 1/4] Fix dns searchdomain use in gethostbyname. Need to load search domain data before we attempt to use it. This is a cherry pick of an AOSP change c11f6f0f393e472984b5ac2934e2485855a319c9. bug:6799630 Change-Id: I4ea1131f06ffdf4037fe67f82af5a0349469b609 --- libc/netbsd/resolv/res_query.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/libc/netbsd/resolv/res_query.c b/libc/netbsd/resolv/res_query.c index 8e1321e79..d31e83c4a 100644 --- a/libc/netbsd/resolv/res_query.c +++ b/libc/netbsd/resolv/res_query.c @@ -272,6 +272,15 @@ res_nsearch(res_state statp, (dots && !trailing_dot && (statp->options & RES_DNSRCH) != 0U)) { int done = 0; + /* Unfortunately we need to load interface info + * (dns servers, search domains) before + * the domain stuff is tried. Will have a better + * fix after thread pools are used as this will + * be loaded once for the thread instead of each + * time a query is tried. + */ + _resolv_populate_res_for_iface(statp); + for (domain = (const char * const *)statp->dnsrch; *domain && !done; domain++) { From 806f3bd7aaec5b7444b1b218b69b3952386cb92f Mon Sep 17 00:00:00 2001 From: Elliott Hughes Date: Fri, 20 Dec 2013 11:26:19 -0800 Subject: [PATCH 2/4] Upgrade to tzdata2013i. From the release notes: Changes affecting near-future time stamps: Jordan switches back to standard time at 00:00 on December 20, 2013. The 2006-2011 transition schedule is planned to resume in 2014. (Thanks to Steffen Thorsen.) Changes affecting past time stamps: In 2004, Cuba began DST on March 28, not April 4. (Thanks to Steffen Thorsen.) Bug: 13193205 Change-Id: I8f26cc50f6b571804a18ff2113b4a47a22bc56dd --- libc/zoneinfo/tzdata | Bin 553403 -> 560868 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/libc/zoneinfo/tzdata b/libc/zoneinfo/tzdata index 8f322365c97ede4997808559a5d9df89fc352458..6acddb76ca8b68b85e7a10a8cc4aa8bacb6cccc0 100644 GIT binary patch delta 9333 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 delta 2617 zcmZ|QeNa@_83ypXXLo@#7?&0eT6FkIU>u@wBuWqiC@7gO1;Pet0EJi?_5KAMYeGd1(PRq>Yx98sT zanHH$dC$ZNzw=-CdO2Ro&2nVPkkIu78vndBt;DLi1-{qiwf_;Zxec|CG%JGFHj9c3 z46bc;F}71e;M-jOkgj3|xC|n{h4#Q2d^erOERR@Z7+Q{GjjVm(LXuO^Z_w`bY+Yr58FFKT8 z{SocT8=qoKIkg{_uuxay%#fz}#~?mzt@y4xO2eef_tc#Xbn?!|AdH7e5&j@NAC)4q z74al$9A#wrU38MzLzp0Oe}&fuDYkXMN_KaloD}XvH+l9dCP{HNyf;emyctP4m5L$s z5>9N2lwO8UxD*F+U?T@dQANr}&_^ovVpb>MF)1ovLK-=8AF9bwBl^itw_r~3cLYU9 zfi9$zrV`YW6CM~Kzc`6`^5#_pZ<6BlFzlrLQ8bXZ12L%h3Jc_&vF(w$SkSqi5c!boo=3drwPpoN@2gAwxHD=GP67dD5$ksym#4#$4!bY~mqlzT^p^qd+VOB2%Y?C4_3TcGR zs|nln6Z=KX5snbFeQ~^W!YZ|doedDSnB#2zzppOE5(O=p{)h!9H> zn;65Z?)L1~ww7cgdA(0vvH~l#%*ObSkc5f^Y<{B*yDAuqr-7Icdm1w_+TV4QZb2M z(wL7a#Wnam$#CBVn_>c0}=B*qB$faMt`kOvS;*k>u>oH|JBQy3?w zZ^JWPimoRSPgp7=tl6n>U_vi>WpLACj8Rg6R!j`kQHtiR5W0Ltn^1n4(UfO`F;kP6yIW)cz4w2vXkQoBdfzvK$rkq2ovB) zZk|ec;ky`l5h&V~w`BEYZomy{IteK@H6Jsl7kEG1^7zRs5SjOpI%D1QrP%&3qVw}q z!fj_Mmvi8-C1XIZ+5bkbIjT5`Gv1BC77$y>(}ypIRh zCfF52Xds;QAo-OE3yKDW6ffS)E!HEciA8RnVRHUV{d4*OMtE`+5bn7a(wud6N#CSOQLlZAEFBfO> IhpzbGKVr(Rh5!Hn From 04583ce9b94d6f41f4c1e66939c4ca2ee41ff058 Mon Sep 17 00:00:00 2001 From: Elliott Hughes Date: Mon, 10 Mar 2014 15:19:05 -0700 Subject: [PATCH 3/4] Upgrade to tzdata2014a. From the release notes: Changes affecting near-future time stamps Turkey begins DST on 2014-03-31, not 03-30. (Thanks to Faruk Pasin for the heads-up, and to Tim Parenti for simplifying the update.) Changes affecting past time stamps Fiji ended DST on 2014-01-19 at 02:00, not the previously-scheduled 03:00. (Thanks to Steffen Thorsen.) Ukraine switched from Moscow to Eastern European time on 1990-07-01 (not 1992-01-01), and observed DST during the entire next winter. (Thanks to Vladimir in Moscow via Alois Treindl.) In 1988 Israel observed DST from 04-10 to 09-04, not 04-09 to 09-03. (Thanks to Avigdor Finkelstein.) (cherry picked from commit 159b28eb46f03cb1dae6484059e2559f1e42e208) Bug: 13193205 Change-Id: I3d302039f7e057a97c9d307ce8d32efa056481ed --- libc/zoneinfo/tzdata | Bin 560868 -> 560918 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/libc/zoneinfo/tzdata b/libc/zoneinfo/tzdata index 6acddb76ca8b68b85e7a10a8cc4aa8bacb6cccc0..8468e8322dad0e4bed91c5c6e769c20cb635b662 100644 GIT binary patch delta 7743 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 delta 7689 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 From 081db840befec895fb86e709ae95832ade2d065c Mon Sep 17 00:00:00 2001 From: Chad Brubaker Date: Fri, 21 Feb 2014 10:39:41 -0800 Subject: [PATCH 4/4] Allow overlap in resolv uid => DNS iface mapping When multiple rules exist covering a given uid the one added most recently will be used. This allows us to handle the simultaneous tuns case where a new tun is coming online for an already running VPN. _resolv_clear_iface_for_uid_range now also takes the iface and removes only that matching (iface, uid range) entry. Bug: 12134439 Change-Id: I9b9cfcfae2f38c409022a8c76ccadad7e2babd78 --- libc/netbsd/resolv/res_cache.c | 60 +++++++++++----------------------- libc/private/resolv_iface.h | 10 +++--- 2 files changed, 24 insertions(+), 46 deletions(-) diff --git a/libc/netbsd/resolv/res_cache.c b/libc/netbsd/resolv/res_cache.c index 8a6dc83ac..1a0c40c25 100644 --- a/libc/netbsd/resolv/res_cache.c +++ b/libc/netbsd/resolv/res_cache.c @@ -1852,9 +1852,7 @@ static void _remove_pidiface_info_locked(int pid); static struct resolv_pidiface_info* _get_pid_iface_info_locked(int pid); /* remove a resolv_pidiface_info structure from _res_uidiface_list */ -static int _remove_uidiface_info_locked(int uid_start, int uid_end); -/* check if a range [low,high] overlaps with any already existing ranges in the uid=>iface map*/ -static int _resolv_check_uid_range_overlap_locked(int uid_start, int uid_end); +static int _remove_uidiface_info_locked(const char* iface, int uid_start, int uid_end); /* get a resolv_uidiface_info structure from _res_uidiface_list with a certain uid */ static struct resolv_uidiface_info* _get_uid_iface_info_locked(int uid); @@ -2433,11 +2431,11 @@ _resolv_get_pids_associated_interface(int pid, char* buff, int buffLen) } static int -_remove_uidiface_info_locked(int uid_start, int uid_end) { +_remove_uidiface_info_locked(const char* ifname, int uid_start, int uid_end) { struct resolv_uidiface_info* result = _res_uidiface_list.next; struct resolv_uidiface_info* prev = &_res_uidiface_list; - - while (result != NULL && result->uid_start != uid_start && result->uid_end != uid_end) { + while (result != NULL && !(result->uid_start == uid_start && result->uid_end == uid_end && + !strcmp(result->ifname, ifname))) { prev = result; result = result->next; } @@ -2461,19 +2459,6 @@ _get_uid_iface_info_locked(int uid) return result; } -static int -_resolv_check_uid_range_overlap_locked(int uid_start, int uid_end) -{ - struct resolv_uidiface_info* cur = _res_uidiface_list.next; - while (cur != NULL) { - if (cur->uid_start <= uid_end && cur->uid_end >= uid_start) { - return -1; - } - cur = cur->next; - } - return 0; -} - void _resolv_clear_iface_uid_range_mapping() { @@ -2518,28 +2503,21 @@ _resolv_set_iface_for_uid_range(const char* ifname, int uid_start, int uid_end) return -1; } pthread_mutex_lock(&_res_uidiface_list_lock); - //check that we aren't adding an overlapping range - if (!_resolv_check_uid_range_overlap_locked(uid_start, uid_end)) { - uidiface_info = calloc(sizeof(*uidiface_info), 1); - if (uidiface_info) { - uidiface_info->uid_start = uid_start; - uidiface_info->uid_end = uid_end; - int len = sizeof(uidiface_info->ifname); - strncpy(uidiface_info->ifname, ifname, len - 1); - uidiface_info->ifname[len - 1] = '\0'; + uidiface_info = calloc(sizeof(*uidiface_info), 1); + if (uidiface_info) { + uidiface_info->uid_start = uid_start; + uidiface_info->uid_end = uid_end; + int len = sizeof(uidiface_info->ifname); + strncpy(uidiface_info->ifname, ifname, len - 1); + uidiface_info->ifname[len - 1] = '\0'; - uidiface_info->next = _res_uidiface_list.next; - _res_uidiface_list.next = uidiface_info; + uidiface_info->next = _res_uidiface_list.next; + _res_uidiface_list.next = uidiface_info; - XLOG("_resolv_set_iface_for_uid_range: [%d,%d], iface %s\n", uid_start, uid_end, - ifname); - } else { - XLOG("_resolv_set_iface_for_uid_range failing calloc\n"); - rv = -1; - errno = EINVAL; - } + XLOG("_resolv_set_iface_for_uid_range: [%d,%d], iface %s\n", uid_start, uid_end, + ifname); } else { - XLOG("_resolv_set_iface_for_uid_range range [%d,%d] overlaps\n", uid_start, uid_end); + XLOG("_resolv_set_iface_for_uid_range failing calloc\n"); rv = -1; errno = EINVAL; } @@ -2549,14 +2527,14 @@ _resolv_set_iface_for_uid_range(const char* ifname, int uid_start, int uid_end) } int -_resolv_clear_iface_for_uid_range(int uid_start, int uid_end) +_resolv_clear_iface_for_uid_range(const char* ifname, int uid_start, int uid_end) { pthread_once(&_res_cache_once, _res_cache_init); pthread_mutex_lock(&_res_uidiface_list_lock); - int rv = _remove_uidiface_info_locked(uid_start, uid_end); + int rv = _remove_uidiface_info_locked(ifname, uid_start, uid_end); - XLOG("_resolv_clear_iface_for_uid_range: [%d,%d]\n", uid_start, uid_end); + XLOG("_resolv_clear_iface_for_uid_range: [%d,%d] iface %s\n", uid_start, uid_end, ifname); pthread_mutex_unlock(&_res_uidiface_list_lock); diff --git a/libc/private/resolv_iface.h b/libc/private/resolv_iface.h index ad427930b..5d24124d0 100644 --- a/libc/private/resolv_iface.h +++ b/libc/private/resolv_iface.h @@ -79,13 +79,12 @@ extern void _resolv_clear_iface_pid_mapping(); extern int _resolv_get_pids_associated_interface(int pid, char* buff, int buffLen); -/** set a uid range to use the name servers of the specified interface - * If [low,high] overlaps with an already existing rule -1 is returned */ +/** set a uid range to use the name servers of the specified interface */ extern int _resolv_set_iface_for_uid_range(const char* ifname, int uid_start, int uid_end); -/* clear a uid range from being associated with an interface - * If the range given is not mapped -1 is returned. */ -extern int _resolv_clear_iface_for_uid_range(int uid_start, int uid_end); +/** Remove a mapping added by _resolv_set_iface_for_uid_range. + * If no such rule exists -1 is returned. */ +extern int _resolv_clear_iface_for_uid_range(const char* ifname, int uid_start, int uid_end); /* clear the entire mapping of uid ranges to interfaces. */ extern void _resolv_clear_iface_uid_range_mapping(); @@ -94,6 +93,7 @@ extern void _resolv_clear_iface_uid_range_mapping(); * On error, -1 is returned. * If no interface is found, 0 is returned and buff is set to empty ('\0'). * If an interface is found, the name is copied to buff and the length of the name is returned. + * If there are multiple rules covering uid the most recently added rule will be returned. * Arguments: uid The uid to find an interface for * buff A buffer to copy the result to * buffLen Length of buff. An interface is at most IF_NAMESIZE in length */