Hi there, I've added support for POSIX Timezones to udhcpc6 (RFC 4833) as it was useful for our setup. I would love to see this on busybox. I also added a bit of documentation to my previous commit and replaced the double allocation by two memcpys.
Signed-off-by: Bernd Holzmüller <[email protected]> --- networking/udhcp/d6_common.h | 3 +++ networking/udhcp/d6_dhcpc.c | 39 ++++++++++++++++++++++++++++++--------- 2 files changed, 33 insertions(+), 9 deletions(-) diff --git a/networking/udhcp/d6_common.h b/networking/udhcp/d6_common.h index fcec8c15a..ca5788390 100644 --- a/networking/udhcp/d6_common.h +++ b/networking/udhcp/d6_common.h @@ -89,6 +89,9 @@ struct d6_option { #define D6_OPT_CLIENT_FQDN 39 +#define D6_OPT_TZ_POSIX 41 +#define D6_OPT_TZ_NAME 42 + /*** Other shared functions ***/ struct client6_data_t { diff --git a/networking/udhcp/d6_dhcpc.c b/networking/udhcp/d6_dhcpc.c index 18a104c61..601ed41c9 100644 --- a/networking/udhcp/d6_dhcpc.c +++ b/networking/udhcp/d6_dhcpc.c @@ -90,10 +90,12 @@ enum { static const char opt_req[] = { (D6_OPT_ORO >> 8), (D6_OPT_ORO & 0xff), - 0, 6, + 0, 10, (D6_OPT_DNS_SERVERS >> 8), (D6_OPT_DNS_SERVERS & 0xff), (D6_OPT_DOMAIN_LIST >> 8), (D6_OPT_DOMAIN_LIST & 0xff), - (D6_OPT_CLIENT_FQDN >> 8), (D6_OPT_CLIENT_FQDN & 0xff) + (D6_OPT_CLIENT_FQDN >> 8), (D6_OPT_CLIENT_FQDN & 0xff), + (D6_OPT_TZ_POSIX >> 8), (D6_OPT_TZ_POSIX & 0xff), + (D6_OPT_TZ_NAME >> 8), (D6_OPT_TZ_NAME & 0xff) }; static const char opt_fqdn_req[] = { @@ -261,17 +263,21 @@ static void option_to_env(uint8_t *option, uint8_t *option_end) *new_env() = dlist; break; case D6_OPT_CLIENT_FQDN: - // Work around broken ISC DHCPD6 + /* Work around broken ISC DHCPD6 + * ISC DHCPD6 does not implement RFC 4704 correctly: It says the first + * byte of option-payload should contain flags where the bits 4-8 are + * reserved for future use and MUST be zero. Instead ISC DHCPD6 just + * writes the entire FQDN as string to option-payload. We assume a + * broken server here if any of the reserved bits is set. + */ if (option[4] & 0xf8) { olen = ((option[2] << 8) | option[3]); - dlist = xmalloc(olen); + dlist = xmalloc(olen + 5); //fixme: -//- explain //- add len error check -//- merge two allocs into one - memcpy(dlist, option + 4, olen); - *new_env() = xasprintf("fqdn=%s", dlist); - free(dlist); + memcpy(dlist,"fqdn=",5); + memcpy(dlist + 5, option + 4, olen); + *new_env() = dlist; break; } dlist = dname_dec(option + 5, ((option[2] << 8) | option[3]) - 1, "fqdn="); @@ -279,6 +285,21 @@ static void option_to_env(uint8_t *option, uint8_t *option_end) break; *new_env() = dlist; break; + /* RFC 4833 Timezones */ + case D6_OPT_TZ_POSIX: + olen = ((option[2] << 8) | option[3]); + dlist = xmalloc(olen + 3); + memcpy(dlist, "tz=", 3); + memcpy(dlist + 3, option + 4, olen); + *new_env() = dlist; + break; + case D6_OPT_TZ_NAME: + olen = ((option[2] << 8) | option[3]); + dlist = xmalloc(olen + 8); + memcpy(dlist, "tz_name=", 8); + memcpy(dlist + 8, option + 4, olen); + *new_env() = dlist; + break; } len_m4 -= 4 + option[3]; option += 4 + option[3]; -- 2.12.2 -- \\\||/// \\ - - // ( @ @ ) -oOo--( )--oOo------------------------------------------------------- tiggersWelt.net www.tiggersWelt.net Inhaber Bernd Holzmüller [email protected] Büro: 07 11 / 550 425-90 Marktstraße 57 Fax: 07 11 / 550 425-99 70372 Stuttgart
smime.p7s
Description: S/MIME Cryptographic Signature
_______________________________________________ busybox mailing list [email protected] http://lists.busybox.net/mailman/listinfo/busybox
