Wanted: System call fuer chattr(1)
Moin Ich suche gerade einen system call in C fuer chattr (attribute fuer files im ext2 aendern). Was mich irgendwie wundert ist folgendes: root@joker:/tmp/test# touch foo root@joker:/tmp/test# strace -o set chattr +i foo root@joker:/tmp/test# strace -o unset chattr -i foo root@joker:/tmp/test# diff -u set unset --- set Sat Jul 22 19:25:39 2000 +++ unset Sat Jul 22 19:25:48 2000 @@ -1,4 +1,4 @@ -execve("/usr/bin/chattr", ["chattr", "+i", "foo"], [/* 20 vars */]) = 0 +execve("/usr/bin/chattr", ["chattr", "-i", "foo"], [/* 20 vars */]) = 0 brk(0) = 0x804a748 open("/etc/ld.so.preload", O_RDONLY) = 4 fstat(4, {st_mode=S_IFREG|0644, st_size=20, ...}) = 0 @@ -55,7 +55,7 @@ close(4) = 0 munmap(0x12a000, 27736) = 0 personality(PER_LINUX) = 0 -getpid() = 551 +getpid() = 553 lstat("foo", {st_mode=S_IFREG|0644, st_size=0, ...}) = 0 open("foo", O_RDONLY|O_NONBLOCK) = 4 ioctl(4, EXT2_IOC_GETFLAGS, 0xbffffb08) = 0 Der strace zeigt, dass die aktionen genau gleich waren, mit ausnahme des execve() calls und von getpid(). Wie also wird da etwas veraendert? root@joker:/tmp/test# grep ioctl set unset set:ioctl(4, EXT2_IOC_GETFLAGS, 0xbffffb08) = 0 set:ioctl(4, EXT2_IOC_SETFLAGS, 0xbffffb08) = 0 unset:ioctl(4, EXT2_IOC_GETFLAGS, 0xbffffb08) = 0 unset:ioctl(4, EXT2_IOC_SETFLAGS, 0xbffffb08) = 0 Ich hab so im gefuehl, mit diesen io control calls hat es was zu tun, aber die beiden sind genau gleich, und da wird dennoch was veraendert. Das ist mir irgendwie unklar... Ich werde jetzt gleich den source von lsattr/chattr mal naeher unter die lupe nehmen. MfG/Regards, Alexander -- Alexander Reelsen http://joker.rhwd.de ref@linux.com GnuPG: pub 1024D/F0D7313C sub 2048g/6AA2EDDB ar@rhwd.net 7D44 F4E3 1993 FDDF 552E 7C88 EE9C CBD1 F0D7 313C Securing Debian: http://joker.rhwd.de/doc/Securing-Debian-HOWTO - Hinweise zur Benutzung dieser (und anderer Mailing-Listen) bitte beachten: --> http://lug-owl.de/mailinglist_hints.html <--
Teilnehmer (1)
-
Alexander Reelsen