Página 1 de 1

Permisos de un fichero

NotaPublicado: 2007-05-06 13:29 @604
por pepinho
Buenas :
Mi pregunta es la siguiente. En un fichero txt tengo guardado cuentas y logins de diferentes usuarios. Lo que tengo que hacer es conectarme al servidor a través de una cuenta y de un login pero solo si el fichero tiene los permiso -r--------, es decir, solo puede leerlo el dueño del fichero. ¿Cómo puedo saber esto a través de Perl?
Gracias
Saludo

NotaPublicado: 2007-05-06 13:51 @619
por explorer
Con la función stat() se puede obtener quién es el dueño de un determinado fichero. Pero con los test -X se puede saber los permisos del fichero en relación al usuario que ejecuta el programa.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
    stat($filename);
    print "Readable\n" if -r _;
    print "Writable\n" if -w _;
    print "Executable\n" if -x _;
    print "Setuid\n" if -u _;
    print "Setgid\n" if -g _;
    print "Sticky\n" if -k _;
    print "Text\n" if -T _;
    print "Binary\n" if -B _;
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

Re:

NotaPublicado: 2012-11-28 23:43 @029
por noitora-5
¿Qué pasa si quiero saber si el archivo tiene permisos 777(-rwxrwxrwx), 766 (-rwxrw-rw-), 666(-rw-rw-rw-)?
¿Puedo usar, por ejemplo para los permisos 777, algo como "if -rwxrwxrwx"?
¿Y para guardar el dueño del archivo, me sirve la forma: $dueñoArchivo = stat($filename)?

Muchas Gracias...

Re: Re:

NotaPublicado: 2012-11-29 06:45 @323
por explorer
Bienvenido a los foros de Perl en Español, noitora-5.

noitora-5 escribiste:¿Qué pasa si quiero saber si el archivo tiene permisos 777(-rwxrwxrwx), 766 (-rwxrw-rw-), 666(-rw-rw-rw-)?
La función stat() devuelve una lista de 13 valores, de los cuales el que te interesa es el tercero, que guarda el valor -en decimal- de los permisos del archivo indicado. A ese valor le debes aplicar una máscara para quedarte con el rango de bits que quieres comprobar, y luego hacer la comparación. Ejemplo:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
$permisos = (stat "archivo")[2] & 0777;    # Tercer elemento de stat(), ANDeado con el valor octal '777'
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Y ahora ya puedes hacer la comparación:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. if ($permisos == 0777) {
  2.     print "Ejecutable para todo el mundo\n";
  3. }
  4. elsif ($permisos == 0666) {
  5.     print "Permisos de escritura para todo el mundo\n";
  6. }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Lo tienes más detallado en este hilo.

Más información en tu propio ordenador en perldoc perlfunc, y en la Web (traducido). Busca por 'stat'. O usa perldoc -f stat

noitora-5 escribiste:¿Y para guardar el dueño del archivo, me sirve la forma: $dueñoArchivo = stat($filename)?
No, lo que devuelve stat() es una lista de 13 valores, de los cuales el quinto es el uid del usuario. El uid es el número de usuario dentro del sistema. Si quieres saber el nombre del usuario a partir del uid, deberás usar la función getpwuid():
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
$nombre = getpwuid($iud);
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Más información en perldoc -f getpwuid