Hi,
Wednesday, October 15, 2003, 2:25:13 PM, you wrote:
TR> wtmp is a binary file and the format can vary between old and new versions of
TR> linux. You will need to have a look at struct utmp in, for example,
/usr/include/bits/utmp.h
TR> This location can vary from system to system as well.
TR> NOTE do not meddle with the wtmp file by opening it in anything other than
TR> readonly mode as all kinds of nasty things can happen if that file gets
TR> corrupted.
TR> --
TR> regards,
TR> Tom
This may help if you are on a newish Linux:
<?php
//use for debug
function hexDumpChar($str,$len){
//echo 'Len '.strlen($str);
$strlen = strlen($str);
for($z=0;$z < $strlen;$z+=$len){
$left = $strlen - $z;
$jlen = ($left > $len)? $len:$left;
for($j=$z;$j<$z+$jlen;$j++){
printf(" %02x",ord($str[$j]));
}
echo ' ';
for($j=$z;$j<$z+$jlen;$j++){
printf(" %c",ord($str[$j]));
}
echo '<br>';
}
echo '<br>';
}
//utmp valid types
define('UT_UNKNOWN',0);
define('RUN_LVL',1);
define('BOOT_TIME',2);
define('NEW_TIME',3);
define('OLD_TIME',4);
define('INIT_PROCESS',5);
define('LOGIN_PROCESS',6);
define('USER_PROCESS',7);
define('DEAD_PROCESS',8);
define('ACCOUNTING',9);
$types = array('uk','Run Level','Boot Time','New Time','Old Time','Init','Login
Start','User Login','Logout','Accounting');
$wtmp = '/var/log/wtmp';
if($fp = fopen($wtmp, 'r')){
echo '<table border="1" cellpadding="4" cellspacing="0">';
echo '
<tr><td>Type</td><td>Pid</td><td>Line</td><td>Inittab</td><td>User</td><td>Host</td><td>Date</td><td>Unknown</td></tr>';
while($buf = fread($fp,384)){
//hexDumpChar($buf,16);
$row = unpack("Vtype/Vpid",substr($buf,0,8));
switch($row['type']){
case RUN_LVL:
case BOOT_TIME:
case NEW_TIME:
case OLD_TIME:
case INIT_PROCESS:
case LOGIN_PROCESS:
case USER_PROCESS:
case DEAD_PROCESS:
case ACCOUNTING:
$line = substr($buf,8,32);
$inittab = substr($buf,40,4);
$user = substr($buf,44,32);
$host = substr($buf,76,256);
$date =
unpack("Vterm/Vexit/Vdate/Vuk",substr($buf,332,16));
//print_r($row);
echo '<tr><td>'.$row['type'].'
'.$types[$row['type']].'</td><td>'.$row['pid'].'</td><td>'.trim($line).'</td>';
echo
'<td>'.trim($inittab).'</td><td>'.trim($user).'</td><td>'.trim($host).'</td>';
echo '<td>'.date("d/m/Y
H:i:s",$date['date']).'</td><td>'.$date['uk'].'</td></tr>';
break;
default:
echo ' <tr><td colspan="8" style="color: Red;">Crap
entry '.$row['type'].'</td></tr>';
break;
}
}
echo '</table>';
fclose($fp);
}
?>
--
regards,
Tom
--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php