#define VERSION "URONode v2.7" #define COMPILING "June 1, 2017" #define STATE_IDLE 0 #define STATE_TRYING 1 #define STATE_CONNECTED 2 #define STATE_PINGING 3 #define STATE_EXTCMD 4 #define STATE_LOGIN 5 #define STATE_QUIT 6 #define LOGLVL_NONE 0 #define LOGLVL_ERROR 1 #define LOGLVL_LOGIN 2 #define LOGLVL_GW 3 #define PERM_LOGIN 1 /* Permit login */ #define PERM_AX25 2 /* AX.25 gatewaying */ #define PERM_NETROM 4 /* NETROM gatewaying */ #define PERM_TELNET_LOCAL 8 /* Telnet to "local" hosts */ #define PERM_TELNET_AMPR 16 /* Telnet to 44.xx.xx.xx hosts */ #define PERM_TELNET_INET 32 /* Telnet to other hosts */ #define PERM_ANSI 64 /* Ansi Color graphics */ #define PERM_ROSE 128 /* ROSE gatewaying */ #define PERM_NOESC 256 /* No escape character */ #define PERM_HIDDEN 512 /* Use hidden ports - to be removed */ #define PERM_TELNET (PERM_TELNET_LOCAL & PERM_TELNET_AMPR & PERM_TELNET_INET) /* Fake id for Flexnet */ #define AF_FLEXNET 128 #include #include /* for key_t */ #include #include #include "config.h" struct user { pid_t pid; key_t ipc_key; time_t logintime; time_t cmdtime; unsigned char state; char call[10]; unsigned short ul_type; unsigned short dl_type; char ul_name[32]; char dl_name[32]; char ul_port[32]; char dl_port[32]; char unused[92]; }; extern struct user User; extern ax25io *NodeIo; extern long IdleTimeout; extern long ConnTimeout; extern int ReConnectTo; extern int LogLevel; extern int EscChar; extern int aliascmd; extern char *Email; extern char *HostName; extern char *NodeId; extern char *FlexId; extern char *RoseId; extern char *NrPort; extern char *Prompt; extern char *PassPrompt; #define CMD_INTERNAL 1 #define CMD_ALIAS 2 #define CMD_EXTERNAL 3 struct cmd { char *name; int len; int type; int (*function) (int argc, char **argv); char *command; int flags; int uid; int gid; char *path; struct cmd *next; }; extern struct cmd *Nodecmds; #define min(a,b) ((a) < (b) ? (a) : (b)) #define max(a,b) ((a) > (b) ? (a) : (b)) /* in cmdparse.c */ void free_cmdlist(struct cmd *list); extern void insert_cmd(struct cmd **list, struct cmd *new); extern int add_internal_cmd(struct cmd **list, char *name, int len, int (*function) (int argc, char **argv)); /* extern char *expand_string(char *str, int argc, char **argv); */ extern int parse_args(char **argv, char *cmd); extern int cmdparse(struct cmd *cmdp, char *cmdline); /* in util.c */ extern void node_msg(const char *fmt, ...); extern void node_perror(char *str, int err); extern char *print_node(const char *alias, const char *call); extern void node_log(int, const char *, ...); /* in user.c */ extern void login_user(void); extern void logout_user(void); extern void update_user(void); extern int user_list(int argc, char **argv); extern int user_count(void); extern int system_user_count(void); /* in config.c */ extern int is_hidden(const char *port); extern int check_perms(int what, unsigned long peer); extern char *read_perms(struct user *up, unsigned long peer); extern int read_config(void); extern int get_escape(char *s); /* in command.c */ void init_nodecmds(void); extern void node_logout(char *reason); extern int nuser_list(int argc, char **argv); extern int do_bye(int argc, char **argv); extern int do_escape(int argc, char **argv); extern int do_help(int argc, char **argv); extern int do_host(int argc, char **argv); extern int do_ports(int argc, char **argv); extern int do_sessions(int argc, char **argv); extern int do_routes(int argc, char **argv); extern int do_nodes(int argc, char **argv); extern int do_status(int argc, char **argv); extern int do_version(int argc, char **argv); extern int do_last(int argc, char **last); /* in gateway.c */ extern int do_connect(int argc, char **argv); extern int do_finger(int argc, char **argv); extern int do_ping(int argc, char **argv); /* in router.c */ extern int do_links(int argc, char **argv); extern int do_dest(int argc, char **argv); /* in ipc.c */ extern int ipc_open(void); extern int ipc_close(void); extern int do_msg(int argc, char **argv); /* in extcmd.c */ extern int extcmd(struct cmd *cmdp, char **argv); /* in system.c */ extern int do_system(int argc, char **argv); extern int examine_user(void); extern void newmail(void); extern void mailcheck(void); extern void lastlog(void); /* in jheard.c */ extern int do_jheard(int argc, char **argv); extern int do_jlong(int argc, char **argv);