Sistemas‎ > ‎Linux‎ > ‎Scripts Linux‎ > ‎Postfix / Qmail‎ > ‎

listaUltimoLoginMaillog.php

#!/usr/bin/php
<?php
# Objetivo: Obter a data do ultimo login de e-mail dos usuarios
# Autor: Silvio Garbes
# Data: 03/09/2015
# Atualizado em: 11/04/2016

function before($this, $inthat){
  return substr($inthat, 0, strpos($inthat, $this));
};
function after($this, $inthat){
  if (!is_bool(strpos($inthat, $this)))
    return substr($inthat, strpos($inthat,$this)+strlen($this));
};
function between($this, $that, $inthat){
  return before($that, after($this, $inthat));
};

// Obtem lista de todos os logs por data decrescente
exec("ls -trw1 /var/log/maillog*", $ls);
// Percorre toda a lista
foreach($ls as $arquivolog){
  $cat = NULL;
  if(strpos($arquivolog, ".gz")){
    echo $arquivolog."\n";
    exec("zcat ".$arquivolog." | grep \"LOGIN,\" ", $cat);
  }else{
    echo $arquivolog."\n";
    exec("cat ".$arquivolog." | grep \"LOGIN,\" ", $cat);
  }
 
  exec("date -r ".$arquivolog." +%Y", $ano);
  $ano = $ano[0];
  // Percorre todas as linhas
  foreach($cat as $linha){
    $arrayLinha = explode(" ", $linha);
    $mes = $arrayLinha[0];
    if($arrayLinha[1] == ''){
      $dia = $arrayLinha[2];
    }else{
      $dia = $arrayLinha[1];
    }
    $usuario = between('user=', ',', $linha);
    $data = date("Y-m-d", strtotime($dia." ".$mes." ".$ano));
    $ultimoLogin[$usuario]['data'] = $data;
    $aux = between(' ', ': LOGIN', $linha);
    $aux = explode(' ',$aux);
    $ultimoLogin[$usuario]['origem'] = $aux[count($aux)-1];
    //break;
  }
  //break;
}
ksort($ultimoLogin);

//print_r($ultimoLogin);
foreach($ultimoLogin as $usuario => $value){
  echo $usuario.",".$value['data'].",".$value['origem']."\n";
}

?>

Comments