| |
DG9EP > DPTNT 10.08.98 00:45l 319 Lines 8921 Bytes #999 (0) @ DL
BID : 988DB0IZ_02J
Read: GUEST
Subj: PGP fuer TNT (Patch)
Path: OE1XAB<OE3XSR<OK0PPL<OK0PAD<OK0PKL<DB0MAK<DB0ERF<DB0SHG<DB0HSK<DB0QS<
DB0IZ
Sent: 980809/2007z @:DB0IZ.#NRW.DEU.EU [BCM West<>Link BOX SOLINGEN] BCM1.40
From: DG9EP @ DB0IZ.#NRW.DEU.EU (Walter)
To: DPTNT @ DL
X-Info: No login password
-----BEGIN PGP SIGNED MESSAGE-----
Moin,
nachfolgend ein Patch, der PGP-Unterstuetzung fuer TNT bietet.
Voraussetzung:
TNT 1.1alpha1 oder 1.1alpha3 sowie funktionierendes PGP 2.6.x
Anwendung wie immer mit patch < datei.patch und dann neu
uebersetzen.
Neue Befehle in TNT:
:PGPAUTO on/off Schaltet die PGP-Funktionalitaet ein oder aus
Default: off
:PGPKEYAD on/off Wenn "on", werden empfangene Keys sofort zum
Keyring hinzugefuegt; wenn "off", werden diese
Keys nur angezeigt. Default: off
(Da fehlt uebrigens kein "D"; Ein Befehl in
TNT kann nicht laenger als 8 Zeichen sein)
Was die Erweiterung kann:
* Unterschriften in Klartext ueberpruefen
* Keys hinzufuegen
Was die Erweiterung nicht kann:
* Rekursiv arbeiten (also z.B. Schwachsinn wie Klartext-unterzeichnete
keybloecke einfuegen).
* Wenn Logfiles an sind (also z.B. :LogQSO) funktionierts nicht. Das
ist aber auch bei :AUTO7PL so
Status:
Ist eine Bastelversion; bei mir hat es unter Linux gut funktioniert.
Ich bitte um Rueckmeldung.
Gruss,
Walter
schnipp:
- ------------------------8<-------------8<---------------------------
diff -ub src.1a1/file.c src/file.c
- --- src.1a1/file.c Mon Feb 17 01:04:22 1997
+++ src/file.c Sun Aug 9 09:18:14 1998
@@ -264,6 +264,9 @@
case RX_AUTO7P:
strcat(str," A7 ");
break;
+ case RX_PGP:
+ strcat(str," PG ");
+ break;
}
cut_filename(str,rx_file[channel].name);
}
@@ -626,6 +629,7 @@
cmd_display(mode,channel,ok_text,1);
}
break;
+ case RX_PGP:
case RX_AUTO7P:
break;
case RX_ABIN:
@@ -1065,6 +1069,7 @@
break; /* ignore, handled in write_file_abin */
case RX_YAPP:
break; /* ignore, handled in write_file_yapp */
+ case RX_PGP:
case RX_AUTO7P:
case RX_PLAIN:
memcpy(newstr,str,len);
@@ -1097,6 +1102,7 @@
case RX_NORM:
case RX_BIN:
case RX_PLAIN:
+ case RX_PGP:
case RX_AUTO7P:
break; /* ignore, handled in write_file */
case RX_YAPP:
diff -ub src.1a1/keyboard.c src/keyboard.c
- --- src.1a1/keyboard.c Sun Mar 2 02:21:03 1997
+++ src/keyboard.c Sun Aug 9 21:18:48 1998
@@ -303,6 +303,8 @@
#define F_AUTOYAPP 27
#define F_AUTO7PL 28
#define F_LOGBOOK 29
+#define F_PGPAUTO 30 /* dg9ep 8-98 */
+#define F_PGPKEYADD 31 /* dg9ep 8-98 */
/* variables for flag command */
#ifdef DPBOXT
@@ -326,6 +328,8 @@
int autobin_flag;
int autoyapp_flag;
int auto7pl_flag;
+int pgpauto_flag;
+int pgpkeyadd_flag;
extern int xmon_flag;
extern int mheard_flag;
#ifdef USE_IFACE
@@ -491,6 +495,8 @@
{"AUTOBIN" ,6,1,cmd_flag,"",F_AUTOBIN,0},
{"AUTOYAPP",6,1,cmd_flag,"",F_AUTOYAPP,0},
{"AUTO7PL" ,6,1,cmd_flag,"",F_AUTO7PL,0},
+ {"PGPAUTO" ,5,1,cmd_flag,"",F_PGPAUTO,0},
+ {"PGPKEYAD",6,1,cmd_flag,"",F_PGPKEYADD,0},
{"LOGBOOK" ,7,1,cmd_flag,"",F_LOGBOOK,0},
{"XMON" ,4,1,cmd_flag,"",F_XMON,0},
{"HEARD" ,3,1,cmd_flag,"",F_HEARD,0},
@@ -1606,6 +1612,12 @@
case F_AUTO7PL:
flag = &auto7pl_flag;
break;
+ case F_PGPAUTO:
+ flag = &pgpauto_flag;
+ break;
+ case F_PGPKEYADD:
+ flag = &pgpkeyadd_flag;
+ break;
case F_LOGBOOK:
flag = &logbook_flag;
break;
diff -ub src.1a1/remote.c src/remote.c
- --- src.1a1/remote.c Sun Feb 16 22:06:27 1997
+++ src/remote.c Sun Aug 9 21:18:36 1998
@@ -49,6 +49,8 @@
extern int autobin_flag;
extern int autoyapp_flag;
extern int auto7pl_flag;
+extern int pgpauto_flag;
+extern int pgpkeyadd_flag;
extern char tnt_ctextfile[];
extern char news_file_name[];
extern char run_dir[];
@@ -832,6 +834,8 @@
autobin_flag = 1;
autoyapp_flag = 0;
auto7pl_flag = 0;
+ pgpauto_flag = 0;
+ pgpkeyadd_flag = 1;
strcpy(rem_tnt_str,"<TNT>: ");
strcpy(rem_inv_str,"Invalid command !");
strcpy(rem_len_str,"Line too long, ignored");
@@ -1039,6 +1043,122 @@
return(0);
}
+/* handle PGP strings/reception
+ * for now we are only looking for signed messages and keyblocks
+ * returns !0 if buffer handled
+ * dg9ep 7-98
+ */
+static int handle_pgp(channel,buffer,len)
+int channel;
+char *buffer;
+int len;
+{
+ int file_end;
+ char filename[257];
+ char tmpstdoutname[257];
+ char sres[257];
+ int i;
+ int typ;
+ int part;
+ int errflag;
+ int res;
+ char *ptr;
+ int ans_len;
+ char string[80];
+ char line[258];
+ int result;
+ FILE *hdl_out;
+
+
+ if (rx_file[channel].type == RX_PGP) {
+ /* already receiving file, just check for endstring */
+ typ = 0;
+ if (!strncmp(buffer,"-----END PGP SIGNATURE-----", 27)) {
+ typ = PGP_SIGNED_MESSAGE;
+ } else if (!strncmp(buffer,"-----END PGP PUBLIC KEY BLOCK-----",34)) {
+ typ = PGP_PUBLIC_KEY_BLOCK;
+ }
+ if ( typ > 0 ) {
+ write_file(channel,len,RX_RCV,buffer);
+ strcpy(filename,rx_file[channel].name);
+ close_rxfile2(channel,0,0);
+
+ strcpy(tmpstdoutname,"/tmp/tnt_pgpout_XXXXXX");
+ mktemp(tmpstdoutname);
+
+ /* build cmdline for pgp */
+ strcpy(string,"pgp +batchmode +verbose=0 ");
+ if( typ == PGP_SIGNED_MESSAGE ) {
+ /* Nothing else to do to verify */
+ } else if( typ == PGP_PUBLIC_KEY_BLOCK ) {
+ if( pgpkeyadd_flag ) {
+ /* add keys to keyring */
+ strcat(string," +interactive=off +force -ka ");
+ } else {
+ /* show keys only */
+ rem_data_display(channel,"(keys will not be added to keyring)\r");
+ }
+ }
+ strcat(string,filename);
+ strcat(string," -o /dev/null > "); /* $TODO -> Outfile auch PGP vorwerfen */
+ strcat(string,tmpstdoutname);
+ strcat(string," 2>/dev/null");
+ result = system(string);
+ /* Ausgabe von pgp anzeigen */
+ if (!(hdl_out = fopen(tmpstdoutname,"r"))) {
+ sprintf(sres,"ERROR: %s not found",tmpstdoutname);
+ return(1);
+ }
+ file_end = 0;
+ while (!file_end) {
+ if (fgets(line,257,hdl_out) == NULL) {
+ file_end = 1;
+ } else {
+ if (strlen(line) == 257) {
+ file_end = 1;
+ } else {
+ ptr = strchr(line,'\r');
+ if (ptr != NULL) *ptr = '\0';
+ ptr = strchr(line,'\n');
+ if (ptr != NULL) *ptr = '\0';
+ ptr = strchr(line,(char)0x07);
+ if (ptr != NULL) *ptr = ' ';
+
+ rem_data_display(channel,line);
+ rem_data_display(channel,"\r");
+ }
+ }
+ }
+ fclose(hdl_out);
+ unlink(tmpstdoutname);
+ unlink(filename);
+ }
+ return(1);
+ }
+
+ typ = 0;
+ if (!strncmp (buffer, "-----BEGIN PGP SIGNED MESSAGE-----",34)) {
+ /* It's a signed file */
+ typ = PGP_SIGNED_MESSAGE;
+ } else if (!strncmp (buffer, "-----BEGIN PGP PUBLIC KEY BLOCK-----",36)) {
+ typ = PGP_PUBLIC_KEY_BLOCK;
+ }
+ if( typ ) {
+ /* Get tmp. filename. */
+ strcpy(filename,"/tmp/tnt_pgp_XXXXXX");
+ mktemp(filename);
+
+ open_logfile(RX_PGP,RX_RCV,channel,strlen(filename),
+ M_CONNECT,filename);
+ errflag = (rx_file[channel].type != RX_PGP);
+ if (!errflag) return(1);
+ }
+ return(0);
+}
+
+
+
+
/* check packet, if special strings are contained */
static int check_spec_strings(channel,buffer,len)
int channel;
@@ -1068,6 +1188,12 @@
if (handle_7pl(channel,buffer,len)) return(0);
}
+ /* PGP handling dg9ep */
+ if (((rx_file[channel].type == -1) && pgpauto_flag) ||
+ (rx_file[channel].type == RX_PGP)) {
+ if (handle_pgp(channel,buffer,len)) return(0);
+ }
+
wait_bin = ((rx_file[channel].type == RX_ABIN) ||
(rx_file[channel].type == RX_ABIN_Q)) &&
(rx_file[channel].wait_bin);
diff -ub src.1a1/tnt.h src/tnt.h
- --- src.1a1/tnt.h Sun Aug 9 21:41:45 1998
+++ src/tnt.h Sun Aug 9 09:18:34 1998
@@ -292,6 +292,7 @@
#define RX_ABIN_E 5 /* RX_ABIN_Q only for box and boxcut */
#define RX_YAPP 6 /* receive using YAPP */
#define RX_AUTO7P 7 /* auto 7PLUS reception */
+#define RX_PGP 8 /* auto PGP rx & check, dg9ep 7-98 */
/* transmit file types */
#define TX_NORM 0 /* ASCII-file */
@@ -305,6 +306,10 @@
/* flag for logging data */
#define RX_RCV 0x01 /* received data */
#define RX_SND 0x02 /* sent data */
+
+/* types of PGP-Files */
+#define PGP_SIGNED_MESSAGE 1
+#define PGP_PUBLIC_KEY_BLOCK 2
/* types of send_queue */
#define SQ_NORMAL 0 /* normal queue */
-----BEGIN PGP SIGNATURE-----
Version: 2.6.3ia
Charset: latin1
iQCVAwUBNc4CWDD37IMYqFzBAQEcygP/Y6QrtU13HQEC2wLUTFk4dPVqcxOMNvEL
Qgv5SetH93RuLbmPNDP0pxUta3xE3jURJqsJ4syAhjAxeAOTUxcdNqp3x6Sr+Wkh
uew4MZlypF7xsPCwi9JMjXnjRSqjymZ6GcP9JDyxCnhI3IgZG1DOPT2n8rQkTbIX
ftvurgNT+ns=
=1XDr
-----END PGP SIGNATURE-----
Read previous mail | Read next mail
| |