<?xml version="1.0" encoding="utf-8" ?>

<rss version="2.0" 
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:admin="http://webns.net/mvcb/"
   xmlns:dc="http://purl.org/dc/elements/1.1/"
   xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
   xmlns:wfw="http://wellformedweb.org/CommentAPI/"
   xmlns:content="http://purl.org/rss/1.0/modules/content/"
   >
<channel>
    
    <title>Aus dem Leben eines Szlauszafs (Entries tagged as inn)</title>
    <link>http://th-h.de/blog/</link>
    <description>Immer eine Handvoll Heu unter der Sznauze.</description>
    <dc:language>en</dc:language>
    <admin:errorReportsTo rdf:resource="mailto:thh@greenmeadow.szaf.org" />
    <generator>Serendipity 1.6.2 - http://www.s9y.org/</generator>
    <managingEditor>thh@inter.net</managingEditor>
<pubDate>Sat, 29 Jan 2011 16:26:54 GMT</pubDate>

    <image>
        <url>http://th-h.de/blog/templates/default/img/s9y_banner_small.png</url>
        <title>RSS: Aus dem Leben eines Szlauszafs - Immer eine Handvoll Heu unter der Sznauze.</title>
        <link>http://th-h.de/blog/</link>
        <width>100</width>
        <height>21</height>
    </image>

<item>
    <title>Kaum macht man es richtig, schon funktioniert es!</title>
    <link>http://th-h.de/blog/archives/1674-Kaum-macht-man-es-richtig,-schon-funktioniert-es!.html</link>
            <category>Bits'n'Bytes</category>
    
    <comments>http://th-h.de/blog/archives/1674-Kaum-macht-man-es-richtig,-schon-funktioniert-es!.html#comments</comments>
    <wfw:comment>http://th-h.de/blog/wfwcomment.php?cid=1674</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://th-h.de/blog/rss.php?version=2.0&amp;type=comments&amp;cid=1674</wfw:commentRss>
    

    <author>thh@inter.net (Thomas Hochstein)</author>
    <content:encoded>
    &lt;p&gt;Dieser Tage stellte ich fest, daß mein Newsserver offensichtlich keine &lt;a title=&quot;Wikipedia: Control-Message&quot; href=&quot;http://th-h.de/blog/exit.php?url_id=1795&amp;amp;entry_id=1674&quot;  onmouseover=&quot;window.status=&#039;http://de.wikipedia.org/wiki/Control-Message&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;Steuernachrichten&lt;/a&gt; mehr ausführt. Aber warum bloß?&lt;/p&gt; 
&lt;p&gt;Die Rücknahme einiger jüngerer Änderungen - die sicherstellen sollten, daß die Steuernachrichten nicht nur ausgeführt, sondern mir auch gemailt werden (mit Dank an den Widder!) - brachte keine Lösung. Also bin ich zu systematischen Debugging übergegangen; dank fehlenden Loggings anhand des Einstreuens von Ausgabeanweisungen in eine Kopie des zuständigen Scripts (&lt;em&gt;controlchan&lt;/em&gt;). Stunden später[tm] stellte sich dann als Ursache ... ein Bedienerfehler heraus (wie immer). Wenn man Steuernachrichten für eine bestimmte Hierarchie verwerfen will, dann sollte man den Namen der Hierarchie nicht nur als Kommentar in die &lt;em&gt;control.ctl&lt;/em&gt; eintragen, sondern für den entsprechenden Eintrag auch ein Muster wie &amp;#8220;hierarchie.*&amp;#8221; verwenden. &amp;#8220;*&amp;#8221; alleine führt nicht zum erwünschten Ergebnis (sondern zum Verwerfen &lt;u&gt;aller&lt;/u&gt; Steuernachrichten für &lt;u&gt;alle&lt;/u&gt; Hierarchien). &lt;img src=&quot;http://th-h.de/blog/templates/default/img/emoticons/normal.png&quot; alt=&quot;:-|&quot; style=&quot;display: inline; vertical-align: bottom;&quot; class=&quot;emoticon&quot; /&gt;&lt;br /&gt;&lt;/p&gt;  
    </content:encoded>

    <pubDate>Sat, 29 Jan 2011 17:21:46 +0100</pubDate>
    <guid isPermaLink="false">http://th-h.de/blog/archives/1674-guid.html</guid>
    <category>inn</category>
<category>usenet</category>

</item>
<item>
    <title>INN-Funktionsweise: Expire</title>
    <link>http://th-h.de/blog/archives/1507-INN-Funktionsweise-Expire.html</link>
            <category>Releases</category>
    
    <comments>http://th-h.de/blog/archives/1507-INN-Funktionsweise-Expire.html#comments</comments>
    <wfw:comment>http://th-h.de/blog/wfwcomment.php?cid=1507</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://th-h.de/blog/rss.php?version=2.0&amp;type=comments&amp;cid=1507</wfw:commentRss>
    

    <author>thh@inter.net (Thomas Hochstein)</author>
    <content:encoded>
    Wie ich &lt;a title=&quot;INN-Funktionsweise: Steuernachrichten und Filter&quot; href=&quot;http://th-h.de/blog/archives/1499-INN-Funktionsweise-Steuernachrichten-und-Filter.html&quot;&gt;vor anderthalb Wochen&lt;/a&gt; schrieb, fehlte meiner &lt;a title=&quot;Funktionsweise des INN&quot; href=&quot;/infos/usenet/inn.php&quot;&gt;Beschreibung&lt;/a&gt; der Funktionsweise des Newsservers INN noch der Teil über Expire; namentlich deshalb, weil mir die Funktionsweise selbst nicht hinreichend klar war. &lt;img src=&quot;http://th-h.de/blog/templates/default/img/emoticons/wink.png&quot; alt=&quot;;-)&quot; style=&quot;display: inline; vertical-align: bottom;&quot; class=&quot;emoticon&quot; /&gt; Inzwischen habe ich aber, so denke ich, dank der hilfreichen Erläuterungen in &lt;a title=&quot;Thread in de.comm.software.newsserver&quot; href=&quot;http://th-h.de/blog/exit.php?url_id=1410&amp;amp;entry_id=1507&quot;  onmouseover=&quot;window.status=&#039;http://de.comm.software.newsserver/&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;de.comm.software.newsserver&lt;/a&gt; den notwendigen Durchblick gewonnen und die Beschreibung entsprechend ergänzt.&lt;br /&gt;  
    </content:encoded>

    <pubDate>Tue, 26 Jan 2010 21:40:00 +0100</pubDate>
    <guid isPermaLink="false">http://th-h.de/blog/archives/1507-guid.html</guid>
    <category>inn</category>
<category>usenet</category>

</item>
<item>
    <title>INN: Authentifizierung gegen MySQL-Datenbank</title>
    <link>http://th-h.de/blog/archives/1531-INN-Authentifizierung-gegen-MySQL-Datenbank.html</link>
            <category>Bits'n'Bytes</category>
    
    <comments>http://th-h.de/blog/archives/1531-INN-Authentifizierung-gegen-MySQL-Datenbank.html#comments</comments>
    <wfw:comment>http://th-h.de/blog/wfwcomment.php?cid=1531</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://th-h.de/blog/rss.php?version=2.0&amp;type=comments&amp;cid=1531</wfw:commentRss>
    

    <author>thh@inter.net (Thomas Hochstein)</author>
    <content:encoded>
    &lt;p&gt;INN bietet vielfältige Möglichkeiten der &lt;a title=&quot;Funktionsweise des INN: Zugangskontrolle&quot; href=&quot;/infos/usenet/inn.php#auth&quot;&gt;Benutzerauthentifizierung&lt;/a&gt; an. Wenn man einer größeren Anzahl von Benutzern einen Zugang einräumen will, bietet es sich an, die notwendigen Daten - Benutzerkennung, Paßwort, etc. - in einer Datenbank zu halten, bspw. in einer MySQL-Datenbank.&lt;/p&gt;
