Mar Jun 10, 2008 5:23 pm
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 3873
Ubicación: Valladolid, España
|
|
|
|
|
| Un bucle while mientras el usuario no indique que no quiere seguir metiendo más datos... |
|
|
|
Mie Jun 11, 2008 2:41 pm
|
 |
situ
Perlero Frecuente

|
Registrado: 09 Abr 2007
Mensajes: 132
|
|
|
|
|
Explorer,
Sé que me vas a odiar pero no sé en qué estoy fallando pero no logro el while :s |
|
Mie Jun 11, 2008 4:27 pm
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 3873
Ubicación: Valladolid, España
|
|
|
|
|
| Perl: | while ( 'el usuario no entre un FIN' ) {
print "Nombre del host (FIN para terminar):";
chomp(my $host = <> );
last if $host eq 'FIN';
# el resto de la entrada
# actualizar xml
}
# grabar xml
|
|
|

Mie Jun 11, 2008 6:31 pm
|
 |
situ
Perlero Frecuente

|
Registrado: 09 Abr 2007
Mensajes: 132
|
|
|
|
|
Gracias.
Ahora tengo otro problemita.
Al crear cada usuario también se crea el archivo con su password, pero al hacer lo siguiente:
| Cita: |
[~][situ]# ./kk.pl -name=marcos -usuario=root -descrypt
|
Me muestra el password del usuario "root" como yo le pedí pero como usuario "admin", en vez de admin :s
| Perl: |
#!/usr/bin/perl -s
#use strict;
#use warnings;
use POSIX qw(strftime );
my $hday= strftime ("%Y%m%d", localtime);
##Verificacion del modulo XML::Simple
BEGIN {
eval "use XML::Simple";
if ( $@ ) {
warn "Error al cargar el modulo: XML::Simple\n"
. "Instalar Modulo:\n"
. "\t\tcpan XML::Simple\n\n";
exit();
}
}
our $crear;
our $name;
our $notes;
our $ip;
our $url;
our $descrypt;
our $usuario;
## Ayuda del sistema
if ( ! $name and ! $notes and ! $ip and ! $url and ! $crear and ! $descrypt and ! $usuario) {
die "Uso: $0 [-name|-notes|-ip|-url|-crear|-descrypt]\n"
. "\t-name=pc Busqueda por nombre del host\n"
. "\t-notes=test Busqueda por nota\n"
. "\t-ip=1.1.1.1 Busqueda por direccion IP\n"
. "\t-url=https://10.0.0.1 Busqueda por url\n"
. "\t-crear Adjuntar nuevos contenidos\n"
. "\t-name=pc -usuario=admin -descrypt Desencriptar password\n"
;
}
my $info = XMLin ('kk.xml', KeyAttr => 1, ForceArray => [ 'user' ]);
if ( $name and $usuario and $descrypt ) {
print "- Ingresar password de la key gpg\n";
system("gpg --no-options $name.$usuario.pw.asc");
open my $FILE, '<', "$name.$usuario.pw" or die $!;
my @lines = < $FILE>;
for my $pc ( @ {$info-> {technology }{pc }} ) {
next if $name and $pc-> {name } !~ /^ $name$/ and $user-> {name } !~ /^ $usuario$/;
print "$pc->{name} => $pc->{url} ($pc->{ip})\n";
for my $user ( @ {$pc-> {user }} ) {
print "\t $user->{name} : @lines\n";
system("rm -f $name.$usuario.pw");
close $FILE;
exit ();
}
}
}
if ( ! $crear ) {
for my $pc ( @ {$info-> {technology }{pc }} ) {
next if $name and $pc-> {name } !~ /^ $name$/;
next if $notes and $pc-> {notes } !~ /^ $notes$/;
next if $ip and $pc-> {ip } !~ /^ $ip$/;
next if $url and $pc-> {url } !~ /^ $url$/;
print "$pc->{name} => $pc->{url} ($pc->{ip})\n";
for my $user ( @ {$pc-> {user }} ) {
print "\t $user->{name} : $user->{password}\n";
}
}
}
else {
print "- Ingresar nombre del Host: ";
my $hname= <STDIN>;
chop($hname);
print "- Ingresar url: ";
my $hurl= <STDIN>;
chop($hurl);
print "- Ingresar IP: ";
my $hip= <STDIN>;
chop($hip);
print "- Ingresar notas: ";
my $hnota= <STDIN>;
chop($hnota);
while ( 'el usuario no entre un FIN' ) {
print "- Nombre de usuario (FIN para terminar):";
chomp(my $huser = <> );
last if $huser eq 'FIN';
## Creacion del archivo del password y la encriptacion
open (my $NHOST , "> $hname.$huser.pw");
print "- Ingresar password (el password no aparece): ";
system "stty -echo";
my $hpass= <STDIN>;
chop($hpass);
print $NHOST "$hpass";
close ($NHOST);
system "stty echo";
print "\n- Ingresar password de la key gpg\n";
system("gpg -ac --no-options $hname.$huser.pw");
system("rm -f $hname.$huser.pw");
##Termina el archivo del password y la encriptacion
push @ {$info-> {technology }{pc }}, {
name => $hname,
url => $hurl,
ip => $hip,
user => [{
name => $huser,
password=> "$hname.$huser.pw.asc",
date => $hday,
}],
notes => $hnota,
};
}
#use Data::Dumper;
#print Dumper $info;
#Escribo sobre el archivo xml la salida
open my $SV, q{>:encoding (iso- 8859- 1)}, 'kk.xml';
print $SV XMLout ($info, RootName => 'owner', XMLDecl => 1, NoAttr => 1 );
close ($SV)
}
|
Gracias  |
|

