#!/bin/perl ############################################################################# # # # Justino Martinez 1998 (justino@jet.es) # # # # LsRemoto.cgi V1.0 # ############################################################################# # Este script puede copiarse y modificarse siempre y cuando # # no se borre ni modifique la cabecera ni este texto y se # # deje constancia clara del nombre y direccion de la persona# # que ha hecho las modificaciones y en que consisten estas. # # No obstante el autor no se hace responsable de usos # # malintencionados debido a modificaciones realizadas por # # otras personas. # ############################################################################# # # # Funcion # # # # Permite navegar por los subdirectorios y ver su contenido. Da el espacio # # de disco ocupado por cada archivo y sus privilegios. Permite descargar los# # archivos en el disco local mediante el script Download.cgi # # # # Funciona en combinacion con Tree.cgi y download.cgi, los cuales deben # # hallarse en el mismo subdirectorio que este script # # # # OJO! Es peligroso que lo tengais a la vista si no quereis que nadie acceda# # a esa informacion # ############################################################################# # # # Instalacion # # # # 1.- Copiar este archivo en en el disco del servidor # # # # 2.- Cambiar la variable $root que debe contener el path completo hasta # # vuestro espacio de disco. Si vuestro servidor es Jet Internet # # entonces la variable $root debe ser $root="/home/./usuario"; # # donde usuario es vuestro nombre de usuario # # # # 3.- Cambiar la variable $serv que contiene la URL de vuestra pagina # # # # 4.- Dar el nombre de la imagen necesaria para realizar el grafico. # # La variable que contienen ese nombre es $img_cuadro # # # # 5.- La variable $quien_soy debe contener el nombre de este script # # # # 6.- Dar permisos 755 a este archivo # # # # 7.- Copiar el Perl download.cgi en el mismo subdirectorio que este Perl y# # darle permisos 755. Si cambiais el nombre del archivo download.cgi # # debeis ponerlo en la variable $descarga # # # # 8.- Si quiereis poder hacer chequeos desde el directorio raiz debeis dar # # a vuestro subdirectorio raiz permisos de al menos 715. Para hacerlo # # debeis hacer un ftp a vuestra cuenta y listar el directorio raiz, # # despues ejecutais chmod 755 . (con el punto) # # # ############################################################################# # # # Ejemplo de llamada # # # # Desde vuestro navegador escribis la URL correspondiente a este archivo # # junto con ?path donde path es el directorio que quereis chequear. # # # # Por ejemplo si sois el usuario pepe y quereis chequear el subdirectorio # # /pepe/gifs/animales entonces debeis llamar al cgi usando # # http://web.jet.es/pepe/cgi-bin/lsremoto.cgi?/gifs/animales # # # ############################################################################# # # Variables que debeis cambiar ########################################################## # # Directorio raiz # $root = "/home/www/TR/cjav.org/ricosogorb/raiz"; # localizacion del servidor # $serv = "http://www.ricosogorb.cjav.org"; #---------- Estas variables solo hay que cambiarlas si #---------- habeis renombrado los archivos correspondientes # nombre de este script # $quien_soy = "lsremoto.cgi"; # nombre de la imagen que contiene el cuadro # $img_cuadro = "/home/www/TR/cjav.org/ricosogorb/raiz/cgi2/cuadro.gif"; # nombre del script que realiza la descarga desde # el servidor hasta el cliente # $descarga = "/home/www/TR/cjav.org/ricosogorb/raiz/cgi2/download.cgi"; ############################################################## ###### A partir de aqui no hay que cambiar nada ############## ############################################################## # Separador UNIX $separador ="/"; # Separador DOS $separador ="\\"; # Tomamos el argumento de la llamada (lo que va detras de ?) # y generamos el path completo # $muestro=$ARGV[0]; # si no empieza por / se lo pongo # if ($muestro !~ /^\//) { $muestro = "/".$muestro; } # si acaba en / se lo quito # if ($muestro =~ /\/$/) { chop($muestro); } # si contiene /. lo quito # $muestro =~ s/\/\.//g; # si no hay nada pongo / # if ($muestro eq "") {$muestro = "/";} if ($ARGV[0] eq ""){ $path = $root; } else { $path = $root.$separador.$ARGV[0]; } # Si ese path no existe o contiene cadenas del estilo .. --> Error y salimos # Lo de evitar el .. es por razones de seguridad del servidor # if ((!-e $path)|($path=~ /\.\./)){ # print "Window-target: escondida\n"; print "Content-type:text/html \n\n"; print ""; exit; } # $total = Total en bytes de todos los ficheros y directorios # $subtotal = Total en bytes de lo que contiene cada subdirectorio # $factor = factor para pasar a Kbytes # $total=0; $subtotal=0; $factor = 1024; # La matriz @dire contendra los nombres de los subdirectorios # #@dire=($path); # Empieza la pagina # print "Content-type:text/html \n\n"; print ""; print "\n"; print "Contenido de $muestro"; print "\n"; print "
"; print ""; print "
"; print ""; print "

