20 Commits
Author SHA1 Message Date
zx 9fa59cacca fx demo workflow
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 23s
2025-04-12 11:16:47 +03:00
zx b66dd2156c fx demo workflow 2025-04-12 11:14:05 +03:00
zx 80275d30d3 fx demo workflow 2025-04-12 11:11:51 +03:00
zx a62ae3afca fx demo workflow
Gitea Actions Demo / Explore-Gitea-Actions (push) Failing after 3s
2025-04-12 11:08:28 +03:00
zx a9f98cdee9 fx demo workflow
Gitea Actions Demo / Explore-Gitea-Actions (push) Failing after 1m28s
2025-04-12 10:44:21 +03:00
zx 10d30223d1 Added demo workflow
Gitea Actions Demo / Explore-Gitea-Actions (push) Failing after 4m51s
2025-04-12 10:25:35 +03:00
zx c5fc6e9245 added .gitea folder 2025-04-11 12:28:15 +03:00
zx 29000cfdd7 Fixes 2025-04-08 20:45:32 +03:00
zx de6ef3936b small fix checknodefalgs 2025-03-23 20:36:07 +03:00
zx 8db2ee4260 confread diag 2025-03-23 20:21:50 +03:00
zx 25081b1bae . 2025-03-22 22:50:53 +03:00
zx deaa8140f5 Fix binkp overrides 2025-03-22 21:52:08 +03:00
zx 7fb8e32a9b Ver 0.26 changelog 2025-03-20 21:28:39 +03:00
zx 235a6a3072 Ver 0.26 2025-03-20 18:40:08 +03:00
zx 4da486264b Fix unprotected handshake options 2025-03-20 18:37:19 +03:00
zx 25cfb143dc fix typo 2025-03-20 12:32:11 +03:00
zx 4e86852c41 Debug for decryption in passwordless transfer 2025-03-20 12:28:07 +03:00
zx 324b11aad7 test fix for binkp sz and call entry 2025-03-19 21:17:28 +03:00
zx 7fd0d85557 Larger debug of binkp state 2025-03-19 18:56:32 +03:00
zx 0cb9a2b2cf Added Archlinux PKGBUILD 2025-03-18 23:53:39 +03:00
16 changed files with 299 additions and 162 deletions
View File
+19
View File
@@ -0,0 +1,19 @@
name: Gitea Actions Demo
run-name: $ is testing out Gitea Actions 🚀
on: [push]
jobs:
Explore-Gitea-Actions:
runs-on: ubuntu-latest
steps:
- run: echo "🎉 The job was automatically triggered by a ${{ gitea_event_name }} event."
- run: echo "🐧 This job is now running on a ${{ runner.os }} server hosted by Gitea!"
- run: echo "🔎 The name of your branch is ${{ gitea.ref }} and your repository is ${{ gitea.repository }}."
- name: Check out repository code
uses: ischanx/checkout@v4
- run: echo "💡 The ${{ gitea.repository }} repository has been cloned to the runner."
- run: echo "🖥️ The workflow is now ready to test your code on the runner."
- name: List files in the repository
run: |
ls ${{ gitea.basedir }}
- run: echo "🍏 This job's status is ${{ gitea.status }}."
-3
View File
@@ -7,6 +7,3 @@ source/config.log
source/config.status
source/include/config.h
bforce.geany
+5
View File
@@ -270,3 +270,8 @@ Alexey Khromov (zx@zxalexis.ru)
+ Added flags for TIC files (inctic_flag) and files (incfile_flag)
+ Fixed nodelist index creation
+ Added support for TCP port description in IBN/IFC/ITN flags
0.26
+ Fixed incorrect binkp protocol realization in unprotected sessions.
+ Fixed binkp override appliance in incoming handshake
+1 -1
View File
@@ -46,7 +46,7 @@ The simplest way to compile this package is:
Compilers and Options
=====================
Some systems require unusual options for compilation or linking that
the `configure' script does not know about. You can give `configure'
initial values for variables by setting them in the environment. Using
+57
View File
@@ -0,0 +1,57 @@
pkgname=bforce
pkgver=r235.a1c93b8
pkgrel=1
pkgdesc="binkleyforce FTN mailer"
arch=('i686' 'x86_64' 'aarch64')
url="https://prj.zxalexis.ru/gitea/zx/bforce/"
license=('GPL2')
source=(
"${pkgname}::git+https://prj.zxalexis.ru/gitea/zx/bforce.git"
)
makedepends=('git' 'gcc' 'make' 'glibc')
provides=('bforce')
build() {
cd "${srcdir}/${pkgname}/source"
./configure --prefix=/ --disable-syslog --with-owner=fido --with-group=uucp
make
}
prepare() {
cd "${pkgname}"
printf "$( pwd )\n"
}
pkgver() {
cd "$pkgname"
printf "r%s.%s" "$(git rev-list --count HEAD)" "$(git rev-parse --short HEAD)"
}
package() {
cd ${pkgdir}
mkdir -p ${pkgdir}/etc
mkdir -p ${pkgdir}/usr/bin
mkdir -p ${pkgdir}/usr/local/bin
mkdir -p ${pkgdir}/usr/share/doc/bforce
mkdir -p ${pkgdir}/var/log/bforce
mkdir -p ${pkgdir}/var/spool/bforce
mkdir -p ${pkgdir}/var/spool/bforce/bt/in
mkdir -p ${pkgdir}/var/spool/bforce/bt/pin
mkdir -p ${pkgdir}/var/spool/bforce/bt/out
mkdir -p ${pkgdir}/var/spool/bforce/ndl
mkdir -p ${pkgdir}/var/spool/bforce/bforce
/usr/bin/install -c ${srcdir}/${pkgname}/source/bin/bforce ${pkgdir}/usr/bin/bforce
/usr/bin/install -c ${srcdir}/${pkgname}/source/bin/bfindex ${pkgdir}/usr/bin/bfindex
/usr/bin/install -c ${srcdir}/${pkgname}/source/bin/bfstat ${pkgdir}/usr/bin/bfstat
/usr/bin/install -c ${srcdir}/${pkgname}/source/bin/nlookup ${pkgdir}/usr/bin/nlookup
/usr/bin/install -c -m 644 ${srcdir}/${pkgname}/examples/bforce.conf ${pkgdir}/etc/bforce.conf.sample
/usr/bin/install -c -m 644 ${srcdir}/${pkgname}/examples/bforce.subst ${pkgdir}/etc/bforce.subst.sample
/usr/bin/install -c -m 644 ${srcdir}/${pkgname}/examples/bforce.passwd ${pkgdir}/etc/bforce.passwd.sample
/usr/bin/install -c -m 644 ${srcdir}/${pkgname}/examples/freq.aliases ${pkgdir}/etc/freq.aliases.sample
/usr/bin/install -c -m 644 ${srcdir}/${pkgname}/examples/freq.dirs ${pkgdir}/etc/freq.dirs.sample
/usr/bin/install -c ${srcdir}/${pkgname}/contrib/outman ${pkgdir}/usr/local/bin/outman
echo "Please, edit /usr/local/bin/outman"
cp ${srcdir}/${pkgname}/docs/* ${pkgdir}/usr/share/doc/bforce/
}
sha256sums=('SKIP')
+7
View File
@@ -0,0 +1,7 @@
post_install() {
chmod
}
post_upgrade() {
post_install
}
+3 -3
View File
@@ -10,10 +10,10 @@
# These files are considered legacy and are unnecessary on legacy-free
# systems.
d /run/lock 0777 root lock -
L /var/lock - - - - ../run/lock
z /run/lock 0777 root lock -
z /var/lock 0777 root lock - ../run/lock
# /run/lock/subsys is used for serializing SysV service execution, and
# hence without use on SysV-less systems.
d /run/lock/subsys 0775 root lock -
z /run/lock/subsys 0775 root lock -
+1 -1
View File
@@ -1 +1 @@
0.25.3
0.26
+11 -5
View File
@@ -19,11 +19,15 @@
s_cval_entry *conf_first(bforce_config_keyword keyword)
{
s_cval_entry *ptrl;
DEB((D_CONFIG, "conf_first entry nr %d",(int16_t)keyword));
for( ptrl = bforce_config[keyword].data; ptrl; ptrl = ptrl->next )
if( !ptrl->expr.expr || eventexpr(&ptrl->expr) )
if( !ptrl->expr.expr || eventexpr(&ptrl->expr) ) {
DEB((D_CONFIG, "conf_first ptrl found"));
return ptrl;
}
DEB((D_CONFIG, "conf_first ptrl not found"));
return NULL;
}
@@ -32,9 +36,11 @@ s_cval_entry *conf_next(s_cval_entry *ptrl)
ASSERT(ptrl);
for( ptrl = ptrl->next; ptrl; ptrl = ptrl->next )
if( !ptrl->expr.expr || eventexpr(&ptrl->expr) )
if( !ptrl->expr.expr || eventexpr(&ptrl->expr) ) {
DEB((D_CONFIG, "conf_next ptrl found"));
return ptrl;
}
DEB((D_CONFIG, "conf_next ptrl not found"));
return NULL;
}
@@ -91,7 +97,7 @@ long conf_number(bforce_config_keyword keyword)
s_override *conf_override(bforce_config_keyword keyword, s_faddr addr)
{
s_cval_entry *ptrl;
DEB((D_CONFIG, "conf_override entry"));
for( ptrl = conf_first(keyword); ptrl; ptrl = conf_next(ptrl) )
if( !ftn_addrcomp(ptrl->d.override.addr, addr) )
return &ptrl->d.override;
+16 -9
View File
@@ -56,17 +56,24 @@ int nodelist_checkflag(const char *nodeflags, const char *flag)
const char *searchbase = nodeflags;
char *q;
while( p = strstr(searchbase, flag) )
{
if( p == searchbase || *(p-1) == ',' )
DEB((D_NODELIST, "nodelist: checking flag \"%s\" in flags \"%s\"", flag, nodeflags));
if ( nodeflags ) {
while( p = strcasestr(searchbase, flag) ) // p - found flag
{
if( (q = strchr(p, ',')) == NULL || (q - p) == strlen(flag) )
return 0;
if( (strchrnul(p, ':') - p) == strlen(flag) )
return 0;
}
if( (p == searchbase) || (p != searchbase && *(p-1) == ',') )
{
if( (q = strchr(p, ',')) == NULL || (q - p) == strlen(flag) ) {
DEB((D_NODELIST, "nodelist: found flag %s", flag));
return 0;
}
if( (strchrnul(p, ':') - p) == strlen(flag) ) {
DEB((D_NODELIST, "nodelist: found flag %s", flag));
return 0;
}
}
searchbase = p + 1; // avoid finding again the same
searchbase = p + 1; // avoid finding again the same
}
}
return 1;
+52 -16
View File
@@ -95,12 +95,12 @@ int binkp_loop(s_binkp_state *bstate) {
bstate->emptyloop = 0;
bstate->continuesend = false;
unsigned short read_pos=0;
unsigned short read_blklen=0;
unsigned short want_read=BINKP_HEADER;
uint16_t read_pos=0;
uint16_t read_blklen=0;
uint16_t want_read=BINKP_HEADER;
unsigned short write_pos=0;
unsigned short have_to_write=0;
uint16_t write_pos=0;
uint16_t have_to_write=0;
int n, m;
bool no_more_to_send = false;
@@ -140,6 +140,7 @@ int binkp_loop(s_binkp_state *bstate) {
return PRC_ERROR;
}
writebuf[1] = block_length&0xff;
// TODO: FIX unprotected mode
if (bstate->mode==bmode_transfer && bstate->remote_data->options&BINKP_OPT_CRYPT)
encrypt_buf(writebuf, have_to_write, bstate->remote_data->keys_out);
}
@@ -209,15 +210,19 @@ int binkp_loop(s_binkp_state *bstate) {
log("read: remote socket shutdown");
return PRC_REMOTEABORTED;
}
if (bstate->mode==bmode_transfer && bstate->remote_data->options & BINKP_OPT_CRYPT)
// TODO: FIX unprotected mode
if (bstate->mode==bmode_transfer && bstate->remote_data->options & BINKP_OPT_CRYPT) {
decrypt_buf(readbuf+read_pos, n, bstate->remote_data->keys_in);
} else {
DEB((D_24554,"binkp: not encripted transfer"));
};
DEB((D_24554, "got %d bytes", n));
want_read -= n;
read_pos += n;
if (read_pos == BINKP_HEADER) {
// have read header, want read body
DEB((D_24554, "it should be 0: %d", want_read));
want_read = ((unsigned short)(readbuf[0]&0x7F)<<8) | readbuf[1];
want_read = ((uint16_t)(readbuf[0]&0x7F)<<8) | (uint16_t)readbuf[1];
DEB((D_24554, "got block header, block length %u", want_read));
} // no else here: if want_read may be zero here for zero length block
}
@@ -228,6 +233,7 @@ int binkp_loop(s_binkp_state *bstate) {
block_length = read_pos - BINKP_HEADER;
DEB((D_24554, "binkp: complete block is received %d %hu", block_type, block_length));
m = binkp_doreceiveblock(bstate, readbuf+BINKP_HEADER, block_type, block_length);
DEB((D_24554, "binkp: dorecieveblock result is %d", m));
if(m==1) {
DEB((D_24554, "block is successfully accepted"));
read_pos = 0;
@@ -419,6 +425,7 @@ case 7:
// seems not to remove files from inbound until successful session end is enough to eliminate dupes
// if (!nodelist_checkflag (state.node.flags, "ND"))
// strcat(buf+1, " ND");
// TODO: add GZ BZ2 and maybe EXTCMD
*block_length = 1 + strlen(buf+1);
DEB((D_24554, "send M_NUL %s", buf+1));
return 1;
@@ -516,27 +523,47 @@ case 3: // send password on outgoing or pw confirmation on incoming
case 4:
char *p;
char pbuf[32];
int pwset = 0;
if (bstate->mode==bmode_incoming_handshake) {
DEB((D_24554, "incoming handshake is complete"));
bstate->complete = true;
char *p;
char pbuf[32];
for (i=0;i<state.n_remoteaddr;i++)
if( !session_get_password(state.remoteaddrs[i].addr, pbuf, sizeof(pbuf)) ){
pwset = 1;
init_keys(bstate->remote_data->keys_in, pbuf?pbuf:"-");
init_keys(bstate->remote_data->keys_out, "-");
for (p=pbuf?pbuf:"-"; *p; p++)
update_keys(bstate->remote_data->keys_out, (int)*p);
}
//TODO: FIX incoming options
}
else {
//TODO: Fix outgoing options
DEB((D_24554, "outgoing handshake: everything is sent"));
for (i=0;i<state.n_remoteaddr;i++)
if( !session_get_password(state.remoteaddrs[i].addr, pbuf, sizeof(pbuf)) ){
pwset = 1;
}
}
// We have password-protected link. Remote options are already set,
// Now we determine how to CRYPT or not to CRYPT our file transfer
// Our CRYPT flag is always sent, so if the other side have CRYPT
// and link is password is set - The CRYPT must be
// Literally: if we have no pass -> drop the CRYPT flag
if ( !pwset ) {
DEB((D_24554, "binkp handshake: password NOT set, dropping CRYPT"));
bstate->remote_data->options &= !BINKP_OPT_CRYPT;
}
return 2;
}
}
else if (bstate->mode == bmode_transfer) {
else if (bstate->mode == bmode_transfer) {
switch (bstate->phase) {
send_next_file:
@@ -651,7 +678,10 @@ bstate->extracmd[0] = BPMSG_ERR; strcpy(bstate->extracmd+1, msg); bstate->extrai
int binkp_doreceiveblock(s_binkp_state *bstate, char *buf, int block_type, unsigned short block_length)
{
DEB((D_24554, "dorecieveblock_type: %d", block_type));
DEB((D_24554, "dorecieveblock_bytes: %x %x %x %x", buf[0], buf[1], buf[2], buf[3]));
switch (block_type) {
case BINKP_BLK_CMD:
if (block_length<1) {
PROTO_ERROR("Zero length command received")
@@ -687,14 +717,17 @@ case BPMSG_ADR: /* List of addresses */
bstate->extraislast = false;
sprintf(bstate->extracmd+1,"OPT MB CRYPT");
s_override ovr;
DEB((D_24554, "process adr overrides"));
for(i = 0; i < state.n_remoteaddr; i++) {
ovr.sFlags = "";
override_get (&ovr, state.remoteaddrs[i].addr, 0);
DEB((D_24554, "got adr overrides"));
if (nodelist_checkflag (ovr.sFlags, "NR")==0) {
strcat (bstate->extracmd+1, " NR");
break;
}
strcat (bstate->extracmd+1, " NR");
break;
}
}
DEB((D_24554, "process adr overrides"));
}
// further use extracmd only for errors
@@ -1146,7 +1179,7 @@ void binkp_process_NUL(s_binkp_sysinfo *remote_data, char *buffer)
}
else
strnxcpy(remote_data->opt, buffer+4, sizeof(remote_data->opt));
DEB((D_24554,"Process OPT"));
binkp_parse_options(remote_data, buffer+4);
}
else if( strncmp(buffer, "VER ", 4) == 0 )
@@ -1187,13 +1220,16 @@ void binkp_process_ADR(char *buffer)
{
s_faddr addr;
char *p, *q;
DEB((D_24554, "process ADR: %s", buffer));
for( p = string_token(buffer, &q, NULL, 0); p; p = string_token(NULL, &q, NULL, 0) )
{
DEB((D_24554, "binkp_process_ADR got token \"%s\" ",p ));
if( ftn_addrparse(&addr, p, FALSE) )
log("BinkP got unparsable address \"%s\"", string_printable(p));
else
else {
session_addrs_add(&state.remoteaddrs, &state.n_remoteaddr, addr);
DEB((D_24554, "process ADR complete"));
}
}
}
+1 -1
View File
@@ -304,7 +304,7 @@ void binkp_set_sysinfo(s_binkp_sysinfo *binkp, s_faddr *remote_addr, bool caller
void binkp_parse_options(s_binkp_sysinfo *binkp, char *options)
{
char *p, *n;
DEB((D_24554,"binkp: parse_options: %s", options));
for( p = string_token(options, &n, NULL, 0); p;
p = string_token(NULL, &n, NULL, 0) )
{
+2 -1
View File
@@ -481,7 +481,7 @@ int call_system_tcpip(int callwith) // only TCPIP values
char abuf[BF_MAXADDRSTR+1];
int rc = BFERR_NOERROR;
char * pbuf;
char * target;
char * target = 0;
int resflg;
/*
* Set verbal line name to "tcpip" value
@@ -542,6 +542,7 @@ defalt:
{
target = strchr(p, ',');
if ( target ) target[0] = '\0';
target = 0;
target = strrchr(p, ':');
if ( target ) {
target++;
+7 -5
View File
@@ -135,14 +135,16 @@ int override_get(s_override *dest, s_faddr addr, int line)
{
s_override *p;
int curline = 0;
p = conf_override(cf_override, addr);
curline = 0;
while( p && curline < line )
if (line > 0)
{
p = p->hidden;
++curline;
while( p && curline < line )
{
p = p->hidden;
++curline;
}
}
if( p && curline == line )
@@ -152,7 +154,7 @@ int override_get(s_override *dest, s_faddr addr, int line)
}
else if( line == 0 )
return 0;
else
else
return 1;
}
+117 -117
View File
@@ -141,8 +141,8 @@ typedef struct override {
char *sPhone;
char *sFlags;
s_timevec worktime;
s_timevec freqtime;
char *run;
s_timevec freqtime;
char *run;
struct override *hidden; /* Hidden lines list */
} s_override;
@@ -159,130 +159,130 @@ typedef struct filebox {
} s_filebox;
typedef enum {
cf_address,
cf_amiga_outbound_directory,
cf_binkp_timeout,
cf_daemon_circle,
cf_daemon_circle_crash,
cf_daemon_circle_direct,
cf_daemon_circle_immed,
cf_daemon_circle_modem,
cf_daemon_circle_normal,
cf_daemon_circle_rescan,
cf_daemon_maxclients_modem,
cf_daemon_maxclients_tcpip,
cf_daemon_pid_file,
cf_delay_files_recv,
cf_delay_files_send,
cf_disable_aka_matching,
cf_domain,
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,
cf_flo_translate,
cf_freq_alias_list,
cf_freq_dir_list,
cf_freq_ignore_masks,
cf_freq_limit_number,
cf_freq_limit_size,
cf_freq_limit_time,
cf_freq_min_speed,
cf_freq_srif_command,
cf_incnet_flag,
cf_incarc_flag,
cf_inctic_flag,
cf_incfile_flag,
cf_hide_our_aka,
cf_history_file,
cf_hydra_options,
cf_hydra_mincps_recv,
cf_hydra_mincps_send,
cf_hydra_tx_window,
cf_hydra_rx_window,
cf_inbound_directory,
cf_location,
cf_log_file,
cf_log_file_daemon,
cf_max_speed,
cf_maxtries,
cf_maxtries_nodial,
cf_maxtries_noansw,
cf_maxtries_noconn,
cf_maxtries_hshake,
cf_maxtries_sessions,
cf_min_cps_recv,
cf_min_cps_send,
cf_min_cps_time,
cf_min_free_space,
cf_min_speed_in,
cf_min_speed_out,
cf_mode_netmail,
cf_mode_arcmail,
cf_mode_request,
cf_mode_ticfile,
cf_mode_default,
cf_modem_can_send_break,
cf_modem_dial_prefix,
cf_modem_dial_suffix,
cf_modem_dial_response,
cf_modem_hangup_command,
cf_modem_port,
cf_modem_reset_command,
cf_modem_stat_command,
cf_nodelist,
cf_nodelist_directory,
cf_nodial_flag,
cf_override,
cf_options,
cf_outbound_directory,
cf_password,
cf_phone,
cf_phone_translate,
cf_proto_order,
cf_recode_file_in,
cf_recode_file_out,
cf_recode_intro_in,
cf_recv_buffer_size,
cf_rescan_delay,
cf_run_after_handshake,
cf_run_after_session,
cf_run_before_session,
cf_session_limit_in,
cf_session_limit_out,
cf_skip_files_recv,
cf_status_directory,
cf_system_name,
cf_sysop_name,
cf_uucp_lock_directory,
cf_wait_carrier_in,
cf_wait_carrier_out,
cf_zmodem_mincps_recv,
cf_zmodem_mincps_send,
cf_zmodem_send_dummy_pkt,
cf_zmodem_skip_by_pos,
cf_zmodem_start_block_size,
cf_zmodem_tx_window,
cf_nomail_flag,
cf_bind_ip,
cf_recieved_to_lower,
cf_address, // 0
cf_amiga_outbound_directory, // 1
cf_binkp_timeout, // 2
cf_daemon_circle, // 3
cf_daemon_circle_crash, // 4
cf_daemon_circle_direct, // 5
cf_daemon_circle_immed, // 6
cf_daemon_circle_modem, // 7
cf_daemon_circle_normal, // 8
cf_daemon_circle_rescan, // 9
cf_daemon_maxclients_modem, // 10
cf_daemon_maxclients_tcpip, // 11
cf_daemon_pid_file, // 12
cf_delay_files_recv, // 13
cf_delay_files_send, // 14
cf_disable_aka_matching, // 15
cf_domain, // 16
cf_emsi_FR_time, // 17
cf_emsi_OH_time, // 18
cf_emsi_slave_sends_nak, // 19
cf_emsi_send_tz, // 20
cf_emsi_send_time, // 21
cf_filebox, // 22
cf_filebox_directory, // 23
cf_flags, // 24
cf_flo_translate, // 25
cf_freq_alias_list, // 26
cf_freq_dir_list, // 27
cf_freq_ignore_masks, // 28
cf_freq_limit_number, // 29
cf_freq_limit_size, // 30
cf_freq_limit_time, // 31
cf_freq_min_speed, // 32
cf_freq_srif_command, // 33
cf_incnet_flag, // 34
cf_incarc_flag, // 35
cf_inctic_flag, // 36
cf_incfile_flag, // 37
cf_hide_our_aka, // 38
cf_history_file, // 39
cf_hydra_options, // 40
cf_hydra_mincps_recv, // 41
cf_hydra_mincps_send, // 42
cf_hydra_tx_window, // 43
cf_hydra_rx_window, // 44
cf_inbound_directory, // 45
cf_location, // 46
cf_log_file, // 47
cf_log_file_daemon, // 48
cf_max_speed, // 49
cf_maxtries, // 50
cf_maxtries_nodial, // 51
cf_maxtries_noansw, // 52
cf_maxtries_noconn, // 53
cf_maxtries_hshake, // 54
cf_maxtries_sessions, // 55
cf_min_cps_recv, // 56
cf_min_cps_send, // 57
cf_min_cps_time, // 58
cf_min_free_space, // 59
cf_min_speed_in, // 60
cf_min_speed_out, // 61
cf_mode_netmail, // 62
cf_mode_arcmail, // 63
cf_mode_request, // 64
cf_mode_ticfile, // 65
cf_mode_default, // 66
cf_modem_can_send_break, // 67
cf_modem_dial_prefix, // 68
cf_modem_dial_suffix, // 69
cf_modem_dial_response, // 70
cf_modem_hangup_command, // 71
cf_modem_port, // 72
cf_modem_reset_command, // 73
cf_modem_stat_command, // 74
cf_nodelist, // 75
cf_nodelist_directory, // 76
cf_nodial_flag, // 77
cf_override, // 78
cf_options, // 79
cf_outbound_directory, // 80
cf_password, // 81
cf_phone, // 82
cf_phone_translate, // 83
cf_proto_order, // 84
cf_recode_file_in, // 85
cf_recode_file_out, // 86
cf_recode_intro_in, // 87
cf_recv_buffer_size, // 88
cf_rescan_delay, // 89
cf_run_after_handshake, // 90
cf_run_after_session, // 91
cf_run_before_session, // 92
cf_session_limit_in, // 93
cf_session_limit_out, // 94
cf_skip_files_recv, // 95
cf_status_directory, // 96
cf_system_name, // 97
cf_sysop_name, // 98
cf_uucp_lock_directory, // 99
cf_wait_carrier_in, // 100
cf_wait_carrier_out, // 101
cf_zmodem_mincps_recv, // 102
cf_zmodem_mincps_send, // 103
cf_zmodem_send_dummy_pkt, // 104
cf_zmodem_skip_by_pos, // 105
cf_zmodem_start_block_size, // 106
cf_zmodem_tx_window, // 107
cf_nomail_flag, // 108
cf_bind_ip, // 109
cf_recieved_to_lower, // 110
#ifdef USE_SYSLOG
cf_syslog_facility,
#endif
#ifdef DEBUG
cf_debug_file,
cf_debug_level,
cf_debug_file, // 111
cf_debug_level, // 112
#endif
cf_split_inbound,
cf_split_inbound, // 113
#ifdef NETSPOOL
cf_netspool_host,
cf_netspool_port,
#endif
cf_fidodnszone,
cf_fidodnszone, // 114
BFORCE_NUMBER_OF_KEYWORDS
} bforce_config_keyword;