|
|
|
/*
|
|
|
|
* binkleyforce -- unix FTN mailer project
|
|
|
|
*
|
|
|
|
* Copyright (c) 1998-2000 Alexander Belkin, 2:5020/1398.11
|
|
|
|
*
|
|
|
|
* This program 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 of the License, or
|
|
|
|
* (at your option) any later version.
|
|
|
|
*
|
|
|
|
* $Id$
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef _CONFREAD_H_
|
|
|
|
#define _CONFREAD_H_
|
|
|
|
|
|
|
|
#include "util.h"
|
|
|
|
|
|
|
|
/* Constatnts for gotfile switches */
|
|
|
|
#define GOTFILE_SW_SRIF 0x01
|
|
|
|
#define GOTFILE_SW_IMMED 0x01
|
|
|
|
#define GOTFILE_SW_ONLINE 0x01
|
|
|
|
|
|
|
|
#define MAXINCLUDELEVEL 10
|
|
|
|
|
|
|
|
#define PROC_RC_OK 0 /* Successfully processed string */
|
|
|
|
#define PROC_RC_WARN 1 /* Successfully, but not all so good */
|
|
|
|
#define PROC_RC_IGNORE 2 /* Line was ignored, but we can continue */
|
|
|
|
#define PROC_RC_ABORT 3 /* Incorrect line and we can not continue */
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Options (from/for "options" keyword)
|
|
|
|
*/
|
|
|
|
#define OPTIONS_NO_ZMODEM 0x00000001L
|
|
|
|
#define OPTIONS_NO_ZEDZAP 0x00000002L
|
|
|
|
#define OPTIONS_NO_DIRZAP 0x00000004L
|
|
|
|
#define OPTIONS_NO_JANUS 0x00000008L
|
|
|
|
#define OPTIONS_NO_HYDRA 0x00000010L
|
|
|
|
#define OPTIONS_NO_BINKP 0x00000020L
|
|
|
|
#define OPTIONS_NO_TCP 0x00000040L
|
|
|
|
#define OPTIONS_NO_CHAT 0x00000080L
|
|
|
|
#define OPTIONS_NO_FTS1 0x00000100L
|
|
|
|
#define OPTIONS_NO_YOOHOO 0x00000200L
|
|
|
|
#define OPTIONS_NO_EMSI 0x00000400L
|
|
|
|
#define OPTIONS_NO_EMSI_II 0x00000800L
|
|
|
|
#define OPTIONS_NO_FREQS 0x00001000L
|
|
|
|
#define OPTIONS_MAILONLY 0x00002000L
|
|
|
|
#define OPTIONS_HOLDXT 0x00004000L
|
|
|
|
#define OPTIONS_HOLDREQ 0x00008000L
|
|
|
|
#define OPTIONS_HOLDALL 0x00010000L
|
|
|
|
#define OPTIONS_HOLDHOLD 0x00020000L
|
|
|
|
#define OPTIONS_NO_PICKUP 0x00040000L
|
|
|
|
#define OPTIONS_NO_RH1 0x00080000L
|
|
|
|
#define OPTIONS_NO_INTRO 0x00100000L
|
|
|
|
|
|
|
|
#define RESPTYPE_CONNECT 0x0000L
|
|
|
|
#define RESPTYPE_BUSY 0x0001L
|
|
|
|
#define RESPTYPE_NOCARRIER 0x0002L
|
|
|
|
#define RESPTYPE_NODIALTONE 0x0004L
|
|
|
|
#define RESPTYPE_NOANSWER 0x0008L
|
|
|
|
#define RESPTYPE_ERROR 0x0010L
|
|
|
|
|
|
|
|
#define TRIES_ACTION_UNDIALABLE 0x01
|
|
|
|
#define TRIES_ACTION_HOLDSYSTEM 0x02
|
|
|
|
#define TRIES_ACTION_HOLDALL 0x04
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Add new entry to the end of list
|
|
|
|
*/
|
|
|
|
#define LIST_NEWENT(newp,list,type) \
|
|
|
|
for( newp = list; *newp; newp = &((*newp)->next) ); \
|
|
|
|
*newp = (type*)xmalloc(sizeof(type)); \
|
|
|
|
memset(*newp, '\0', sizeof(type));
|
|
|
|
|
|
|
|
typedef struct expr {
|
|
|
|
bool error; /* Incorrect expression. Don't try twice! */
|
|
|
|
char *expr; /* Pointer to the expression string */
|
|
|
|
} s_expr;
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Storage structures for base config components
|
|
|
|
*/
|
|
|
|
typedef struct string {
|
|
|
|
char *str;
|
|
|
|
} s_string;
|
|
|
|
|
|
|
|
typedef struct number {
|
|
|
|
long num;
|
|
|
|
} s_number;
|
|
|
|
|
|
|
|
typedef struct boolean {
|
|
|
|
bool istrue;
|
|
|
|
} s_boolean;
|
|
|
|
|
|
|
|
typedef struct falist {
|
|
|
|
s_faddr addr;
|
|
|
|
char *what;
|
|
|
|
struct falist *next;
|
|
|
|
} s_falist;
|
|
|
|
|
|
|
|
typedef struct domain {
|
|
|
|
char *domain;
|
|
|
|
char *path;
|
|
|
|
int zone;
|
|
|
|
} s_domain;
|
|
|
|
|
|
|
|
typedef struct translate {
|
|
|
|
char *find;
|
|
|
|
char *repl;
|
|
|
|
} s_translate;
|
|
|
|
|
|
|
|
typedef struct connlist {
|
|
|
|
long speed;
|
|
|
|
long value;
|
|
|
|
} s_connlist;
|
|
|
|
|
|
|
|
typedef struct dialresp {
|
|
|
|
char *mstr; /* Modem string/substring */
|
|
|
|
int type; /* Response meaning (for mailer) */
|
|
|
|
int retv; /* Force this return code */
|
|
|
|
} s_dialresp;
|
|
|
|
|
|
|
|
typedef struct filemode {
|
|
|
|
mode_t mode;
|
|
|
|
} s_filemode;
|
|
|
|
|
|
|
|
typedef struct modemport {
|
|
|
|
long speed;
|
|
|
|
char *name;
|
|
|
|
} s_modemport;
|
|
|
|
|
|
|
|
typedef struct tries {
|
|
|
|
int tries;
|
|
|
|
int action;
|
|
|
|
int arg;
|
|
|
|
} s_tries;
|
|
|
|
|
|
|
|
typedef struct override {
|
|
|
|
s_faddr addr; /* Overrides for this address */
|
|
|
|
char *sIpaddr;
|
|
|
|
char *sPhone;
|
|
|
|
char *sFlags;
|
|
|
|
s_timevec worktime;
|
|
|
|
s_timevec freqtime;
|
|
|
|
char *run;
|
|
|
|
struct override *hidden; /* Hidden lines list */
|
|
|
|
} s_override;
|
|
|
|
|
|
|
|
typedef struct options {
|
|
|
|
unsigned long value;
|
|
|
|
unsigned long mask; /* bit[k] == 1 if bit[k] defined in value */
|
|
|
|
} s_options;
|
|
|
|
|
|
|
|
typedef struct filebox {
|
|
|
|
s_faddr addr;
|
|
|
|
char *path;
|
|
|
|
int flavor;
|
|
|
|
struct falist *next;
|
|
|
|
} 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_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,
|
|
|
|
#ifdef USE_SYSLOG
|
|
|
|
cf_syslog_facility,
|
|
|
|
#endif
|
|
|
|
#ifdef DEBUG
|
|
|
|
cf_debug_file,
|
|
|
|
cf_debug_level,
|
|
|
|
#endif
|
|
|
|
cf_split_inbound,
|
|
|
|
#ifdef NETSPOOL
|
|
|
|
cf_netspool_host,
|
|
|
|
cf_netspool_port,
|
|
|
|
#endif
|
|
|
|
cf_fidodnszone,
|
|
|
|
BFORCE_NUMBER_OF_KEYWORDS
|
|
|
|
} bforce_config_keyword;
|
|
|
|
|
|
|
|
typedef struct cval_entry {
|
|
|
|
s_expr expr;
|
|
|
|
union {
|
|
|
|
s_falist falist;
|
|
|
|
s_domain domain;
|
|
|
|
s_override override;
|
|
|
|
s_options options;
|
|
|
|
s_translate translate;
|
|
|
|
s_connlist connlist;
|
|
|
|
s_number number;
|
|
|
|
s_boolean boolean;
|
|
|
|
s_string string;
|
|
|
|
s_modemport modemport;
|
|
|
|
s_dialresp dialresp;
|
|
|
|
s_tries tries;
|
|
|
|
s_filemode filemode;
|
|
|
|
s_filebox filebox;
|
|
|
|
} d;
|
|
|
|
struct cval_entry *next;
|
|
|
|
} s_cval_entry;
|
|
|
|
|
|
|
|
typedef struct conf_entry {
|
|
|
|
char *name;
|
|
|
|
enum {
|
|
|
|
CT_ADDRESS,
|
|
|
|
CT_BOOLEAN,
|
|
|
|
CT_CONNLIST,
|
|
|
|
CT_DIALRESP,
|
|
|
|
CT_DOMAIN,
|
|
|
|
CT_FILEMODE,
|
|
|
|
CT_MODEMPORT,
|
|
|
|
CT_NODELIST,
|
|
|
|
CT_NUMBER,
|
|
|
|
CT_OPTIONS,
|
|
|
|
CT_OVERRIDE,
|
|
|
|
CT_PATH,
|
|
|
|
CT_PASSWORD,
|
|
|
|
CT_STRING,
|
|
|
|
CT_TRANSLATE,
|
|
|
|
CT_TRIES,
|
|
|
|
// CT_DEBLEVEL,
|
|
|
|
CT_FILEBOX
|
|
|
|
} type;
|
|
|
|
s_cval_entry *data;
|
|
|
|
bforce_config_keyword real_key;
|
|
|
|
} s_conf_entry;
|
|
|
|
|
|
|
|
extern s_conf_entry bforce_config[];
|
|
|
|
|
|
|
|
/* conf_proc.c */
|
|
|
|
int proc_configline(const char *k, const char *e, const char *v);
|
|
|
|
|
|
|
|
/* conf_deinit.c */
|
|
|
|
void deinit_conf(void);
|
|
|
|
void deinit_cval_entry(s_cval_entry *dest, bforce_config_keyword type);
|
|
|
|
void deinit_dialresp(s_dialresp *dest);
|
|
|
|
void deinit_domain(s_domain *dest);
|
|
|
|
void deinit_expr(s_expr *dest);
|
|
|
|
void deinit_falist(s_falist *dest);
|
|
|
|
void deinit_modemport(s_modemport *dest);
|
|
|
|
void deinit_override(s_override *dest);
|
|
|
|
void deinit_string(s_string *dest);
|
|
|
|
void deinit_translate(s_translate *dest);
|
|
|
|
|
|
|
|
/* conf_read.c */
|
|
|
|
const char *conf_getconfname(void);
|
|
|
|
int conf_postreadcheck(void);
|
|
|
|
int conf_readpasswdlist(s_falist **pwdlist, char *fname);
|
|
|
|
int conf_readconf(const char *confname, int inclevel, bool earlydbg);
|
|
|
|
#ifdef DEBUG
|
|
|
|
void log_overridelist(s_override *subst);
|
|
|
|
void log_options(s_options *opt);
|
|
|
|
#endif
|
|
|
|
|
|
|
|
/* conf_get.c */
|
|
|
|
s_cval_entry *conf_first(bforce_config_keyword keyword);
|
|
|
|
s_cval_entry *conf_next(s_cval_entry *ptrl);
|
|
|
|
bool conf_boolean(bforce_config_keyword keyword);
|
|
|
|
mode_t conf_filemode(bforce_config_keyword keyword);
|
|
|
|
long conf_options(bforce_config_keyword keyword);
|
|
|
|
long conf_connlist(bforce_config_keyword keyword, long speed);
|
|
|
|
char *conf_string(bforce_config_keyword keyword);
|
|
|
|
long conf_number(bforce_config_keyword keyword);
|
|
|
|
s_override *conf_override(bforce_config_keyword keyword, s_faddr addr);
|
|
|
|
s_tries *conf_tries(bforce_config_keyword keyword);
|
|
|
|
|
|
|
|
/* expression.y */
|
|
|
|
bool eventexpr(s_expr *expr);
|
|
|
|
|
|
|
|
#endif /* _CONFREAD_H_ */
|
|
|
|
|