diff --git a/CHANGES b/CHANGES index 86b05b2..82c421e 100644 --- a/CHANGES +++ b/CHANGES @@ -228,9 +228,27 @@ Alexey Khromov (zx@zxalexis.ru) + Added pre-init debugging (primarily of config readout) to stderr by -v option. Vanished out errorful calls to "log" and "debug" before log and debug files initialization. - + As of bison is default yacc for (almost) every foss system - fix - warning of yacc compliance (delete -y flag in Makefile.in) + Fixed build on 64-bit systems (amd64 and aarch64) + Initially added config options incpkt_flag and incbdl_flag to raise up flag-driven tosser manipulation +0.24.2 + + Fixed environment when calling external utilities to preserve OS + environment + + Flag work checked + +0.25 + + EMSI session logic corrected to fully accomplish FTS-0088 EMSI-II + standart. + New option: proto_order - order in which EMSI proposes protocols + to callee + example: + proto_order HYD,ZMO,ZAP,DZA + If answering - final proto rely on EMSI version: + if caller is EMSI-II - in order caller asks + if caller is IMSI-I - as we suppose among our supported + + Config example extended: added environment vars sent to external + utils + + Changed ifcico proto port from "fido" to numbered default 60179: + modern /etc/services does not include it by default anyways + + New option: emsi_send_tz - send TZUTC in EMSI handshake diff --git a/INSTALL.ru b/INSTALL.ru index e7aeeb1..552ec64 100644 --- a/INSTALL.ru +++ b/INSTALL.ru @@ -1,10 +1,10 @@ В этом файле описывается процесс установки и настройки -фидонет-совместимого мейлера bforce 0.22.8.ugenk1. +фидонет-совместимого мейлера bforce 0.24.x В данном документе приняты следующие обозначения: - путь, куда вы распаковали тарболл с исходными - текстами bforce 0.22.8.ugenk1 (далее bforce) + текстами bforce 0.24.x (далее bforce) Тарболл - файл с расширением tar.gz, или tar.bz2 @@ -24,14 +24,12 @@ gmake Распакуйте тарболл следующими командами: -gzip -d bforce-0.22.8.ugenk1.tar.gz +gzip -d bforce-master.tar.gz или -bzip2 -d bforce-0.22.8.ugenk1.tar.bz2 +bzip2 -d bforce-master.tar.bz2 -tar -xvf bforce-0.22.8.ugenk1.tar - -Перейдите в директорию bforce-0.22.8.ugenk1/source: -cd /bforce-0.22.8.ugenk1/source +Перейдите в директорию bforce/source: +cd /bforce/source Для создания Makefile, который наиболее подходит к вашей системе, наберите: @@ -39,22 +37,25 @@ cd /bforce-0.22.8.ugenk1/source ./configure --help и внимательно прочитайте предлагаемую справку. +В большинстве случаев вам необходимо будет указать опции +--prefix= - базовый каталог дерева установки +Для работы в режиме демона: +--with-owner= для установки имени пользователя, от которого +работает демон или создаются временные файлы. +--with-group= для установки группы, от которой работает демон +или создаются временные файлы. +--disable-syslog для использования текстовых логов вместо syslog/journal Если вам не понятна предлагаемая справка, то просто запустите: ./configure -## WARNING! Внимание! -## Новые версии bforce собираются с поддержкой syslog по умолчанию. -## Если вы не знаете что это/зачем вам это нужно - тогда делайте -## ./configure --disable-syslog - При необходимости исправьте Makefile для ваших нужд. Запустите команду make (для bsd - gmake): make -В случае ошибок при выполнении команды make пишите bugreport на -e.kozhuhovskiy@gmail.com или в эхоконференцию ru.unix.ftn +В случае ошибок при выполнении команды make пишите bugreport +на электронную почту или в эхоконференцию ru.ftn.develop Возможно, прийдется пересоздать configure с помощью autoconf @@ -71,8 +72,6 @@ gmake install что бы создать необходимые директории. Для установки дополнительных скриптов, выполните make install-contrib - - Настройка ========= diff --git a/examples/bforce.conf b/examples/bforce.conf index c84436f..7a78496 100644 --- a/examples/bforce.conf +++ b/examples/bforce.conf @@ -63,6 +63,13 @@ address 20:26/100.0@easynet # options NoDirZap NoJanus NoChat + +# Protocol order for outgoing EMSI calls +# Tolerant to Options (i.e. you can order all kind of protos +# as of TZA,KER,JAN and SLK are not supported at all +# Default: HYD,JAN,DZA,ZAP,ZMO,TZA,SLK,KER +proto_order HYD,ZMO,ZAP,DZA,JAN,TZA,KER,SLK + # # Domain outbounds # Domain @@ -109,17 +116,17 @@ split_inbound yes # # Path to your 4D outbound (use zone as extension) # -#outbound_directory /var/spool/fido/bt/out +outbound_directory /var/spool/fido/bt/out # # Path to your AmigaDos style 4D outbound. # (You can use all outbound styles at the same time) # -amiga_outbound_directory /var/spool/fido/bt/out +# amiga_outbound_directory /var/spool/fido/bt/out # # Directory with your nodelists (for nodelist without full path) -# +# Do not forget to make indexes for your nodelists with bfindex nodelist_directory /var/spool/fido/ndl # @@ -132,6 +139,9 @@ status_directory /var/spool/fido/bforce # history_file /var/log/bforce/history +# Modem lock directory (/var/lock by default - you must have write perm) +# uucp_lock_directory /tmp + # # Minimal connect speeds for incoming/outgoing sessions # @@ -342,6 +352,8 @@ max_speed 57600 flags XW,V34B,IDC,LMD emsi_OH_time 22:00-07:30 emsi_FR_time 22:30-05:30 +emsi_send_tz no +emsi_send_time no # # Our receiver buffer size [bytes] @@ -442,6 +454,23 @@ skip_files_recv *.pif *.swp # setsid - run command in a new session # useshell - run command by calling a shell (/bin/sh) # +# Bforce will make environment for external programs +# which include these variables: +# $REM_ADDR_FTN - remote ftn address +# $REM_ADDR_INET - remote inet address +# $LOC_ADDR_FTN - local ftn address +# $LOC_ADDR_INET - local inet address +# $PASSWORD - session password +# $MAILER - remote mailer +# $LOCATION - remote location +# $SYSOP - remote SysOp name +# $SYSTEM_NAME - remote station name +# $PHONE - remote phone +# $FLAGS - remote flags +# $PROTECTED - password protected on both sides +# $LISTED - present in nodelist +# $INBOUND - current inbound path for this remote +# #run_after_handshake [logout]/bin/echo "Hello, world!" #run_after_session [nowait,setsid]/usr/local/lib/ftp/run-in # diff --git a/source/.version b/source/.version index 8b95abd..7d385d4 100644 --- a/source/.version +++ b/source/.version @@ -1 +1 @@ -0.24.2 +0.25 diff --git a/source/bforce/conf_proc.c b/source/bforce/conf_proc.c index c2dfa54..d9b889d 100644 --- a/source/bforce/conf_proc.c +++ b/source/bforce/conf_proc.c @@ -84,6 +84,8 @@ s_conf_entry bforce_config[BFORCE_NUMBER_OF_KEYWORDS+1] = { CONF_KEY(emsi_FR_time, CT_STRING), CONF_KEY(emsi_OH_time, CT_STRING), CONF_KEY(emsi_slave_sends_nak, CT_BOOLEAN), + CONF_KEY(emsi_send_tz, CT_BOOLEAN), + CONF_KEY(emsi_send_time, CT_BOOLEAN), CONF_KEY(filebox, CT_FILEBOX), CONF_KEY(filebox_directory, CT_PATH), CONF_KEY(flags, CT_STRING), @@ -140,6 +142,7 @@ s_conf_entry bforce_config[BFORCE_NUMBER_OF_KEYWORDS+1] = { CONF_KEY(nodial_flag, CT_STRING), CONF_KEY(override, CT_OVERRIDE), CONF_KEY(options, CT_OPTIONS), + CONF_KEY(proto_order, CT_STRING), CONF_KEY(outbound_directory, CT_PATH), CONF_KEY(password, CT_PASSWORD), CONF_KEY(phone, CT_STRING), diff --git a/source/bforce/io_tcpip.c b/source/bforce/io_tcpip.c index 4148d40..390094c 100644 --- a/source/bforce/io_tcpip.c +++ b/source/bforce/io_tcpip.c @@ -120,11 +120,12 @@ int tcpip_connect(const char *hostname, e_tcpmode tcpmode) if( p ) { *p++ = '\0'; port = p; } else if( tcpmode == TCPMODE_BINKP ) - port = "binkp"; + port = "binkp"; // Well-known else if( tcpmode == TCPMODE_TELNET ) - port = "telnet"; - else /* Default service name is "fido" */ - port = "fido"; + port = "telnet"; // Well-known + else /* TCPMODE_IFCICO Default service name is "fido" + * BUGGY - simpler to place exact port number */ + port = "60179"; if( ISDEC(port) ) server.sin_port = htons(atoi(port)); diff --git a/source/bforce/io_unix_lock.c b/source/bforce/io_unix_lock.c index 4d281e1..7c2bd92 100644 --- a/source/bforce/io_unix_lock.c +++ b/source/bforce/io_unix_lock.c @@ -77,7 +77,7 @@ static char *lock_getname(const char *lockdir, const s_modemport *modemport) ASSERT(modemport != NULL); - if( lockdir && *lockdir ) + if( *lockdir ) lckname = (char *)xstrcpy(lockdir); else lckname = (char *)xstrcpy(BFORCE_LOCK_DIR); @@ -314,7 +314,7 @@ int port_lock(const char *lockdir, const s_modemport *modemport) char *lckname; char *tmpname, *p_tmpname; - if( lockdir && *lockdir ) + if( *lockdir ) tmpname = xstrcpy(lockdir); else tmpname = xstrcpy(BFORCE_LOCK_DIR); diff --git a/source/bforce/prot_emsi.c b/source/bforce/prot_emsi.c index 1ffbba7..25b6d99 100644 --- a/source/bforce/prot_emsi.c +++ b/source/bforce/prot_emsi.c @@ -80,7 +80,7 @@ static int state_machine(s_states *sm, void *data) } /* ------------------------------------------------------------------------- */ -/* Transmite EMSI_DAT packet state machine routines */ +/* Transmit EMSI_DAT packet state machine routines */ /* ------------------------------------------------------------------------- */ /* SM0 */ @@ -741,7 +741,7 @@ void emsi_set_sysinfo(s_emsi *emsi, s_emsi *remote_emsi, int hrc, else { if( (remote_emsi->compcodes.EII == 1) - && (options & OPTIONS_NO_EMSI_II) != OPTIONS_NO_EMSI_II ) + && ((options & OPTIONS_NO_EMSI_II) != OPTIONS_NO_EMSI_II) ) { /* EMSI-II */ emsi->compcodes.EII = 1; @@ -813,6 +813,20 @@ void emsi_set_sysinfo(s_emsi *emsi, s_emsi *remote_emsi, int hrc, strnxcpy(emsi->flags, p_flags ? p_flags : "MO", sizeof(emsi->flags)); } + /* ----------------------------------------------------------------- */ + /* Data for TZUTC and date fields */ + /* ----------------------------------------------------------------- */ + tzset(); + if (conf_boolean(cf_emsi_send_tz)) { + emsi->have_tzutc = 1; + emsi->tzutc = -(timezone/3600); + } + + if (conf_boolean(cf_emsi_send_time)) { + emsi->have_xdatetime = 1; + emsi->time = ; + } + /* ----------------------------------------------------------------- */ /* Data for {OHFR} field */ /* ----------------------------------------------------------------- */ diff --git a/source/bforce/prot_emsi_api.c b/source/bforce/prot_emsi_api.c index c77fc14..5da7acc 100644 --- a/source/bforce/prot_emsi_api.c +++ b/source/bforce/prot_emsi_api.c @@ -134,6 +134,7 @@ int emsi_incoming(s_handshake_protocol *THIS) int rc = HRC_OK; s_emsi *remote_emsi = NULL; s_emsi *local_emsi = NULL; + char * p = NULL; ASSERT(THIS); ASSERT(THIS->remote_data); @@ -198,19 +199,48 @@ int emsi_incoming(s_handshake_protocol *THIS) /* * Set protocol that we will use + * DONE: This is EMSI-II compatible. */ - if( remote_emsi->compcodes.HYD && !(options & OPTIONS_NO_HYDRA) ) - THIS->protocol = PROT_HYDRA; - else if( remote_emsi->compcodes.ZAP && !(options & OPTIONS_NO_ZEDZAP) ) - THIS->protocol = PROT_ZEDZAP; - else if( remote_emsi->compcodes.ZMO && !(options & OPTIONS_NO_ZMODEM) ) - THIS->protocol = PROT_ZMODEM; - else /* NCP */ - { + if (remote_emsi->compcodes.EII) { + /* EMSI-II uses protocol order + * If first proto is compatible - use it + * or check one by one to minimal compatible ZMO */ + //p = xmalloc(sizeof(emsi->proto_order)+1); + p = xstrcpy(remote_emsi->proto_order); THIS->protocol = PROT_NOPROT; - rc = HRC_NO_PROTOS; + for( p = strtok(p, ","); p; p=strtok(NULL, ",") ) { + if( !strcmp(p, "ZMO") && !(options & OPTIONS_NO_ZMODEM)) { + if (THIS->protocol == PROT_NOPROT) THIS->protocol = PROT_ZMODEM; + } + if( !strcmp(p, "HYD") && !(options & OPTIONS_NO_HYDRA)) { + if (THIS->protocol == PROT_NOPROT) THIS->protocol = PROT_HYDRA; + } + if( !strcmp(p, "ZAP") && !(options & OPTIONS_NO_ZEDZAP)) { + if (THIS->protocol == PROT_NOPROT) THIS->protocol = PROT_ZEDZAP; + } + if( !strcmp(p, "DZA") && !(options & OPTIONS_NO_DIRZAP)) { + if (THIS->protocol == PROT_NOPROT) THIS->protocol = PROT_DIRZAP; + } + if( !strcmp(p, "JAN") && !(options & OPTIONS_NO_JANUS)) { + if (THIS->protocol == PROT_NOPROT) THIS->protocol = PROT_JANUS; + } + } + } else { + + if( remote_emsi->compcodes.HYD && !(options & OPTIONS_NO_HYDRA) ) + THIS->protocol = PROT_HYDRA; + else if( remote_emsi->compcodes.ZAP && !(options & OPTIONS_NO_ZEDZAP) ) + THIS->protocol = PROT_ZEDZAP; + else if( remote_emsi->compcodes.ZMO && !(options & OPTIONS_NO_ZMODEM) ) + THIS->protocol = PROT_ZMODEM; + else /* NCP */ + { + THIS->protocol = PROT_NOPROT; + } } + if (THIS->protocol == PROT_NOPROT) rc = HRC_NO_PROTOS; + /* * Check EMSI flags and set corresponding local HOLD flags */ diff --git a/source/bforce/prot_emsi_misc.c b/source/bforce/prot_emsi_misc.c index 12fdf2c..7cb6c4a 100644 --- a/source/bforce/prot_emsi_misc.c +++ b/source/bforce/prot_emsi_misc.c @@ -103,7 +103,10 @@ char *emsi_createdat(s_emsi *emsi) char *tmp = NULL; char buf[100]; char abuf[BF_MAXADDRSTR+1]; + char * p_order = NULL; + char * ord = NULL; + ord = malloc(4); tmp = (char *)xstrcpy("**EMSI_DAT0000"); /* {EMSI} indentifier @@ -179,14 +182,79 @@ char *emsi_createdat(s_emsi *emsi) tmp = add_char(tmp, '}'); } - /* compatibility_codes */ + /* compatibility_codes + * TODO: This is EMSI-I behaviour, not EMSI-II + * */ tmp = add_char(tmp, '{'); - if( emsi->compcodes.NCP ) tmp = add_str(tmp, "NCP,"); - if( emsi->compcodes.ZMO ) tmp = add_str(tmp, "ZMO,"); - if( emsi->compcodes.ZAP ) tmp = add_str(tmp, "ZAP,"); - if( emsi->compcodes.DZA ) tmp = add_str(tmp, "DZA,"); - if( emsi->compcodes.JAN ) tmp = add_str(tmp, "JAN,"); - if( emsi->compcodes.HYD ) tmp = add_str(tmp, "HYD,"); + + p_order = conf_string(cf_proto_order); + + if ( !p_order ) { + DEB((D_HSHAKE, "Protocol order not found, use defaults")); +/* OLD Behaviour */ + if( emsi->compcodes.HYD ) tmp = add_str(tmp, "HYD,"); + if( emsi->compcodes.JAN ) tmp = add_str(tmp, "JAN,"); + if( emsi->compcodes.DZA ) tmp = add_str(tmp, "DZA,"); + if( emsi->compcodes.ZAP ) tmp = add_str(tmp, "ZAP,"); + if( emsi->compcodes.ZMO ) tmp = add_str(tmp, "ZMO,"); + if( emsi->compcodes.TZA ) tmp = add_str(tmp, "TZA,"); + if( emsi->compcodes.SLK ) tmp = add_str(tmp, "SLK,"); + if( emsi->compcodes.KER ) tmp = add_str(tmp, "KER,"); + if( emsi->compcodes.NCP ) tmp = add_str(tmp, "NCP,"); + } else { + DEB((D_HSHAKE, "Protocol order found, %s", p_order)); + ord = strncpy(ord, p_order, 3); + ord[3]='\0'; + DEB((D_HSHAKE, "EMSI create ord: %s", ord)); + if (ord == NULL) + DEB((D_HSHAKE, "EMSI create order error")); + if( !strcmp(ord,"HYD") ) + if( emsi->compcodes.HYD ) tmp = add_str(tmp, "HYD,"); + if( !strcmp(ord,"JAN") ) + if( emsi->compcodes.JAN ) tmp = add_str(tmp, "JAN,"); + if( !strcmp(ord,"DZA") ) + if( emsi->compcodes.DZA ) tmp = add_str(tmp, "DZA,"); + if( !strcmp(ord,"ZAP") ) + if( emsi->compcodes.ZAP ) tmp = add_str(tmp, "ZAP,"); + if( !strcmp(ord,"ZMO") ) + if( emsi->compcodes.ZMO ) tmp = add_str(tmp, "ZMO,"); + if( !strcmp(ord,"TZA") ) + if( emsi->compcodes.TZA ) tmp = add_str(tmp, "TZA,"); + if( !strcmp(ord,"SLK") ) + if( emsi->compcodes.SLK ) tmp = add_str(tmp, "SLK,"); + if( !strcmp(ord,"KER") ) + if( emsi->compcodes.NCP ) tmp = add_str(tmp, "NCP,"); + p_order = strchr(p_order,','); + if (p_order) p_order = p_order+1; + DEB((D_HSHAKE, "EMSI mix p_order: %s", p_order)); + while (p_order) { + ord = strncpy(ord, p_order, 3); + ord[3]='\0'; + DEB((D_HSHAKE, "EMSI create ord: %s", ord)); + if (ord == NULL) + DEB((D_HSHAKE, "EMSI create order error")); + if( !strcmp(ord,"HYD") ) + if( emsi->compcodes.HYD ) tmp = add_str(tmp, "HYD,"); + if( !strcmp(ord,"JAN") ) + if( emsi->compcodes.JAN ) tmp = add_str(tmp, "JAN,"); + if( !strcmp(ord,"DZA") ) + if( emsi->compcodes.DZA ) tmp = add_str(tmp, "DZA,"); + if( !strcmp(ord,"ZAP") ) + if( emsi->compcodes.ZAP ) tmp = add_str(tmp, "ZAP,"); + if( !strcmp(ord,"ZMO") ) + if( emsi->compcodes.ZMO ) tmp = add_str(tmp, "ZMO,"); + if( !strcmp(ord,"TZA") ) + if( emsi->compcodes.TZA ) tmp = add_str(tmp, "TZA,"); + if( !strcmp(ord,"SLK") ) + if( emsi->compcodes.SLK ) tmp = add_str(tmp, "SLK,"); + if( !strcmp(ord,"KER") ) + if( emsi->compcodes.NCP ) tmp = add_str(tmp, "NCP,"); + p_order = strchr(p_order,','); + if (p_order) p_order = p_order+1; + DEB((D_HSHAKE, "EMSI mix p_order: %s", p_order)); + } + } +/* Options */ if( emsi->compcodes.FRQ ) tmp = add_str(tmp, "FRQ,"); if( emsi->compcodes.NRQ ) tmp = add_str(tmp, "NRQ,"); if( emsi->compcodes.ARC ) tmp = add_str(tmp, "ARC,"); @@ -367,7 +435,7 @@ char *emsi_createdat(s_emsi *emsi) */ sprintf(buf, "%04hX", (short unsigned)strlen(tmp+14)); memcpy(tmp+10, buf, 4); - + free (ord); return(tmp); } @@ -449,7 +517,7 @@ static int nflgcmp(const char *p, const char *name) int emsi_parsedat(char *emsi_dat, s_emsi *emsi) { int i; - char *tmp, *p, *q, *n; + char *tmp, *p, *q, *n, *otmp; while( (tmp=get_field(&emsi_dat, '{', '}')) != NULL ) { @@ -522,16 +590,56 @@ int emsi_parsedat(char *emsi_dat, s_emsi *emsi) state.remoteaddrs[i].flags |= EMSI_FLAG_HR; } - /* compatibility codes */ + /* compatibility codes + * DONE: we Must preserve Protocol ORDER if there is EII flag + * */ if( (p=get_field(&emsi_dat, '{', '}')) == NULL ) return(1); DEB((D_HSHAKE, "parse_emsidat: compatibility codes: %s", p)); + emsi->proto_order[0] = '\0'; for( p = strtok(p, ","); p; p=strtok(NULL, ",") ) { - if( !strcmp(p, "ZMO") ) emsi->compcodes.ZMO = 1; - else if( !strcmp(p, "ZAP") ) emsi->compcodes.ZAP = 1; - else if( !strcmp(p, "DZA") ) emsi->compcodes.DZA = 1; - else if( !strcmp(p, "JAN") ) emsi->compcodes.JAN = 1; - else if( !strcmp(p, "HYD") ) emsi->compcodes.HYD = 1; + if( !strcmp(p, "ZMO") ) { + emsi->compcodes.ZMO = 1; + otmp = strcat(emsi->proto_order,"ZMO,"); + strcpy(emsi->proto_order, otmp); + DEB((D_HSHAKE, "parse_emsidat: order added: %s", otmp)); + } + else if( !strcmp(p, "ZAP") ) { + emsi->compcodes.ZAP = 1; + otmp = strcat(emsi->proto_order,"ZAP,"); + strcpy(emsi->proto_order, otmp); + DEB((D_HSHAKE, "parse_emsidat: order added: %s", otmp)); + } + else if( !strcmp(p, "DZA") ) { + emsi->compcodes.DZA = 1; + strcpy(emsi->proto_order, add_str(emsi->proto_order,"DZA,")); + } + else if( !strcmp(p, "JAN") ) { + emsi->compcodes.JAN = 1; + otmp = strcat(emsi->proto_order,"JAN,"); + strcpy(emsi->proto_order, otmp); + } + else if( !strcmp(p, "HYD") ) { + emsi->compcodes.HYD = 1; + otmp = strcat(emsi->proto_order,"HYD,"); + strcpy(emsi->proto_order, otmp); + DEB((D_HSHAKE, "parse_emsidat: order added: %s", otmp)); + } + else if( !strcmp(p, "KER") ) { + emsi->compcodes.KER = 1; + otmp = strcat(emsi->proto_order,"KER,"); + strcpy(emsi->proto_order, otmp); + } + else if( !strcmp(p, "TZA") ) { + emsi->compcodes.TZA = 1; + otmp = strcat(emsi->proto_order,"TZA,"); + strcpy(emsi->proto_order, otmp); + } + else if( !strcmp(p, "SLK") ) { + emsi->compcodes.SLK = 1; + otmp = strcat(emsi->proto_order,"SLK,"); + strcpy(emsi->proto_order, otmp); + } else if( !strcmp(p, "NCP") ) emsi->compcodes.NCP = 1; else if( !strcmp(p, "NRQ") ) emsi->compcodes.NRQ = 1; else if( !strcmp(p, "ARC") ) emsi->compcodes.ARC = 1; @@ -542,6 +650,9 @@ int emsi_parsedat(char *emsi_dat, s_emsi *emsi) else if( !strcmp(p, "BBS") ) emsi->compcodes.BBS = 1; else if( !strcmp(p, "HFR") ) emsi->compcodes.HFR = 1; } + /* delete last ',' from proto_order */ + emsi->proto_order[strlen(emsi->proto_order)-1]='\0'; + DEB((D_HSHAKE, "parse_emsidat: ordered compatibility codes: %s", emsi->proto_order)); /* mailer information */ if( (p=get_field(&emsi_dat, '{', '}')) == NULL ) return(1); diff --git a/source/bforce/sess_answ.c b/source/bforce/sess_answ.c index 9ffdb05..33e6820 100644 --- a/source/bforce/sess_answ.c +++ b/source/bforce/sess_answ.c @@ -88,6 +88,11 @@ int answ_system(e_session type, char *connstr, int inetd) } } + if( inetd == 0) + { + log("answering modem call"); + } + if( inetd == 0 && state.cidstr ) { setproctitle("bforce answering, CID: %.32s", @@ -116,8 +121,9 @@ int answ_system(e_session type, char *connstr, int inetd) port_carrier(0, TRUE); rc = session(); + log("Session ended up, inetd= %d", inetd); - if( ( !inetd ) ) + if ( inetd == 0 ) { port_deinit(0, &oldtio); port_close(); diff --git a/source/bforce/sess_call.c b/source/bforce/sess_call.c index b2e897f..97fbf08 100644 --- a/source/bforce/sess_call.c +++ b/source/bforce/sess_call.c @@ -521,8 +521,7 @@ defalt: (state.node.name && *state.node.name ) ? state.node.name : "", (state.node.host && *state.node.host) ? state.node.host : ""); - if( (rc = tcpip_connect(state.node.host, state.tcpmode)) == 0 - && (rc = tcpip_init() == 0) ) + if( (rc = tcpip_connect(state.node.host, state.tcpmode)) == 0 ) { TTYSTATUS(1); rc = session(); diff --git a/source/include/bforce.h b/source/include/bforce.h index a6a7679..3a4c297 100644 --- a/source/include/bforce.h +++ b/source/include/bforce.h @@ -182,6 +182,7 @@ typedef struct { extern const char *BFERR[]; extern char * mainenv[]; +extern long timezone; int daemon_run(const char *confname, const char *incname, bool quit); diff --git a/source/include/confread.h b/source/include/confread.h index 714ea0b..954fd49 100644 --- a/source/include/confread.h +++ b/source/include/confread.h @@ -179,6 +179,8 @@ typedef enum { cf_emsi_FR_time, cf_emsi_OH_time, cf_emsi_slave_sends_nak, + cf_emsi_send_tz, + cf_emsi_send_time, cf_filebox, cf_filebox_directory, cf_flags, @@ -235,6 +237,7 @@ typedef enum { cf_nodial_flag, cf_override, cf_options, + cf_proto_order, cf_outbound_directory, cf_password, cf_phone, diff --git a/source/include/includes.h b/source/include/includes.h index 685b939..c00f5e6 100644 --- a/source/include/includes.h +++ b/source/include/includes.h @@ -102,12 +102,12 @@ #endif #if TIME_WITH_SYS_TIME -# include -# include +#include +#include #elif HAVE_SYS_TIME -# include +#include #else -# include +#include #endif #ifdef HAVE_UNISTD_H diff --git a/source/include/prot_emsi.h b/source/include/prot_emsi.h index 7e8c688..f96fb75 100644 --- a/source/include/prot_emsi.h +++ b/source/include/prot_emsi.h @@ -116,7 +116,10 @@ struct compcodes ZAP:1, /* ZedZap (Zmodem variant) */ DZA:1, /* DirectZAP (Zmodem variant) */ JAN:1, /* Janus */ - HYD:1; /* Hydra */ + HYD:1, /* Hydra */ + KER:1, /* Kermit (Only EMSI-I) NO SUPPORT */ + SLK:1, /* SEALink - NO SUPPORT */ + TZA:1; /* TrapDoor DirectZAP - NO SUPPORT */ UINT16 FRQ:1, /* The system will accept and process FREQs */ NRQ:1, /* No file requests accepted by this system */ @@ -148,6 +151,7 @@ struct emsi char passwd[EMSI_MAXPASSWD+1]; s_linkcodes linkcodes; /* XXn linkcodes contained in eaddr */ s_compcodes compcodes; + char proto_order[EMSI_MAXADDONS+1]; char m_pid[EMSI_MAXMPID+1]; char m_name[EMSI_MAXMNAME+1]; char m_ver[EMSI_MAXMVER+1];