>>Как в inetd.conf прописываете? Дело в том, что, насколько я знаю,
>>самому inetd абсолютно фиолетово что там у вас в hosts.allow, а
>>интересуются этим файлом проги запускаемые из inetd.conf, например tcpd. Короче говоря
>>у меня сработало так: (правда на Linux-е и я использовал 109
>>порт - pop2)
>>в inetd.conf
>>pop2 stream tcp nowait root /usr/sbin/tcpd /usr/local/bin/gcinet
>>
>>в hosts.allow:
>>gcinet: ALL: setenv = REMOTE_ADDR %a
>
>Это все понятно.... вот только в FreeBSD такого как tcpd нет... :(
>И какая этому замена я незнаю... :(
А что свой tcp-wrapper написать проблема? Например (для Linux):
//=================================
//my_wrapper.c:
//#include <stdlib.h>
//#include <unistd.h>
//#include <sys/socket.h>
//#include <arpa/inet.h>
// ^^^^ может понадобиться если компилить С++ компилером
#include <netinet/in.h>
#include <errno.h>
struct sockaddr_in remote;
int main(int argc,char **argv)
{
int len;
len=sizeof(remote);
if (getpeername(0,(struct sockaddr *) &remote,(socklen_t *) &len) == -1) {
printf("Got error: %s\n",strerror(errno));
exit(-1);
}
if (setenv("REMOTE_ADDR",inet_ntoa(remote.sin_addr),1)) exit(-1);
execvp(*argv,argv);
puts("Fail!!!!!");
exit(-1);
}
//==============================
Эта прога просто выставляет переменную окружения REMOTE_ADDR и вызывает прогу argv[0] с аргументами argv. Поскольку вызывается из inetd, то argv[0] необязательно есть имя текущей программы. Компилим это (в BSD могут быть другие головные файлы), ложим, скажем, в /usr/local/bin/my_wrapper.
Далее, пишем в inetd.conf
pop2 stream tcp nowait root /usr/local/bin/my_wrapper /usr/local/bin/gcinet
(в данном случае argv[0] есть /usr/local/bin/gcinet)
Все...