|
|
ru.unix- RU.UNIX ---------------------------------------------------------------------- From : Alexander Titaev 2:5070/66 07 Jul 2005 18:44:58 To : All Subject : off_t --------------------------------------------------------------------------------
собственно проблема в том, что не могу корректно пережевать proftpd.scoreboard
перлом.
описание внутренней структуры следующее
typedef struct {
unsigned long sch_magic;
unsigned long sch_version;
pid_t sch_pid;
time_t sch_uptime;
} pr_scoreboard_header_t;
/* Structure used for writing scoreboard file entries.
*/
typedef struct {
pid_t sce_pid;
uid_t sce_uid;
gid_t sce_gid;
char sce_user[32];
int sce_server_port;
char sce_server_addr[80], sce_server_label[32];
#ifdef USE_IPV6
char sce_client_addr[INET6_ADDRSTRLEN];
#else
char sce_client_addr[INET_ADDRSTRLEN];
#endif /* USE_IPV6 */
char sce_client_name[PR_TUNABLE_SCOREBOARD_BUFFER_SIZE];
char sce_class[32];
char sce_cwd[PR_TUNABLE_SCOREBOARD_BUFFER_SIZE];
char sce_cmd[5];
char sce_cmd_arg[PR_TUNABLE_SCOREBOARD_BUFFER_SIZE];
time_t sce_begin_idle, sce_begin_session;
off_t sce_xfer_size, sce_xfer_done, sce_xfer_len;
unsigned long sce_xfer_elapsed;
} pr_scoreboard_entry_t;
где PR_TUNABLE_SCOREBOARD_BUFFER_SIZE 80, а INET_ADDRSTRLEN 16
пишу
my $template = "L L i L I I I A32 i A80 A32 A16 A80 A32 A80 A5 A80 L L I I I L";
my $recordsize = length(pack($template,( )));
my $score_file='/usr/local/var/proftpd/proftpd.scoreboard';
open(SCORE,$score_file) or die "Unable to open $score_file:$!\n";
while (read(SCORE,$record,$recordsize)) {
my ($sch_magic, $sch_version, $sch_pid, $sch_uptime, $sce_pid, $sce_uid,
$sce_gid,
$sce_user, $sce_server_port, $sce_server_addr, $sce_server_label,
$sce_client_addr, $sce_cl
ient_name, $sce_class, $sce_cwd, $sce_cmd, $sce_cmd_arg, $sce_begin_idle,
$sce_begin_sessio
n, $sce_xfer_size, $sce_xfer_done, $sce_xfer_len, $sce_xfer_elapsed)=
unpack($template,$rec
ord);
if ($sce_pid != 0){
print "$sce_user, $sce_client_addr, $sce_client_name, $sce_class,
$sce_cwd, $sce_cm
d, $sce_cmd_arg, $sce_begin_idle,$sce_begin_session, $sce_xfer_size,
$sce_xfer_done, $sce_x
fer_len, $sce_xfer_elapsed\n";
print "----------------\n";
}
}
close(SCORE);
первая запись нормально, для все остальных явно сдвиг на байт в право
aptekar# ./score.pl
ftp, 195.206.52.6, asbaikaltv.ru, , /, idle, , 1275068416,1245891832, 4377848,
0, 0, 0
-+--------------
tp, 95.206.40.187n, et2.DSI.ru, /, i, dle, , 4166975488,4166861516, 17100, 0, 0,
0
-+--------------
еже ли юзать
my $template = "L L i L I I I A32 i A80 A32 A16 A80 A32 A80 A5 A79 L L I I I L";
то все нормально
aptekar# ./score.pl
ftp, 195.206.52.6, asbaikaltv.ru, , /, idle, , 0,1120729164, 1120729162, 0, 0, 0
-+--------------
ftp, 195.206.40.187, net2.DSI.ru, , /, idle, , 0,1120729183, 1120729181, 0, 0, 0
-+--------------
но согласно описанию должно быть A80
где ошибаюсь не пойму
--
Sanyo mailto:tit@irk.ru
--- tin/1.4.6-20020816 ("Aerials") (UNIX) (FreeBSD/4.11-RELEASE-p10 (i386))
* Origin: The_Bulls echo gate (2:5070/66)
Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.unix/372402870250d.html, оценка из 5, голосов 10
|