<?xml version="1.0" encoding="UTF-8" ?>

<bugzilla version="5.2"
          urlbase="https://bugzilla.altlinux.org/"
          
          maintainer="jenya@basealt.ru"
>

    <bug>
          <bug_id>23486</bug_id>
          
          <creation_ts>2010-05-16 04:01:14 +0400</creation_ts>
          <short_desc>curl: IPv6 на ядре без IPv6</short_desc>
          <delta_ts>2010-08-20 14:53:18 +0400</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>4</classification_id>
          <classification>Development</classification>
          <product>Sisyphus</product>
          <component>curl</component>
          <version>unstable</version>
          <rep_platform>all</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>CLOSED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P3</priority>
          <bug_severity>normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Kirill A. Shutemov">kas</reporter>
          <assigned_to name="Anton Farygin">rider</assigned_to>
          <cc>glebfm</cc>
    
    <cc>ldv</cc>
    
    <cc>led</cc>
    
    <cc>rider</cc>
    
    <cc>wrar</cc>
          
          <qa_contact>qa-sisyphus</qa_contact>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>109224</commentid>
    <comment_count>0</comment_count>
    <who name="Kirill A. Shutemov">kas</who>
    <bug_when>2010-05-16 04:01:14 +0400</bug_when>
    <thetext>Есть машина на которой запущено ядро без поддержки IPv6. Если попытаться получить что-либо с хоста для которого на ряду с обычной IPv4, есть IPv6 запись в DNS, то всё плохо.

Для примера:

$ host ftp.arm.linux.org.uk 
ftp.arm.linux.org.uk is an alias for zeniv.linux.org.uk.
zeniv.linux.org.uk has address 195.92.253.2
zeniv.linux.org.uk has IPv6 address 2002:c35c:fd02::1
$ curl http://ftp.arm.linux.org.uk/                     
curl: (7) couldn&apos;t connect to host

В strace:

socket(PF_INET6, SOCK_STREAM, IPPROTO_IP) = -1 EAFNOSUPPORT (Address family not supported by protocol)

Если собрать curl без поддержки IPv6, то всё работает.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>109225</commentid>
    <comment_count>1</comment_count>
    <who name="">led</who>
    <bug_when>2010-05-16 04:50:03 +0400</bug_when>
    <thetext>(В ответ на комментарий №0)
&gt; $ curl http://ftp.arm.linux.org.uk/                     
&gt; curl: (7) couldn&apos;t connect to host

а так:
curl --ip4 http://ftp.arm.linux.org.uk/
?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>109229</commentid>
    <comment_count>2</comment_count>
    <who name="Kirill A. Shutemov">kas</who>
    <bug_when>2010-05-16 14:44:12 +0400</bug_when>
    <thetext>так:
curl --ipv4 http://ftp.arm.linux.org.uk/

работает.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>109234</commentid>
    <comment_count>3</comment_count>
    <who name="Andrey Rahmatullin">wrar</who>
    <bug_when>2010-05-16 15:50:35 +0400</bug_when>
    <thetext>Слегка в тему, из недавно прочитанного:

IPv6 is not enabled by default for any network activity in ejabberd.
This is because with the current state of ejabberd code it&apos;s impossible
to fall back to IPv4 if IPv6 is unavailable, and hence enabling IPv6
by default would immediately break things for users with IPv6 disabled
(see http://bugs.debian.org/503313 for more details).

Так и тут, видимо. Но решение, связанное с полным отключением v6, немедленно получит #23202 blocker.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>109235</commentid>
    <comment_count>4</comment_count>
    <who name="Kirill A. Shutemov">kas</who>
    <bug_when>2010-05-16 16:34:30 +0400</bug_when>
    <thetext>Проверка на работоспособность IPv6 тривиальна. Не вижу проблемы.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>109238</commentid>
    <comment_count>5</comment_count>
    <who name="Anton Farygin">rider</who>
    <bug_when>2010-05-16 22:46:32 +0400</bug_when>
    <thetext>Предложите его апстриму.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>109246</commentid>
    <comment_count>6</comment_count>
    <who name="Kirill A. Shutemov">kas</who>
    <bug_when>2010-05-17 01:57:33 +0400</bug_when>
    <thetext>Поковырялся немного в curl. Похоже проблема, уходит корнями в c-ares. Он некорректно обрабатывает AF_UNSPEC. Он останавливается, если нашёл хотя бы одну AAAA запись, хотя, по идее, должен продолжать смотреть и на A записи.

Если собрать curl без поддержки c-ares, то всё работает как следует.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>111277</commentid>
    <comment_count>7</comment_count>
    <who name="Victor Forsyuk">force</who>
    <bug_when>2010-08-19 19:42:14 +0400</bug_when>
    <thetext>(В ответ на комментарий №6)
&gt; Поковырялся немного в curl. Похоже проблема, уходит корнями в c-ares. Он
&gt; некорректно обрабатывает AF_UNSPEC. Он останавливается, если нашёл хотя бы одну
&gt; AAAA запись, хотя, по идее, должен продолжать смотреть и на A записи.

Да, совершенно верно: ошибка в c-ares. Однако, к сожалению, это не вопрос написания небольшого патча, который малой кровью пофиксит баг в c-ares. Вот ссылка на анализ кода c-ares:
https://bugzilla.redhat.com/show_bug.cgi?id=548396#c1
Вывод: &quot;I believe the API would have to change to support mixed protocols.&quot;

&gt; Если собрать curl без поддержки c-ares, то всё работает как следует.

Нужно собрать curl с опцией --enable-threaded-resolver. Это решит данную проблему. Так уже сделано в сборке Федоры.

В связи с этим перевешваю на curl.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>111293</commentid>
    <comment_count>8</comment_count>
    <who name="Anton Farygin">rider</who>
    <bug_when>2010-08-20 08:55:29 +0400</bug_when>
    <thetext>fixed (curl-7.21.1-alt2)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>111306</commentid>
    <comment_count>9</comment_count>
    <who name="Dmitry V. Levin">ldv</who>
    <bug_when>2010-08-20 14:23:31 +0400</bug_when>
    <thetext>(In reply to comment #8)
&gt; fixed (curl-7.21.1-alt2)

$ rpmquery -R libcurl-7.21.1-alt2 |grep cares
libcares &gt;= 1.7.3-alt1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>111308</commentid>
    <comment_count>10</comment_count>
    <who name="Anton Farygin">rider</who>
    <bug_when>2010-08-20 14:42:14 +0400</bug_when>
    <thetext>зависимость поставлена ручками, уберётся при следующей сборке.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>111310</commentid>
    <comment_count>11</comment_count>
    <who name="Dmitry V. Levin">ldv</who>
    <bug_when>2010-08-20 14:51:59 +0400</bug_when>
    <thetext>(In reply to comment #10)
&gt; зависимость поставлена ручками, уберётся при следующей сборке.

Не забудешь?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>111312</commentid>
    <comment_count>12</comment_count>
    <who name="Anton Farygin">rider</who>
    <bug_when>2010-08-20 14:53:18 +0400</bug_when>
    <thetext>уже запушил, так что не забуду.</thetext>
  </long_desc>
      
      

    </bug>

</bugzilla>