dhcp: Add domain name option handler
PATCH 1/1 dhcp: Add domain name option handler
Add parser and accessor for domain name lease option.
--- ell/dhcp-lease.c | 16 +++++++++++++++- ell/dhcp-private.h | 1 + ell/dhcp.h | 1 + 3 files changed, 17 insertions(+), 1 deletion(-)
ell/dhcp-lease.c +15 -1
@@ -45,6 +45,8 @@ void _dhcp_lease_free(struct l_dhcp_lease *lease)return ;l_free (lease->dns); +l_free (lease->domain_name); +l_free (lease); }
@@ -99,6 +101,10 @@ struct l_dhcp_lease *_dhcp_lease_parse_options(struct dhcp_message_iter *iter) } }break ; +case L_DHCP_OPTION_DOMAIN_NAME : +if (l >=1 ) + lease->domain_name =l_strdup (v); +break ;default :break ; }
@@ -124,7 +130,7 @@ struct l_dhcp_lease *_dhcp_lease_parse_options(struct dhcp_message_iter *iter)return lease; error: -l_free (lease); +_dhcp_lease_free (lease);return NULL ; }
@@ -201,6 +207,14 @@ LIB_EXPORT char **l_dhcp_lease_get_dns(const struct l_dhcp_lease *lease)return dns_list; } +LIB_EXPORT char *l_dhcp_lease_get_domain_name(const struct l_dhcp_lease *lease) +{ +if (unlikely (!lease)) +return NULL ; + +return l_strdup (lease->domain_name); +} + LIB_EXPORT uint32_t l_dhcp_lease_get_t1(const struct l_dhcp_lease *lease) {if (unlikely (!lease))
ell/dhcp-private.h +1 -0
@@ -120,6 +120,7 @@ struct l_dhcp_lease {uint32_t t2;uint32_t router;uint32_t *dns; +char *domain_name; };struct l_dhcp_lease *_dhcp_lease_new (void );
ell/dhcp.h +1 -0
@@ -95,6 +95,7 @@ char *l_dhcp_lease_get_netmask(const struct l_dhcp_lease *lease);char *l_dhcp_lease_get_broadcast (const struct l_dhcp_lease *lease);char *l_dhcp_lease_get_server_id (const struct l_dhcp_lease *lease);char **l_dhcp_lease_get_dns (const struct l_dhcp_lease *lease); +char *l_dhcp_lease_get_domain_name (const struct l_dhcp_lease *lease);uint32_t l_dhcp_lease_get_t1 (const struct l_dhcp_lease *lease);uint32_t l_dhcp_lease_get_t2 (const struct l_dhcp_lease *lease);
Signature · 1 line
2.13.6
Hi Tim,
Quoted 21 lines · Tim Kourt
Add parser and accessor for domain name lease option.
--- ell/dhcp-lease.c | 16 +++++++++++++++- ell/dhcp-private.h | 1 + ell/dhcp.h | 1 + 3 files changed, 17 insertions(+), 1 deletion(-)ell/dhcp-lease.c +2
-0@@ -45,6 +45,8 @@ void _dhcp_lease_free(struct l_dhcp_lease *lease)return ;l_free (lease->dns); +l_free (lease->domain_name); +l_free (lease); }
ell/dhcp-lease.c struct l_dhcp_lease *_dhcp_lease_parse_options(struct dhcp_message_iter *iter) · line 107
Quoted 7 lines
ell/dhcp-lease.c +4
-0@@ -99,6 +101,10 @@ struct l_dhcp_lease *_dhcp_lease_parse_options(struct dhcp_message_iter *iter) } }break ; +case L_DHCP_OPTION_DOMAIN_NAME : +if (l >=1 ) + lease->domain_name =l_strdup (v); +break ;
No. You cannot assume that v is null terminated. Nobody will guarantee that the packets coming from the 'dhcp server' aren't fuzzed or are not from dhcp server at all.
Quoted 13 lines
ell/dhcp-lease.c +1
-1default :break ; }@@ -124,7 +130,7 @@ struct l_dhcp_lease *_dhcp_lease_parse_options(struct dhcp_message_iter *iter)return lease; error: -l_free (lease); +_dhcp_lease_free (lease);return NULL ; }
ell/dhcp-lease.c LIB_EXPORT char **l_dhcp_lease_get_dns(const struct l_dhcp_lease *lease) · line 215
Quoted 9 lines
ell/dhcp-lease.c +6
-0@@ -201,6 +207,14 @@ LIB_EXPORT char **l_dhcp_lease_get_dns(const struct l_dhcp_lease *lease)return dns_list; } +LIB_EXPORT char *l_dhcp_lease_get_domain_name(const struct l_dhcp_lease *lease) +{ +if (unlikely (!lease)) +return NULL ; + +return l_strdup (lease->domain_name);
Strictly speaking this can be const char *, but okay.
Quoted 23 lines
ell/dhcp-lease.c +2
-0+} + LIB_EXPORT uint32_t l_dhcp_lease_get_t1(const struct l_dhcp_lease *lease) {if (unlikely (!lease))ell/dhcp-private.h +1
-0@@ -120,6 +120,7 @@ struct l_dhcp_lease {uint32_t t2;uint32_t router;uint32_t *dns; +char *domain_name; };struct l_dhcp_lease *_dhcp_lease_new (void );ell/dhcp.h +0
-0
ell/dhcp.h char *l_dhcp_lease_get_netmask(const struct l_dhcp_lease *lease); · line 101
Quoted 7 lines
ell/dhcp.h +1
-0@@ -95,6 +95,7 @@ char *l_dhcp_lease_get_netmask(const struct l_dhcp_lease *lease);char *l_dhcp_lease_get_broadcast (const struct l_dhcp_lease *lease);char *l_dhcp_lease_get_server_id (const struct l_dhcp_lease *lease);char **l_dhcp_lease_get_dns (const struct l_dhcp_lease *lease); +char *l_dhcp_lease_get_domain_name (const struct l_dhcp_lease *lease);uint32_t l_dhcp_lease_get_t1 (const struct l_dhcp_lease *lease);uint32_t l_dhcp_lease_get_t2 (const struct l_dhcp_lease *lease);
Regards,
-Denis