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

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

    <bug>
          <bug_id>12519</bug_id>
          
          <creation_ts>2007-08-09 16:48:12 +0400</creation_ts>
          <short_desc>под unionfs не работает passwd</short_desc>
          <delta_ts>2008-07-11 15:52:30 +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>kernel-image-std-smp</component>
          <version>unstable</version>
          <rep_platform>all</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Anton Farygin">rider</reporter>
          <assigned_to name="Sergey Vlasov">vsu</assigned_to>
          <cc>silicium</cc>
    
    <cc>stanv</cc>
          
          <qa_contact>qa-sisyphus</qa_contact>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>53883</commentid>
    <comment_count>0</comment_count>
    <who name="Anton Farygin">rider</who>
    <bug_when>2007-08-09 16:48:12 +0400</bug_when>
    <thetext>passwd, запущенный на livecd не отрабатывает.

/mnt/root//etc /etc unionfs
rw,dirs=/mnt/root/etc=rw:/etc=ro,debug=4294967295,delete=whiteout 0 0


Вот кусок strace:
stat64(&quot;/etc/tcb/altlinux&quot;, {st_mode=S_IFDIR|0710, st_size=80, ...}) = 0
getgroups32(262144, [0, 1, 2, 3, 4, 6, 10, 19]) = 8
setgroups32(0, [])                      = 0
setfsgid32(26)                          = 26
setfsgid32(26)                          = 26
setfsuid32(500)                         = 0
setfsuid32(500)                         = 500
open(&quot;/etc/tcb/altlinux/shadow.lock&quot;,
O_WRONLY|O_CREAT|O_NOCTTY|O_NONBLOCK|O_NOFOLLOW, 0600) = 3
fcntl64(3, F_GETFD)                     = 0
fcntl64(3, F_SETFD, FD_CLOEXEC)         = 0
rt_sigaction(SIGALRM, {0xb7d078f0, ~[RTMIN RT_1], 0}, {SIG_DFL}, 8) = 0
rt_sigprocmask(SIG_UNBLOCK, [ALRM], [], 8) = 0
setitimer(ITIMER_REAL, {it_interval={1, 0}, it_value={1, 0}}, NULL) = 0
fcntl64(3, F_SETLKW, {type=F_WRLCK, whence=SEEK_SET, start=0, len=0}) = 0
setitimer(ITIMER_REAL, {it_interval={0, 0}, it_value={0, 0}}, NULL) = 0
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
rt_sigaction(SIGALRM, {SIG_DFL}, NULL, 8) = 0
time(NULL)                              = 1186649173
open(&quot;/etc/tcb/altlinux/shadow.tmp&quot;, O_WRONLY|O_CREAT|O_TRUNC, 0400) = 4
fcntl64(4, F_GETFL)                     = 0x1 (flags O_WRONLY)
fstat64(4, {st_mode=S_IFREG|0400, st_size=0, ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) =
0xb7ef6000
_llseek(4, 0, [0], SEEK_CUR)            = 0
open(&quot;/etc/tcb/altlinux/shadow&quot;, O_RDONLY) = 5
fstat64(5, {st_mode=S_IFREG|0640, st_size=22, ...}) = 0
stat64(&quot;/etc/tcb/altlinux/shadow&quot;, {st_mode=S_IFREG|0640, st_size=22, ...}) = 0
chmod(&quot;/etc/tcb/altlinux/shadow.tmp&quot;, 0400) = 0
chown32(&quot;/etc/tcb/altlinux/shadow.tmp&quot;, 500, 27) = -1 EPERM (Operation not
permitted)
time(NULL)                              = 1186649173</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>54338</commentid>
    <comment_count>1</comment_count>
    <who name="Andriy Stepanov (stanv)">stanv</who>
    <bug_when>2007-08-21 10:23:14 +0400</bug_when>
    <thetext>Эксперемент на LiveCD:

[root@localhost] # chmod 2710 /etc/tcb/altlinux
католог /etc/tcb/altlinux получает законные права drwx--s---

владелецом каталога /etc/tcb/altlinux является: user (uid) auth (gid)

[user@localhost] $ touch /etc/tcb/altlinux/test_file

[root@localhost] # ls -l /etc/tcb/altlinux/test_file
-rw-r--r-- 1 user user 0 Aug 21 06:49 test_file 
вместо:
-rw-r--r-- 1 user auth 0 Aug 21 06:49 test_file

т.е. unionfs не отрабатывает флаг SGID для каталога.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>54339</commentid>
    <comment_count>2</comment_count>
      <attachid>2158</attachid>
    <who name="Andriy Stepanov (stanv)">stanv</who>
    <bug_when>2007-08-21 10:24:43 +0400</bug_when>
    <thetext>Created attachment 2158
можно попробовать приложить этот патч</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>54407</commentid>
    <comment_count>3</comment_count>
    <who name="Andriy Stepanov (stanv)">stanv</who>
    <bug_when>2007-08-23 09:25:44 +0400</bug_when>
    <thetext>Вот что ответили по поводу моего патча, разработчики unionfs:

1. --------------------------------------------------------------------------

On Tue, Aug 21, 2007 at 10:11:51AM +0400, Andrew Stepanov wrote:
&gt; &gt; Hello.
&gt; &gt;
&gt; &gt; I have LiveCD.
&gt; &gt;
&gt; &gt; Mount options are like this:
&gt; &gt;
&gt; &gt; /mnt/root//etc /etc unionfs
&gt; &gt; rw,dirs=/mnt/root/etc=rw:/etc=ro,debug=4294967295,delete=whiteout 0 0

Which version of unionfs is this? It looks old. Unionfs 2.x doesn&apos;t support
the debug/delete mount options - no need for them really.

&gt; &gt; CD-ROM contain /etc/tcb/user directory with &apos;drwx--x---&apos; rights
&gt; &gt;
&gt; &gt; [root@localhost~] # chmod 2710 /etc/tcb/user directory now with 
&gt; &gt; &apos;drwx--s---&apos; rights
&gt; &gt;
&gt; &gt; /etc/tcb/user is owned by &apos;user&apos; (uid) and &apos;auth&apos; (gid)
&gt; &gt;
&gt; &gt; [user@localhost~] $ touch /etc/tcb/user/test_file
&gt; &gt; [user@localhost~] $ ls -l /etc/tcb/user/test_file
&gt; &gt; -rw-r--r-- 1 user user 0 Aug 21 06:49 test_file
&gt; &gt; Instead of:
&gt; &gt; -rw-r--r-- 1 user auth 0 Aug 21 06:49 test_file

Good catch.

&gt; &gt; Please, see attached patch. Does it solve this problem ?
&gt; &gt;
&gt; &gt; Thanks.

&gt; &gt; diff -ruN linux-2.6.18/fs/unionfs/inode.c
linux-2.6.18-modified/fs/unionfs/inode.c
&gt; &gt; --- linux-2.6.18/fs/unionfs/inode.c	2007-08-20 16:23:45 +0400
&gt; &gt; +++ linux-2.6.18-modified/fs/unionfs/inode.c	2007-08-20 16:20:44 +0400
&gt; &gt; @@ -85,7 +85,12 @@
&gt; &gt;  
&gt; &gt;  		newattrs.ia_mode = mode &amp; ~current-&gt;fs-&gt;umask;
&gt; &gt;  		newattrs.ia_uid = current-&gt;fsuid;
&gt; &gt; -		newattrs.ia_gid = current-&gt;fsgid;
&gt; &gt; +		else if (parent-&gt;i_mode &amp; S_ISGID) {

I&apos;m a little bit confused about the above &apos;else&apos; keyword (could be that
you&apos;re looking at 1.x code which is different quite a bit), but otherwise I
think idea is sane.

Josef &apos;Jeff&apos; Sipek.

&gt; &gt; +			newattrs.i_gid = parent-&gt;i_gid;
&gt; &gt; +			if (S_ISDIR(mode))
&gt; &gt; +				mode |= S_ISGID;
&gt; &gt; +		} else
&gt; &gt; +			newattrs.ia_gid = current-&gt;fsgid;
&gt; &gt;  
&gt; &gt;  		if (wh_dentry-&gt;d_inode-&gt;i_size != 0) {
&gt; &gt;  			newattrs.ia_valid |= ATTR_SIZE;


2. --------------------------------------------------------------------------

Andrew, I&apos;ve verified that the SGID bug doesn&apos;t exist in Unionfs-2.1.  As
Jeff hinted, you&apos;re probably using Unionfs 1.x, right?  If so, we strongly
recommend you upgrade to 2.1 -- this and many bugs are fixed.

Erez.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>73923</commentid>
    <comment_count>4</comment_count>
    <who name="Michail Yakushin">silicium</who>
    <bug_when>2008-07-11 13:01:57 +0400</bug_when>
    <thetext>Проблема актуальна?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>73964</commentid>
    <comment_count>5</comment_count>
    <who name="Anton Farygin">rider</who>
    <bug_when>2008-07-11 15:52:30 +0400</bug_when>
    <thetext>Надо проверять на LiveCD. 
</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>2158</attachid>
            <date>2007-08-21 10:24:43 +0400</date>
            <delta_ts>2007-08-21 10:24:43 +0400</delta_ts>
            <desc>можно попробовать приложить этот патч</desc>
            <filename>alt_unionfs_sgid.patch</filename>
            <type>text/plain</type>
            <size>610</size>
            <attacher name="Andriy Stepanov (stanv)">stanv</attacher>
            
              <data encoding="base64">ZGlmZiAtcnVOIGxpbnV4LTIuNi4xOC9mcy91bmlvbmZzL2lub2RlLmMgbGludXgtMi42LjE4LW1v
ZGlmaWVkL2ZzL3VuaW9uZnMvaW5vZGUuYwotLS0gbGludXgtMi42LjE4L2ZzL3VuaW9uZnMvaW5v
ZGUuYwkyMDA3LTA4LTIwIDE2OjIzOjQ1ICswNDAwCisrKyBsaW51eC0yLjYuMTgtbW9kaWZpZWQv
ZnMvdW5pb25mcy9pbm9kZS5jCTIwMDctMDgtMjAgMTY6MjA6NDQgKzA0MDAKQEAgLTg1LDcgKzg1
LDEyIEBACiAKIAkJbmV3YXR0cnMuaWFfbW9kZSA9IG1vZGUgJiB+Y3VycmVudC0+ZnMtPnVtYXNr
OwogCQluZXdhdHRycy5pYV91aWQgPSBjdXJyZW50LT5mc3VpZDsKLQkJbmV3YXR0cnMuaWFfZ2lk
ID0gY3VycmVudC0+ZnNnaWQ7CisJCWVsc2UgaWYgKHBhcmVudC0+aV9tb2RlICYgU19JU0dJRCkg
eworCQkJbmV3YXR0cnMuaV9naWQgPSBwYXJlbnQtPmlfZ2lkOworCQkJaWYgKFNfSVNESVIobW9k
ZSkpCisJCQkJbW9kZSB8PSBTX0lTR0lEOworCQl9IGVsc2UKKwkJCW5ld2F0dHJzLmlhX2dpZCA9
IGN1cnJlbnQtPmZzZ2lkOwogCiAJCWlmICh3aF9kZW50cnktPmRfaW5vZGUtPmlfc2l6ZSAhPSAw
KSB7CiAJCQluZXdhdHRycy5pYV92YWxpZCB8PSBBVFRSX1NJWkU7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>