INND(8)

NAZWA
innd, inndstart - InterNetNews daemon

SKŁADNIA
innd [ -a ] [ -c dni ] [ -C ] [ -d ] [ -f ] [ -H licznik ] [ -i licznik ] [ -Iadres_IP ] [ -l rozmiar ] [ -m tryb ] [ -n flaga ] [ -o licznik ] [ -pfd_des ] [ -Pport ] [ -r ] [ -s ] [ -t opóźnienie ] [ -T licznik ] [ -u ] [ -X sekundy ] [ -Z ] inndstart [ flagi ]

OPIS
Innd, który jest demonem news (InterNetNews), obsługuje wszystkie nadchodzące feedy. Najpierw wczytuje do pamięci pliki active(5), newsfeeds(5) i incoming.conf(5). Potem otwiera port NNTP do odbierania artykułów ze zdalnych stacji (zobacz opcję ``-p''). Jeśli w include/config.h zdefiniowano HAVE_UNIX_DOMAIN_SOCKETS, to do odbioru artykułów od lokalnych procesów, takich jak nnrpd(8) i rnews(1) otwierane jest gniazdo strumieniowe dziedziny Uniksowej, a dla ctlinnd(8) odwierane jest analogiczne gniazdo datagramowe. Gdy makro to nie jest zdefiniowane, używane są łącza nazwane. Ctlinnd(8) wykorzystywany jest do przekazywania serwerowi poleceń wykonania określonych akcji. Otwiera również bazę history(5) i dwa pliki raportowe, zastępujące jego standardowe wyjście i wyjście błędu.

Po otwarciu wszystkich plików i gniazd, innd oczekuje na połączenia i dane na swoich portach, używając do tego select(2) i nieblokującego I/O. Jeśli nie ma dostępnych danych, to wypróżni on swoje wewnątrzrdzeniowe struktury danych. Domyślna liczba sekund opóźnienia przed wypróżnieniem jest ustawiana jako <DEFAULT_TIMEOUT w config.data> (zwykle 300) sekund.

Jeśli innd otrzyma błąd ENOSPC (zobacz intro(2)) podczas zapisu pliku active, pliku article lub bazy historii, to wyśle do siebie komendę ``throttle''. Stanie się tak również, jeśli otrzyma zbyt wiele błędów wejścia-wyjścia podczas zapisu do jakiegoś pliku.

Niektóre parametry ustawiane w inn.conf(5) mogą być również podane w linii poleceń innd. W tym wypadku, opcje z inn.conf(5) będą nadpisane przez opcje linii poleceń.

OPCJE

-a  Domyślnie, jeśli host nie jest wymieniony w pliku incoming.conf to połączenie jest przekazywane do nnrpd. Po użyciu tej flagi dowolny host może się podłączyć i przesyłać artykuły.

-c  innd odrzuca stare artykuły. Zasadniczo zachowanie to może być sterowane przez bazę historii, lecz czasem stacja wyrzuca w sieć paczkę bardzo starych artykułów. Flaga ``odrzuca wszelkie artykuły, wysłane dawniej niż 21 dni temu. Wartość zerowa powstrzymuje ten test. Domyślną wartością jest 14 dni, lecz można to zmienić opcją ``artcutoff'' w inn.conf(5)

-C  Jeśli użyta jest flaga ``-C'', to innd przyjmie i przesyła dalej, ale nie przetwarza wiadomości anulowania i powstrzymania. Jest to przeznaczone dla stacji, w których nadużywane są anulowania i które wybierają mechanizm z lepszą autoryzacją.

-d -f
    Innd normalnie przechodzi w tło, ustawia standardowe wyjścia na pliki raportowe i odłącza się od terminala. Po użyciu flagi ``-d'' serwer tego nie robi, a po użyciu flagi ``-f'', serwer pozostaje na pierwszym planie.