Path: $muestro

"; print "
"; print "\n"; print ""; print ""; print ""; print ""; # # leemos el subdirectorio # &leedir($path); print "
NombrePrivilegiosTamañoAcciónÚltima modificaciónÚltima consulta
\n"; # Empezamos el grafico # print "
\n"; print "\n"; $todos = @contenido; if ($todos > 0) { print "

Gráfico comparativo


\n"; print "
\n"; print "
\n"; print ""; # Anchura maxima en pixels=400 # Escalamos los demas en funcion de su tamanyo respecto # al directorio mas grande # $max = 0; foreach $tamano (@contenido){ if ($tamano > $max) { $max = $tamano; } } $num_file = 0; $alto = 15; foreach $tamano (@contenido){ $ancho=int(400*$tamano/$max); $x=$ordenados[$num_file]; print ""; print "\n"; $num_file ++; } print "
"; print "$x $tamano"; print "
"; print "


"; print ""; print "Se han hallado $num_file ficheros y subdirectorios "; print "ocupando un total de $total bytes "; print "(aproximadamente $kas Kbytes)"; print "
"; } else { print "No se muestra el gráfico comparativo "; print "ya que sólo "; print "se ha listado un subdirectorio "; } print ""; exit; # Se acabo # ####################################3 # # Rutina que lee los directorios # sub leedir { # Pasamos al directorio actual y lo abrimos # $actual = @_[0]; chdir($actual); opendir(CURDIR, ".") || die("No puedo abrir el subdirectorio"); # lo leemos # @ficheros = readdir(CURDIR); # lo ordenamos por orden alfabetico # @ordenados = sort(@ficheros); $subtotal=0; foreach $file (@ordenados){ # tomamos el tamanyo del fichero # $tama= -s $file; push(@contenido,$tama); # Vemos las atributos para world # if (-r $file) { $read="r"; } else { $read="-"; } if (-w $file) { $write="w"; } else { $write="-"; } if (-x $file) { $ex="x"; } else { $ex="-"; } # Numero de dias de antiguedad # Comprobamos si es un directorio # $total = $total + $tama; $dias_mod = &tiempo(-M $file); $dias_con = &tiempo(-A $file); if (-d $file){ # Sumamos su tamanyo # al total y al subtotal. Lo presentamos en # pantalla # if (($muestro ne "/")|($file ne "..")){ if ($file eq ".") { $cadena="Directorio actual"; $cad2 = "Refrescar"; } else { $cadena="Subdirectorio"; $cad2 = "Consultar"; } if ($file eq "..") { $cadena = "Subir un nivel";} $darlista = $quien_soy . "?". $muestro . $separador . $file; $darlista =~ s/\/\//\//g; print "$file ($cadena)"; print "$read$write$ex"; print "$tama"; if (-r $file){ print "
$cad2"; } else { print "-----";} print ""; print "$dias_mod$dias_con\n"; } } else { # Si no es un subdirectorio hacemos lo mismo (mas o menos) # $noleer = "0"; if (-r $file) {$noleer="1";} if ($muestro eq "/"){ $donde_esta = $serv. $separador . $file; } else { $donde_esta = $serv. $muestro . $separador . $file; } $que = $descarga."?".$root.$muestro.$separador.$file; $que =~ s/\/\//\//g; print ""; if ($noleer eq "0"){ print "$file"; } else { print "$file"; } print ""; print "$read$write$ex$tama"; print ""; if ($noleer eq "0"){ print "-----"; } else { print "Descargar"; } print ""; print "$dias_mod$dias_con\n"; } } # Pasamos a Kbytes el subtotal y lo escribimos # $kas = ($total-($total % $factor))/$factor; print "Total"; print " $total bytes "; print "(aproximadamanete $kas Kbytes)"; close(CURDIR); } ########################################## # Pasa el tiempo a dias, horas y minutos # sub tiempo { local ($tmp,$dias,$horas,$minutos,$rdias,$rhoras,$rminutos,$final); $tmp = @_[0]; $dias= int($tmp); $rdias = $tmp-$dias; $rhoras= 24*$rdias; $horas = int($rhoras); $rminutos = 60*($rhoras-$horas); $minutos = int($rminutos); if ($minutos < 10) { $minutos = "0".$minutos;} $final = $minutos . "m"; if ($horas !=0) { if ($horas < 10) { $horas = "0".$horas;} $final = $horas . "h:" . $final; if ($dias !=0) {$final= $dias . "d:" . $final;} } else { if ($dias != 0){ $final = $dias . "d:00h" . $final; } } return $final; }