aboutsummaryrefslogtreecommitdiffstats
path: root/main/musl/1003-add-basic-dns-record-parsing-functions.patch
diff options
context:
space:
mode:
Diffstat (limited to 'main/musl/1003-add-basic-dns-record-parsing-functions.patch')
-rw-r--r--main/musl/1003-add-basic-dns-record-parsing-functions.patch272
1 files changed, 0 insertions, 272 deletions
diff --git a/main/musl/1003-add-basic-dns-record-parsing-functions.patch b/main/musl/1003-add-basic-dns-record-parsing-functions.patch
deleted file mode 100644
index 9742e0945b..0000000000
--- a/main/musl/1003-add-basic-dns-record-parsing-functions.patch
+++ /dev/null
@@ -1,272 +0,0 @@
-From cc449aebaa572fbea2d400d1ee058f03f2638df2 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Timo=20Ter=C3=A4s?= <timo.teras@iki.fi>
-Date: Mon, 14 Oct 2013 10:01:01 +0300
-Subject: [PATCH] add basic dns record parsing functions
-
----
- include/arpa/nameser.h | 89 ++++++++++++++++++-------------
- src/network/ns_parse.c | 140 +++++++++++++++++++++++++++++++++++++++++++++++++
- 2 files changed, 192 insertions(+), 37 deletions(-)
- create mode 100644 src/network/ns_parse.c
-
-diff --git a/include/arpa/nameser.h b/include/arpa/nameser.h
-index b9ee665..1fc7339 100644
---- a/include/arpa/nameser.h
-+++ b/include/arpa/nameser.h
-@@ -1,6 +1,11 @@
- #ifndef _ARPA_NAMESER_H
- #define _ARPA_NAMESER_H
-
-+#ifdef __cplusplus
-+extern "C" {
-+#endif
-+
-+#include <sys/types.h>
- #include <stdint.h>
-
- #define __NAMESER 19991006
-@@ -296,43 +301,49 @@ typedef enum __ns_cert_types {
- #define NS_OPT_DNSSEC_OK 0x8000U
- #define NS_OPT_NSID 3
-
--#define NS_GET16(s, cp) do { \
-- register const unsigned char *t_cp = (const unsigned char *)(cp); \
-- (s) = ((uint16_t)t_cp[0] << 8) \
-- | ((uint16_t)t_cp[1]) \
-- ; \
-- (cp) += NS_INT16SZ; \
--} while (0)
--
--#define NS_GET32(l, cp) do { \
-- register const unsigned char *t_cp = (const unsigned char *)(cp); \
-- (l) = ((uint32_t)t_cp[0] << 24) \
-- | ((uint32_t)t_cp[1] << 16) \
-- | ((uint32_t)t_cp[2] << 8) \
-- | ((uint32_t)t_cp[3]) \
-- ; \
-- (cp) += NS_INT32SZ; \
--} while (0)
--
--#define NS_PUT16(s, cp) do { \
-- register uint16_t t_s = (uint16_t)(s); \
-- register unsigned char *t_cp = (unsigned char *)(cp); \
-- *t_cp++ = t_s >> 8; \
-- *t_cp = t_s; \
-- (cp) += NS_INT16SZ; \
--} while (0)
--
--#define NS_PUT32(l, cp) do { \
-- register uint32_t t_l = (uint32_t)(l); \
-- register unsigned char *t_cp = (unsigned char *)(cp); \
-- *t_cp++ = t_l >> 24; \
-- *t_cp++ = t_l >> 16; \
-- *t_cp++ = t_l >> 8; \
-- *t_cp = t_l; \
-- (cp) += NS_INT32SZ; \
--} while (0)
--
--
-+static __inline uint16_t ns_get16(const unsigned char *cp)
-+{
-+ return ((uint16_t)cp[0] << 8)
-+ | ((uint16_t)cp[1]);
-+}
-+
-+#define NS_GET16(s, cp) do { (s) = ns_get16(cp); (cp) += NS_INT16SZ; } while (0)
-+
-+static __inline uint32_t ns_get32(const unsigned char *cp)
-+{
-+ return ((uint32_t)cp[0] << 24)
-+ | ((uint32_t)cp[1] << 16)
-+ | ((uint32_t)cp[2] << 8)
-+ | ((uint32_t)cp[3]);
-+}
-+
-+#define NS_GET32(s, cp) do { (s) = ns_get32(cp); (cp) += NS_INT32SZ; } while (0)
-+
-+static __inline void ns_put16(uint16_t s, unsigned char *cp)
-+{
-+ cp[0] = s >> 8;
-+ cp[1] = s;
-+}
-+
-+#define NS_PUT16(s, cp) do { ns_put16(s, cp); (cp) += NS_INT16SZ; } while (0)
-+
-+static __inline void ns_put32(uint32_t l, unsigned char *cp)
-+{
-+ cp[0] = l >> 24;
-+ cp[1] = l >> 16;
-+ cp[2] = l >> 8;
-+ cp[3] = l;
-+}
-+
-+#define NS_PUT32(s, cp) do { ns_put32(s, cp); (cp) += NS_INT32SZ; } while (0)
-+
-+#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
-+int ns_initparse(const u_char *msg, int msglen, ns_msg *handle);
-+int ns_parserr(ns_msg *handle, ns_sect section, int rrnum, ns_rr *rr);
-+int ns_skiprr(const u_char *msg, const u_char *eom, ns_sect section, int count);
-+int ns_name_uncompress(const u_char *msg, const u_char *eom,
-+ const u_char *comp_dn, char *exp_dn, size_t length);
-+#endif
-
-
- #define __BIND 19950621
-@@ -464,4 +475,8 @@ typedef struct {
- #define PUTSHORT NS_PUT16
- #define PUTLONG NS_PUT32
-
-+#ifdef __cplusplus
-+}
-+#endif
-+
- #endif
-diff --git a/src/network/ns_parse.c b/src/network/ns_parse.c
-new file mode 100644
-index 0000000..5ef0d90
---- /dev/null
-+++ b/src/network/ns_parse.c
-@@ -0,0 +1,140 @@
-+#define _BSD_SOURCE
-+#include <errno.h>
-+#include <stddef.h>
-+#include <resolv.h>
-+#include <arpa/nameser.h>
-+
-+int ns_initparse(const unsigned char *msg, int msglen, ns_msg *handle)
-+{
-+ int i, r;
-+
-+ handle->_msg = msg;
-+ handle->_eom = msg + msglen;
-+ if (msglen < (2 + ns_s_max) * NS_INT16SZ)
-+ goto bad;
-+
-+ NS_GET16(handle->_id, msg);
-+ NS_GET16(handle->_flags, msg);
-+ for (i = 0; i < ns_s_max; i++)
-+ NS_GET16(handle->_counts[i], msg);
-+ for (i = 0; i < ns_s_max; i++) {
-+ if (handle->_counts[i]) {
-+ handle->_sections[i] = msg;
-+ r = ns_skiprr(msg, handle->_eom, i, handle->_counts[i]);
-+ if (r < 0) return -1;
-+ msg += r;
-+ } else {
-+ handle->_sections[i] = NULL;
-+ }
-+ }
-+ if (msg != handle->_eom)
-+ goto bad;
-+
-+ handle->_sect = ns_s_max;
-+ handle->_rrnum = -1;
-+ handle->_msg_ptr = NULL;
-+ return 0;
-+bad:
-+ errno = EMSGSIZE;
-+ return -1;
-+}
-+
-+int ns_skiprr(const u_char *ptr, const u_char *eom, ns_sect section, int count)
-+{
-+ const u_char *p = ptr;
-+ int r;
-+
-+ while (count--) {
-+ r = dn_skipname(p, eom);
-+ if (r < 0) goto bad;
-+ p += r + 2 * NS_INT16SZ;
-+ if (section != ns_s_qd) {
-+ if (p + NS_INT32SZ + NS_INT16SZ > eom) goto bad;
-+ p += NS_INT32SZ;
-+ NS_GET16(r, p);
-+ p += r;
-+ }
-+ }
-+ if (p > eom) goto bad;
-+ return ptr - p;
-+bad:
-+ errno = EMSGSIZE;
-+ return -1;
-+}
-+
-+int ns_parserr(ns_msg *handle, ns_sect section, int rrnum, ns_rr *rr)
-+{
-+ int r;
-+
-+ if (section < 0 || section >= ns_s_max)
-+ goto bad;
-+ if (section != handle->_sect) {
-+ handle->_sect = section;
-+ handle->_rrnum = 0;
-+ handle->_msg_ptr = handle->_sections[section];
-+ }
-+ if (rrnum == -1)
-+ rrnum = handle->_rrnum;
-+ if (rrnum < 0 || rrnum >= handle->_counts[section])
-+ goto bad;
-+ if (rrnum < handle->_rrnum) {
-+ handle->_rrnum = 0;
-+ handle->_msg_ptr = handle->_sections[section];
-+ }
-+ if (rrnum > handle->_rrnum) {
-+ r = ns_skiprr(handle->_msg_ptr, handle->_eom, section, rrnum - handle->_rrnum);
-+ if (r < 0) return -1;
-+ handle->_msg_ptr += r;
-+ handle->_rrnum = rrnum;
-+ }
-+ r = dn_expand(handle->_msg, handle->_eom, handle->_msg_ptr, rr->name, NS_MAXDNAME);
-+ if (r < 0) return -1;
-+ handle->_msg_ptr += r;
-+ if (handle->_msg_ptr + 2 * NS_INT16SZ > handle->_eom)
-+ goto size;
-+ NS_GET16(rr->type, handle->_msg_ptr);
-+ NS_GET16(rr->rr_class, handle->_msg_ptr);
-+ if (section != ns_s_qd) {
-+ if (handle->_msg_ptr + NS_INT32SZ + NS_INT16SZ > handle->_eom)
-+ goto size;
-+ NS_GET32(rr->ttl, handle->_msg_ptr);
-+ NS_GET16(rr->rdlength, handle->_msg_ptr);
-+ if (handle->_msg_ptr + rr->rdlength > handle->_eom)
-+ goto size;
-+ rr->rdata = handle->_msg_ptr;
-+ handle->_msg_ptr += rr->rdlength;
-+ } else {
-+ rr->ttl = 0;
-+ rr->rdlength = 0;
-+ rr->rdata = NULL;
-+ }
-+ handle->_rrnum++;
-+ if (handle->_rrnum > handle->_counts[section]) {
-+ handle->_sect = section + 1;
-+ if (handle->_sect == ns_s_max) {
-+ handle->_rrnum = -1;
-+ handle->_msg_ptr = NULL;
-+ } else {
-+ handle->_rrnum = 0;
-+ }
-+ }
-+ return 0;
-+bad:
-+ errno = ENODEV;
-+ return -1;
-+size:
-+ errno = EMSGSIZE;
-+ return -1;
-+}
-+
-+int __dn_expand(const unsigned char *, const unsigned char *, const unsigned char *, char *, int);
-+
-+int ns_name_uncompress(const u_char *msg, const u_char *eom,
-+ const u_char *src, char *dst, size_t dstsiz)
-+{
-+ int r;
-+ r = __dn_expand(msg, eom, src, dst, dstsiz);
-+ if (r < 0) errno = EMSGSIZE;
-+ return r;
-+}
-+
---
-1.8.4
-