-H -T -X
    Flagi ``-H'', ``-T'' i ``-X'' sterują liczbą połączeń dozwolonych na minutę. Ma to w założeniach działać jako ochrona serwera przed czytnikami, które wykonują w ciągu minuty zbyt wiele połączeń z serwerem. Zazwyczaj nie używa się tego, chyba że rzeczywiście pojawia się jakiś problem. Tablica używana do tych sprawdzeń jest ograniczona do 128 wpisów i jest używana jako pierścień (ring). Rozmiar został wybrany do ułatwienia obliczania indeksu i do upewnienia się, że nie zabraknie ci miejsca. Praktycznie wydaje się wątpliwe, żebyś wykorzystał nawet połowę tablicy naraz.

    Flaga ``-H'' określa maksymalną liczbę połączeń pochodzących z danego hosta z serwerem podczas ``-X'' sekund. Domyślnie 2.

    Flaga ``-T'' ogranicza całkowitą liczbę nadchodzących połączeń innda w okresie ``-X'' sekund. Maksymalną wartością jest 128. Domyślną 60.

    Flaga ``-X'' ustawia liczbę sekund, używaną przez ``-H'' i ``-T''. Wartość zerowa wyłącza sprawdzanie. Domyślnie jest 0.

-i  Flaga ``-i'' ogranicza liczbę nadchodzących połączeń NNTP. Wartość zerowa wyłącza to sprawdzenie. Domyślną wartością, jeśli w inn.conf(5) nie podano opcji ``maxconnections'' jest 50. Wymieniona opcja jest zastępowana wartością tej opcji.

-I  Opcja ta umożliwia wiązanie innda do podanego adresu interfejsu IP. Adres IP musi być w postaci kropkowej czwórki liczb (nnn.nnn.nnn.nnn). Zobacz też opcję ``bindaddress'' w inn.conf(5).

-l  Flaga ``-l'' ogranicza rozmiar artykułu. Po użyciu tej flagi, wszystkie artykuły większe niż rozmiar bajtów będą odrzucane. Domyślną wartością jest 1000000L bajtów. Sprawdzanie można wyłączyć, używając wartości zerowej. Patrz także opcje ``maxartsize'' i ``localmaxartsize'' w inn.conf(5).

-m  Flaga ``-m'' służy do uruchamiania serwera w zatrzymanym lub stłumionym stanie (zobacz ctlinnd(8)). Argument rozpoczyna się pojedynczą literą: g, p lub t, wskazujące odpowiednio na ``go'' (startuj), ``pause'' (zatrzymaj) lub ``throttle'' (stłum).

-n  Flaga ``-n'' określa czy pauzowanie lub stłumienie serwera powinno również wyłączyć przyszłe procesy czytnikowe. Wartość ``y'' powoduje, że czytniki zachowują się jak serwer, a wartość ``n'' umożliwia czytanie, nawet gdy serwer nie pracuje. Domyślnie zezwala się na czytanie, a zmienić można to opcją ``readerswhenstopped'' w inn.conf(5).

-o  Flaga ``-o'' służy ograniczaniu liczby plików, które są utrzymywane otwarte dla wychodzących feedów plikowych. Domyślną wartością jest liczba dostępnych deskryptorów minus część zarezerwowana do użytku wewnętrznego.

-p  Po użyciu flagi ``-p'' przyjmuje się, że port NNTP jest otwierany na podanym deskryptorze. (Jeśli użyta jest ta flaga, to innd zakłada, że pracuje z właściwymi uprawnieniami i nie będzie wołał chown(2) na żadnych z tworzonych plików lub katalogów.)

-P  Jeśli użyta jest flaga ``-P'', to podany port jest używany do nasłuchiwania połączeń. innd musi mieć wystarczające uprawnienia startowe by otworzyć podany port.

-r  Jeśli użyta jest flaga ``-r'', serwer przenumeruje plik active zupełnie tak, jak po wysłaniu komendy ``renumber''.

-s  Jeśli użyta jest flaga ``-s'', to innd nic nie będzie robić, lecz tylko sprawdzi składnię pliku newsfeeds. Jeśli będą tam błędy, to zgłosi kod błędu; rzeczywiste błędy będą natomiast zgłoszone w syslog(3).

-t  Zmienia czas opóźnienia przed wypróżnieniem do timeout sekund.