&lt;p&gt;Eine denkbare Lösung dafür, die neben Benutzerkennung und Paßwort auch Namen und E-Mail-Adresse des Benutzers erfaßt sowie ein Flag für aktive/inaktive Benutzer und eine Trennung nach verschiedenen Zugriffsstufen kennt sowie den Zeitpunkt des letzten Logins festhält, möchte ich hier vorstellen. Dazu gehört über das hier vorgestellte Script für den INN hinaus natürlich noch ein passendes (Web-)Interface, mit dem Benutzer angelegt und gelöscht sowie Paßworte geändert werden können etc.&lt;/p&gt;
&lt;p&gt;Die Datenbankstruktur sieht folgendermaßen aus:&lt;/p&gt;
&lt;pre&gt;
CREATE TABLE IF NOT EXISTS `users` (
&amp;#160; `userid` int(11) NOT NULL auto_increment,
&amp;#160; `user` varchar(16) collate latin1_bin NOT NULL default &amp;#8216;&amp;#8217;,
&amp;#160; `password` varchar(16) collate latin1_bin NOT NULL default &amp;#8216;&amp;#8217;,
&amp;#160; `active` tinyint(1) NOT NULL default &amp;#8216;1&amp;#8217;,
&amp;#160; `username` varchar(60) collate latin1_bin default NULL,
&amp;#160; `usermail` varchar(60) collate latin1_bin default NULL,
&amp;#160; `domain` varchar(40) collate latin1_bin default &amp;#8216;&amp;lt;EDITME&amp;gt;&amp;#8217;,
&amp;#160; `llo` date default NULL,
&amp;#160; PRIMARY KEY&amp;#160; (`userid`),
&amp;#160; UNIQUE KEY `user` (`user`)
);&lt;/pre&gt;
&lt;p&gt;Die Felder sollten weitgehend selbsterklärend sein; &amp;#8220;llo&amp;#8221; steht für &amp;#8220;last logged in&amp;#8221;.&lt;/p&gt; &lt;p&gt;Die Module &lt;em&gt;DBI&lt;/em&gt; und &lt;em&gt;Time::Localtime&lt;/em&gt; werden benötigt; außerdem müssen natürlich die Zugangsdaten für die Datenbank definiert werden:&lt;/p&gt;
&lt;pre&gt;
use DBI;
use Time::localtime;

