On Tue, 14 Mar 2006 21:31:15 -0300
Angel Claudio Alvarez <[EMAIL PROTECTED]> wrote:

> El mar, 14-03-2006 a las 20:49 -0300, Ricardo Marcelo Alvarez escribió:
> > On Tue, 14 Mar 2006 20:34:50 +0100
> > Rober Morales <[EMAIL PROTECTED]> wrote:
> > 
> > > El Martes, 14 de Marzo de 2006 20:24, Ricardo Marcelo Alvarez escribió:
> > > > > Si lo puedes leer tú problema posiblemente estará en el script. 
> > > > > Comprueba
> > > > > q las rutas sean absolutas y las variables q utilizas a ver si hay
> > > > > suerte.
> > > > >
> > > > > Saludos
> > > >
> > > > El script como root funciona bien, el problema es como usuario, incluso
> > > > saque el stdout y stderr hacia un archivo y es ahi donde me aparece que 
> > > > no
> > > > tiene permisos para leer ese archivo. En el log deja esto
> > > >
> > > > Error opening /var/log/apache2/transfer_pg.log: Permiso denegado at
> > > > /usr/local/gnupanel/mide-trafico-http.pl line 137
> > > 
> > > el archivo debe tener permisos de lectura para el usuario/grupo (esto 
> > > creo que 
> > > está)
> > > 
> > > Y
> > > 
> > > la ruta debe ser recorrible. Es decir, cada directorio debe tener 
> > > permisos de 
> > > apertura (x) para el usuario/grupo desde "/" o desde donde se ejecute el 
> > > script.
> > > 
> > > prueba con ello.
> > > 
> > 
> > Aca mando los permisos de toda la ruta de directorios
> > 
> > gnupanel:/# ls -l -d /var 
> > drwxr-xr-x  14 root root 4096 2006-02-20 20:03 /var
> > gnupanel:/# ls -l -d /var/log
> > drwxr-xr-x  13 root root 4096 2006-03-14 06:25 /var/log
> > gnupanel:/# ls -l -d /var/log/apache2 
> > drwxr-xr-x  2 root root 4096 2006-03-13 03:00 /var/log/apache2
> > gnupanel:/# ls -l -d /var/log/apache2/
> > access.log         error.log          error.log.1        transfer.log       
> > transfer.log.1     transfer_pg.log    transfer_pg.log.1  
> > gnupanel:/# ls -l -d /var/log/apache2/transfer_pg.log
> > -rw-r-----  1 root adm 1900 2006-03-14 20:38 
> > /var/log/apache2/transfer_pg.log
> > gnupanel:/# 
> > 
> > 
> > Saludos.
> > 
> El usuario que ejecuta el daemon esta en el grupo adm?
> Ejecutaste el script sin daemonizar??
> Podes postear el codigo??
> > 
Aca va el codigo, la parte donde el script cambia el usuario esta comentada
#############begin###################

#!/usr/bin/perl

use File::Tail;
use Pg;

    sub senal_de_fin
        {
            my $signal = shift;
            $SIG{$signal} = \&senal_de_fin;
            close MENSAGES;
            exit(0);
        }

    sub senal_de_kill
        {
            my $signal = shift;
            $SIG{$signal} = \&senal_de_kill;
            close MENSAGES;
            exit(0);
        }

sub analiza_http
    {
    my $renglon = $_[0];
    my $conexion = $_[1];
    my $logueo = $_[2];
    open(MENSHTTP,">> $logueo");
    @datos = NULL;
    @datos = split(' ',$renglon);
    $dominio = $datos[0];
    $transferencia = $datos[1];
    my $result = NULL;
    $result = $conexion->exec("BEGIN");
    $sql = "SELECT dominio FROM gnupanel_transferencias WHERE 
dominio='$dominio' ";
    $result = $conexion->exec($sql);
    $result = $conexion->getResult;
    
    if($result)
        {
        $sql = "UPDATE gnupanel_transferencias SET http = http + $transferencia 
WHERE dominio = '$dominio' ";
        $result = $conexion->exec($sql);
        $estado = $result->resultStatus;

        $sql = "UPDATE gnupanel_transferencias SET total = http + ftp + smtp + 
pop3 WHERE dominio = '$dominio' ";
        $result = $conexion->exec($sql);
        $estado = $estado && $result->resultStatus;

        if($estado == PGRES_COMMAND_OK)
            {
            $result = $conexion->exec("END");
            }
        else
            {
            $mensaje = $conexion->errorMessage;
            print MENSHTTP $mensaje;
            $result = $conexion->exec("ROLLBACK");
            }
        }
    else
        {
        $mensaje = "No se hace nada \n";
        print MENSHTTP $mensaje;
        $result = $conexion->exec("END");
        }
        
    close MENSHTTP;
    }
    