-u  Raporty są normalnie buforowane; flaga ta wyłącza to zachowanie.

Inndstart jest małym programem typu front-end, który otwiera port NNTP, ustawia uid i gid na opiekuna news, a następnie uruchamia demona innd z flagą ``-p'' i minimalnym bezpiecznym środowiskiem. Jest to mały front-end dla stacji, która nie chce uruchamiać innd z uprawnieniami roota.

KOMUNIKATY STERUJĄCE
Artykuły przychodzące, mające nagłówek Control są nazywane komunikatami sterującymi. Poza komunikatem anulowania, są one zaimplementowane przez zewnętrzne programy w katalogu <pathcontrol w inn.conf> o ile <usecontrolchan w inn.conf> jest ustawione na ``false''. (Komunikaty anulowania (cancel) odświeżają bazę historii, więc muszą być obsługiwane wewnętrznie; koszt synchronizowania, blokowania i odblokowywania byłby zbyt wysoki przy odbiorze wielu takich komunikatów.)

Gdy nadchodzi komunikat sterujący, pierwsze słowo tekstu jest konwertowane na małe litery i jest używane jako nazwa uruchamianego programu. Jeśli program nie istnieje, wywoływany jest domyślny program, określony przez <pathcontrol w inn.conf>/default.

Wszystkie programy sterujące są wywoływane z czterema parametrami. Pierwszym jest adres nadawcy komunikatu; jest to pobierane z nagłówka Sender. Jeśli nagłówek ten jest pusty, to dane są pobierane z nagłówka From. Następnym parametrem jest adres zwrotny replik; pobierany z nagłówka Reply-To. Jeśli nagłówek ten jest pusty, użyty zostanie adres nadawcy. Trzecim parametrem będzie nazwa pliku, w którym znajduje się artykuł względem katalogu składowego news. Czwartym parametrem jest host, który wysłał artykuł. Jest to odczytywane z linii Path.

Jeśli <usecontrolchan w inn.conf> jest ustawione na ``true'', to żaden komunikat sterujący nie będzie przetwarzany przez program zewnętrzny, forkowany przez innda. Zamiast tego, będzie przetwarzany przez skrypt controlchan, który jest wywoływany jako program kanałowy innda. Musisz do używania tego skryptu skonfigurować newsfeeds(5). Przetwarzanie z użyciem controlchan może zredukować nadmierne obciążenie, jeśli zbyt wiele komunikatów sterujących pojawia się naraz.

Dystrybucja komunikatu sterującego jest odmienna od dystrybucji standardowych artykułów.

Komunikaty sterujące normalnie wpadają do grupy dyskusyjnej control. Mogą one być zapisywane w podgrupach, lecz w oparciu o polecenie komunikatu sterującego. Na przykład komunikat newgroup może być zapisany w grupie control.newgroup lub w ogólnym control, jeśli specjalizowana podgrupa nie istnieje.

Stacje mogą jawnie udostępniać grupę ``control'' w ich listach zapisowych, lecz zwykle lepiej jest ją wyłączyć. Jeśli komunikat sterujący jest wysyłany na grupę, której nazwa kończy się czterema znakami ``.ctl'', to przyrostek jest obcinany, a to co pozostanie jest używane jako nazwa grupy. Na przykład komunikat anulujący, wysłany na ``news.admin.ctl'' zostanie przesłany do wszystkich stacji zapisanych na grupy ``control'' lub ``news.admin''. Wiadomości newgroup lub rmgroup wymagają dodatkowego specjalnego traktowania. Jeżeli wiadomość jest zaakceptowana i została wysłana do tworzonej lub usuwanej grupy, to ta wiadomość zostanie przesłana do wszystkich serwerów, których wzorce subskrypcji grup pozwoliłyby na odebranie wiadomości wysyłanych do tej grupy.

Jeśli <mergetogroups w inn.conf> jest ustawione na ``true'', to gdy artykuł jest wysyłany na grupę, która rozpoczyna się trzema literami ``to.'', to zostanie potraktowany specjalnie, jeśli grupa ta nie istnieje w pliku active: artukuł jest składowany do grupy ``to'' i jest wysyłany do pierwszej stacji, nazwanej po przedrostku. Na przykład, wysyłanie do ``to.uunet'' zostanie złożone do ``to'' i przesłane do stacji ``uunet''. file:

