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

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

    <bug>
          <bug_id>13693</bug_id>
          
          <creation_ts>2007-12-13 20:49:20 +0300</creation_ts>
          <short_desc>Linking libgcrypt with libcap results in non-working vpnc</short_desc>
          <delta_ts>2008-07-21 12:37:33 +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>libgcrypt</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>P2</priority>
          <bug_severity>critical</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="nbr">nbr</reporter>
          <assigned_to name="Alexey Gladkov">legion</assigned_to>
          <cc>icesik</cc>
    
    <cc>ldv</cc>
    
    <cc>legion</cc>
    
    <cc>manowar</cc>
    
    <cc>vsu</cc>
          
          <qa_contact>qa-sisyphus</qa_contact>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>59478</commentid>
    <comment_count>0</comment_count>
    <who name="nbr">nbr</who>
    <bug_when>2007-12-13 20:49:21 +0300</bug_when>
    <thetext>When libgcrypt is linked with libcaps it uses
 capset(0x19980330, 0, {CAP_IPC_LOCK, CAP_IPC_LOCK, 0}) = 0
mlock(0xb7f44000, 16384)                = 0
capset(0x19980330, 0, {0, CAP_IPC_LOCK, 0}) = 0
calls to drop privilegies to create secure storage.
In vpnc it results to dropping CAP_NET_BIND privilege,thus
vpnc cannot bind to privileged port 500, which it needs for normal operation.
Strace is attached


