Newsgroup: it.comp.os.linux.development
Titolo: controllare gli attributi dei files


I'm not prejudiced, I hate everyone equally.

flag che permettesse di controllare l'attributo +i (immutabile) del file ...
vedi come funziona lsattr.
-- 
"L'Italia è un interessante esempio di avanguardia teatrale" (Gore Vidal)
Per rispondermi, ricordati di togliere il 
nome del poeta e il trattino.

 vedi come funziona lsattr.
ho gia' dato un'occhiata a lsattr, ma piu' di un
#!/bin/bash
.....
lsattr /etc/passwd | grep i
if [ $? -eq 0 ]; then
	echo "Attributi OK"
else
	chattr +i /etc/passwd
fi
........
se pero' il nome del  file contiene una 'i', lo script non funziona piu'
... non c'e' un metodo migliore ???
ciao ... grazie per la risposta


 ... non c'e' un metodo migliore ???
[root@kiev ghigo]# lsattr /etc/passwd
---i---------- /etc/passwd
[root@kiev ghigo]# lsattr /etc/passwd | cut -d ' ' -f 1
---i----------
[root@kiev ghigo]# lsattr /etc/passwd | awk '{ print $1 }'
---i----------
Per cui io farei
if lsattr /etc/passwd | cut -d ' ' -f 1 | grep -vq i ; then
                chattr +i
fi

 fi
giusto !! semplice e efficace ;-))
grazie mille ... ciao 


giusto !! semplice e efficace ;-))
Io comunque intendevo (visto che siamo in un ng di sviluppo) che dovevi
vedere con strace come funzionava lsattr e quindi scoprire la magica
syscall da usare (che credo sia ioctl() con opportuni numeretti) :)


 file ...
 
http://people.redhat.com/johnsonm/lad/src/checkflags.c.html

 syscall da usare (che credo sia ioctl() con opportuni numeretti) :)
aha .... mi sembrava un po' da icoli come risposta ;-))) grazie mille ....
adesso ci provo ....
ciao ...


About Re: controllare gli attributi dei files
Antonio barbone wrote:
come faccio a controllare il flag ??? dall'output di strace su due
files, uno senza +i impostato l'altro con +i impostato, non riesco a
riscontrare nessuna differenza ...
senza +i
open("Stat.c", O_RDONLY|O_NONBLOCK|0x8000) = 3
ioctl(3, EXT2_IOC_GETFLAGS, 0xbffff8a8) = 0
close(3)                                = 0
fstat64(0x1, 0xbffff71c)                = 0
old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS,
-1, 0) =
0x40017000
ioctl(1, TCGETS, {B38400 opost isig icanon echo ...}) = 0
write(1, "------------- Stat.c\n", 21)  = 21
munmap(0x40017000, 4096)                = 0
_exit(0)                                = ?
con +i
open("/etc/passwd", O_RDONLY|O_NONBLOCK|0x8000) = 3
ioctl(3, EXT2_IOC_GETFLAGS, 0xbffff8a8) = 0
close(3)                                = 0
fstat64(0x1, 0xbffff71c)                = 0
old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS,
-1, 0) =
0x40017000
ioctl(1, TCGETS, {B38400 opost isig icanon echo ...}) = 0
write(1, "---i--------- /etc/passwd\n", 26) = 26
munmap(0x40017000, 4096)                = 0
_exit(0)                                = ?
ciao .....


 riscontrare nessuna differenza ...
Ciò non mi meraviglia. Il terzo argomento di quelle chiamate a ioctl è
l'indirizzo di un int. I flag vengono scritti lì, ma strace() non ti
mostra il valore.
L'altro ieri ho indicato una pagina con un esempio di codice. Forse il mio
messaggio ti è sfuggito. Ripeto:
 
http://people.redhat.com/johnsonm/lad/src/checkflags.c.html
Max

 Max
ciao ....


ioctl(3, EXT2_IOC_GETFLAGS, 0xbffff8a8) = 0
Ideona: esegui TU la chiamata in tuo programma e cerchi di capire come
cambia il valore restituito in funzione della presenza del bit
i. Magari per non andare a tentativi, cerchi di capire dove sia definito
EXT2_IOC_GETFLAGS, lì vicino è possibile che siano definiti anche i
valori restituiti.


 valori restituiti.
gia' trovato ;-)))
root@barbone:~# cat /usr/include/linux/ext2_fs.h | grep EXT2_IMMUTABLE_FL
#define EXT2_IMMUTABLE_FL               0x00000010 /* Immutable file */
ciao e grazie .....
