]> git.ipfire.org Git - thirdparty/knot-resolver.git/commitdiff
Removed rsource entry from struct kr_query.
authorKarel Slany <karel.slany@nic.cz>
Wed, 13 Jul 2016 11:02:01 +0000 (13:02 +0200)
committerOndřej Surý <ondrej@sury.org>
Thu, 11 Aug 2016 12:06:45 +0000 (14:06 +0200)
lib/resolve.c
lib/rplan.h
modules/cookies/cookiemonster.c

index 095cab0ab6b7ba19cd1293e71289fb205918b88a..0c0ac3485532eec239ff2a0f2e133c8a92191401 100644 (file)
@@ -525,23 +525,6 @@ int kr_resolve_consume(struct kr_request *request, const struct sockaddr *src, k
        /* Different processing for network error */
        struct kr_query *qry = array_tail(rplan->pending);
 
-       if (src && !(qry->flags & QUERY_CACHED)) {
-               /* Track response source.
-                * @todo -- Find a more suitable place to put the source
-                * address into query/response context. */
-               switch (src->sa_family) {
-               case AF_INET:
-                       qry->rsource.ip4 = *(struct sockaddr_in *) src;
-                       break;
-               case AF_INET6:
-                       qry->rsource.ip6 = *(struct sockaddr_in6 *) src;
-                       break;
-               default:
-                       qry->rsource.ip4.sin_family = AF_UNSPEC;
-                       break;
-               }
-       }
-
        bool tried_tcp = (qry->flags & QUERY_TCP);
        if (!packet || packet->size == 0) {
                if (tried_tcp)
index de679deb1cee58354b49f7b4b57e5f17c1c5e6fe..aa6fa5fe37908184dc888712fc31e0fc2bce75e5 100644 (file)
@@ -76,10 +76,6 @@ struct kr_query {
        struct kr_zonecut zone_cut;
        struct kr_nsrep ns;
        struct kr_layer_pickle *deferred;
-       union {
-               struct sockaddr_in ip4;
-               struct sockaddr_in6 ip6;
-       } rsource; /**< Response source address. */
 };
 
 /** @cond internal Array of queries. */
index bb6793502f1b0f588880c7785bfed0e6cfaa27ee..6a60f5d6bd55804969a605ae8807d9bef74f5032 100644 (file)
 
 /**
  * Obtain address from query/response context if if can be obtained.
- * @param qry query context
+ * @param req resolution context
  * @return pointer to where the server socket address, NULL if not provided within context
  */
-static const struct sockaddr *passed_server_sockaddr(const struct kr_query *qry)
+static const struct sockaddr *passed_server_sockaddr(const struct kr_request *req)
 {
-       assert(qry);
+       if (!req || !req->upstream.addr) {
+               return NULL;
+       }
 
-       const struct sockaddr *tmp_sockaddr = NULL;
-       if (qry->rsource.ip4.sin_family == AF_INET ||
-           qry->rsource.ip4.sin_family == AF_INET6) {
-               tmp_sockaddr = (struct sockaddr *) &qry->rsource.ip4;
+       if (req->upstream.addr->sa_family == AF_INET ||
+           req->upstream.addr->sa_family == AF_INET6) {
+               return req->upstream.addr;
        }
 
-       return tmp_sockaddr;
+       return NULL;
 }
 
 /**
@@ -98,19 +99,22 @@ static const struct sockaddr *guess_server_addr(const struct kr_nsrep *nsrep,
  * Obtain pointer to server socket address that matches obtained cookie.
  * @param sockaddr pointer to socket address to be set
  * @param is_current set to true if the cookie was generate from current secret
+ * @param req resolution context
  * @param cc client cookie from the response
  * @param cc_len client cookie size
  * @param clnt_sett client cookie settings structure
  * @return kr_ok() if matching address found, error code else
  */
 static int srvr_sockaddr_cc_check(const struct sockaddr **sockaddr,
-                                  bool *is_current, const struct kr_query *qry,
+                                  bool *is_current, struct kr_request *req,
                                   const uint8_t *cc, uint16_t cc_len,
                                   const struct kr_cookie_settings *clnt_sett)
 {
-       assert(sockaddr && is_current && qry && cc && cc_len && clnt_sett);
+       assert(sockaddr && is_current && req && cc && cc_len && clnt_sett);
+
+       struct kr_query *qry = req->current_query;
 
-       const struct sockaddr *tmp_sockaddr = passed_server_sockaddr(qry);
+       const struct sockaddr *tmp_sockaddr = passed_server_sockaddr(req);
 
        /* The address must correspond with the client cookie. */
        if (tmp_sockaddr) {
@@ -222,11 +226,11 @@ static bool is_cookie_cached(kr_cookie_lru_t *cache, const struct sockaddr *sa,
  * Check cookie content and store it to cache.
  */
 static bool check_cookie_content_and_cache(const struct kr_cookie_settings *clnt_sett,
-                                           struct kr_query *qry,
+                                           struct kr_request *req,
                                            uint8_t *pkt_cookie_opt,
                                            kr_cookie_lru_t *cache)
 {
-       assert(clnt_sett && qry && pkt_cookie_opt && cache);
+       assert(clnt_sett && req && pkt_cookie_opt && cache);
 
        uint8_t *pkt_cookie_data = knot_edns_opt_get_data(pkt_cookie_opt);
        uint16_t pkt_cookie_len = knot_edns_opt_get_length(pkt_cookie_opt);
@@ -248,7 +252,7 @@ static bool check_cookie_content_and_cache(const struct kr_cookie_settings *clnt
        /* Check server address against received client cookie. */
        const struct sockaddr *srvr_sockaddr = NULL;
        bool returned_current = false;
-       ret = srvr_sockaddr_cc_check(&srvr_sockaddr, &returned_current, qry,
+       ret = srvr_sockaddr_cc_check(&srvr_sockaddr, &returned_current, req,
                                     pkt_cc, pkt_cc_len, clnt_sett);
        if (ret != kr_ok()) {
                DEBUG_MSG(NULL, "%s\n", "could not match received cookie");
@@ -290,7 +294,7 @@ int check_response(knot_layer_t *ctx, knot_pkt_t *pkt)
 
        kr_cookie_lru_t *cookie_cache = req->ctx->cache_cookie;
 
-       const struct sockaddr *srvr_sockaddr = passed_server_sockaddr(qry);
+       const struct sockaddr *srvr_sockaddr = passed_server_sockaddr(req);
 
        if (!pkt_cookie_opt && srvr_sockaddr &&
            get_cookie_opt(cookie_cache, srvr_sockaddr)) {
@@ -305,7 +309,7 @@ int check_response(knot_layer_t *ctx, knot_pkt_t *pkt)
                return ctx->state;
        }
 
-       if (!check_cookie_content_and_cache(&cookie_ctx->clnt, qry,
+       if (!check_cookie_content_and_cache(&cookie_ctx->clnt, req,
                                            pkt_cookie_opt, cookie_cache)) {
                return KNOT_STATE_FAIL;
        }