diff --git a/AUTHORS b/AUTHORS index 79f7dc03..abdd9df2 100644 --- a/AUTHORS +++ b/AUTHORS @@ -40,7 +40,7 @@ NERvOus nervous@nervous.it Bobby Cabral bobbyc@digitelone.com Johannes Beekhuizen 2:280/1018@fidonet Lukas De Groen 2:280/1027@fidonet -Vince Coen 2:257/609@fidonet +Vincent Coen vbcoen@gmail.com 2:250/1@fidonet Joachim Kuwan 2:249/591@fidonet Greek greek@voyager.nnov.ru Sergey Nechaev 2:5015/53@fidonet @@ -57,4 +57,4 @@ val khokhlov 2:550/180@fidonet Robert Wolfe 1:2613/4307@fidonet Alan Ianson Simon Voortman 2:280/1049.1@fidonet - +Andrew Leary 1:320/219@fidonet diff --git a/ChangeLog b/ChangeLog index f9e2ba5f..78f63e54 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,8 +1,109 @@ -v1.0.1 - Fixed packaging and compiling the correct ftscprod.012 - file. +v1.0.4 03-Sep-2014 - Andrew Leary -v1.0.0 + 1. Reverted Vince Coen's packaging changes until an upgrade + script can be written and tested. + 2. Added Binkp CRC support (FSP-1020) to mbcico. + 3. Changed the No Binkp/1.1 setting for nodes to be + effective on outbound calls only. It was causing issues + with other mailers (including BinkD) on inbound calls, + because mbcico was reporting binkp/1.1 in the VER string and + then downshifting to binkp/1.0. + 4. Updated the Internet Rex binkp/1.1 bug workaround to + reflect that versions 2.31 and 2.67 are also affected. + +v1.0.3 13-Jun-2014 - Vincent Coen + + 1. Changed unix/mbuseradd.c + Added extra arg to useradd -p 12345 to avoid a locked + record under Mageia v4 that prevents the password + adding a record due to a file busy may be: Lets see. + No it is not so reverted back. + + 2. Still looking for cause of bug. + +v1.0.2 14-Mar-2014 - Vincent Coen + + Changed packaging to use /home/mbse instead of /opt/mbse + to suit users with a seperate / and a /home partitions. + + IT DOES NOT CHANGE THE RESULTS FOR AN EXISTING INSTALL + WHERE mbse & bbs users are set up to use /opt/mbse. + + YOU WILL HAVE TO DO THIS MANUALLY. + The supplied INSTALL script has been changed. + + To do this you will need to change: + 1. Users mbse, bbs and all bbs users to reflect the change + of home directory from /opt/mbse to /home/mbse using your + distro's graphic system editing tool for users or if not + available use usermod via sudo etc: + usermod -m -d /home/mbse mbse + usermod -m -d /home/mbse/home/bbs bbs + usermod -m -d /home/mbse/home/user-name bbs user-name + + Note that the '-m' option in usermod option is to move the + contents from the existing to the new location. + + You can see the list of bbs users by running: + ls -la /opt/mbse/home + + + 2. Using your favourite editor Change + /etc/services and + /etc/xinetd.d/mbsebbs + + Replacing all instances of /opt/mbse with + /home/mbse + + 3. Now do the same with http and ftp config files in + /etc/httpd/conf/httpd.conf and + /etc/proftpd/proftpd.conf (or whatever ftp & web service + you use. + + 4. Having installed/upgraded the mbse system you must + reboot the system or stop and start mbse, xinetd, ftp, + httpd etc + services. It is easier just shuting down and starting + the system. + + 5. As su run cp -ap /opt/mbse /home + + 6. If not already done so, build the system using the usual + ./configure & make and now run make install as su or if + not available do, sudo bash then su then make install + + 7. Change all crontab processes that deal with mbse both as + user mbse and root to reflect new directory using: + crontab -l to see what is current and then as crontab -e + to edit. + + 8. After rebooting the system check everything is working + Then I would suggest renaming /opt/mbse say from /opt/mbse + /opt/old-mbse and leave it a few days before deleting when + you are SURE that all is working. + + 9. Now when you change the /boot partition or install a new + version of your distro you can continue to use your /home + as is but do not forget to recreate the crontab, xinetd, + rc.d/init.d/mbseb etc as needed by using cp -vp from the + old partition to the new or failing that create a modified + version of SETUP.sh as needed and run it. + + ...........NOW READ THE ABOVE, AGAIN.................. + + lib/ + libmbse.a: + Replaced ftscprod.014 with ftscprod.016 + + +v1.0.1 Dec 2013 - Vincent Coen + + lib/ + libmbse.a: + Fixed packaging and compiling the correct ftscprod + file to ftscprod.014. + +v1.0.0 Dec 2013? This is the last version of mbsebbs submitted by me, Michiel. diff --git a/FILE_ID.DIZ.in b/FILE_ID.DIZ.in index 260e7ee2..c91eaddd 100644 --- a/FILE_ID.DIZ.in +++ b/FILE_ID.DIZ.in @@ -17,8 +17,8 @@ Internal mail format is JAM (c) messagebase. Full tic file support, including extended tic files. OS: GNU/Linux and *BSD, 32/64 bit versions. -Originating sites 2:280/2802@fidonet and -http://www.mbse.eu/ +http://sourceforge.net/projects/mbsebbs Copyright by Michiel Broek. Released under the terms of the GNU Public License. + diff --git a/configure b/configure index 6eb13577..8ac8852d 100755 --- a/configure +++ b/configure @@ -2309,10 +2309,10 @@ SUBDIRS="lib mbcico mbfido mbmon mbsebbs mbutils mbnntp mbtask mbsetup unix lang PACKAGE="mbsebbs" MAJOR="1" MINOR="0" -REVISION="1" +REVISION="4" VERSION="$MAJOR.$MINOR.$REVISION" -COPYRIGHT="Copyright (C) 1997-2013 Michiel Broek, All Rights Reserved" -SHORTRIGHT="Copyright (C) 1997-2013 M. Broek" +COPYRIGHT="Copyright (C) 1997-2014 Michiel Broek, All Rights Reserved" +SHORTRIGHT="Copyright (C) 1997-2014 M. Broek" GROUP="bbs" OWNER="mbse" ROWNER="`id -un root`" diff --git a/configure.ac b/configure.ac index 4a9dc31c..83b6b223 100644 --- a/configure.ac +++ b/configure.ac @@ -12,10 +12,10 @@ AC_SUBST(SUBDIRS) PACKAGE="mbsebbs" MAJOR="1" MINOR="0" -REVISION="1" +REVISION="4" VERSION="$MAJOR.$MINOR.$REVISION" -COPYRIGHT="Copyright (C) 1997-2013 Michiel Broek, All Rights Reserved" -SHORTRIGHT="Copyright (C) 1997-2013 M. Broek" +COPYRIGHT="Copyright (C) 1997-2014 Michiel Broek, All Rights Reserved" +SHORTRIGHT="Copyright (C) 1997-2014 M. Broek" GROUP="bbs" OWNER="mbse" ROWNER="`id -un root`" diff --git a/lib/ftscprod.012 b/lib/ftscprod.016 similarity index 96% rename from lib/ftscprod.012 rename to lib/ftscprod.016 index f0651eaa..f6b13069 100644 --- a/lib/ftscprod.012 +++ b/lib/ftscprod.016 @@ -296,3 +296,7 @@ 16FF,RNtrack,Linux/BSD/AIX/Solaris/MacOSX/OS2/DOS/Win32,Packer,Alex_Soukhotine,2:5030/1157,20050115 17FF,Msg2Pkt,DOS/OS2/Win32,Packer/Tools/ClpLib,Ulrich_Schroeter,2:244/1120,20080607 18FF,Marena,DOS,Repacker/Echotag_renamer,Michiel_van_der_Vlist,2:280/5555,20080608 +19FF,jNode,Java_Virtual_Machine,Binkp_mailer/tosser/tracker,Ivan_Agarkov,2:5020/848,20120921 +1AFF,mfreq,Linux,File_Request_Processor,Markus_Reschke,2:240/1661,20131116 +1BFF,AfterShock,Android_>=V2.3,Binkp_Mailer/Tosser/Editor,Anatoly_Vdovichev,2:5000/26.180,20131128 +1CFF,FTN::Packet,Perl,Tosser,Robert_James_Clay,1:120/419,20131219 diff --git a/lib/mbselib.h b/lib/mbselib.h index dbf2914f..e4896434 100644 --- a/lib/mbselib.h +++ b/lib/mbselib.h @@ -1188,7 +1188,7 @@ struct sysconfig { unsigned NoFreqs : 1; /* Don't allow requests */ unsigned NoCall : 1; /* Don't call */ unsigned NoMD5 : 1; /* Don't do MD5 */ - unsigned xNoCRC32 : 1; + unsigned NoCRC32 : 1; /* Don't do Binkp CRC32 */ unsigned NoEMSI : 1; /* Don't do EMSI */ unsigned NoWazoo : 1; /* Don't do Yooho/2U2 */ unsigned NoZmodem : 1; /* Don't do Zmodem */ @@ -1699,7 +1699,7 @@ struct _nodes { unsigned WrongEscape : 1; /* Binkp wrong escape */ unsigned NoBinkp11 : 1; /* No binkp/1.1 mode */ unsigned IgnHold : 1; /* Ignore Hold/Down status */ - + char xExtra[94]; int32_t StartDate; /* Node start date */ int32_t LastDate; /* Last action date */ @@ -1737,6 +1737,7 @@ struct _nodes { unsigned Dir_in_waitclr : 1; /* Inbound wait for clear */ unsigned Dir_in_mklck : 1; /* Inbound create lock */ unsigned Tic4d : 1; /* 4d addresses in ticfile */ + unsigned DoCRC : 1; /* Enable Binkp CRC check */ /* FTP transfers */ char FTP_site[65]; /* Site name or IP address */ diff --git a/mbcico/Makefile b/mbcico/Makefile index 18a4f239..7f56c9b9 100644 --- a/mbcico/Makefile +++ b/mbcico/Makefile @@ -11,7 +11,7 @@ SRCS = zmmisc.c zmrle.c zmrecv.c zmsend.c binkp.c md5b.c \ recvbark.c respfreq.c sendbark.c tcp.c tcpproto.c wazoo.c \ filetime.c ftsc.c atoul.c portsel.c telnet.c bopenfile.c \ ttyio.c lutil.c scanout.c emsi.c ulock.c dirlock.c \ - callstat.c session.c call.c mbcico.c \ + callstat.c session.c call.c htoul.c mbcico.c \ outstat.c nlinfo.c mbout.c HDRS = zmodem.h binkp.h config.h statetbl.h md5b.h \ xmsend.h xmrecv.h m7recv.h m7send.h hydra.h inbound.h \ @@ -20,7 +20,7 @@ HDRS = zmodem.h binkp.h config.h statetbl.h md5b.h \ recvbark.h respfreq.h sendbark.h tcp.h tcpproto.h wazoo.h \ filetime.h ftsc.h atoul.h portsel.h telnet.h bopenfile.h \ ttyio.h lutil.h scanout.h emsi.h ulock.h dirlock.h \ - callstat.h session.h call.h mbcico.h \ + callstat.h session.h call.h htoul.h mbcico.h \ outstat.h nlinfo.h MBCICO_OBJS = zmmisc.o zmrle.o zmrecv.o zmsend.o binkp.o md5b.o \ xmsend.o xmrecv.o m7recv.o m7send.o hydra.o inbound.o \ @@ -29,7 +29,7 @@ MBCICO_OBJS = zmmisc.o zmrle.o zmrecv.o zmsend.o binkp.o md5b.o \ recvbark.o respfreq.o sendbark.o tcp.o tcpproto.o wazoo.o \ filetime.o ftsc.o atoul.o portsel.o telnet.o bopenfile.o \ ttyio.o lutil.o scanout.o emsi.o ulock.o dirlock.o \ - callstat.o session.o call.o mbcico.o + callstat.o session.o call.o htoul.o mbcico.o MBOUT_OBJS = outstat.o nlinfo.o mbout.o scanout.o callstat.o SLIBS = ../lib/libmbse.a ../lib/libmsgbase.a ../lib/libdbase.a ../lib/libnodelist.a OTHER = Makefile README @@ -130,6 +130,7 @@ dirlock.o: ../config.h ../lib/mbselib.h dirlock.h callstat.o: ../config.h ../lib/mbselib.h callstat.h session.o: ../config.h ../lib/mbselib.h ../lib/nodelist.h ttyio.h statetbl.h emsi.h ftsc.h session.h yoohoo.h mbcico.h binkp.h callstat.h inbound.h opentcp.h telnet.h call.o: ../config.h ../lib/mbselib.h ../lib/users.h ../lib/nodelist.h ../lib/mbsedb.h session.h callstat.h call.h config.h dial.h lutil.h portsel.h openport.h opentcp.h rdoptions.h inbound.h +htoul.o: ../config.h ../lib/mbselib.h htoul.h mbcico.o: ../config.h ../lib/mbselib.h ../lib/nodelist.h ../lib/users.h ../lib/mbsedb.h config.h answer.h call.h lutil.h mbcico.h session.h binkp.h outstat.o: ../config.h ../lib/mbselib.h ../lib/nodelist.h ../lib/users.h ../lib/mbsedb.h scanout.h callstat.h outstat.h nlinfo.o: ../config.h ../lib/mbselib.h ../lib/nodelist.h nlinfo.h diff --git a/mbcico/binkp.c b/mbcico/binkp.c index 93c1bdba..a7d3d6d5 100644 --- a/mbcico/binkp.c +++ b/mbcico/binkp.c @@ -161,6 +161,8 @@ struct binkprec { int rxcompressed; /* Receiver compressed bytes */ char *ropts; /* Receiver M_FILE optional args */ int rmode; /* Receiver compression mode */ + int rcrc32; /* Receiver file crc32 */ + int rcrcerr; /* Receiver CRC error count */ struct timezone tz; /* Timezone */ @@ -197,12 +199,15 @@ struct binkprec { int BZ2we; /* BZ2 compression flag */ int BZ2they; #endif + int NRwe; /* NR mode */ int NRthey; int NDwe; /* ND mode */ int NDthey; int NDAwe; /* NDA mode */ int NDAthey; + int CRCwe; /* CRC mode */ + int CRCthey; }; @@ -236,7 +241,7 @@ char *binkp2unix(char *); /* Unix -> Binkp escape */ void fill_binkp_list(binkp_list **, file_list *, off_t); /* Build pending files */ int binkp_pendingfiles(void); /* Count pending files */ void binkp_clear_filelist(int); /* Clear current filelist */ - +unsigned int htoul(char *); /* Convert ASCII hex to uns int */ static int orgbinkp(void); /* Originate session state */ static int ansbinkp(void); /* Answer session state */ static int file_transfer(void); /* File transfer state */ @@ -264,6 +269,7 @@ int binkp(int role) bp.txbuf = calloc(MAX_BLKSIZE + 3, sizeof(unsigned char)); bp.rname = calloc(512, sizeof(char)); bp.ropts = calloc(512, sizeof(char)); + bp.rcrcerr = 0; bp.rxfp = NULL; bp.local_EOB = FALSE; bp.remote_EOB = FALSE; @@ -300,6 +306,10 @@ int binkp(int role) bp.NRwe = Can; else bp.NRwe = Want; + if (localoptions & NOCRC) + bp.CRCthey = bp.CRCwe = No; + else + bp.CRCthey = bp.CRCwe = Can; bp.NRthey = Can; bp.NDwe = No; bp.NDthey = No; @@ -321,7 +331,7 @@ int binkp(int role) goto binkpend; } - if (((Loaded && nodes.NoBinkp11) || bp.buggyIrex) && (bp.Major == 1) && (bp.Minor != 0)) { + if ((bp.buggyIrex) && (bp.Major == 1) && (bp.Minor != 0)) { Syslog('+', "Binkp: forcing downgrade to binkp/1.0 protocol"); bp.Major = 1; bp.Minor = 0; @@ -705,6 +715,14 @@ SM_STATE(WaitConn) } } + if (!CFG.NoCRC32) { + char s[8]; /* Send OPT CRC if it's not disabled. */ + strcpy(s, "OPT CRC"); + if ((rc = binkp_send_command(MM_NUL, "%s", s))) { + SM_ERROR; + } + } + if ((rc = binkp_banner(FALSE))) { SM_ERROR; } @@ -935,6 +953,10 @@ SM_STATE(Opts) Syslog('b', "Binkp: no PLZ compression for this node"); } #endif + if (localoptions & NOCRC) { + bp.CRCwe = bp.CRCthey = No; + Syslog('b', "Binkp: no CRC mode for this node"); + } binkp_send_comp_opts(FALSE); binkp_set_comp_state(); @@ -1061,6 +1083,7 @@ TrType binkp_receiver(void) off_t rxbytes; int bcmd, rc = 0; int rc1 = 0, nget = bp.blklen, zavail, nput; + int rc2 = 0; char zbuf[ZBLKSIZE]; char *buf = bp.rxbuf; @@ -1148,6 +1171,13 @@ TrType binkp_receiver(void) bp.rmode = CompGZ; else if (strcmp((char *)"BZ2", bp.ropts) == 0) bp.rmode = CompBZ2; + if (bp.CRCthey == Active) { + bp.rcrc32 = htoul(bp.ropts); + if (bp.rcrc32 == 0xffffffff) { + Syslog('b', "Binkp: No CRC in M_FILE - disabling CRC check"); + bp.CRCthey = bp.CRCwe = No; + } + } } else { /* * Corrupted command, in case this was serious, send the M_GOT back so it's @@ -1219,7 +1249,7 @@ TrType binkp_receiver(void) if ((bp.rsize / (sfs.f_bsize + 1)) >= sfs.f_bfree) { Syslog('!', "Binkp: only %u blocks free (need %u) in %s for this file", sfs.f_bfree, (unsigned int)(bp.rsize / (sfs.f_bsize + 1)), tempinbound); - bclosefile(FALSE); + bclosefile(FALSE, FALSE, 0); bp.rxfp = NULL; /* Force SKIP command */ } } @@ -1229,8 +1259,8 @@ TrType binkp_receiver(void) * We already got this file, send GOT so it will * be deleted at the remote. */ - Syslog('+', "Binkp: already got %s, sending GOT", bp.rname); - rc = binkp_send_command(MM_GOT, "%s %ld %ld", bp.rname, bp.rsize, bp.rtime); + Syslog('+', "Binkp: already got %s, sending GOT", bp.rname); + rc = binkp_send_command(MM_GOT, "%s %ld %ld", bp.rname, bp.rsize, bp.rtime); bp.RxState = RxWaitF; bp.rxfp = NULL; if (rc) @@ -1290,7 +1320,7 @@ TrType binkp_receiver(void) return Ok; } else if (bcmd == MM_FILE) { Syslog('+', "Binkp: partial received file, saving"); - bclosefile(FALSE); + bclosefile(FALSE, FALSE, 0); bp.rxfp = NULL; bp.RxState = RxAccF; return Continue; @@ -1378,22 +1408,42 @@ TrType binkp_receiver(void) bp.rxpos += written; if (bp.rxpos == bp.rsize) { - rc = binkp_send_command(MM_GOT, "%s %ld %ld", bp.rname, bp.rsize, bp.rtime); - bclosefile(TRUE); + rc2 = bclosefile(TRUE, (bp.CRCwe == Active), bp.rcrc32); + if (rc2) { + if (rc2 == 2) { + bp.rcrcerr++; + if (bp.rcrcerr == 1) { + /* First CRC error */ + rc = binkp_send_command(MM_SKIP, "%s %ld %ld", bp.rname, bp.rsize, bp.rtime); + bp.RxState = RxWaitF; + if (rc) + return Failure; + else + return Ok; + } else { + rc = binkp_send_command(MM_ERR, "Too many CRC errors - session aborted."); + bp.RxState = RxDone; + bp.rxfp = NULL; + bp.rc = MBERR_FTRANSFER; + return Failure; + } + } + } + rc = binkp_send_command(MM_GOT, "%s %ld %ld", bp.rname, bp.rsize, bp.rtime); bp.rxpos = bp.rxpos - bp.rxbytes; gettimeofday(&rxtvend, &bp.tz); #if defined(HAVE_ZLIB_H) || defined(HAVE_BZLIB_H) if (bp.rxcompressed) - Syslog('+', "Binkp: %s", compress_stat(bp.rxpos, bp.rxcompressed)); + Syslog('+', "Binkp: %s", compress_stat(bp.rxpos, bp.rxcompressed)); #endif - Syslog('+', "Binkp: OK %s", transfertime(rxtvstart, rxtvend, bp.rxpos, FALSE)); - rcvdbytes += bp.rxpos; - bp.RxState = RxWaitF; - if (rc) - return Failure; + Syslog('+', "Binkp: OK %s", transfertime(rxtvstart, rxtvend, bp.rxpos, FALSE)); + rcvdbytes += bp.rxpos; + bp.RxState = RxWaitF; + if (rc) + return Failure; else - return Ok; - } + return Ok; + } bp.RxState = RxReceD; return Ok; } else if (bp.RxState == RxEOB) { @@ -1536,20 +1586,23 @@ TrType binkp_transmitter(void) bp.tmode = CompNone; extra = (char *)""; - - if ((tmp->compress == CompGZ) || (tmp->compress == CompBZ2)) { - bp.tmode = tmp->compress; - Syslog('b', "Binkp: compress_init start"); - if ((rc1 = compress_init(bp.tmode))) { - Syslog('+', "Binkp: compress_init failed (rc=%d)", rc1); - tmp->compress = CompNone; - bp.tmode = CompNone; + if ((bp.CRCwe == Active)) { + Syslog('b', "Binkp: CRC mode active - GZ/BZ2 compression disabled"); + } else { + if ((tmp->compress == CompGZ) || (tmp->compress == CompBZ2)) { + bp.tmode = tmp->compress; + Syslog('b', "Binkp: compress_init start"); + if ((rc1 = compress_init(bp.tmode))) { + Syslog('+', "Binkp: compress_init failed (rc=%d)", rc1); + tmp->compress = CompNone; + bp.tmode = CompNone; } else { if (bp.tmode == CompBZ2) extra = (char *)" BZ2"; - else if (bp.tmode == CompGZ) - extra = (char *)" GZ"; + else if (bp.tmode == CompGZ) + extra = (char *)" GZ"; Syslog('b', "Binkp: compress_init ok, extra=%s", extra); + } } } @@ -1559,8 +1612,13 @@ TrType binkp_transmitter(void) Syslog('+', "Binkp: send \"%s\" as \"%s\"", MBSE_SS(tmp->local), MBSE_SS(tmp->remote)); Syslog('+', "Binkp: size %u bytes, dated %s, comp %s", (unsigned int)tmp->size, date(tmp->date), cpstate[bp.tmode]); - rc = binkp_send_command(MM_FILE, "%s %u %d %d%s", MBSE_SS(tmp->remote), + if ((bp.CRCwe == Active)) { + Syslog('b', "Binkp: CRC active - file %s CRC %x", MBSE_SS(tmp->local), (int)tmp->crc32); + rc = binkp_send_command(MM_FILE, "%s %u %d %d %x", MBSE_SS(tmp->remote), (unsigned int)tmp->size, (int)tmp->date, (unsigned int)tmp->offset, (int)tmp->crc32); + } else { + rc = binkp_send_command(MM_FILE, "%s %u %d %d%s", MBSE_SS(tmp->remote), (unsigned int)tmp->size, (int)tmp->date, (unsigned int)tmp->offset, extra); + } if (rc) { bp.TxState = TxDone; return Failure; @@ -2013,16 +2071,13 @@ int binkp_banner(int originate) return rc; } - - - + /* * Send compression options */ int binkp_send_comp_opts(int originate) { - int rc = 0, nr = FALSE; -#if defined(HAVE_ZLIB_H) || defined(HAVE_BZLIB_H) + int rc = 0, nr = FALSE, crc = FALSE; int plz = FALSE, gz = FALSE, bz2 = FALSE; char *p = NULL; @@ -2046,6 +2101,11 @@ int binkp_send_comp_opts(int originate) } #endif + if ((bp.CRCwe == Can) || (bp.CRCthey == Can) || (bp.CRCthey == Want)) { + crc = TRUE; + bp.CRCwe = Want; + } + Syslog('b', "Binkp: binkp_send_comp_opts(%s) NRwe=%s NRthey=%s", originate ?"TRUE":"FALSE", opstate[bp.NRwe], opstate[bp.NRthey]); if (originate) { @@ -2061,7 +2121,7 @@ int binkp_send_comp_opts(int originate) } } - if (plz || gz || bz2 || nr) { + if (plz || gz || bz2 || nr || crc) { p = xstrcpy((char *)"OPT"); if (bz2 || gz) { bp.EXTCMDwe = Want; @@ -2075,10 +2135,11 @@ int binkp_send_comp_opts(int originate) p = xstrcat(p, (char *)" PLZ"); if (nr) p = xstrcat(p, (char *)" NR"); + if (crc) + p = xstrcat(p, (char *)" CRC"); rc = binkp_send_command(MM_NUL,"%s", p); free(p); } -#endif return rc; } @@ -2123,6 +2184,11 @@ void binkp_set_comp_state(void) bp.NRwe = bp.NRthey = Active; Syslog('+', "Binkp: NR mode active"); } + Syslog('b', "Binkp: CRC they=%s we=%s", opstate[bp.CRCthey], opstate[bp.CRCwe]); + if ((bp.CRCthey == Want) && (bp.CRCwe == Want)) { + bp.CRCwe = bp.CRCthey = Active; + Syslog ('+', "Binkp: CRC mode active"); + } } @@ -2203,13 +2269,13 @@ void parse_m_nul(char *msg) bp.Minor = atoi(q + 1); } /* - * Irex 2.24 upto 2.29 claims binkp/1.1 while it is binkp/1.0 + * Irex 2.24 upto 2.67 claims binkp/1.1 while it is binkp/1.0 * Set a flag so we can activate a workaround. This only works * for incoming sessions. */ if ((p = strstr(msg+4, "Internet Rex 2."))) { q = strtok(p + 15, (char *)" \0"); - if ((atoi(q) >= 24) && (atoi(q) <= 29)) { + if ((atoi(q) >= 24) && (atoi(q) <= 67)) { Syslog('b', " : Irex bug detected, workaround activated"); bp.buggyIrex = TRUE; } @@ -2280,7 +2346,14 @@ void parse_m_nul(char *msg) } else if (strcmp(q, (char *)"ND") == 0) { Syslog('b', "Binkp: remote wants ND mode, NOT SUPPORTED HERE YET"); bp.NDthey = Want; - } + } else if (strcmp(q, (char *)"CRC") == 0) { + Syslog('b', "Binkp: remote requests CRC mode"); + if (bp.CRCthey == Can) { + bp.CRCthey = Want; + binkp_set_comp_state(); + } + } + } } else { @@ -2761,6 +2834,7 @@ void fill_binkp_list(binkp_list **bkll, file_list *fal, off_t offs) (*tmpl)->size = tstat.st_size; (*tmpl)->date = tstat.st_mtime; (*tmpl)->compress = CompNone; + (*tmpl)->crc32 = file_crc(fal->local, FALSE); /* * Search compression method, but only if GZ or BZ2 compression is active. diff --git a/mbcico/binkp.h b/mbcico/binkp.h index 0410d274..c305603b 100644 --- a/mbcico/binkp.h +++ b/mbcico/binkp.h @@ -81,6 +81,7 @@ typedef struct _binkp_list { time_t date; /* File date & time */ off_t offset; /* Start offset */ int compress; /* Compression state */ + int crc32; /* File CRC32 checksum */ } binkp_list; diff --git a/mbcico/bopenfile.c b/mbcico/bopenfile.c index 19820b7a..951fb65a 100644 --- a/mbcico/bopenfile.c +++ b/mbcico/bopenfile.c @@ -127,16 +127,17 @@ FILE *bopenfile(char *fname, time_t remtime, off_t remsize, off_t *resofs) * file so that in a next session we know we must append to that file instead of * trying to get the file again. */ -int bclosefile(int success) +int bclosefile(int success, int CRCflag, int crc) { int rc = 0; + int tmpcrc; struct utimbuf ut; char *temp; Syslog('b', "Binkp: closefile(), for file \"%s\"", MBSE_SS(infpath)); if ((infp == NULL) || (infpath == NULL)) { - Syslog('+', "Binkp: closefile(), nothing to close"); + Syslog('+', "Binkp: bclosefile(), nothing to close"); return 1; } @@ -169,9 +170,24 @@ int bclosefile(int success) else Syslog('b', "Binkp: unlinked %s", temp); + /* If CRC mode is active, check the CRC of the received file. */ + + if (CRCflag) { + tmpcrc = file_crc(infpath, FALSE); + if (tmpcrc != crc) { /* CRC check failed. */ + Syslog('!', "Binkp: CRC error %s Expected %x Got %x", infpath, crc, tmpcrc); + unlink(infpath); /* Remove file with incorrect CRC. */ + isfreq = FALSE; + free(infpath); + infpath = NULL; + return 2; + } + } + /* * Move file from extra tmp to normal tempinbound. */ + snprintf(temp, PATH_MAX, "%s/%s", tempinbound, basename(infpath)); if (rc == 0) { diff --git a/mbcico/bopenfile.h b/mbcico/bopenfile.h index 2fd21656..9c20eddc 100644 --- a/mbcico/bopenfile.h +++ b/mbcico/bopenfile.h @@ -4,6 +4,6 @@ #define _BOPENFILE_H FILE *bopenfile(char *, time_t, off_t, off_t *); -int bclosefile(int); +int bclosefile(int, int, int); #endif diff --git a/mbcico/htoul.c b/mbcico/htoul.c new file mode 100644 index 00000000..c1c4891c --- /dev/null +++ b/mbcico/htoul.c @@ -0,0 +1,44 @@ +/***************************************************************************** + * + * $Id: htoul.c,v 1.6 2005/10/11 20:49:46 mbse Exp $ + * Purpose ...............: Fidonet mailer + * + ***************************************************************************** + * Copyright (C) 1997-2005 + * + * Michiel Broek FIDO: 2:280/2802 + * Beekmansbos 10 + * 1971 BV IJmuiden + * the Netherlands + * + * This file is part of MBSE BBS. + * + * This BBS is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2, or (at your option) any + * later version. + * + * MBSE BBS is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with MBSE BBS; see the file COPYING. If not, write to the Free + * Software Foundation, 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + *****************************************************************************/ + +#include "../config.h" +#include "../lib/mbselib.h" +#include "htoul.h" + + +unsigned int htoul(char *str) +{ + unsigned int x; + + if (sscanf(str,"%x",&x) == 1) + return x; + else return 0xffffffff; +} + diff --git a/mbcico/htoul.h b/mbcico/htoul.h new file mode 100644 index 00000000..e9ff1d18 --- /dev/null +++ b/mbcico/htoul.h @@ -0,0 +1,9 @@ +#ifndef _HTOUL_H +#define _HTOUL_H + +/* $Id: htoul.h,v 1.2 2005/10/11 20:49:46 mbse Exp $ */ + +unsigned int htoul(char *); + +#endif + diff --git a/mbcico/rdoptions.c b/mbcico/rdoptions.c index b132ed63..901a6ae8 100644 --- a/mbcico/rdoptions.c +++ b/mbcico/rdoptions.c @@ -53,6 +53,7 @@ static struct _ktab { {(char *)"PLZ", NOPLZ}, {(char *)"GZ/BZ2", NOGZBZ2}, {(char *)"NR", NONR}, + {(char *)"CRC", NOCRC}, {NULL, 0} }; @@ -93,6 +94,8 @@ void rdoptions(int Loaded) localoptions |= NOZEDZAP; if (CFG.NoHydra) localoptions |= NOHYDRA; + if (CFG.NoCRC32) + localoptions |= NOCRC; localoptions |= NONR; #ifndef HAVE_ZLIB_H @@ -131,6 +134,8 @@ void rdoptions(int Loaded) localoptions |= NOGZBZ2; if (nodes.DoNR) localoptions &= ~NONR; + if (nodes.DoCRC) + localoptions &= ~NOCRC; logoptions(); } diff --git a/mbcico/session.h b/mbcico/session.h index aced25f9..fcac66ed 100644 --- a/mbcico/session.h +++ b/mbcico/session.h @@ -67,6 +67,7 @@ extern int localoptions; #define NOPLZ 0x0400 #define NOGZBZ2 0x0800 #define NONR 0x1000 +#define NOCRC 0x2000 struct _history history; /* History record for sessions */ diff --git a/mbfido/mbaff.c b/mbfido/mbaff.c index e48d84cf..f5572679 100644 --- a/mbfido/mbaff.c +++ b/mbfido/mbaff.c @@ -54,7 +54,7 @@ void ProgName(void) return; mbse_colour(WHITE, BLACK); - printf("\nMBAFF: MBSE BBS %s Announce new files and FileFind\n", VERSION); + printf("\nMBAFF: MBSE BBS %s Announce New Files and FileFind\n", VERSION); mbse_colour(YELLOW, BLACK); printf(" %s\n", COPYRIGHT); } diff --git a/mbfido/mbdiff.c b/mbfido/mbdiff.c index 0bc4c74c..d0f2296e 100644 --- a/mbfido/mbdiff.c +++ b/mbfido/mbdiff.c @@ -59,7 +59,7 @@ void ProgName(void) return; mbse_colour(WHITE, BLACK); - printf("\nMBDIFF: MBSE BBS %s Nodelist diff processor\n", VERSION); + printf("\nMBDIFF: MBSE BBS %s Nodelist Diff Processor\n", VERSION); mbse_colour(YELLOW, BLACK); printf(" %s\n", COPYRIGHT); } diff --git a/mbfido/mbfido.c b/mbfido/mbfido.c index 04ce8caa..b00a5631 100644 --- a/mbfido/mbfido.c +++ b/mbfido/mbfido.c @@ -157,7 +157,7 @@ void ProgName(void) return; mbse_colour(WHITE, BLACK); - printf("\nMBFIDO: MBSE BBS %s - Fidonet File and Mail processor\n", VERSION); + printf("\nMBFIDO: MBSE BBS %s - Fidonet File and Mail Processor\n", VERSION); mbse_colour(YELLOW, BLACK); printf(" %s\n", COPYRIGHT); } diff --git a/mbfido/mbfutil.c b/mbfido/mbfutil.c index 56e82fa0..a6598ed1 100644 --- a/mbfido/mbfutil.c +++ b/mbfido/mbfutil.c @@ -52,7 +52,7 @@ void ProgName(void) return; mbse_colour(WHITE, BLACK); - printf("\nMBFILE: MBSE BBS %s File maintenance utility\n", VERSION); + printf("\nMBFILE: MBSE BBS %s File Maintenance Utility\n", VERSION); mbse_colour(YELLOW, BLACK); printf(" %s\n", COPYRIGHT); } diff --git a/mbsetup/m_global.c b/mbsetup/m_global.c index 660b0b1e..e2633361 100644 --- a/mbsetup/m_global.c +++ b/mbsetup/m_global.c @@ -1302,19 +1302,19 @@ void s_mailer(void) mbse_mvprintw(15, 2, "9. No callout"); mbse_mvprintw(16, 2, "10. No EMSI session"); mbse_mvprintw(17, 2, "11. No Yooho/2U2"); + mbse_mvprintw(12,31, "12. No CRC"); + mbse_mvprintw(13,31, "13. No Zmodem"); + mbse_mvprintw(14,31, "14. No Zedzap"); + mbse_mvprintw(15,31, "15. No Hydra"); + mbse_mvprintw(16,31, "16. No MD5"); + mbse_mvprintw(17,31, "17. Zero Locks OK"); - mbse_mvprintw(13,31, "12. No Zmodem"); - mbse_mvprintw(14,31, "13. No Zedzap"); - mbse_mvprintw(15,31, "14. No Hydra"); - mbse_mvprintw(16,31, "15. No MD5"); - mbse_mvprintw(17,31, "16. Zero Locks OK"); - - mbse_mvprintw(12,59, "17. Phonetrans 1-10"); - mbse_mvprintw(13,59, "18. Phonetrans 11-20"); - mbse_mvprintw(14,59, "19. Phonetrans 21-30"); - mbse_mvprintw(15,59, "20. Phonetrans 31-40"); - mbse_mvprintw(16,59, "21. Max. files"); - mbse_mvprintw(17,59, "22. Max. MB."); + mbse_mvprintw(12,59, "18. Phonetrans 1-10"); + mbse_mvprintw(13,59, "19. Phonetrans 11-20"); + mbse_mvprintw(14,59, "20. Phonetrans 21-30"); + mbse_mvprintw(15,59, "21. Phonetrans 31-40"); + mbse_mvprintw(16,59, "22. Max. files"); + mbse_mvprintw(17,59, "23. Max. MB."); } @@ -1368,7 +1368,7 @@ void e_mailer(void) show_bool(15,23, CFG.NoCall); show_bool(16,23, CFG.NoEMSI); show_bool(17,23, CFG.NoWazoo); - + show_bool(12,52, CFG.NoCRC32); show_bool(13,52, CFG.NoZmodem); show_bool(14,52, CFG.NoZedzap); show_bool(15,52, CFG.NoHydra); @@ -1378,7 +1378,7 @@ void e_mailer(void) show_int( 16,75, CFG.Req_Files); show_int( 17,75, CFG.Req_MBytes); - switch(select_menu(22)) { + switch(select_menu(23)) { case 0: return; case 1: E_LOGL(CFG.cico_loglevel, "1.14.1", s_mailer) case 2: E_STR( 8,23,20,CFG.IP_Phone, "The mailer ^TCP/IP \"phone\" number^ for this system, empty is no TCP/IP") @@ -1389,21 +1389,21 @@ void e_mailer(void) case 7: E_INT( 13,23, CFG.dialdelay, "The ^random dialdelay^ in seconds ((^n^ <= delay) and (^n^ > (delay / 10)))") case 8: E_BOOL(14,23, CFG.NoFreqs, "Set to true if ^No Filerequests^ are allowed") case 9: E_BOOL(15,23, CFG.NoCall, "Set to true if ^No Calls^ are allowed") - case 10:E_BOOL(16,23, CFG.NoEMSI, "If set then ^EMSI handshake^ is diabled") + case 10:E_BOOL(16,23, CFG.NoEMSI, "If set then ^EMSI handshake^ is disabled") case 11:E_BOOL(17,23, CFG.NoWazoo, "If set then ^YooHoo/2U2^ (FTSC-0006) is disabled") + case 12:E_BOOL(12,52, CFG.NoCRC32, "If set then ^CRC32^ in binkp sessions is disabled") + case 13:E_BOOL(13,52, CFG.NoZmodem, "If set then the ^Zmodem^ protocol is disabled") + case 14:E_BOOL(14,52, CFG.NoZedzap, "If set then the ^Zedzap^ protocol is disabled") + case 15:E_BOOL(15,52, CFG.NoHydra, "If set then the ^Hydra^ protocol is disabled") + case 16:E_BOOL(16,52, CFG.NoMD5, "Disable ^MD5 crypted^ passwords with binkp sessions") + case 17:E_BOOL(17,52, CFG.ZeroLocks, "Allow ^zero byte node lockfiles^ created by another OS") - case 12:E_BOOL(13,52, CFG.NoZmodem, "If set then the ^Zmodem^ protocol is disabled") - case 13:E_BOOL(14,52, CFG.NoZedzap, "If set then the ^Zedzap^ protocol is disabled") - case 14:E_BOOL(15,52, CFG.NoHydra, "If set then the ^Hydra^ protocol is disabled") - case 15:E_BOOL(16,52, CFG.NoMD5, "Disable ^MD5 crypted^ passwords with binkp sessions") - case 16:E_BOOL(17,52, CFG.ZeroLocks, "Allow ^zero byte node lockfiles^ created by another OS") - - case 17:e_trans(0, 17); break; - case 18:e_trans(10, 18); break; - case 19:e_trans(20, 19); break; - case 20:e_trans(30, 20); break; - case 21:E_INT(16,75, CFG.Req_Files, "Maximum ^files^ to request, 0 is unlimited") - case 22:E_INT(17,75, CFG.Req_MBytes, "Maximum ^MBytes^ to request, 0 is unlimited") + case 18:e_trans(0, 17); break; + case 19:e_trans(10, 18); break; + case 20:e_trans(20, 19); break; + case 21:e_trans(30, 20); break; + case 22:E_INT(16,75, CFG.Req_Files, "Maximum ^files^ to request, 0 is unlimited") + case 23:E_INT(17,75, CFG.Req_MBytes, "Maximum ^MBytes^ to request, 0 is unlimited") } } } @@ -2270,6 +2270,7 @@ int global_doc(FILE *fp, FILE *toc, int page) add_webtable(wp, (char *)"No Calls", getboolean(CFG.NoCall)); add_webtable(wp, (char *)"No EMSI", getboolean(CFG.NoEMSI)); add_webtable(wp, (char *)"No YooHoo/2U2", getboolean(CFG.NoWazoo)); + add_webtable(wp, (char *)"No CRC32", getboolean(CFG.NoCRC32)); add_webtable(wp, (char *)"No Zmodem", getboolean(CFG.NoZmodem)); add_webtable(wp, (char *)"No Zedzap", getboolean(CFG.NoZedzap)); add_webtable(wp, (char *)"No Hydra", getboolean(CFG.NoHydra)); @@ -2294,6 +2295,7 @@ int global_doc(FILE *fp, FILE *toc, int page) fprintf(fp, " No Calls %s\n", getboolean(CFG.NoCall)); fprintf(fp, " No EMSI %s\n", getboolean(CFG.NoEMSI)); fprintf(fp, " No YooHoo/2U2 %s\n", getboolean(CFG.NoWazoo)); + fprintf(fp, " No CRC32 %s\n", getboolean(CFG.NoCRC32)); fprintf(fp, " No Zmodem %s\n", getboolean(CFG.NoZmodem)); fprintf(fp, " No Zedzap %s\n", getboolean(CFG.NoZedzap)); fprintf(fp, " No Hydra %s\n", getboolean(CFG.NoHydra)); diff --git a/mbsetup/m_node.c b/mbsetup/m_node.c index 73efae1c..c7233682 100644 --- a/mbsetup/m_node.c +++ b/mbsetup/m_node.c @@ -807,32 +807,32 @@ void SessionScreen(void) { clr_index(); set_color(WHITE, BLACK); - mbse_mvprintw( 5, 6, "7.3 EDIT NODE SESSION"); + mbse_mvprintw( 5, 2, "7.3 EDIT NODE SESSION"); set_color(CYAN, BLACK); - mbse_mvprintw( 7, 6, "1. Session passwd"); - mbse_mvprintw( 8, 6, "2. Dial command"); - mbse_mvprintw( 9, 6, "3. Phone number 1"); - mbse_mvprintw(10, 6, "4. Phone number 2"); - mbse_mvprintw(11, 6, "5. Nodelist flags"); - mbse_mvprintw(12, 6, "6. Inet hostname"); - mbse_mvprintw(13, 6, "7. Outbound sess."); - mbse_mvprintw(14, 6, "8. Inbound sess."); - mbse_mvprintw(15, 6, "9. No EMSI"); - mbse_mvprintw(16, 6, "10. No YooHoo/2U2"); - mbse_mvprintw(17, 6, "11. No Filerequest"); - mbse_mvprintw(18, 6, "12. Don't call"); - mbse_mvprintw(19, 6, "13. 8.3 names"); - mbse_mvprintw(20, 6, "14. NR mode"); - - mbse_mvprintw(13,41, "15. No PLZ"); - mbse_mvprintw(14,41, "16. No GZ/BZ2"); - mbse_mvprintw(15,41, "17. No Zmodem"); - mbse_mvprintw(16,41, "18. No Zedzap"); - mbse_mvprintw(17,41, "19. No Hydra"); - mbse_mvprintw(18,41, "20. Binkp old esc"); - mbse_mvprintw(19,41, "21. No binkp/1.1"); - mbse_mvprintw(20,41, "22. Ign. Hold"); + mbse_mvprintw( 7, 2, "1. Session passwd"); + mbse_mvprintw( 8, 2, "2. Dial command"); + mbse_mvprintw( 9, 2, "3. Phone number 1"); + mbse_mvprintw(10, 2, "4. Phone number 2"); + mbse_mvprintw(11, 2, "5. Nodelist flags"); + mbse_mvprintw(12, 2, "6. Inet hostname"); + mbse_mvprintw(13, 2, "7. Outbound sess."); + mbse_mvprintw(14, 2, "8. Inbound sess."); + mbse_mvprintw(15, 2, "9. No EMSI"); + mbse_mvprintw(16, 2, "10. No YooHoo/2U2"); + mbse_mvprintw(17, 2, "11. No Filerequest"); + mbse_mvprintw(18, 2, "12. Don't call"); + mbse_mvprintw(19, 2, "13. 8.3 names"); + mbse_mvprintw(13,33, "14. NR mode"); + mbse_mvprintw(14,33, "15. CRC mode"); + mbse_mvprintw(15,33, "16. No PLZ"); + mbse_mvprintw(16,33, "17. No GZ/BZ2"); + mbse_mvprintw(17,33, "18. No Zmodem"); + mbse_mvprintw(18,33, "19. No Zedzap"); + mbse_mvprintw(19,33, "20. No Hydra"); + mbse_mvprintw(17,57, "21. Binkp old esc"); + mbse_mvprintw(18,57, "22. No binkp/1.1"); + mbse_mvprintw(19,57, "23. Ign. Hold"); } @@ -850,25 +850,25 @@ void SessionEdit(void) show_str( 10,26,20, nodes.phone[1]); show_str( 11,26,54, nodes.Nl_flags); show_str( 12,26,40, nodes.Nl_hostname); - show_sessiontype(13,26,nodes.Session_out); - show_sessiontype(14,26,nodes.Session_in); - show_bool(15,26, nodes.NoEMSI); - show_bool(16,26, nodes.NoWaZOO); - show_bool(17,26, nodes.NoFreqs); - show_bool(18,26, nodes.NoCall); - show_bool(19,26, nodes.FNC); - show_bool(20,26, nodes.DoNR); + show_sessiontype(13,23,nodes.Session_out); + show_sessiontype(14,23,nodes.Session_in); + show_bool(15,23, nodes.NoEMSI); + show_bool(16,23, nodes.NoWaZOO); + show_bool(17,23, nodes.NoFreqs); + show_bool(18,23, nodes.NoCall); + show_bool(19,23, nodes.FNC); + show_bool(13,52, nodes.DoNR); + show_bool(14,52, nodes.DoCRC); + show_bool(15,52, nodes.NoPLZ); + show_bool(16,52, nodes.NoGZ); + show_bool(17,52, nodes.NoZmodem); + show_bool(18,52, nodes.NoZedzap); + show_bool(19,52, nodes.NoHydra); + show_bool(17,76, nodes.WrongEscape); + show_bool(18,76, nodes.NoBinkp11); + show_bool(19,76, nodes.IgnHold); - show_bool(13,61, nodes.NoPLZ); - show_bool(14,61, nodes.NoGZ); - show_bool(15,61, nodes.NoZmodem); - show_bool(16,61, nodes.NoZedzap); - show_bool(17,61, nodes.NoHydra); - show_bool(18,61, nodes.WrongEscape); - show_bool(19,61, nodes.NoBinkp11); - show_bool(20,61, nodes.IgnHold); - - switch(select_menu(22)) { + switch(select_menu(23)) { case 0: return; case 1: E_STR( 7,26,15, nodes.Spasswd, "The ^Session password^ for this node") case 2: E_STR( 8,26,40, nodes.dial, "If needed, give a special modem ^dial command^ for this node") @@ -876,25 +876,25 @@ void SessionEdit(void) case 4: E_STR( 10,26,20, nodes.phone[1], "Enter ^phone number^ to override the nodelist") case 5: E_STR( 11,26,54, nodes.Nl_flags, "^Nodelist flags^ override") case 6: E_STR( 12,26,40, nodes.Nl_hostname, "Node internet ^hostname/IP address^ override") - case 7: nodes.Session_out = edit_sessiontype(13,26, nodes.Session_out); + case 7: nodes.Session_out = edit_sessiontype(13,23, nodes.Session_out); break; - case 8: nodes.Session_in = edit_sessiontype(14,26, nodes.Session_in); + case 8: nodes.Session_in = edit_sessiontype(14,23, nodes.Session_in); break; - case 9: E_BOOL(15,26, nodes.NoEMSI, "Disable ^EMSI handshake^ with this node") - case 10:E_BOOL(16,26, nodes.NoWaZOO, "Disable ^YooHoo/2U2 handshake^ (FTSC-0006) with this node") - case 11:E_BOOL(17,26, nodes.NoFreqs, "Disallow ^file requests^ from this node") - case 12:E_BOOL(18,26, nodes.NoCall, "Don't ^call^ this node") - case 13:E_BOOL(19,26, nodes.FNC, "Node needs ^DOS 8.3^ filenames") - case 14:E_BOOL(20,26, nodes.DoNR, "Use ^NR-mode^ in outgoing binkp sessions") - - case 15:E_BOOL(13,61, nodes.NoPLZ, "Disable ^Binkp PLZ^ compression with this node") - case 16:E_BOOL(14,61, nodes.NoGZ, "Disable ^Binkp GZ and BZ2^ compression with this node") - case 17:E_BOOL(15,61, nodes.NoZmodem, "Disable ^Zmodem^ protocol with this node") - case 18:E_BOOL(16,61, nodes.NoZedzap, "Disable ^Zedzap^ protocol with this node") - case 19:E_BOOL(17,61, nodes.NoHydra, "Disable ^Hydra^ protocol with this node") - case 20:E_BOOL(18,61, nodes.WrongEscape, "Use the ^old escape^ for long filenames (Argus, Irex)") - case 21:E_BOOL(19,61, nodes.NoBinkp11, "Disable ^binkp/1.1^ (fallback to binkp/1.0) mode for this node") - case 22:E_BOOL(20,61, nodes.IgnHold, "Ignore node ^Hold or Down^ nodelist status") + case 9: E_BOOL(15,23, nodes.NoEMSI, "Disable ^EMSI handshake^ with this node") + case 10:E_BOOL(16,23, nodes.NoWaZOO, "Disable ^YooHoo/2U2 handshake^ (FTSC-0006) with this node") + case 11:E_BOOL(17,23, nodes.NoFreqs, "Disallow ^file requests^ from this node") + case 12:E_BOOL(18,23, nodes.NoCall, "Don't ^call^ this node") + case 13:E_BOOL(19,23, nodes.FNC, "Node needs ^DOS 8.3^ filenames") + case 14:E_BOOL(13,52, nodes.DoNR, "Use ^NR-mode^ in outgoing binkp sessions") + case 15:E_BOOL(14,52, nodes.DoCRC, "Use ^Binkp CRC^ error checking") + case 16:E_BOOL(15,52, nodes.NoPLZ, "Disable ^Binkp PLZ^ compression with this node") + case 17:E_BOOL(16,52, nodes.NoGZ, "Disable ^Binkp GZ and BZ2^ compression with this node") + case 18:E_BOOL(17,52, nodes.NoZmodem, "Disable ^Zmodem^ protocol with this node") + case 19:E_BOOL(18,52, nodes.NoZedzap, "Disable ^Zedzap^ protocol with this node") + case 20:E_BOOL(19,52, nodes.NoHydra, "Disable ^Hydra^ protocol with this node") + case 21:E_BOOL(17,76, nodes.WrongEscape, "Use the ^old escape^ for long filenames (Argus, Irex)") + case 22:E_BOOL(18,76, nodes.NoBinkp11, "Disable ^binkp/1.1^ (fallback to binkp/1.0) mode for this node") + case 23:E_BOOL(19,76, nodes.IgnHold, "Ignore node ^Hold or Down^ nodelist status") } } }