--- nnrpd/article.c.orig	Mon Apr 19 10:56:47 1999
+++ nnrpd/article.c	Wed Sep  1 13:27:37 1999
@@ -19,6 +19,7 @@
 #include "clibrary.h"
 #include "nnrpd.h"
 
+#include <libtrans.h>
 
 /*
 **  Data structures for use in ARTICLE/HEAD/BODY/STAT common code.
@@ -691,7 +692,7 @@
 
 STATIC void ARTsendqio(SENDTYPE what)
 {
-    char		*p;
+    char		*p, *q;
     struct timeval	stv, etv;
     long		bytecount;
 
@@ -713,6 +714,7 @@
 	    break;
 	if (what == STbody)
 	    continue;
+	for (q = p; *q ; q++) *q=TR_OUT(*q);
 	ARTgetsize+=Printf("%s%s\r\n", *p == '.' ? "." : "", p);
     }
     if (what == SThead) {
@@ -734,6 +736,7 @@
 		continue;
 	    break;
 	}
+	for (q = p; *q ; q++) *q=TR_OUT(*q);
 	ARTgetsize+=Printf("%s%s\r\n", *p == '.' ? "." : "", p);
     }
     ARTgetsize+=Printf(".\r\n");
@@ -1442,7 +1445,7 @@
 FUNCTYPE CMDxhdr(int ac, char *av[])
 {
     int		        i;
-    char	        *p;
+    char	        *p, *q;
     int			Overview;
     BOOL		IsLines;
     BOOL		DidReply;
@@ -1466,6 +1469,7 @@
 	Reply("%d %ld %s header of article %s.\r\n",
 	   NNTP_HEAD_FOLLOWS_VAL, art, av[1], av[2]);
 	p = GetHeader(av[1], IsLines);
+	for (q = p; *q ; q++) *q=TR_OUT(*q);
 	Printf("%s %s\r\n", av[2], p ? p : "(none)");
 	ARTclose();
 	Printf(".\r\n");
@@ -1498,6 +1502,7 @@
 	/* Get it from the overview? */
 	if (Overview && !IsCancelled(i, FALSE) && (p = OVERfind(i, &linelen)) != NULL) {
 	    p = OVERGetHeader(p, Overview);
+	    for (q = p; *q ; q++) *q=TR_OUT(*q);
 	    Printf("%d %s\r\n", i, p && *p ? p : "(none)");
 	    continue;
 	}
@@ -1506,6 +1511,7 @@
 	if (!ARTopen(buff))
 	    continue;
 	p = GetHeader(av[1], IsLines);
+	for (q = p; *q ; q++) *q=TR_OUT(*q);
 	Printf("%d %s\r\n", i, p ? p : "(none)");
 	ARTclose();
     }
@@ -1520,7 +1526,7 @@
 */
 FUNCTYPE CMDxover(int ac, char *av[])
 {
-    char	        *p;
+    char	        *p, *q;
     int	                i, j;
     BOOL	        Opened;
     BOOL	        DidReply;
@@ -1567,6 +1573,7 @@
 	}
 
 	if (Opened && (p = OVERfind(ARTnumbers[i].ArtNum, &linelen)) != NULL) {
+	    for (q = p; *q ; q++) *q=TR_OUT(*q);
 	    OVERhit++;
 	    OVERsize+=linelen;
 	    if ((innconf->storageapi && innconf->overviewmmap) || OVERmem) {
@@ -1591,6 +1598,7 @@
 	/* This happens with traditional spool */
 	(void)sprintf(buff, "%ld", ARTnumbers[i].ArtNum);
 	if ((p = OVERgen(buff)) != NULL) {
+	    for (q = p; *q ; q++) *q=TR_OUT(*q);
 	    OVERmiss++;
 	    linelen = strlen(p);
 	    OVERsize+=linelen;
@@ -1623,7 +1631,7 @@
 /* ARGSUSED */
 FUNCTYPE CMDxpat(int ac, char *av[])
 {
-    char	        *p;
+    char	        *p, *q;
     int	        	i;
     ARTRANGE		range;
     BOOL		DidReply;
@@ -1652,9 +1660,12 @@
 
 	Printf("%d %s matches follow.\r\n", NNTP_HEAD_FOLLOWS_VAL, header);
 	pattern = Glom(&av[3]);
+	for (q = pattern; *q ; q++) *q=TR_IN(*q);
 	if ((text = GetHeader(header, FALSE)) != NULL
-	 && wildmat(text, pattern))
+	 && wildmat(text, pattern)) {
+	    for (q = p; *q ; q++) *q=TR_OUT(*q);
 	    Printf("%s %s\r\n", p, text);
+	}
 
 	ARTclose();
 	Printf(".\r\n");
@@ -1681,7 +1692,9 @@
 	}
 
     Printf("%d %s matches follow.\r\n", NNTP_HEAD_FOLLOWS_VAL, header);
-    for (pattern = Glom(&av[3]), i = range.Low; i <= range.High && range.High > 0; i++) {
+    pattern = Glom(&av[3]);
+    for (q = pattern; *q ; q++) *q=TR_IN(*q);
+    for (i = range.Low; i <= range.High && range.High > 0; i++) {
 	if (ARTfind(i, innconf->storageapi && innconf->nnrpdcheckart) < 0)
 	    continue;
 
@@ -1690,8 +1703,10 @@
          && !IsCancelled(i, FALSE)
 	 && (p = OVERfind(i, &linelen)) != NULL
 	 && (p = OVERGetHeader(p, Overview)) != NULL) {
-	    if (wildmat(p, pattern))
+	    if (wildmat(p, pattern)) {
+		for (q = p; *q ; q++) *q=TR_OUT(*q);
 		Printf("%d %s\r\n", i, p);
+	    }
 	    continue;
 	}
 
@@ -1701,8 +1716,10 @@
 	    continue;
 	if ((p = GetHeader(av[1], FALSE)) == NULL)
 	    p = "(none)";
-	if (wildmat(p, pattern))
+	if (wildmat(p, pattern)) {
+	    for (q = p; *q ; q++) *q=TR_OUT(*q);
 	    Printf("%d %s\r\n", i, p);
+	}
 	ARTclose();
     }
 
--- nnrpd/commands.c.orig	Tue May 11 02:36:19 1999
+++ nnrpd/commands.c	Wed Sep  1 13:40:14 1999
@@ -10,6 +10,7 @@
 #include "nnrpd.h"
 #include <time.h>
 
+#include <libtrans.h>
 
 typedef struct _LISTINFO {
     STRING	Path;
@@ -770,6 +771,8 @@
 	POSTrejected++;
 	return;
     }
+
+    for (p=article;*p;p++) *p=TR_IN(*p);
 
     /* Send the article to the server. */
     response = ARTpost(article, idbuff);
--- nnrpd/nnrpd.c.orig	Fri Jun 25 02:06:41 1999
+++ nnrpd/nnrpd.c	Wed Sep  1 13:54:41 1999
@@ -26,6 +26,8 @@
 #  include <shadow.h>
 #endif /* HAVE_GETSPNAM */
 
+#include <libtrans.h>
+
 /*
 ** Here is some defensive code to protect the news server from hosts,
 ** mostly PC's, that sometimes make a connection and then never give
@@ -1004,6 +1006,11 @@
 	exit(1);
     }
     STATstart = TIMEINFOasDOUBLE(Now);
+
+    if (settrtab_bysocket(0)) {
+	syslog(L_FATAL, "cant set translation table");
+	ExitWithStats(1);
+    }
 
     PERMnewnews = innconf->allownewnews;
 