Jue Jun 12, 2008 12:14 pm
|
 |
situ
Perlero Frecuente

|
Registrado: 09 Abr 2007
Mensajes: 132
|
|
|
|
|
¿Alguno se le ocurre como poder resolverlo ? |
|
Jue Jun 12, 2008 2:33 pm
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 3873
Ubicación: Valladolid, España
|
|
|
|
|
| Yo no entiendo la pregunta... |
|
Jue Jun 12, 2008 2:42 pm
|
 |
situ
Perlero Frecuente

|
Registrado: 09 Abr 2007
Mensajes: 132
|
|
|
|
|
Antes que nada gracias explorer por responder.
El problema es el siguiente:
Ahora para desencriptar el password, utilizo aparte del nombre del host el usuario, ya que ahora puedo agregar varios usuarios a la lista del HOST, con esto tengo:
./kk.pl -name=marcos -usuario=root -descrypt
Ahora esta operatoria anda pero el resultado que me da es:
marcos => http://hola.com (1.1.1.1)
admin : situ
El password es el correcto es el del usuario "root", pero me muestra como usuario "admin", ese es el "problema".
Gracias |
|
Jue Jun 12, 2008 3:30 pm
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 3873
Ubicación: Valladolid, España
|
|
|
|
|
| No es cosa del programa. Ese "admin" está dentro del XML. |
|
Jue Jun 12, 2008 4:50 pm
|
 |
situ
Perlero Frecuente

|
Registrado: 09 Abr 2007
Mensajes: 132
|
|
|
|
|
| Claro exacto, es el primero usuario que cargue para ese Host, pero no sé cómo hacer para que me muestre como usuario "root" ya que me da bien su password pero me dice "admin". |
|
Jue Jun 12, 2008 5:01 pm
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 3873
Ubicación: Valladolid, España
|
|
|
|
|
| Abre el fichero XML con un editor de textos y busca por la palabra "admin", y la cambias. |
|
Jue Jun 12, 2008 5:14 pm
|
 |
situ
Perlero Frecuente

|
Registrado: 09 Abr 2007
Mensajes: 132
|
|
|
|
|
Creo que no me expliqué bien.
Voy a ver si lo explico por pasos se entiende.
1. Creo un nuevo Host con datos.
| Código: |
host : marcos10
url: http://marcos10
ip: 1.1.1.1
nota: test
usuario: admin password: test
usuario: root password: situ |
Ahora al hacer esto tengo 2 usuarios asignados a ese Host, cuando quiero ver el password del usuario "root" hago el siguiente procedimiento.
2. ./kk.pl -name=marcos10 -usuario=root -descrypt
Ahora esta operatoria anda pero el resultado que me da es:
| Código: |
marcos10 => http://marcos10 (1.1.1.1)
admin : situ |
Digamos me da bien el password "situ" ya que corresponde al usuario root, pero me dice como usuario "admin" que no es correcto ya que sería "root". |
|

Jue Jun 12, 2008 5:58 pm
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 3873
Ubicación: Valladolid, España
|
|
|
|
|
Sí, ya veo el error. Está en el bucle de la condición donde buscas por nombre de host, de usuario y su contraseña. Debería ser así:
| Perl: | if ( $name and $usuario and $descrypt ) {
print "- Ingresar password de la key gpg\n";
system("gpg --no-options $name.$usuario.pw.asc");
open my $FILE, '<', "$name.$usuario.pw" or die $!;
my $lines = < $FILE>;
close $FILE;
for my $pc ( @ {$info-> {technology }{pc }} ) {
next if $pc-> {name } !~ /^ $name$/;
print "$pc->{name} => $pc->{url} ($pc->{ip})\n";
for my $user ( @ {$pc-> {user }} ) {
next if $user-> {name } !~ /^ $usuario$/;
print "\t $user->{name} : $lines\n";
system("rm -f $name.$usuario.pw");
exit ();
}
}
} | La condición de exclusión por nombre del $usuario estaba mal colocada. Debía ser colocada dentro del bucle que analiza los nombres de los usuarios. |
|

Jue Jun 12, 2008 6:11 pm
|
 |
situ
Perlero Frecuente

|
Registrado: 09 Abr 2007
Mensajes: 132
|
|
|
|
|
| Muchas Gracias |
|
Jue Jun 12, 2008 6:17 pm
|
 |
situ
Perlero Frecuente

|
Registrado: 09 Abr 2007
Mensajes: 132
|
|
|
|
|
Perdón que sea tan "rompe" pero la verdad que aprendo muchísimo del foro .
¿Hay forma de que no me aparezca 2 veces el host?
ya que el resultado ahora es:
| Código: |
marcos10 => http://marcos10 (1.1.1.1)
marcos10 => http://marcos10 (1.1.1.1)
root : garcia |
Gracias. |
|
Vie Jun 13, 2008 1:56 am
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 3873
Ubicación: Valladolid, España
|
|
|
|
|
Eso es algo más difícil.
Tendrías que hacer un cambio fundamental: el bucle interior de los usuarios consistiría en guardar en un array los usuarios encontrados que coincidiesen con el que buscamos. Luego, ver si ese array contiene algo, indicando que hemos encontrado al menos a un usuario. Si es así, pintamos la línea del host, la lista de usuarios a partir del array (solo el primero sería suficiente), y luego hacemos el system() y el exit(). |
|
Powered by phpBB © 2001, 2005 phpBB Group
|