[root@ibmtest ~]# strace -ff vpnc
execve(&quot;/usr/sbin/vpnc&quot;, [&quot;vpnc&quot;], [/* 42 vars */]) = 0
brk(0)                                  = 0x9c64000
uname({sys=&quot;Linux&quot;, node=&quot;ibmtest&quot;, ...}) = 0
access(&quot;/etc/ld.so.preload&quot;, R_OK)      = -1 ENOENT (No such file or directory)
open(&quot;/opt/oracle/product/10.2.0/db_1/lib/tls/i686/libgcrypt.so.11&quot;, O_RDONLY) =
-1 ENOENT (No such file or directory)
stat64(&quot;/opt/oracle/product/10.2.0/db_1/lib/tls/i686&quot;, 0xbf871800) = -1 ENOENT
(No such file or directory)
open(&quot;/opt/oracle/product/10.2.0/db_1/lib/tls/libgcrypt.so.11&quot;, O_RDONLY) = -1
ENOENT (No such file or directory)
stat64(&quot;/opt/oracle/product/10.2.0/db_1/lib/tls&quot;, 0xbf871800) = -1 ENOENT (No
such file or directory)
open(&quot;/opt/oracle/product/10.2.0/db_1/lib/i686/libgcrypt.so.11&quot;, O_RDONLY) = -1
ENOENT (No such file or directory)
stat64(&quot;/opt/oracle/product/10.2.0/db_1/lib/i686&quot;, 0xbf871800) = -1 ENOENT (No
such file or directory)
open(&quot;/opt/oracle/product/10.2.0/db_1/lib/libgcrypt.so.11&quot;, O_RDONLY) = -1
ENOENT (No such file or directory)
stat64(&quot;/opt/oracle/product/10.2.0/db_1/lib&quot;, 0xbf871800) = -1 ENOENT (No such
file or directory)
open(&quot;tls/i686/libgcrypt.so.11&quot;, O_RDONLY) = -1 ENOENT (No such file or directory)
open(&quot;tls/libgcrypt.so.11&quot;, O_RDONLY)   = -1 ENOENT (No such file or directory)
open(&quot;i686/libgcrypt.so.11&quot;, O_RDONLY)  = -1 ENOENT (No such file or directory)
open(&quot;libgcrypt.so.11&quot;, O_RDONLY)       = -1 ENOENT (No such file or directory)
open(&quot;/etc/ld.so.cache&quot;, O_RDONLY)      = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=160068, ...}) = 0
mmap2(NULL, 160068, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb7f20000
close(3)                                = 0
open(&quot;/usr/lib/libgcrypt.so.11&quot;, O_RDONLY) = 3
read(3, &quot;\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\260I\0\0004\0\0\0&quot;...,
512) = 512
fstat64(3, {st_mode=S_IFREG|0644, st_size=458956, ...}) = 0
mmap2(NULL, 462656, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x8c3000
mmap2(0x931000, 12288, PROT_READ|PROT_WRITE,
MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x6d) = 0x931000
close(3)                                = 0
open(&quot;tls/i686/libc.so.6&quot;, O_RDONLY)    = -1 ENOENT (No such file or directory)
open(&quot;tls/libc.so.6&quot;, O_RDONLY)         = -1 ENOENT (No such file or directory)
open(&quot;i686/libc.so.6&quot;, O_RDONLY)        = -1 ENOENT (No such file or directory)
open(&quot;libc.so.6&quot;, O_RDONLY)             = -1 ENOENT (No such file or directory)
open(&quot;/lib/libc.so.6&quot;, O_RDONLY)        = 3
read(3, &quot;\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\240a\1\0004\0\0\0&quot;...,
512) = 512
fstat64(3, {st_mode=S_IFREG|0755, st_size=1192444, ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) =
0xb7f1f000
mmap2(NULL, 1198340, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) =
0x110000
mmap2(0x22f000, 12288, PROT_READ|PROT_WRITE,
MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x11f) = 0x22f000
mmap2(0x232000, 10500, PROT_READ|PROT_WRITE,
MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x232000
close(3)                                = 0
open(&quot;tls/i686/libgpg-error.so.0&quot;, O_RDONLY) = -1 ENOENT (No such file or directory)
open(&quot;tls/libgpg-error.so.0&quot;, O_RDONLY) = -1 ENOENT (No such file or directory)
open(&quot;i686/libgpg-error.so.0&quot;, O_RDONLY) = -1 ENOENT (No such file or directory)
open(&quot;libgpg-error.so.0&quot;, O_RDONLY)     = -1 ENOENT (No such file or directory)
open(&quot;/usr/lib/libgpg-error.so.0&quot;, O_RDONLY) = 3
read(3, &quot;\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0000\6\0\0004\0\0\0&quot;...,
512) = 512
fstat64(3, {st_mode=S_IFREG|0644, st_size=11356, ...}) = 0
mmap2(NULL, 14308, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x711000
mmap2(0x714000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE,
3, 0x2) = 0x714000
close(3)                                = 0
open(&quot;tls/i686/libcap.so.1&quot;, O_RDONLY)  = -1 ENOENT (No such file or directory)
open(&quot;tls/libcap.so.1&quot;, O_RDONLY)       = -1 ENOENT (No such file or directory)
open(&quot;i686/libcap.so.1&quot;, O_RDONLY)      = -1 ENOENT (No such file or directory)
open(&quot;libcap.so.1&quot;, O_RDONLY)           = -1 ENOENT (No such file or directory)
open(&quot;/lib/libcap.so.1&quot;, O_RDONLY)      = 3
read(3,
&quot;\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\240\10\0\0004\0\0\0&quot;..., 512) = 512
fstat64(3, {st_mode=S_IFREG|0644, st_size=9816, ...}) = 0
mmap2(NULL, 9424, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x235000
mmap2(0x237000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE,
3, 0x2) = 0x237000
close(3)                                = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) =
0xb7f1e000
set_thread_area({entry_number:-1 -&gt; 6, base_addr:0xb7f1e6c0, limit:1048575,
seg_32bit:1, contents:0, read_exec_only:0, limit_in_pages:1, seg_not_present:0,
useable:1}) = 0
mprotect(0x22f000, 4096, PROT_READ)     = 0
munmap(0xb7f20000, 160068)              = 0
brk(0)                                  = 0x9c64000
brk(0x9c85000)                          = 0x9c85000
mmap2(NULL, 16384, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) =
0xb7f44000
capset(0x19980330, 0, {CAP_IPC_LOCK, CAP_IPC_LOCK, 0}) = 0
mlock(0xb7f44000, 16384)                = 0
capset(0x19980330, 0, {0, CAP_IPC_LOCK, 0}) = 0
open(&quot;/etc/vpnc/default.conf&quot;, O_RDONLY) = 3
fstat64(3, {st_mode=S_IFREG|0600, st_size=86, ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) =
0xb7f43000
read(3, &quot;IPSec gateway 131.246.118.240\nIP&quot;..., 4096) = 86
read(3, &quot;&quot;, 4096)                       = 0
close(3)                                = 0
munmap(0xb7f43000, 4096)                = 0
open(&quot;/etc/vpnc.conf&quot;, O_RDONLY)        = -1 ENOENT (No such file or directory)
open(&quot;/etc/vpnc.conf.conf&quot;, O_RDONLY)   = -1 ENOENT (No such file or directory)
uname({sys=&quot;Linux&quot;, node=&quot;ibmtest&quot;, ...}) = 0
fstat64(1, {st_mode=S_IFCHR|0600, st_rdev=makedev(136, 2), ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) =
0xb7f43000
write(1, &quot;Enter password for abcdef@131.24&quot;..., 43Enter password for
abcdef@131.246.118.240: ) = 43
open(&quot;/dev/tty&quot;, O_RDWR|O_CREAT|O_TRUNC, 0666) = 3
ioctl(3, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 opost isig icanon echo ...}) = 0
ioctl(3, SNDCTL_TMR_CONTINUE or TCSETSF, {B38400 opost -isig icanon -echo ...}) = 0
fstat64(3, {st_mode=S_IFCHR|0666, st_rdev=makedev(5, 0), ...}) = 0
ioctl(3, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 opost -isig icanon -echo ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) =
0xb7f42000
read(3, &quot;\n&quot;, 4096)                     = 1
write(3, &quot;\n&quot;, 1
)                       = 1
ioctl(3, SNDCTL_TMR_CONTINUE or TCSETSF, {B38400 opost isig icanon echo ...}) = 0
close(3)                                = 0
munmap(0xb7f42000, 4096)                = 0
socket(PF_INET, SOCK_DGRAM, IPPROTO_IP) = 3
bind(3, {sa_family=AF_INET, sin_port=htons(500), sin_addr=inet_addr(&quot;0.0.0.0&quot;)},
16) = -1 EACCES (Permission denied)
write(2, &quot;vpnc: &quot;, 6vpnc: )                   = 6
write(2, &quot;binding to 0.0.0.0:62465&quot;, 24binding to 0.0.0.0:62465) = 24
write(2, &quot;: Permission denied&quot;, 19: Permission denied)     = 19
write(2, &quot;\n&quot;, 1
)                       = 1
exit_group(1)                           = ?
Process 14452 detached

Steps to Reproduce:
1.vpnc
2.Enter
3.
Actual Results:  
[root@ibmtest ~]# vpnc
Enter password for abcdef@131.246.118.240:
vpnc: binding to 0.0.0.0:62465: Permission denied


Expected Results:  
Attempt to connect</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>59541</commentid>
    <comment_count>1</comment_count>
    <who name="Sergey V Turchin">zerg</who>
    <bug_when>2007-12-14 16:32:51 +0300</bug_when>
    <thetext>2 icesik
Возможно ли забиндиться до дропа?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>59543</commentid>
    <comment_count>2</comment_count>
    <who name="Sergey Vlasov">vsu</who>
    <bug_when>2007-12-14 16:54:17 +0300</bug_when>
    <thetext>Кстати, ещё в libgcrypt, собранной с libcap, не выполняется setuid(getuid()) при
инициализации, как это происходит при сборке без libcap.

Вообще в каких-то дистрибутивах libgcrypt собирают таким образом?  Создаётся
впечатление, что этот вариант никем не тестировался.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>59549</commentid>
    <comment_count>3</comment_count>
    <who name="Sergey V Turchin">zerg</who>
    <bug_when>2007-12-14 17:09:33 +0300</bug_when>
    <thetext>А какой libgcrypt вообще?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>59553</commentid>
    <comment_count>4</comment_count>
    <who name="Sergey V Turchin">zerg</who>
    <bug_when>2007-12-14 17:46:24 +0300</bug_when>
    <thetext>(In reply to comment #2)
&gt; Создаётся впечатление, что этот вариант никем не тестировался.
Да, в MDK и FC не собирают с libcap
Ок, соберу без libcap, но тогда disable_secmem = 1;
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>59554</commentid>
    <comment_count>5</comment_count>
    <who name="Sergey Vlasov">vsu</who>
    <bug_when>2007-12-14 17:57:22 +0300</bug_when>
    <thetext>Почему сразу disable? Уже довольно давно по умолчанию у обычных пользователей

max locked memory       (kbytes, -l) 32</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>59561</commentid>
    <comment_count>6</comment_count>
    <who name="Sergey V Turchin">zerg</who>
    <bug_when>2007-12-14 18:50:05 +0300</bug_when>
    <thetext>2 ldv
Как смортишь на перекладывание libgcrypt-1.4.0 ?
До этого в сизифе лежал 1.3 нестабильный, в бранче сейчас 1.2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>59570</commentid>
    <comment_count>7</comment_count>
    <who name="nbr">nbr</who>
    <bug_when>2007-12-14 20:48:46 +0300</bug_when>
    <thetext>(In reply to comment #6)
&gt; 2 ldv
&gt; Как смортишь на перекладывание libgcrypt-1.4.0 ?
&gt; До этого в сизифе лежал 1.3 нестабильный, в бранче сейчас 1.2

Этот баг как раз в libgcrypt-1.4.0 c libcap.
Вы его собираетесь закрывать?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>59620</commentid>
    <comment_count>8</comment_count>
    <who name="Igor Zubkov">icesik</who>
    <bug_when>2007-12-16 04:03:13 +0300</bug_when>
    <thetext>(In reply to comment #1)
&gt; 2 icesik
&gt; Возможно ли забиндиться до дропа?

Понятия не имею. И у меня сейчас нет доступа к cisco что бы тестировать. Хотя, я
попробую достать кошку на пару дней и попробовать потестировать.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>59647</commentid>
    <comment_count>9</comment_count>
    <who name="Sergey V Turchin">zerg</who>
    <bug_when>2007-12-17 14:17:34 +0300</bug_when>
    <thetext>(In reply to comment #7)
&gt; Этот баг как раз в libgcrypt-1.4.0 c libcap.
А чего молчали? Я ж спрашивал.

&gt; Вы его собираетесь закрывать?
Да, libgcrypt-1.4.0-alt2</thetext>
  </long_desc>
      
      

    </bug>

</bugzilla>