#######################################################################################################################
## Put ourselves in background if not in debug mode. 
require "/etc/gnupanel/gnupanel.conf.pl";

$nombre = $0;
$nombre = substr($nombre,rindex($nombre,"/")+1,length($nombre)-1);

$logueo = "/var/log/".$nombre.".log";
$pidfile = "/var/run/".$nombre.".pid";
$conexion = NULL;

open(STDERR, ">> $logueo");

$SIG{'TERM'} = \&senal_de_fin;
$SIG{'KILL'} = \&senal_de_kill;

    if (open(TTY, "/dev/tty"))
        {
            ioctl(TTY, $TIOCNOTTY, 0);
            close(TTY);
        }

    $definida = setpgrp(0, 0);

    $proceso = getppid;

    $child_pid = fork;

    if ( $child_pid != 0)
        {
            print "Inicializando el medidor de trafico de HTTP \n";
            exit(0);
        }
    else
        {

#Inicio del programa
            open(STDOUT, ">> $logueo");
            open(PIDO,"> $pidfile");
            print PIDO "$$ \n";
            close PIDO;

#           my ($login,$pass,$uid,$gid) = getpwnam($usuario);
#           $( = $gid;
#           $) = $gid;
#           $< = $uid;
#           $> = $uid;
#
#           if (  ((split(/ /,$)))[0] ne $gid) || ((split(/ /,$())[0] ne $gid)  
) 
#               {
#               open(MENSAGES,">> $logueo");
#               print MENSAGES "No se pudo cambiar el GID \n";
#               close MENSAGES;
#               }
#        
#           if (  ($> ne $uid) || ($< ne $uid)  )
#               {
#               open(MENSAGES,">> $logueo");
#               print MENSAGES "No se pudo cambiar el UID \n";
#               close MENSAGES;
#               }
#
#           undef($login);
#           undef($pass);
#           undef($uid);
#           undef($gid);

            $file = 
File::Tail->new(name=>$archivo_log_http,interval=>1,maxinterval=>1,adjustafter=>1);
            $conexion = NULL;
            $conexion = Pg::connectdb("dbname=$database host=localhost 
user=$userdb password=$pasaportedb");
            
            while(1)
                {
                $estado = $conexion->status;
                
                if($estado==PGRES_CONNECTION_OK)
                    {
                    while(defined($linea=$file->read))
                        {
                            chop($linea);
                            analiza_http($linea,$conexion,$logueo);
                        }
                    }
                else
                    {
                    $mensaje = $conexion->errorMessage;
                    open(MENSAGES,">> $logueo");
                    print MENSAGES $mensaje;
                    close MENSAGES;
                    $conexion->reset;
                    }
                }

#fin del programa
        }
    
$end = 0;


###############################################################################################################################################################
#############end#####################

En el archivo /etc/gnupanel/gnupanel.conf.pl

estan definidas las siguientes variables


#############begin###################

$database = "gnupanel";
$userdb = "gnupanel";
$pasaportedb = "XXXXXXXXXXX";

$archivo_log_mail = "/var/log/mail.log";
$archivo_log_ftp = "/var/log/proftpd/proftpd.log";
$archivo_log_http = "/var/log/apache2/transfer_pg.log";
$archivo_log_https = "/var/log/apache-ssl/transfer_pg.log";

$tiempo_dir = 900;
$directorio_raiz_sitios = "/var/www/sitios";
$directorio_raiz_correo = "/var/mail/correos";

$usuario = "gnupanelex";
$grupo = "gnupanelex";

#############end#####################

saludos.




> > 
> > > -- 
> > > "Como no sabían que era imposible, lo hicieron!"
> > > 
> > > Rober Morales Chaparro
> > > 
> > > 
> -- 
> Angel Claudio Alvarez
> Usuario Linux Registrado 143466
> GPG Public Key en http://pgp.mit.edu
> key fingerprint = 3AED D95B 7E2D E954 61C8  F505 1884 473C FC8C 8AC4
> 
> 

Attachment: pgpiEnxVaMcfP.pgp
Description: PGP signature

Responder a