prevent CNAME/PTR parsing from reading data past the response end
[musl] / src / network / lookup.h
index 19c9e48..54b2f8b 100644 (file)
@@ -2,16 +2,39 @@
 #define LOOKUP_H
 
 #include <stdint.h>
+#include <stddef.h>
+#include <features.h>
+#include <netinet/in.h>
+#include <netdb.h>
+
+struct aibuf {
+       struct addrinfo ai;
+       union sa {
+               struct sockaddr_in sin;
+               struct sockaddr_in6 sin6;
+       } sa;
+       volatile int lock[1];
+       short slot, ref;
+};
 
 struct address {
        int family;
        unsigned scopeid;
        uint8_t addr[16];
+       int sortkey;
 };
 
 struct service {
        uint16_t port;
-       char proto;
+       unsigned char proto, socktype;
+};
+
+#define MAXNS 3
+
+struct resolvconf {
+       struct address ns[MAXNS];
+       unsigned nns, attempts, ndots;
+       unsigned timeout;
 };
 
 /* The limit of 48 results is a non-sharp bound on the number of addresses
@@ -20,8 +43,13 @@ struct service {
 #define MAXADDRS 48
 #define MAXSERVS 2
 
-int __lookup_serv(struct service buf[static MAXSERVS], const char *name, int proto, int flags);
-int __lookup_name(struct address buf[static MAXADDRS], char canon[static 256], const char *name, int family, int flags);
-int __lookup_ipliteral(struct address buf[static 1], const char *name, int family);
+hidden int __lookup_serv(struct service buf[static MAXSERVS], const char *name, int proto, int socktype, int flags);
+hidden int __lookup_name(struct address buf[static MAXADDRS], char canon[static 256], const char *name, int family, int flags);
+hidden int __lookup_ipliteral(struct address buf[static 1], const char *name, int family);
+
+hidden int __get_resolv_conf(struct resolvconf *, char *, size_t);
+hidden int __res_msend_rc(int, const unsigned char *const *, const int *, unsigned char *const *, int *, int, const struct resolvconf *);
+
+hidden int __dns_parse(const unsigned char *, int, int (*)(void *, int, const void *, int, const void *, int), void *);
 
 #endif