• Publicidad

Fallo en función stat()

¿Ya sabes lo que es una referencia? Has progresado, el nível básico es cosa del pasado y ahora estás listo para el siguiente nivel.

Fallo en función stat()

Notapor thedj » 2009-05-07 14:40 @653

Muy buenas noches, estoy intentando comprobar si existe una shell en el sistema, y me ocurre un error que me ha dejado un poco tocado.

Código: Seleccionar todo
Unsuccesful stat on filename containing newline at ....


La línea de código del problema es la siguiente:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
$rev="\."."$lineasrev[6]";
if(!(-d $rev)){#Linea del error
$error2=1;
}
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


$rev contiene bien lo que quiero comprobar (que no sé si lo que pretendo está bien elaborado). Pero el error que me sale no lo comprendo :? No veo nada mal en mi comprobación.

Muchas gracias por adelantado. :)
thedj
Perlero nuevo
Perlero nuevo
 
Mensajes: 15
Registrado: 2009-05-03 17:15 @760

Publicidad

Notapor explorer » 2009-05-07 14:45 @656

Pues creo que dice que el nombre de fichero que le estás pasando a stat() contiene un carácter de nueva línea.

Tendrás que quitarlo con chomp().
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor thedj » 2009-05-07 14:55 @663

Estabas en lo cierto, muchas gracias, no me había dado cuenta que el último elemento del vector podía tener "\n", jejeje.

Pero creo que ese código no me hace el trabajo que necesito. ¿Como podría comprobar si existe una shell en el sistema?.
thedj
Perlero nuevo
Perlero nuevo
 
Mensajes: 15
Registrado: 2009-05-03 17:15 @760

Notapor explorer » 2009-05-07 15:54 @704

¿Y para qué necesitas una shell? ¿O el problema se reduce a saber si está o no está? ¿Qué tipo de shell (bash, csh, ksh, zoidberg, perlshell)?
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor thedj » 2009-05-07 16:07 @713

El problema se reduce, a que nos dice que comprobemos si existe el directorio de casa del usuario y la shell, y nos va a meter una serie de archivos /etc/passwd ficticios para que comprobemos si existen, y algunas no existirán:

Por ejemplo una línea que comprueba que no existe seria: /bin/false2

Con el directorio de casa del usuario lo he realizado y me sale perfecto con if(-d directorio) pero la shell no tengo ni idea de cómo saber si existe.

Un cordial saludo.
thedj
Perlero nuevo
Perlero nuevo
 
Mensajes: 15
Registrado: 2009-05-03 17:15 @760

Notapor explorer » 2009-05-07 16:29 @728

Pues si -d es para directorios, -f es para ficheros. O -e si existe... etc.

Más información
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor thedj » 2009-05-07 16:34 @732

Pero lo que tengo que comprobar ¿seria: ./bin/false2? y ¿seria un directorio?

Es que es tal como lo tengo puesto y no me reconoce ninguno (que se supone que están).

$lineasrev[6] contiene la shell de los usuarios(/bin/sh por ejemplo), y todos entran en el siguiente if:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
$rev="\."."$lineasrev[6]";
if(!(-d $rev)){
$error2=1;
}
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


(También he probado con -e)
Pienso que es más un problema de localización que de condición.

Un saludo.
thedj
Perlero nuevo
Perlero nuevo
 
Mensajes: 15
Registrado: 2009-05-03 17:15 @760

Notapor explorer » 2009-05-07 16:46 @740

Los shell de usuario, en /etc/passwd, son ficheros normales ejecutables.

Ojo, no es lo mismo ./bin/false2 que /bin/false2. Uno es relativo y el otro, absoluto. Si usas relativo, dependerá de donde estés ejecutando el programa.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor thedj » 2009-05-07 16:56 @747

Muchas gracias ya me funciona. Veo que quería yo complicarlo más de lo debido.

Un cordial saludo.
thedj
Perlero nuevo
Perlero nuevo
 
Mensajes: 15
Registrado: 2009-05-03 17:15 @760


Volver a Intermedio

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 26 invitados