Для него требуется утилита tdb-dump из пакета http://sf.net/projects/tdb/, rpm которого без проблем находится через http://rpm.pbone.net/ для любой платформы.
Метод предельно прост, позволяет по любому атрибуту конкретного сеанса найти все остальные. Например по имени интерфейса найти его pid и переданный радиусом логин юзера.#!/usr/bin/perl
if (@ARGV[0] eq "") { print "Usage: vpn-print <ppp_num> or vpn-print <username> or with any other attribute\n"; exit; }
@pppdb=`tdb-dump /var/run/pppd2.tdb | grep PEERNAME | grep "=@ARGV[0];" | awk {'print \$3'}`;
foreach $record (@pppdb) {
foreach $param ( split(/;/, $record) ) { if ($param =~ m/^([^#].+?)=(.*)$/) { $$1 = $2; } }
print "PEERNAME=$PEERNAME IFNAME=$IFNAME PID=$PPPD_PID\n";
}
Также, следующий простой скрипт позволяет восстановить набор pid-файлов в /var/run для всех ppp-сеансов (время от времени некоторые pid-файлы имеют свойство "теряться"# vpn-print ppp10
PEERNAME=marvin IFNAME=ppp10 PID=16610

#!/usr/bin/perl
@pppdb=`tdb-dump /var/run/pppd2.tdb | grep PEERNAME | awk {'print \$3'}`;
foreach $record (@pppdb) {
foreach $param ( split(/;/, $record) ) { if ($param =~ m/^([^#].+?)=(.*)$/) {$$1 = $2;} }
`echo "$PPPD_PID" > /var/run/$IFNAME.pid`;
}