Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
squid.doc
Скачиваний:
4
Добавлен:
01.05.2025
Размер:
1.45 Mб
Скачать

2.8 Undefined reference to __inet_ntoa

от Kevin Sartorelli и Andreas Doering.

Скорее всего вы недавно установили bind 8.x. Есть несоответствие между заголовочными файлами и библиотекой DNS, которую обнаружил Squid. Есть пара вариантов, которые вы можете попробовать, чтобы исправить это.

Во-первых, попробуйте добавить -lbind к XTRA_LIBS в src/Makefile. Если уже указано -lresolv, удалите.

Если по прежнему ничего не работает, отредактируйте файл arpa/inet.h, закомментировав следующие строки:

#define inet_addr __inet_addr

#define inet_aton __inet_aton

#define inet_lnaof __inet_lnaof

#define inet_makeaddr __inet_makeaddr

#define inet_neta __inet_neta

#define inet_netof __inet_netof

#define inet_network __inet_network

#define inet_net_ntop __inet_net_ntop

#define inet_net_pton __inet_net_pton

#define inet_ntoa __inet_ntoa

#define inet_pton __inet_pton

#define inet_ntop __inet_ntop

#define inet_nsap_addr __inet_nsap_addr

#define inet_nsap_ntoa __inet_nsap_ntoa

2.9 Как мне получить действительное dns ttl в ip-rtit Squid?

Если у вас есть исходники BIND, вы можете модифицировать их как указано ниже. При этом глобальная переменная _dns_ttl_ будет установлена в TTL для последующих запросов. Потом, когда вы будете компилировать Squid, конфигурационный скрипт будет искать _dns_ttl_ symbol в libresolv.a. Если найдено, то dnsserver будет возвращать значение TTL для каждого запроса.

Код представлен Endre Balint Nagy.

diff -ru bind-4.9.4-orig/res/gethnamaddr.c bind-4.9.4/res/gethnamaddr.c

--- bind-4.9.4-orig/res/gethnamaddr.c Mon Aug 5 02:31:35 1996

+++ bind-4.9.4/res/gethnamaddr.c Tue Aug 27 15:33:11 1996

@@ -133,6 +133,7 @@

} align;

extern int h_errno;

+int _dns_ttl_;

#ifdef DEBUG

static void

@@ -223,6 +224,7 @@

host.h_addr_list = h_addr_ptrs;

haveanswer = 0;

had_error = 0;

+ _dns_ttl_ = -1;

while (ancount-- > 0 && cp < eom && !had_error) {

n = dn_expand(answer->buf, eom, cp, bp, buflen);

if ((n < 0) || !(*name_ok)(bp)) {

@@ -232,8 +234,11 @@

cp += n; /* name */

type = _getshort(cp);

cp += INT16SZ; /* type */

- class = _getshort(cp);

- cp += INT16SZ + INT32SZ; /* class, TTL */

+ class = _getshort(cp);

+ cp += INT16SZ; /* class */

+ if (qtype == T_A && type == T_A)

+ _dns_ttl_ = _getlong(cp);

+ cp += INT32SZ; /* TTL */

n = _getshort(cp);

cp += INT16SZ; /* len */

if (class != C_IN) {

А это заплатка для BIND-8:

*** src/lib/irs/dns_ho.c.orig Tue May 26 21:55:51 1998

--- src/lib/irs/dns_ho.c Tue May 26 21:59:57 1998

***************

*** 87,92 ****

--- 87,93 ----

#endif

extern int h_errno;

+ int _dns_ttl_;

/* Definitions. */

***************

*** 395,400 ****

--- 396,402 ----

pvt->host.h_addr_list = pvt->h_addr_ptrs;

haveanswer = 0;

had_error = 0;

+ _dns_ttl_ = -1;

while (ancount-- > 0 && cp < eom && !had_error) {

n = dn_expand(ansbuf, eom, cp, bp, buflen);

if ((n < 0) || !(*name_ok)(bp)) {

***************

*** 404,411 ****

cp += n; /* name */

type = ns_get16(cp);

cp += INT16SZ; /* type */

! class = ns_get16(cp);

! cp += INT16SZ + INT32SZ; /* class, TTL */

n = ns_get16(cp);

cp += INT16SZ; /* len */

if (class != C_IN) {

--- 406,416 ----

cp += n; /* name */

type = ns_get16(cp);

cp += INT16SZ; /* type */

! class = _getshort(cp);

! cp += INT16SZ; /* class */

! if (qtype == T_A && type == T_A)

! _dns_ttl_ = _getlong(cp);

! cp += INT32SZ; /* TTL */

n = ns_get16(cp);

cp += INT16SZ; /* len */

if (class != C_IN) {

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]