RÓŻNICE PROTOKOŁU
Innd implementuje komendy NNTP zdefiniowane w RFC 977 z następującymi odstępstwami:

1.  Za ``list'' może występować dodatkowo argument ``active'', ``active.times'', ``newsgroups'' lub ``subscription''. Jest to popularne rozszerzenie, lecz nie w pełni obsługiwane; zobacz nnrpd(8).

2.  Zaimplementowane są komendy ``authinfo user'' oraz ``authinfo pass''. Zobacz draft-barber-nntp-imp-07.txt dla dalszych szczegółów.

3.  Udostępniona jest nowa komenda, ``mode reader''. Komenda ta powoduje, że serwer przekazuje połączenie do nnrpd. Komenda ``mode query'' przeznaczona jest dla przyszłych zastosowań i obecnie jest traktowana tak samo.

4.  Udostępnione są komendy wspierające transfer strumieniowy: ``check messageid'' i ``takethis messageid''.

5.  Udostępniona jest komenda transferu wsadowego ``xbatch liczba-bajtów''. Komenda ta odczyta liczbę-bajtów bajtów i zapisze je dla dalszego przetwarzania przez rnews(1) (który należy uruchomić oddzielnie). Obejrzyj programy innxbatch i sendxbatches.sh.

6.  Pozostałymi zaimplementowanymi komendami są ``head'' , ``help'' , ``ihave'' , ``quit'' oraz ``stat''.

MODYFIKACJE NAGŁÓWKÓW
Innd modyfikuje tak mało nagłówków, jak tylko się da, lecz mógłby być lepszy.

Oto lista nagłówków, które jeśli istnieją, są usuwane:
    Date-Received
    Posted
    Posting-Version
    Received
    Relay-Version
Puste nagłówki oraz nagłówki składające się z białych spacji również są opuszczane.

Do nagłówka Path doklejana jest nazwa lokalnej stacji (określanej przez wartość ``pathhost'' w inn.conf(5)) i wyrzyknik (jeśli nazwa pierwszej stacji nagłówka różni się od lokalnej).

Nagłówek Xref jest usuwany i tworzony jest nowy.

W przypadku nieobecności, nagłówek Lines jest dodawany.

Innd nie przepisuje nieprawidłowych nagłówków. Na przykład nie będzie zmieniać nieprawidłowego nagłówka Lines, ale odrzuci artykuł.

RAPORTOWANIE
Innd raportuje wszystkie nadchodzące artykuły do pliku raportowego. Jest to plik tekstowy o zmiennej ilości rozdzielanych spacjami pól o jednym z następujących formatów:
    mon dd hh:mm:ss.mmm + feed <Message-ID> stacja...
    mon dd hh:mm:ss.mmm j feed <Message-ID> stacja...
    mon dd hh:mm:ss.mmm c feed <Message-ID> stacja...
    mon dd hh:mm:ss.mmm - feed <Message-ID> powód...
    mon dd hh:mm:ss.mmm ? feed <Message-ID> powód...

Po polu Message-ID może być również pole nazwy hosta i rozmiaru, zależnie od opcji ``nntplinklog'' i ``logsize'' z inn.conf(5).

Pierwsze trzy pola są polami daty i czasu w rozdzielczości milisekundowej. Piąte pole jest stacją, która wysłała artykuł (odczytywane z nagłówka Path). Szóste pole jest identyfikatorem artykułu; jeśli informacja jest niedostępna, pojawi się w jej miejscu pytajnik.

Czwarte pole określa czy artykuł został przyjęty czy nie. Jeśli jest tam znak plus, to został przyjęty. Jeśli ``j'', to został przyjęty, lecz wszystkie grupy mają w swoich rekordach active ``j'', więc artykuł został złożony do grupy ``junk''. Jeśli w polu pojawiła się litera ``c'', to przed pojawieniem się oryginalnego artykułu odebrany został komunikat anulujący. We wszystkich tych przypadkach artykuł został przyjęty i pole ``stacja...'' zawiera rozdzieloną spacjami listę stacji, do których artykuł jest przesyłany.