### DB Vars - EDIT ME!
$conf{&amp;#8217;dbdriver&amp;#8217;} = &amp;#8220;mysql&amp;#8221;;
$conf{&amp;#8217;dbhost&amp;#8217;}&amp;#160;&amp;#160; = &amp;#8220;localhost&amp;#8221;;
$conf{&amp;#8217;database&amp;#8217;} = &amp;#8220;&amp;#8221;;
$conf{&amp;#8217;dbuser&amp;#8217;}&amp;#160;&amp;#160; = &amp;#8220;&amp;#8221;;
$conf{&amp;#8217;dbpw&amp;#8217;}&amp;#160;&amp;#160;&amp;#160;&amp;#160; = &amp;#8220;&amp;#8221;;
$conf{&amp;#8217;dbtable&amp;#8217;}&amp;#160; = &amp;#8220;&amp;#8221;;
$conf{&amp;#8217;actcheck&amp;#8217;} = 1;&lt;/pre&gt;
&lt;p&gt;Der eigentliche Zugriff auf die Datenbank kommt in die Subroutine &lt;em&gt;&amp;#8220;authenticate&amp;#8221;&lt;/em&gt;, die dann vom INN aufgerufen wird:&lt;/p&gt;
&lt;pre&gt;
### DB init
my $dbs = sprintf(&amp;#8217;DBI:%s:database=%s;host=%s&amp;#8217;,$conf{&amp;#8217;dbdriver&amp;#8217;},$conf{&amp;#8217;database&amp;#8217;},$conf{&amp;#8217;dbhost&amp;#8217;});
my $dbhandle = DBI-&amp;gt;connect($dbs, $conf{&amp;#8217;dbuser&amp;#8217;}, $conf{&amp;#8217;dbpw&amp;#8217;}, { PrintError =&amp;gt; 1 });

### Query database and disconnect.
my(@result);
# quote SQL
my $sql_user = $dbhandle-&amp;gt;quote($attributes{username});
my $sql_pass = $dbhandle-&amp;gt;quote($attributes{password});
my $query = sprintf(&amp;#8220;SELECT domain FROM %s.%s WHERE user = %s AND password = %s&amp;#8221;,$conf{&amp;#8217;database&amp;#8217;},$conf{&amp;#8217;dbtable&amp;#8217;},$sql_user,$sql_pass);
if ($conf{&amp;#8217;actcheck&amp;#8217;}) {
&amp;#160; $query .= &#039; AND active = 1&amp;#8217;;
};
my $dbquery = $dbhandle-&amp;gt;prepare($query);&lt;/pre&gt;
&lt;p&gt;Wenn die Abfrage erfolgreich verlief, es also einen passenden Benutzer mit passenden Paßwort gibt, wird der Zeitpunkt des letzten Logins in der Datenbank aktualisiert:&lt;/p&gt;
&lt;pre&gt;
if ($dbquery-&amp;gt;execute()) {
&amp;#160;@result = $dbquery-&amp;gt;fetchrow_array;
&amp;#160;$dbquery-&amp;gt;finish;
&amp;#160;if (@result) {
&amp;#160; # log timestamp
&amp;#160; my $tm = localtime;
&amp;#160; my $today = sprintf(&amp;#8217;%04d-%02d-%02d&amp;#8217;, $tm-&amp;gt;year+1900, ($tm-&amp;gt;mon)+1, $tm-&amp;gt;mday);
&amp;#160; $query = sprintf(&amp;#8220;UPDATE %s.%s SET llo = &amp;#8216;%s&amp;#8217; WHERE user = %s&amp;#8221;,$conf{&amp;#8217;database&amp;#8217;},$conf{&amp;#8217;dbtable&amp;#8217;},$today,$sql_user);
&amp;#160; $dbquery = $dbhandle-&amp;gt;prepare($query);
&amp;#160; $dbquery-&amp;gt;execute();
&amp;#160; $dbquery-&amp;gt;finish;
&amp;#160;};
};
$dbhandle-&amp;gt;disconnect;&lt;/pre&gt;
&lt;p&gt;Danach ist nur noch entsprechend zu reagieren:&lt;br /&gt;&lt;/p&gt;
&lt;pre&gt;
### check password and respond appropriate
if (@result) {
&amp;#160;my $user = $attributes{username} . &amp;#8216;@&amp;#8217; . $result[0];
&amp;#160;return (281, &amp;#8216;Authentication successful: &amp;#8216;.$user, $user);
} else {
&amp;#160;return (481, &amp;#8216;Authentication failure&amp;#8217;);
}&lt;/pre&gt;
&lt;p&gt;Das komplette Perl-Script gibt&amp;#8217;s in meinem &lt;a title=&quot;code.th-h.de: perl_mysql&quot; href=&quot;http://th-h.de/blog/exit.php?url_id=1412&amp;amp;entry_id=1531&quot;  onmouseover=&quot;window.status=&#039;http://code.th-h.de/?p=usenet/INN.git;a=blob;f=perl_mysql;hb=HEAD&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;Git-Repository&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Eingebunden wird dieses Perl-Script in die &lt;em&gt;readers.conf&lt;/em&gt; des INN als Authentification Group:&lt;/p&gt;
&lt;pre&gt;
auth &amp;#8220;users-mysql&amp;#8221; {
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; hosts: *
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; perl_auth: &amp;#8220;/usr/lib/news/bin/auth/passwd/perl_mysql&amp;#8221;
}&lt;/pre&gt;
&lt;p&gt;Es liefert dann eine Benutzerkennung der Form &lt;em&gt;user@domain&lt;/em&gt; zurück; die &lt;em&gt;domain&lt;/em&gt; kann dann in folgenden Access Groups referenziert werden:&lt;/p&gt;
&lt;pre&gt;
access &amp;#8220;customers&amp;#8221; {
&amp;#160;users: &amp;#8220;*@customer.news.host.example&amp;#8221;
&amp;#160;newsgroups: &amp;#8220;*, !internal.*, !special.*&amp;#8221;
&amp;#160;access: &amp;#8220;RP&amp;#8221;
}&lt;/pre&gt; 
    </content:encoded>

    <pubDate>Sat, 23 Jan 2010 17:55:00 +0100</pubDate>
    <guid isPermaLink="false">http://th-h.de/blog/archives/1531-guid.html</guid>
    <category>anleitung</category>
<category>inn</category>
<category>usenet</category>

</item>
<item>
    <title>INN-Funktionsweise: Steuernachrichten und Filter</title>
    <link>http://th-h.de/blog/archives/1499-INN-Funktionsweise-Steuernachrichten-und-Filter.html</link>
            <category>Releases</category>
    
    <comments>http://th-h.de/blog/archives/1499-INN-Funktionsweise-Steuernachrichten-und-Filter.html#comments</comments>
    <wfw:comment>http://th-h.de/blog/wfwcomment.php?cid=1499</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://th-h.de/blog/rss.php?version=2.0&amp;type=comments&amp;cid=1499</wfw:commentRss>
    

    <author>thh@inter.net (Thomas Hochstein)</author>
    <content:encoded>
    &lt;p&gt;Der Urlaub neigt sich endgültig seinem Ende zu, und - leider - ist die Todo-Liste, insbesondere hinsichtlich angedachter größerer Projekte, die man abends oder am Wochenende (zumindest bei meiner derzeitigen zeitlichen Belastung) nicht sinnvoll angehen kann, nicht merklich geschrumpft. Stattdessen habe ich mich (ungeplant) auf die Datensammlung zu Usenet-Hierarchien und danach dann auf den Umgang mit &lt;strong&gt;git&lt;/strong&gt; konzentriert und am Ende eine ganze Reihe Dinge umgesetzt, die auf der ToDo-Liste eigentlich gar nicht vorkamen. &lt;img src=&quot;http://th-h.de/blog/templates/default/img/emoticons/smile.png&quot; alt=&quot;:-)&quot; style=&quot;display: inline; vertical-align: bottom;&quot; class=&quot;emoticon&quot; /&gt;&lt;/p&gt; 
&lt;p&gt;Nachdem Newsserver in den letzten Wochen eine so große Rolle gespielt haben ist es jetzt zum Abschluss nur recht und billig, wenn ich (nach mehrjähriger Pause) meine Seite zur &lt;a href=&quot;/infos/usenet/inn.php&quot; title=&quot;Funktionsweise des INN&quot;&gt;Funktionsweise des INN&lt;/a&gt; endlich um die noch fehlenden Teile ergänze; umso mehr, als ich meine Webseiten mittlerweile in ein &lt;em&gt;git&lt;/em&gt;-Repository eingecheckt habe und daher auch den Umgang damit üben kann, insbesondere, was fraktionierte Commits betrifft. Das ist eine sehr nette Sache: man nimmt eine Reihe unterschiedlicher Änderungen vor, die nichts miteinander zu tun haben - bspw. eine Ergänzung der INN-Beschreibung auf der einen Seite und Richtigstellungen/Tippfehlerkorrekturen, über die man zufällig stolpert, auf der anderen -, und kann diese Änderungen aber selektiv committen, bspw. zuerst nur die Ergänzungen, dann die Änderungen, dann die Rechtschreibfehler. Das macht die Commits übersichtlicher und ggf. auch leichter zu reverten, weil man nur logisch zusammengehörendes auch zusammen committet, ohne daß man beim Editieren darauf achten müßte.&lt;/p&gt; 
&lt;p&gt;Ich kann also hiermit verkünden, daß ich die Abschnitte über Steuernachrichten (&lt;em&gt;control.ctl&lt;/em&gt;), Filter und Reader-Authentifizierung sowie eine recht umfangreiche Linksammlung ergänzt habe. Fehlen nur noch Erläuterungen zum Expire, aber das muß ich erst einmal selbst verstehen. &lt;img src=&quot;http://th-h.de/blog/templates/default/img/emoticons/wink.png&quot; alt=&quot;;-)&quot; style=&quot;display: inline; vertical-align: bottom;&quot; class=&quot;emoticon&quot; /&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Update 2010-01-26:&lt;/strong&gt; Inzwischen steht auch die Erläuterung zum Expire online. Die Seite ist damit - endlich! - fast fünf Jahre nach ihrer ersten Erstellung komplettiert. Ich hoffe, sie hilft dem einen oder anderen (vermißt wurden die fehlenden Teile allerdings offensichtlich nicht, wenn man nach dem erhaltenen Feedback über die Jahre geht ...).&lt;/p&gt;  
    </content:encoded>

    <pubDate>Sun, 17 Jan 2010 17:06:00 +0100</pubDate>
    <guid isPermaLink="false">http://th-h.de/blog/archives/1499-guid.html</guid>
    <category>git</category>
<category>inn</category>
<category>usenet</category>

</item>
<item>
    <title>INN: NoCeMs verarbeiten</title>
    <link>http://th-h.de/blog/archives/1474-INN-NoCeMs-verarbeiten.html</link>
            <category>Bits'n'Bytes</category>
    
    <comments>http://th-h.de/blog/archives/1474-INN-NoCeMs-verarbeiten.html#comments</comments>
    <wfw:comment>http://th-h.de/blog/wfwcomment.php?cid=1474</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://th-h.de/blog/rss.php?version=2.0&amp;type=comments&amp;cid=1474</wfw:commentRss>
    

    <author>thh@inter.net (Thomas Hochstein)</author>
    <content:encoded>
    &lt;p&gt;Ergänzend zur bereits im November eingerichteten &lt;a title=&quot;INN: Cancel-Lock und Cancel-Key&quot; href=&quot;http://th-h.de/blog/archives/1473-INN-Cancel-Lock-und-Cancel-Key.html&quot;&gt;Auswertung von Cancel-Lock und -Key&lt;/a&gt; auf &lt;a href=&quot;http://th-h.de/blog/exit.php?url_id=1292&amp;amp;entry_id=1474&quot;  onmouseover=&quot;window.status=&#039;http://news.szaf.org/&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;news.szaf.org&lt;/a&gt; habe ich heute die Auswertung von NoCeMs eingerichtet. NoCeM (&amp;#8220;No See &amp;#8216;Em&amp;#8221;) sind, grob umrissen, digital signierte Usenet-Beiträge in einem festen Format zur Löschung meist einer ganzen Reihe anderer Beiträge, also so etwas wie digital signierte Massencancel. Das mit INN ausgelieferte &lt;em&gt;perl-nocem&lt;/em&gt; erlaubt die Auswertung dieser Nachrichten fein granuliert nach den jeweiligen Absendern. Zur Einrichtung sind folgende Anleitungen zu empfehlen:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a title=&quot;INN-Documentation: perl-nocem&quot; href=&quot;http://th-h.de/blog/exit.php?url_id=1293&amp;amp;entry_id=1474&quot;  onmouseover=&quot;window.status=&#039;http://www.eyrie.org/~eagle/software/inn/docs/perl-nocem.html&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;INN-Dokumentation zu &lt;em&gt;perl-nocem&lt;/em&gt;&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://th-h.de/blog/exit.php?url_id=1294&amp;amp;entry_id=1474&quot; title=&quot;http://news.unit0.net/doku/nocem_admin.txt&quot;  onmouseover=&quot;window.status=&#039;http://news.unit0.net/doku/nocem_admin.txt&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;Somewhat of an copy&amp;amp;paste tutorial for NoCeM&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Zur Einrichtung gehören in jedem Fall folgende Schritte:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;digitale Schlüssel der Versender herunterladen (bspw. von der &lt;a title=&quot;NoCeM Registry&quot; href=&quot;http://th-h.de/blog/exit.php?url_id=1295&amp;amp;entry_id=1474&quot;  onmouseover=&quot;window.status=&#039;http://www.xs4all.nl/~rosalind/nocemreg/&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;NoCeM Registry&lt;/a&gt;: &lt;a href=&quot;http://th-h.de/blog/exit.php?url_id=1296&amp;amp;entry_id=1474&quot; title=&quot;http://www.xs4all.nl/~rosalind/nocemreg/ncmring.asc&quot;  onmouseover=&quot;window.status=&#039;http://www.xs4all.nl/~rosalind/nocemreg/ncmring.asc&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;NoCeM-Keyring&lt;/a&gt;) &lt;/li&gt;
&lt;li&gt;konfigurieren, welche NoCeMs ausgeführt werden sollen (&lt;em&gt;nocem.ctl&lt;/em&gt;) &lt;/li&gt;
&lt;li&gt;entsprechenden Feed in &lt;em&gt;perl-nocem&lt;/em&gt; einrichten &lt;/li&gt;
&lt;li&gt;ggf. entsprechende Newsgroups, in denen NoCeMs gepostet werden, abonnieren &lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Der &lt;em&gt;newsfeeds&lt;/em&gt;-Eintrag kann beispielsweise so aussehen:&lt;/p&gt;
&lt;pre&gt;
nocem!\
    :!*,alt.nocem.misc,news.lists.filters,de.admin.net-abuse.announce\
    :Tc,Wf,Ap:/usr/lib/news/bin/perl-nocem&lt;/pre&gt;
&lt;p&gt;Bei den o.g. Anleitungen sind die Pfade ggf. anzupassen. Es hat sich m.E. bewährt, einfach die durch die jeweilige Distribution vorgegebene Struktur zu übernehmen.&lt;br /&gt;&lt;/p&gt;  
    </content:encoded>

    <pubDate>Sat, 12 Dec 2009 22:56:00 +0100</pubDate>
    <guid isPermaLink="false">http://th-h.de/blog/archives/1474-guid.html</guid>
    <category>anleitung</category>
<category>inn</category>
<category>usenet</category>

</item>
<item>
    <title>Aktueller Cleanfeed</title>
    <link>http://th-h.de/blog/archives/1471-Aktueller-Cleanfeed.html</link>
            <category>Bits'n'Bytes</category>
    
    <comments>http://th-h.de/blog/archives/1471-Aktueller-Cleanfeed.html#comments</comments>
    <wfw:comment>http://th-h.de/blog/wfwcomment.php?cid=1471</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://th-h.de/blog/rss.php?version=2.0&amp;type=comments&amp;cid=1471</wfw:commentRss>
    

    <author>thh@inter.net (Thomas Hochstein)</author>
    <content:encoded>
    &lt;p&gt;&amp;#8220;&lt;a title=&quot;en-Wikipedia: Cleanfeed&quot; href=&quot;http://th-h.de/blog/exit.php?url_id=1280&amp;amp;entry_id=1471&quot;  onmouseover=&quot;window.status=&#039;http://en.wikipedia.org/wiki/Cleanfeed_%28Usenet_spam_filter%29&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;Cleanfeed&lt;/a&gt;&amp;#8221; ist, wie der Name bereits nahelegt, ein Filter für den Newsserver INN, der auf per Feed von anderen Newsservern (Peers) empfangene Artikel wirkt, also den Feed &amp;#8220;säubert&amp;#8221;, vor allem von Spam, böswilligen Massenpostings (als Form des &amp;#8220;Angriffs&amp;#8221; auf bestimmte Newsgroups) und anderen unerwünschten Erscheinungen. Nachdem die ursprünglich in den Neunzigern von Jeremy Nixon &lt;a title=&quot;Jeremy Nixon: Cleanfeed&quot; href=&quot;http://th-h.de/blog/exit.php?url_id=1281&amp;amp;entry_id=1471&quot;  onmouseover=&quot;window.status=&#039;http://www.exit109.com/~jeremy/news/cleanfeed/&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;begonnene&lt;/a&gt; Entwicklung lange eingeschlafen erschien (und der Filter wie auch die mit ihm ausgelieferte Konfiguration zunehmend &lt;a title=&quot;Marco d&#039;Itri: letztes Release 2001&quot; href=&quot;http://th-h.de/blog/exit.php?url_id=1282&amp;amp;entry_id=1471&quot;  onmouseover=&quot;window.status=&#039;http://www.bofh.it/~md/cleanfeed/&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;überaltert wirkten&lt;/a&gt;), hat sich seit 2007 nunmehr Steven Crook der Sache angenommen, einige Updates herausgebracht, die Konfiguration weiter modularisiert und eine &lt;a title=&quot;Cleanfeed (mixmin.net)&quot; href=&quot;http://th-h.de/blog/exit.php?url_id=1283&amp;amp;entry_id=1471&quot;  onmouseover=&quot;window.status=&#039;http://www.mixmin.net/cleanfeed/&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;Webseite&lt;/a&gt; mit entsprechender Dokumentation aufgesetzt.&lt;/p&gt; 
&lt;p&gt;Dieser &amp;#8220;neue&amp;#8221; Cleanfeed werkelt jetzt nach der einfachen &lt;a title=&quot;Installing and upgrading Cleanfeed&quot; href=&quot;http://th-h.de/blog/exit.php?url_id=1284&amp;amp;entry_id=1471&quot;  onmouseover=&quot;window.status=&#039;http://www.mixmin.net/cleanfeed/install.html&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;Installation&lt;/a&gt; auf &lt;a title=&quot;news.szaf.org&quot; href=&quot;http://th-h.de/blog/exit.php?url_id=1285&amp;amp;entry_id=1471&quot;  onmouseover=&quot;window.status=&#039;http://news.szaf.org/&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;news.szaf.org&lt;/a&gt;; nur die Konfiguration bedarf sicherlich noch weiter der Verfeinerung (nachdem ich bisher wie mit dem Vorgänger in den vergangenen Jahren primär auf die Defaults setze).&lt;br /&gt; &lt;/p&gt;  
    </content:encoded>

    <pubDate>Sun, 15 Nov 2009 16:02:00 +0100</pubDate>
    <guid isPermaLink="false">http://th-h.de/blog/archives/1471-guid.html</guid>
    <category>inn</category>
<category>usenet</category>

</item>
<item>
    <title>INN: Cancel-Lock und Cancel-Key</title>
    <link>http://th-h.de/blog/archives/1473-INN-Cancel-Lock-und-Cancel-Key.html</link>
            <category>Bits'n'Bytes</category>
    
    <comments>http://th-h.de/blog/archives/1473-INN-Cancel-Lock-und-Cancel-Key.html#comments</comments>
    <wfw:comment>http://th-h.de/blog/wfwcomment.php?cid=1473</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://th-h.de/blog/rss.php?version=2.0&amp;type=comments&amp;cid=1473</wfw:commentRss>
    

    <author>thh@inter.net (Thomas Hochstein)</author>
    <content:encoded>
    &lt;p&gt;Im Rahmen der &lt;a title=&quot;Umbaumaßnahmen&quot; href=&quot;http://th-h.de/blog/archives/1470-Umbaumassnahmen.html&quot;&gt;notwendigen Umbaumaßnahmen&lt;/a&gt; und der Neueinrichtung von &lt;a title=&quot;news.szaf.org&quot; href=&quot;http://th-h.de/blog/exit.php?url_id=1270&amp;amp;entry_id=1473&quot;  onmouseover=&quot;window.status=&#039;http://news.szaf.org/&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;news.szaf.org&lt;/a&gt; habe ich endlich auch die Unterstützung von Cancel-Lock und Cancel-Key umgesetzt.&lt;/p&gt;
&lt;p&gt;&lt;a title=&quot;Wikipedia: Canceln&quot; href=&quot;http://th-h.de/blog/exit.php?url_id=1271&amp;amp;entry_id=1473&quot;  onmouseover=&quot;window.status=&#039;http://de.wikipedia.org/wiki/Canceln&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;Cancel&lt;/a&gt; sind Steuernachrichten zur Löschung anderer Nachrichten im Usenet, vorgesehen zur Löschung eigener Beiträge (oder ggf. noch zur Löschung von Beiträgen durch den Newsadministrator des einspeisenden Servers). Das Protokoll sieht aber keine Verifizierung dieser Nachrichten vor; grundsätzlich kann also jeder Teilnehmer Nachrichten von jedem anderen Teilnehmer löschen, was zwar unzulässig ist und auf breite Ablehnung stößt, aber dennoch in der Vergangenheit gerne vieltausendfach genutzt wurde, nicht nur für von der Netzgemeinschaft akzeptierte Spamcancel, sondern auch für Attacken gegen bestimmte Newsgroups (&amp;#8220;leercanceln&amp;#8221;) oder Netzteilnehmer. Die als Reaktion oft erfolgte Abschaltung der Cancel-Funktionalität war aber auch nicht der Weisheit letzter Schluß.&lt;/p&gt;
&lt;p&gt;Daher wurden bereits Ende der Neunziger &lt;a title=&quot;draft-ietf-usefor-cancel-lock-01.txt&quot; href=&quot;http://th-h.de/blog/exit.php?url_id=1272&amp;amp;entry_id=1473&quot;  onmouseover=&quot;window.status=&#039;http://tools.ietf.org/html/draft-ietf-usefor-cancel-lock-01&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;Vorschläge&lt;/a&gt; gemacht, wie das Canceln von Beiträgen nur für Befugte ermöglicht werden kann, nämlich durch das Hinzufügen eines kryptographischen Cancel-Locks in jedem Beitrag, zu dem eine Cancelnachricht den passenden Cancel-Key enthalten muß, wenn sie ausgeführt werden soll. Cancel-Lock und -Key sind dabei zusammengesetzt aus einem geheimen Schlüssel und der Message-ID des jeweiligen (bzw. zu cancelnden) Postings. Nachdem diese Vorschläge jedenfalls auf Client-Seite nie breite Umsetzung - außerhalb einiger unixoider Newsreader - fanden (und sich das Prinzio vermutlich deshalb auch auf Serverseite nicht durchsetzte), bekamen Cancel-Lock und -Key Ende Juni 2007 durch deren &lt;a title=&quot;[Individual] Verbesserung der Cancelverarbeitung&quot; href=&quot;http://th-h.de/blog/exit.php?url_id=1273&amp;amp;entry_id=1473&quot;  onmouseover=&quot;window.status=&#039;http://groups.google.de/group/de.comm.provider.usenet/msg/1a59a366550b9dfe&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;verpflichtende Einführung&lt;/a&gt; bei dem bedeutenden deutschen Newsserver &lt;a href=&quot;http://th-h.de/blog/exit.php?url_id=1274&amp;amp;entry_id=1473&quot; title=&quot;http://news.individual.de/&quot;  onmouseover=&quot;window.status=&#039;http://news.individual.de/&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;news.individual.de&lt;/a&gt; neuen Auftrieb. Dort hat man nämlich nicht nur die Überprüfung von Cancel-Locks aktiviert, sondern zugleich hinsichtlich der fehlenden Unterstützung im Client zumindest für die eigenen Nutzer insoweit Abhilfe geschaffen als Cancel-Locks durch den Server (!) automatisch allen Beiträgen hinzugefügt werden (und bei berechtigten Canceln wird in gleicher Weise automatisch der passende Cancel-Key eingetragen).&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;Bereits kurz danach wurden in &lt;em&gt;de.comm.software.newsserver&lt;/em&gt; - namentlich durch &lt;a href=&quot;http://th-h.de/blog/exit.php?url_id=1275&amp;amp;entry_id=1473&quot; title=&quot;http://albasani.net/&quot;  onmouseover=&quot;window.status=&#039;http://albasani.net/&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;Alexander Bartolich&lt;/a&gt; - erste Implementationen sowohl zum Einfügen als auch zum Prüfen von Cancel-Lock und -Key für den INN veröffentlicht:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://th-h.de/blog/exit.php?url_id=1276&amp;amp;entry_id=1473&quot; title=&quot;http://groups.google.at/group/de.comm.software.newsserver/msg/6b76c846ac2d7e86&quot;  onmouseover=&quot;window.status=&#039;http://groups.google.at/group/de.comm.software.newsserver/msg/6b76c846ac2d7e86&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;Cancel-Lock in filter_nnrpd.pl setzen&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://th-h.de/blog/exit.php?url_id=1277&amp;amp;entry_id=1473&quot; title=&quot;http://groups.google.at/group/de.comm.software.newsserver/msg/459d56fec57f931&quot;  onmouseover=&quot;window.status=&#039;http://groups.google.at/group/de.comm.software.newsserver/msg/459d56fec57f931&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;Cancel-Lock in filter_nnrpd.pl/cleanfeed.local überprüfen&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Grundsätzlich sind für die Überprüfung von Cancel-Lock und -Key zwei Varianten denkbar: Entweder läßt man die Cancelverarbeitung in Betrieb und filtert unerwünschte Cancel (und Supersedes!) im &lt;em&gt;filter_innd&lt;/em&gt; aus, oder man deaktiviert die Cancel-Verarbeitung komplett und führt nur erwünschte Cancel aus &lt;em&gt;filter_innd&lt;/em&gt; heraus aus. Letzteres ermöglicht die weitere Unterscheidung, ob man Cancel ablehnen oder zwar annehmen und weiterverbreiten, aber nicht ausführen oder annehmen und ausführen möchte. Weiterhin muß man sich entscheiden, wie man mit Postings ohne Cancel-Lock umgehen will. Für diese Postings kann man weiterhin alle Cancel akzeptieren - oder keinen. (Und man muß sich eine Lösung für Spamcancel überlegen; entweder &lt;a title=&quot;Usenet-Beitrag&quot; href=&quot;http://th-h.de/blog/exit.php?url_id=1278&amp;amp;entry_id=1473&quot;  onmouseover=&quot;window.status=&#039;http://al.howardknight.net/msgid.cgi?ID=126644182600&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;akzeptiert man signierte Cancel&lt;/a&gt; aus vertrauenswürdiger Quelle, oder man implementiert zugleich &lt;a title=&quot;NoCeM Technical Information&quot; href=&quot;http://th-h.de/blog/exit.php?url_id=1279&amp;amp;entry_id=1473&quot;  onmouseover=&quot;window.status=&#039;http://www.cm.org/nocem.html&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;NoCeM&lt;/a&gt; als Ergänzung.)&lt;br /&gt;&lt;/p&gt; &lt;p&gt;Egal, wie man zu der Überprüfung von Cancel-Lock und -Key steht: zumindest das automatische Einfügen derselben in Postings der eigenen Benutzer (Cancel-LOck für jedes Posting, Cancel-Key für Cancel und Supersedes) ist in keinem Fall schädlich und durchaus hilfreich, eben weil es Server gibt, die Cancel nur noch mit passendem Cancel-Key ausführen. Es bietet sich an, diese Funktionalität für den INN im &lt;em&gt;filter_nnrpd&lt;/em&gt; zu implementieren, dem Filter also, den alle, aber auch nur die lokal geposteten Beiträge durchlaufen. Eine denkbare Implementation ist die folgende für &lt;strong&gt;filter_nnrpd.pl&lt;/strong&gt;, basierend auf dem Posting von &lt;strong&gt;Alexander Bartolich&lt;/strong&gt;:&lt;/p&gt;
&lt;pre&gt;
#
# Do any initialization steps.
#
use Digest::MD5  qw(md5_base64);
use Digest::SHA1();
use Digest::HMAC_SHA1();
use MIME::Base64();

$CANCEL_LOCK = &amp;#8216;hereasecretword&amp;#8217;;

#
# Filter
#
sub filter_post {
   my $rval = &amp;#8220;&amp;#8221; ;             # assume we&amp;#8217;ll accept.
   $modify_headers = 1;

   [...]

   # Cancel-Lock / Cancel-Key
   add_cancel_lock(%hdr, $user);
     
   if (exists( $hdr{&amp;#8220;Control&amp;#8221;} ) &amp;amp;&amp;amp; $hdr{&amp;#8220;Control&amp;#8221;} =~ m/^cancel\s+(&amp;lt;[^&amp;gt;]+&amp;gt;)/i) {
      my $key = calc_cancel_key($user, $1);
      add_cancel_item(%hdr, &amp;#8216;Cancel-Key&amp;#8217;, $key);
   }
   elsif (exists( $hdr{&amp;#8220;Supersedes&amp;#8221;} )) {
      my $key = calc_cancel_key($user, $hdr{&amp;#8220;Supersedes&amp;#8221;});
      add_cancel_item(%hdr, &amp;#8216;Cancel-Key&amp;#8217;, $key);
   }
     
   return $rval;
}

#
# Cancel-Lock / Cancel-Key
#
sub add_cancel_item($$$) {
   my ( $r_hdr, $name, $value ) = @_;
   my $prefix = $r_hdr-&amp;gt;{$name};
   $prefix = defined($prefix) ? $prefix . &#039; sha1:&amp;#8217; : &amp;#8216;sha1:&amp;#8217;;
   $r_hdr-&amp;gt;{$name} = $prefix . $value;
}

sub calc_cancel_key($$) {
   my ( $user, $message_id ) = @_;
   return MIME::Base64::encode(Digest::HMAC_SHA1::hmac_sha1($message_id, $user . $CANCEL_LOCK), &amp;#8216;&amp;#8217;);
}

sub add_cancel_lock($$) {
   my ( $r_hdr, $user ) = @_;
   my $key = calc_cancel_key($user, $r_hdr-&amp;gt;{&amp;#8217;Message-ID&amp;#8217;});
   my $lock = MIME::Base64::encode(Digest::SHA1::sha1($key), &amp;#8216;&amp;#8217;);
   add_cancel_item($r_hdr, &amp;#8216;Cancel-Lock&amp;#8217;, $lock);
}&lt;/pre&gt;
&lt;p&gt;Dort, wo oben &lt;em&gt;[...]&lt;/em&gt; steht, können andere Teile des Filters eingefügt werden.&lt;/p&gt;
&lt;p&gt;Die Überprüfung kann bspw. in &lt;em&gt;cleanfeed&lt;/em&gt; in die &lt;strong&gt;cleanfood.local&lt;/strong&gt; eingebunden werden; zunächst sind wieder die notwendigen Perl-Module einzubinden:&lt;/p&gt;
&lt;pre&gt;
use MIME::Base64();
use Digest::SHA1();
use Digest::HMAC_SHA1();&lt;/pre&gt;
&lt;p&gt;Danach wird in &lt;em&gt;local_filter_cancel()&lt;/em&gt; die Validität des Cancels geprüft und in &lt;em&gt;local_filter_after_emp()&lt;/em&gt; die Validität von Supersedes:&lt;/p&gt;
&lt;pre&gt;
#
# local_filter_cancel
#
sub local_filter_cancel {
   unless($hdr{Control} =~ m/^cancel\s+(&amp;lt;[^&amp;gt;]+&amp;gt;)/i) {
      return &amp;#8220;Cancel with broken target ID&amp;#8221;;
   }
   return verify_cancel(%hdr, $1, &amp;#8216;Cancel&amp;#8217;);
}

sub local_filter_after_emp {
   if (exists( $hdr{&amp;#8217;Supersedes&amp;#8217;} )) {
      &lt;STRONG&gt;#return verify_cancel(%hdr, $hdr{&amp;#8217;Supersedes&amp;#8217;}, &amp;#8216;Supersedes&amp;#8217;);&lt;/STRONG&gt;
      # verify_cancel is called, but not returned, so the
      # posting is unconditionally accepted
      # verify_cancel calls INN:cancel() if verification suceeds
      &lt;STRONG&gt;verify_cancel(%hdr, $hdr{&amp;#8217;Supersedes&amp;#8217;}, &amp;#8216;Supersedes&amp;#8217;);&lt;/STRONG&gt;
   }

   return undef;
}&lt;/pre&gt;
&lt;p&gt;Diese Variante setzt voraus, dass die Cancelverarbeitung in INN deaktiviert ist (&lt;em&gt;innflags: -C&lt;/em&gt; in &lt;em&gt;inn.conf&lt;/em&gt; setzen und INN neu starten). Sie akzeptiert nur Cancel mit passendem Cancel-Key; Supersedes werden in jedem Fall angenommen, aber nur ausgeführt, wenn sie über einen passenden Cancel-Key verfügen. Bei aktivierter Cancelverarbeitung sind die beiden hervorgehobenen Zeilen auszutauschen, d.h. die eine ist durch Entfernen des Kommentarzeichens zu aktivieren, die andere auszukommentieren.&lt;/p&gt;
&lt;p&gt;Die eigentliche &amp;#8220;Arbeit&amp;#8221; erfolgt dann in den folgenden zusätzlich noch einzufügenden Funktionen:&lt;/p&gt;
&lt;pre&gt;
sub verify_cancel($$$) {
   my $r_hdr = shift || die;
   my $target = shift;
   my $descr = shift;

   my $headers = INN::head($target) || return &amp;#8220;$descr of non-existing ID $target&amp;#8221;;

   my %headers;
   for my $line(split(/\s*\n/, $headers))    {
      if ($line =~ m/^([[:alnum:]-]+):\s+(.*)/) {
         $headers{$1} = $2;
      }
   }

   my $lock = $headers{&amp;#8217;Cancel-Lock&amp;#8217;};
   if (defined($lock)) {
      my $key = $r_hdr-&amp;gt;{&amp;#8217;Cancel-Key&amp;#8217;} || return &amp;#8220;$descr of $target without Cancel-Key&amp;#8221;;
      #return verify_cancel_key($key, $lock, &#039; target=&amp;#8217; . $target);
      return verify_cancel_key($key, $lock, $target);
   }

   return undef;
}

sub verify_cancel_key($$$) {
   my $cancel_key = shift;
   my $cancel_lock = shift;
   my $msg = shift;

   $msg = &amp;#8216;&amp;#8217; unless(defined($msg));
   # -thh
   my $target = $msg;
   $msg = &#039; target=&amp;#8217; . $msg;

   my %lock;
   for my $l(split(/\s+/, $cancel_lock))   {
      next unless($l =~ m/^(sha1|md5):(\S+)/);
      $lock{$2} = $1;
   }

   for my $k(split(/\s+/, $cancel_key))    {
      unless($k =~ m/^(sha1|md5):(\S+)/) { 
        INN::syslog(&amp;#8217;notice&amp;#8217;, &amp;#8220;Invalid Cancel-Key syntax &amp;#8216;$k&amp;#8217;.$msg&amp;#8221;);
        next;
      }

      my $key;
      if ($1 eq &amp;#8216;sha1&amp;#8217;) {
         $key = Digest::SHA1::sha1($2); }
      elsif ($1 eq &amp;#8216;md5&amp;#8217;) {
         $key = Digest::MD5::md5($2);
      }
      $key = MIME::Base64::encode_base64($key, &amp;#8216;&amp;#8217;);

      if (exists($lock{$key})) { 
         INN::syslog(&amp;#8217;notice&amp;#8217;, &amp;#8220;Valid Cancel-Key $key found.$msg&amp;#8221;);
         # -thh
         # article is canceled now
         &lt;STRONG&gt;INN::cancel($target) if ($target);&lt;/STRONG&gt;
         return undef;
      }
   }

   INN::syslog(&amp;#8217;notice&amp;#8217;,
      &amp;#8220;No Cancel-Key[$cancel_key] matches Cancel-Lock[$cancel_lock]$msg&amp;#8221;
   );
   return &amp;#8220;No Cancel-Key matches Cancel-Lock.$msg&amp;#8221;;
}&lt;/pre&gt;
&lt;p&gt;Auch diese Funktionen sind für eine generell deaktivierte Cancelverarbeitung geschrieben; wenn die Cancelverarbeitung aktiv ist, ist die hervorgehobene Zeile wegzulassen oder auszukommentieren.&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;Auch der Code für &lt;em&gt;cleanfeed&lt;/em&gt; stammt im wesentlichen von &lt;strong&gt;Alexander Bartolich&lt;/strong&gt; und ansonsten von &amp;#8220;&lt;strong&gt;Ray Banana&lt;/strong&gt;&amp;#8221;.&lt;/p&gt;
&lt;p&gt;(Die obigen Codeteile sind aus Postings zusammengetragen, getestet und für meine eigenen Zwecke angepaßt; dieser Blog-Beitrag soll &lt;u&gt;eine&lt;/u&gt; mögliche Umsetzung von Cancel-Lock und -Key vorstellen, die ich im Rahmen der Neueinrichtung meines Newsserver vorgenommen habe. Er kann und will keine Darstellung des Für und Wider und der verschiedenen Möglichkeiten des Umgangs damit bieten.)&lt;br /&gt;&lt;/p&gt; 
    </content:encoded>

    <pubDate>Sat, 14 Nov 2009 21:49:00 +0100</pubDate>
    <guid isPermaLink="false">http://th-h.de/blog/archives/1473-guid.html</guid>
    <category>anleitung</category>
<category>inn</category>
<category>usenet</category>

</item>
<item>
    <title>Umbaumaßnahmen</title>
    <link>http://th-h.de/blog/archives/1470-Umbaumassnahmen.html</link>
            <category>Bits'n'Bytes</category>
    
    <comments>http://th-h.de/blog/archives/1470-Umbaumassnahmen.html#comments</comments>
    <wfw:comment>http://th-h.de/blog/wfwcomment.php?cid=1470</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://th-h.de/blog/rss.php?version=2.0&amp;type=comments&amp;cid=1470</wfw:commentRss>
    

    <author>thh@inter.net (Thomas Hochstein)</author>
    <content:encoded>
    &lt;p&gt;Bereits gestern abend hatte ich bis heute in der Früh &lt;img src=&quot;http://th-h.de/blog/templates/default/img/emoticons/wink.png&quot; alt=&quot;;-)&quot; style=&quot;display: inline; vertical-align: bottom;&quot; class=&quot;emoticon&quot; /&gt; &lt;a href=&quot;http://th-h.de/blog/archives/1469-Freitag-der-13..html&quot; title=&quot;Freitag der 13.&quot;&gt;störungsbedingt&lt;/a&gt; die ersten Dienste (einen semi-öffentlichen &lt;em&gt;bitlbee&lt;/em&gt;-Server, die Mailinglisten, den secondary MX für einige Domains) auf die neue Maschine umgezogen; heute war dann der Newsserver dran, der inzwischen auch provisorisch seinen Dienst aufgenommen hat. &amp;#8220;Provisorisch&amp;#8221; insofern, als er bislang seinen Feed von der alten Maschine bekommt und auch primär nach dort feedet, aber die ersten Peers haben erfreulich schnell auf meine Bitte per E-Mail reagiert und ihren Feed geschwenkt.&lt;/p&gt; 
&lt;p&gt;Diesmal bemühe ich mich überdies, die Konfiguration des INN direkt von Anfang an &amp;#8220;sauber&amp;#8221; aufzusetzen und zugleich die ersten Punkte auf (m)einer Liste der geplanten Änderungen und Verbesserungen umzusetzen. Auf dieser Liste finden sich Dinge wie&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;die reproduzierbar funktionsfähige Verifikation von Steuernachrichten,&lt;/li&gt;
&lt;li&gt;ein aktueller Cleanfeed,&lt;/li&gt;
&lt;li&gt;das automatische Setzen und das Auswerten von Cancel-Lock/Cancel-Key,&lt;/li&gt;
&lt;li&gt;die Auswertung (ggf. auch Generierung) von NoCeMs,&lt;/li&gt;
&lt;li&gt;das Überarbeiten des Gruppenangebots,&lt;/li&gt;
&lt;li&gt;das Zuweisen von jeweils eigenen Hostnamen pro Feed, um diese ggf. gezielt schwenken zu können&lt;/li&gt;
&lt;li&gt;usw. usf.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Inbesondere letzteres dürfte sich bei künftigen IP-Änderungen bewähren, weil man dann erst einmal einige Feeds auf die neue Maschine schwenken und sie dabei beobachten kann (laufen Hardware und Software stabil? ist alles richtig konfiguriert? ...), und bei Bedarf auch Lastmanagement, also die Verteilung der Feeds auf verschiedenen Maschinen, ermöglichen.&lt;/p&gt; 
&lt;p&gt;Mit dem Umzug des Newsservers sollte dann die Migration von &lt;a href=&quot;/me/rechner.php#haystack&quot; title=&quot;haystack&quot;&gt;&lt;em&gt;haystack&lt;/em&gt;&lt;/a&gt;, der alten Maschine, auf den Nachfolger &lt;em&gt;&lt;a href=&quot;/me/rechner.php#pasture&quot; title=&quot;pasture&quot;&gt;pasture&lt;/a&gt;&lt;/em&gt; abgeschlossen sein.&lt;/p&gt;  
    </content:encoded>

    <pubDate>Sat, 14 Nov 2009 20:07:00 +0100</pubDate>
    <guid isPermaLink="false">http://th-h.de/blog/archives/1470-guid.html</guid>
    <category>INN</category>
<category>Usenet</category>

</item>
<item>
    <title>INN und SSL/TLS (Debian Lenny)</title>
    <link>http://th-h.de/blog/archives/1411-INN-und-SSLTLS-Debian-Lenny.html</link>
            <category>Bits'n'Bytes</category>
    
    <comments>http://th-h.de/blog/archives/1411-INN-und-SSLTLS-Debian-Lenny.html#comments</comments>
    <wfw:comment>http://th-h.de/blog/wfwcomment.php?cid=1411</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://th-h.de/blog/rss.php?version=2.0&amp;type=comments&amp;cid=1411</wfw:commentRss>
    

    <author>thh@inter.net (Thomas Hochstein)</author>
    <content:encoded>
    &lt;p&gt;Das Internet ist schon lange kein friedlicher Ort mehr, an dem jeder jedem trauen kann - und deshalb wurden die ursprünglichen, unverschlüsselten Kommunikationsprotokolle schon lange durch kryptograhpisch abgesicherte Variationen ersetzt. Telnet verwendet heute wohl niemand mehr offen im Netz, stattdessen gibt es SSH; auch im Mailverkehr pflegt man - hoffentlich - zumindest das Paßwort beim Abruf über POP3 via APOP und beim Versand via SMTP über eine SMTP-Aut-Variante mit Verschlüsselung zu sichern, wenn man nicht ohnehin die ganze Kommunikation SSL-verschlüsselt, und auch diejenigen, die FTP noch nicht durch SCP/SFTP ersetzt haben, nutzen hoffentlich wenigstens SSL, um die Paßwortübertragung zu verschlüsseln.&lt;/p&gt;
&lt;p&gt;So weit, so gut, aber schon vor einer ganzen Weile fiel mir auf, daß diese Regel für Netnews (NNTP) offenbar nicht gilt (und für UUCP oft auch nicht ...); denn zu seinem oder seinen Newsserver(n) verbindet man sich oft genug noch unverschlüsselt, obwohl auch dort ein Paßwort übertragen wird. So ging es zumindest mir, und ich habe mich am vergangenen Wochenende entschlossen, dagegen etwas zu unternehmen und auch die Verbindung zumindest zu meinem eigenen Newsserver zu verschlüsseln.&lt;br /&gt;&lt;/p&gt; &lt;p&gt;Das ist - mit dem INN 2.4.5-Paket aus Debian Lenny - eigentlich ganz einfach:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ein SSL/TLS-fähiger &lt;em&gt;nnrpd&lt;/em&gt; ist bereits vorhanden (&lt;em&gt;nnrpd-ssl&lt;/em&gt;). Wer nicht das vorgenannte Paket verwendet, muß den INN (oder zumindest den &lt;em&gt;nnrpd&lt;/em&gt;) ggf. mit &amp;#8220;&lt;em&gt;configure --with-openssl&lt;/em&gt;&amp;#8221; noch einmal kompilieren.&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;Schlüssel muß man sich erzeugen, sofern noch nicht vorhanden. Vorhandene Zertifikate bzw. Schlüssel sollte man vielleicht am einfachsten kopieren; standardmäßig werden sie in &lt;em&gt;/etc/news &lt;/em&gt;gesucht. Das ist verhandelbar respektive konfigurierbar, aber das Zertifikat und der Schlüssel müssen dem User &lt;em&gt;news &lt;/em&gt;gehören und die Rechte &lt;em&gt;600 &lt;/em&gt;aufweisen. &lt;/li&gt;
&lt;li&gt;Die Konfigurationsdatei &lt;em&gt;/etc/news/sasl.conf&lt;/em&gt; muß editiert (oder ggf. angelegt) werden, um die korrekten Pfade zum Zertifikat und dem privaten Schlüssel des Servers aufzunehmen. &amp;#8220;&lt;em&gt;tls_cert_file&lt;/em&gt;&amp;#8221; und &amp;#8220;&lt;em&gt;tls_key_file&lt;/em&gt;&amp;#8221; sind die relevanten Parameter. &lt;/li&gt;
&lt;li&gt;Danach muß der &lt;em&gt;nnrpd-ssl&lt;/em&gt; nur noch veranlasst werden, auf Port 563 (NNTPS) zu lauschen. Das kann man u.a. über den &lt;em&gt;(x)inetd&lt;/em&gt; erreichen, indem man bspw. folgende Konfigurationsdatei in &lt;em&gt;/etc/xinet.d/ &lt;/em&gt;einwirft: 
&lt;blockquote&gt;
&lt;p&gt;service nntps&lt;br /&gt;{&lt;br /&gt;&amp;#160;&amp;#160; socket_type&amp;#160;&amp;#160;&amp;#160;&amp;#160; = stream&lt;br /&gt;&amp;#160;&amp;#160; protocol&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = tcp&lt;br /&gt;&amp;#160;&amp;#160; wait&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = no&lt;br /&gt;&amp;#160;&amp;#160; user&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = news&lt;br /&gt;&amp;#160;&amp;#160; group&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = news&lt;br /&gt;&amp;#160;&amp;#160; server&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = /usr/lib/news/bin/nnrpd-ssl&lt;br /&gt;&amp;#160;&amp;#160; server_args&amp;#160;&amp;#160;&amp;#160;&amp;#160; = -S -p 563&lt;br /&gt;}&lt;/p&gt;
&lt;/blockquote&gt;Voraussetzung dafür ist, daß die &lt;em&gt;/etc/services&lt;/em&gt; den Service &amp;#8220;nntps&amp;#8221; kennt. 
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Voila. Wer mag, kann auch noch eine CA daran anflanschen und bspw. Nutzer statt via Paßwort auch via Zertifikat authentifizieren, indem er die &lt;em&gt;readers.conf&lt;/em&gt; entsprechend anpaßt, aber daran habe ich keinen Bedarf; mir genügt die Verschlüsselung der Verbindung zwischen Server und Client.&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;(Danke an &lt;a title=&quot;Viktor Kafke&quot; href=&quot;http://th-h.de/blog/exit.php?url_id=1239&amp;amp;entry_id=1411&quot;  onmouseover=&quot;window.status=&#039;http://www.kafke.de/&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;Viktor Kafke&lt;/a&gt; für die entsprechenden Tips.)&lt;br /&gt;&lt;/p&gt; 
    </content:encoded>

    <pubDate>Mon, 27 Apr 2009 20:55:00 +0200</pubDate>
    <guid isPermaLink="false">http://th-h.de/blog/archives/1411-guid.html</guid>
    <category>anleitung</category>
<category>debian</category>
<category>inn</category>
<category>lenny</category>
<category>usenet</category>

</item>
<item>
    <title>INN: (History-)Cache as cache can</title>
    <link>http://th-h.de/blog/archives/1398-INN-History-Cache-as-cache-can.html</link>
            <category>Bits'n'Bytes</category>
    
    <comments>http://th-h.de/blog/archives/1398-INN-History-Cache-as-cache-can.html#comments</comments>
    <wfw:comment>http://th-h.de/blog/wfwcomment.php?cid=1398</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://th-h.de/blog/rss.php?version=2.0&amp;type=comments&amp;cid=1398</wfw:commentRss>
    

    <author>thh@inter.net (Thomas Hochstein)</author>
    <content:encoded>
    &lt;p&gt;Die sog. &amp;#8220;History&amp;#8221; ist beim &lt;a title=&quot;InterNetNews&quot; href=&quot;http://th-h.de/blog/exit.php?url_id=1096&amp;amp;entry_id=1398&quot;  onmouseover=&quot;window.status=&#039;https://www.isc.org/software/inn&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;INN&lt;/a&gt; die zentrale Tabelle, die Message-IDs (also die eindeutige Kennung jedes Newspostings) mit ihrem Speicherort verbindet, so daß man ein über eine Message-ID referenziertes Posting auch im Speicher-Backend wiederfinden kann; zugleich wird vor der Annahme von Postings über die History geprüft, dass das entsprechende Posting noch nicht vorhanden ist. Es sammeln sich also große Datenmengen an, auf die zudem ständig zugegriffen werden muß; ein effizientes Handling derselben ist daher Pflicht. INN unterstützt deshalb zur Verkürzung von Zugriffszeiten einen Cache für die History, der die letzten Zugriffe zwischenspeichert.&lt;/p&gt; 
&lt;p&gt;Seit Jahren betreibe ich meinen Newsserver, seit Jahren stolpere ich in den täglichen Reports des Servers darüber, daß mein Cache offenbar nicht (richtig) funktioniert, und seit Jahren plane ich, daß &amp;#8220;bei Gelegenheit&amp;#8221; einmal zu überprüfen. Allerdings kommt so eine &amp;#8220;Gelegenheit&amp;#8221; normalerweise spät oder nie ...&lt;/p&gt; 
&lt;p&gt;Dieser Tage bin ich dann tatsächlich einmal dazu gekommen, das anzugehen und mich zu erkundigen, wo für das schlechte Abschneiden des Caches wohl die Ursachel liegen könne. Diese Werte erscheinen schließlich wirklich nicht berauschend:&lt;/p&gt; 
&lt;blockquote&gt;&lt;code&gt;History cache:&lt;br /&gt;Reason&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Count&amp;#160;&amp;#160;&amp;#160;&amp;#160; %Count&lt;br /&gt;Cache misses&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 190461&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 66.9%&lt;br /&gt;Do not exist&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 94182&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 33.1%&lt;br /&gt;Positive hits&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 0&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 0.0%&lt;br /&gt;Negative hits&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 0&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 0.0% &lt;/code&gt; &lt;/blockquote&gt; 
&lt;p&gt;Entscheidend für das (Nicht-)Funktionieren des Caches ist, wie ich dann erfuhr, dessen Größe, die durch den Parameter &lt;strong&gt;hiscachesize&lt;/strong&gt; in der &lt;strong&gt;inn.conf&lt;/strong&gt; gesteuert wird. Empfohlen wurde, ihn auf mindestens 1 kB zu setzen, ggf. auch höher; bei mir stand er, wie ich dann sah, auf 0 ... was einiges erklären dürfte. &lt;img src=&quot;http://th-h.de/blog/templates/default/img/emoticons/smile.png&quot; alt=&quot;:-)&quot; style=&quot;display: inline; vertical-align: bottom;&quot; class=&quot;emoticon&quot; /&gt;&lt;/p&gt; 
&lt;p&gt;Nach Erhöhung der Cachegröße auf 5 kB sieht die Sache jetzt doch &lt;em&gt;deutlich&lt;/em&gt; besser aus:&lt;/p&gt; 
&lt;blockquote&gt; &lt;code&gt;Reason&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Count&amp;#160;&amp;#160;&amp;#160;&amp;#160; %Count&lt;br /&gt;Positive hits&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 183728&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 65.9%&lt;br /&gt;Negative hits&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 59022&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 21.2%&lt;br /&gt;Do not exist&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 35762&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 12.8%&lt;br /&gt;Cache misses&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 81&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 0.0%&lt;/code&gt; &lt;/blockquote&gt; 
&lt;p&gt;Kleine Ursache, große Wirkung, man kennt das ja.&lt;br /&gt;&lt;/p&gt;  
    </content:encoded>

    <pubDate>Sun, 12 Apr 2009 20:52:00 +0200</pubDate>
    <guid isPermaLink="false">http://th-h.de/blog/archives/1398-guid.html</guid>
    <category>INN</category>
<category>Usenet</category>

</item>
<item>
    <title>INN - wie funktioniert er?</title>
    <link>http://th-h.de/blog/archives/812-INN-wie-funktioniert-er.html</link>
            <category>Releases</category>
    
    <comments>http://th-h.de/blog/archives/812-INN-wie-funktioniert-er.html#comments</comments>
    <wfw:comment>http://th-h.de/blog/wfwcomment.php?cid=812</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://th-h.de/blog/rss.php?version=2.0&amp;type=comments&amp;cid=812</wfw:commentRss>
    

    <author>thh@inter.net (Thomas Hochstein)</author>
    <content:encoded>
    Nachdem &amp;#8220;das &lt;a href=&quot;http://th-h.de/blog/exit.php?url_id=75&amp;amp;entry_id=812&quot; title=&quot;http://blog.joerghoh.de/index.php?/archives/24-Das-inn-Fieber-geht-um.html&quot;  onmouseover=&quot;window.status=&#039;http://blog.joerghoh.de/index.php?/archives/24-Das-inn-Fieber-geht-um.html&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;INN-Fieber&lt;/a&gt; umgeht&amp;#8221;, wie Jörg so nett schrieb, habe ich mich einmal darangewagt, einen kleinen Überblick über die - anfangs nicht ganz so übersichtliche - &lt;a href=&quot;/infos/usenet/inn.php&quot;&gt;Funktionsweise des INN&lt;/a&gt; zu schreiben. Die Frage nach der Einrichtung haben ja &lt;a href=&quot;http://th-h.de/blog/exit.php?url_id=77&amp;amp;entry_id=812&quot; title=&quot;http://www.shiranai.de/weblog/archives/00000014.htm&quot;  onmouseover=&quot;window.status=&#039;http://www.shiranai.de/weblog/archives/00000014.htm&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;Sven&lt;/a&gt; und &lt;a href=&quot;http://th-h.de/blog/exit.php?url_id=78&amp;amp;entry_id=812&quot; title=&quot;http://kris.koehntopp.de/artikel/usenet&quot;  onmouseover=&quot;window.status=&#039;http://kris.koehntopp.de/artikel/usenet&#039;;return true;&quot; onmouseout=&quot;window.status=&#039;&#039;;return true;&quot;&gt;Isotopp&lt;/a&gt; bereits abgedeckt, die einzelnen Programmteile und Konfigurationsdateien sind im wesentlichen durch die (wirklich beispielhaft vielen!) man-Pages abgedeckt, es fehlte aber - so jedenfalls der Eindruck bei meinem Einstieg - eine Einführung in die großen Zusammenhänge, wie die einzelnen Programmteile und Konfigurationsdateien ineinander greifen, wie der INN das tut, was er tut.  
    </content:encoded>

    <pubDate>Wed, 27 Apr 2005 22:23:00 +0200</pubDate>
    <guid isPermaLink="false">http://th-h.de/blog/archives/812-guid.html</guid>
    <category>INN</category>
<category>Usenet</category>

</item>
<item>
    <title>INN crash recovery</title>
    <link>http://th-h.de/blog/archives/794-INN-crash-recovery.html</link>
            <category>Releases</category>
    
    <comments>http://th-h.de/blog/archives/794-INN-crash-recovery.html#comments</comments>
    <wfw:comment>http://th-h.de/blog/wfwcomment.php?cid=794</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://th-h.de/blog/rss.php?version=2.0&amp;type=comments&amp;cid=794</wfw:commentRss>
    

    <author>thh@inter.net (Thomas Hochstein)</author>
    <content:encoded>
    &lt;p&gt;War der INN in Version 1.7.x wohl recht stabil und genügsam, so daß er auch nach einem unsanften Beenden - des Prozesses oder auch gleich des gesamten Systems - beim Neustart direkt auf die Füße gefallen ist, so sind neuere Versionen (wenigstens unterhalb von 2.4.x) erwiesenermaßen ziemlich mimosig. Gut, wenn man dann das passende Script mit den richtigen Maßnahmen zur &lt;a href=&quot;/infos/usenet/inn-recovery.php&quot;&gt;Bepuschelung&lt;/a&gt; zur Hand hat.&lt;br /&gt;&lt;/p&gt;  
    </content:encoded>

    <pubDate>Wed, 13 Apr 2005 20:38:00 +0200</pubDate>
    <guid isPermaLink="false">http://th-h.de/blog/archives/794-guid.html</guid>
    <category>INN</category>
<category>Usenet</category>

</item>
<item>
    <title>Newsserver</title>
    <link>http://th-h.de/blog/archives/788-Newsserver.html</link>
            <category>Releases</category>
    
    <comments>http://th-h.de/blog/archives/788-Newsserver.html#comments</comments>
    <wfw:comment>http://th-h.de/blog/wfwcomment.php?cid=788</wfw:comment>

    <slash:comments>1</slash:comments>
    <wfw:commentRss>http://th-h.de/blog/rss.php?version=2.0&amp;type=comments&amp;cid=788</wfw:commentRss>
    

    <author>thh@inter.net (Thomas Hochstein)</author>
    <content:encoded>
    &lt;p&gt;Nachdem gerade allenthalben das große Newsserver-Fieber ausgebrochen ist, habe ich mal wieder zwei neue &lt;a href=&quot;/infos/&quot;&gt;Schnippsel&lt;/a&gt; online gestellt:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;/infos/usenet/server.php&quot;&gt;Newsserver-, -proxies-, -feeder-Übersicht&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/infos/usenet/inn-reload.php&quot;&gt;INN-Konfigurationsdateien neu einlesen&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Vielleicht kann ja jemand etwas damit anfangen.&lt;/p&gt;  
    </content:encoded>

    <pubDate>Sat, 09 Apr 2005 18:17:00 +0200</pubDate>
    <guid isPermaLink="false">http://th-h.de/blog/archives/788-guid.html</guid>
    <category>INN</category>
<category>Usenet</category>

</item>

</channel>
</rss>