Jeśli czwarte pole zawiera znak minusa, o artykuł został odrzucony. Powodami odrzucenia mogą być:
    "%s" header too long (za długi nagłówek)
    "%s" wants to cancel <%s> by "%s" ("%s" chce anulować <%c> poprzez "%s")
    Article exceeds local limit of %s bytes (Artykuł przekracza lokalny
                                             limit %s bajtów)
    Article posted in the future -- "%s" (Artykuł wysłany w przyszłości -- "%s")
    Bad "%s" header (Zły nagłówek "%s")
    Can't write history (Nie mogę zapisać historii)
    Duplicate (Duplikat)
    Duplicate "%s" header (Zduplikowany nagłówek "%s")
    EOF in headers (EOF w nagłówkach)
    Linecount %s != %s +- %s (Liczba linii %s != %s +- %s)
    Missing %s header (Brak nagłówka %s)
    No body (Brak ciała)
    No colon-space in "%s" header (Brak dwukropka-spacji w nagłówku "%s")
    No space (Brak spacji (albo miejsca???))
    Space before colon in "%s" header (Spacja przed dwukropkiem w nagłówku "%s")
    Too old -- "%s" (Za stare -- "%s")
    Unapproved for "%s" (Niezatwierdzone dla "%s")
    Unwanted newsgroup "%s" (Niechciana grupa dyskusyjna "%s")
    Unwanted distribution "%s" (Niechciana dystrybucja "%s")
    Whitespace in "Newsgroups" header -- "%s" (Biała spacja w nagłówku
                                               "Newsgroups" -- "%s")
Gdzie ``%s'' jest podmieniane przez konretniejsze informacje.

Jeżeli w czwartym polu wystąpi znak ``?'', oznzcza to, że atykuł zawiera dziwne łańcuchy znaków, tj. CR bez LF lub LF bez CR. Te znaki są używane razem ``CRLF'', co oznacza koniec linii. Obecnie taka informacja w logu oznacza dziwność tego artykułu, ale innd nigdy nie odrzuca artykułu z tego powodu.

Zauważ, że jeśli artykuł jest przyjęty i <wanttrash w inn.conf> jest ustawione na ``yes'' i żadna z grup nie jest odpowiednia, to zostanie zraportowany w dwóch liniach: w linii ``j'' i ``-''.

Innd zgłasza też obszerne raporty poprzez sysloga. Pierwsze słowo komunikatu raportowego będzie: nazwą stacji, jeśli wpis jest dla niej specyficzny (np. komunikat ``connected''); słowem ``SERVER'', jeśli komunikat jest związany z serwerem, np. gdy pojawi się błąd odczytu.

Jeśli drugim słowem są cztery litery ``cant'', to zgłaszany jest błąd. W tym przypadku następne dwa słowa ogólnie nazywają wywołanie systemowe lub funkcję biblioteczną, która się nie powiodła oraz obiekt, wokół którego wykonywane były działania. Reszta linii może zawierać inne informacje.

W innych przypadkach, drugie słowa określa rodzaj zmiany, a reszta linii uściśla tę informację. Słowo ``internal'' ogólnie oznacza wewnętrzny błąd logiczny.

SYGNAŁY
Innd przechwytuje sygnały SIGTERM i SIGDANGER i wyłącza się po nich. Jeśli użyta jest flaga ``-d'', przechwytywany będzie również SIGINT i będzie działał analogicznie.

Innd przechwytuje sygnał SIGUSR1 i odtwarza kanał sterujący, wykorzystywany normalnie przez ctlinnd(8).

HISTORIA
Napisane przez Richa $alza <rsalz@uunet.uu.net> dla InterNetNews.

ZOBACZ TAKŻE
active(5), ctlinnd(8), dbz(3), history(5), incoming.conf(5), inn.conf(5), newsfeeds(5), nnrpd(8), rnews(1), syslog(8).