From a3886f2ff62cabdb912db7a0d9c163cbe96c0c40 Mon Sep 17 00:00:00 2001 From: Hibby Date: Sat, 21 Jan 2017 14:34:12 +0000 Subject: [PATCH] New upstream version 2.6 --- CHANGES.3 | 84 ++++++++++++++++++++++++++- Makefile.in | 6 +- axdigi.c | 19 +++--- cmdparse.c | 3 +- command.c | 5 +- config.c | 2 +- configure | 13 ++++- etc/axdigi.conf | 20 ------- etc/help/jheard.hlp | 9 +++ etc/help/jlong.hlp | 8 +++ etc/help/mheard.hlp | 8 --- etc/uronode.conf | 6 +- flexd.c | 43 ++++++++++---- gateway.c | 2 +- mheard.c => jheard.c | 134 ++++++++++++++++++++++++++++++++++++++++++- man/uronode.8 | 52 +++++++++-------- node.c | 6 +- node.h | 9 +-- system.c | 2 +- 19 files changed, 334 insertions(+), 97 deletions(-) delete mode 100644 etc/axdigi.conf create mode 100644 etc/help/jheard.hlp create mode 100644 etc/help/jlong.hlp delete mode 100644 etc/help/mheard.hlp rename mheard.c => jheard.c (52%) diff --git a/CHANGES.3 b/CHANGES.3 index c8da290..713a302 100644 --- a/CHANGES.3 +++ b/CHANGES.3 @@ -174,6 +174,89 @@ While at it Bob increased the buffer for the reader within FlexD. Seems Xnet may require a larger buffer than FlexNet for some reason? Bob also checked that in. Thanks Bob. +18/04/2016 - v2.6 +Removed stale and unused axdigi.conf file. Thanks to David KI6ZHD for +pointing this out that I had a stale file in the archive. This file +belonged to another digi daemon I was going to revive instead of Craig +Small's multi-interface crossport digi daemon. I find that especially +with FlexNet, a multi-interface crossport digipeat system not only is +unique to the native linux kernel BUT is also very efficient. If you +have a stale copy of axdigi.conf floating around, please delete this. + +Added a question to engage or disengage interactive configure/make mode. +This idea came to me from a query I received by KI6ZHD. If you choose NOT +to use interactive mode, than you must run make/make upgrade/make install +manually. Note: ALL options including rose and flexnet WILL BE COMPILED IN. + +Tomasz SP2L was seeing carriage returns when administering his server +remotely and sending SIGHUP to flexd in the terminal messages confirming +the -HUP. Removed. + +Added a version output for FlexD and tweeked the one for axdigi. Now both +helper daemons will display its versions based on URONode's version and +some very brief information about themselves. flexd -v or flexd -h +along with axdigi -v or axdigi -h will bring up this information. + +Decided that since there's so many commands beginning with M I would move +the MHeard command to a Jheard command. This keeps the commandset more in +line with other systems except for TheNet and X1J-4, and separates that one +command away from the volume of M's. While at it I also made a JL for +Just heard Long. If you specify an interface, Jheard/JLong engages only for +that interface. Note - JLong will say: it may time out HFers. I also had to +modify Makefile and rework the help files to match. While at it I needed to +modify the uronode.8 MAN page. + +Gave Makefile a more modernized compile line option. I'm hoping this will +keep URONode one of packet's better robust nodes. + +I noticed some sites were violating Software2000's NetRom specifications +by defaulting reconnect on still in their uronode.conf files. I had thought +that I fixed this in an earlier release. Perhaps I did and then migrated +an old .c file back into the mix? (wouldn't be the first time I've done +that by mistake!) Anyway... three key things Software2000 was insistant upon +were NO CTEXT, NO RECONNECT, NO GOODBYE MESSAGES. If you've noticed, I've +taken ALL that out of URONode. These things were done as to not confuse +robot scripts such as PBBS mail forwarding sessions. While other systems +may wish to continue to violate the NetRom protocol (and others) I will +do everything in my power NOT to. + +An anonymous user from sourceforge had a compiler warning on the +do_prompt cycle in config.c and provided a fix for it. I don't know if +the user is even a ham but their alias is dcb314, and we thank them. Their +report and fix which is included: +config.c:407:35: warning: logical 'or' of collectively exhaustive tests is always true [-Wlogical-op] +Source code is +if ((User.ul_type != AF_NETROM) || (User.ul_type != AF_INET) || +(User.ul_type != AF_INET6)) { +Maybe better code +if ((User.ul_type != AF_NETROM) && (User.ul_type != AF_INET) && +(User.ul_type != AF_INET6)) { +While I don't get the warning he had, the logistics seem to be fine. Thanks +again to dcb314 at sourceforge for their report. + +I have made a diff file for JNOS2.0K that makes it a bit more user +compatible with URONode, and other linux-based nodes. For almost 30 years +TCP port 3694 has been used for inbound telnet for linux-based nodes, and +URONode is no exception... just as IP protocol 93 is for axip and UDP +port 93 is for axudp (again other systems love to violate protocols, we +try not to). Besides my little isms that I like in xNOS which I often +contributed to K2MF for MFNOS, I've began to do similar for JNOS. I'm adding +the .diff file in the main code distribution so if you do run JNOS 2.0K as +your PBBS TCP port 3694 is now recognized in JNOS with my patch. I have +as of this writing submitted it to Maiko for considerations, I don't know +if he's going to use it or not. If you do want to patch your JNOS 2.0K +copy it into your jnos source directory and run: patch -p1 -i jnos20k.diff +and you should see about a half dozen files updated. If Maiko doesn't wish +to include this and you want me to keep up to date with it, let me know. + +With the recent CVE study on Winlink2000 and plain text passwords exposed, I +went through URONode to insure it wasn't posessing the same issue. By +default URONode doesn't ask for ANY passwords however it's highly suggested +that the sysop require passwords on any internet or amprnet interface. Before +yes, a sysop could require a password on an ax25/NetRom/Rose interface which +would be exposed. Now, if a sysop mistakenly tries to force a password +on RF, it will be ignored by the node so it's not exposed. + ----------- Note on SystemD -------- In uronode.socket, you'll notice the line: ListenStream=0.0.0.0:3694 @@ -221,4 +304,3 @@ Join our support mail list graciously donated by TAPR! http://www.tapr.org/mailman/listinfo/uronode 73 de Brian N1URO - diff --git a/Makefile.in b/Makefile.in index daebe36..768058c 100644 --- a/Makefile.in +++ b/Makefile.in @@ -2,15 +2,15 @@ all: nodeusers uronode axdigi calibrate @FLEXNET@ CC = gcc LD = gcc -# CFLAGS = -O2 -g -s -Wstrict-prototypes -CFLAGS = -O2 -g -Wno-unused-result -Wstrict-prototypes +# CFLAGS = -O2 -g -s -Wno-unused-result -Wstrict-prototypes +CFLAGS = -DUNIX -g3 -DDEBUG LDFLAGS = LIBS = -lax25 -lax25io include Makefile.include COMMON_SRC = user.c util.c -NODE_SRC = node.c cmdparse.c config.c command.c mheard.c axcalluser.c \ +NODE_SRC = node.c cmdparse.c config.c command.c jheard.c axcalluser.c \ gateway.c extcmd.c procinfo.c router.c system.c sysinfo.c ipc.c NODEUSERS_SRC = nodeusers.c FLEXD_SRC = flexd.c procinfo.c diff --git a/axdigi.c b/axdigi.c index 928d67c..2f3dbe6 100644 --- a/axdigi.c +++ b/axdigi.c @@ -39,7 +39,7 @@ #include /* added by N1URO */ #include - +#include "node.h" int recv_packet(unsigned char *buf, int size, unsigned char *port); void print_call(unsigned char *buf); unsigned char *find_call(char *port); @@ -53,7 +53,7 @@ void get_interfaces(int skt); #define E_BIT 0x01 /* Address extension bit */ #define REPEATED 0x80 /* Has-been-repeated bit */ #define MAX_PORTS 16 -#define VERSION "0.3" +// #define VERSION "0.3" #define AXDIGI_PID_FILE "/var/run/axdigi.pid" int port_count = 0; unsigned char portname[MAX_PORTS][20]; @@ -95,13 +95,14 @@ int main(int argc, char *argv[]) { if (strcmp(argv[1], "-v") == 0 || strcmp(argv[1], "-h") ==0) { - printf("axdigi version %s. Copyright (C) 1995 Craig Small VK2XLZ\n", VERSION); + printf("axdigi: version %s.\n\r", VERSION); + printf("Copywrite (c) 1995 Craig Small - VK2XLZ\n\r"); printf("modificatiions Copyright (C) 2012-present by Brian N1URO\n\n"); - printf("axdigi comes with ABSOLUTELY NO WARRANTY.\n"); - printf("This is free software, and you are welcome to redistribute it\n"); - printf("under the terms of GNU General Public Licence as published\n"); - printf("by Free Software Foundation; either version 2 of the License, or\n"); - printf("(at your option) any later version.\n"); + printf("axdigi comes with ABSOLUTELY NO WARRANTY.\n\r"); + printf("This is free software, and you are welcome to redistribute it\n\r"); + printf("under the terms of GNU General Public Licence as published\n\r"); + printf("by Free Software Foundation; either version 2 of the License, or\n\r"); + printf("(at your option) any later version.\n\r"); return 0; } } @@ -122,7 +123,7 @@ if (!daemon_start(TRUE)) { pidfile = fopen(AXDIGI_PID_FILE, "w"); fprintf(pidfile, "%d\n", (int)getpid()); - fprintf(stderr, "axDigi started. \n\r"); + fprintf(stderr, "axDigi started. \n"); fclose(pidfile); signal(SIGHUP, hup_handler); diff --git a/cmdparse.c b/cmdparse.c index 298b1cf..4660bf3 100644 --- a/cmdparse.c +++ b/cmdparse.c @@ -216,7 +216,8 @@ int cmdparse(struct cmd *list, char *cmdline) static char cmdbuf[1024]; /* convert cmdline to argc,argv[] if '#' or empty: return */ - if ((argc = parse_args(argv, cmdline)) == 0 || *argv[0] == '#') return 2; + /* changing return 2 to return -1 */ + if ((argc = parse_args(argv, cmdline)) == 0 || *argv[0] == '#') return 1; /* check if the command in argv[0] is in the list */ for (cmdp = list; cmdp != NULL; cmdp = cmdp->next) { if (strlen(argv[0]) < cmdp->len || strlen(argv[0]) > strlen(cmdp->name)) continue; diff --git a/command.c b/command.c index e793c36..d8778b6 100644 --- a/command.c +++ b/command.c @@ -53,8 +53,9 @@ void init_nodecmds(void) #ifdef HAVE_FLEX add_internal_cmd(&Nodecmds, "Desti", 1, do_dest); #endif -#ifdef HAVE_MHEARD - add_internal_cmd(&Nodecmds, "MHeard", 2, do_mheard); +#ifdef HAVE_JHEARD + add_internal_cmd(&Nodecmds, "Jheard", 1, do_jheard); + add_internal_cmd(&Nodecmds, "JLong", 2, do_jlong); #endif #ifdef HAVE_NETROM add_internal_cmd(&Nodecmds, "Nodes", 1, do_nodes); diff --git a/config.c b/config.c index 8feb4e4..dde3208 100644 --- a/config.c +++ b/config.c @@ -404,7 +404,7 @@ static int do_roseid(int argc, char **argv) static int do_prompt(int argc, char **argv) { - if ((User.ul_type != AF_NETROM) || (User.ul_type != AF_INET) || (User.ul_type != AF_INET6)) { + if ((User.ul_type != AF_NETROM) && (User.ul_type != AF_INET) && (User.ul_type != AF_INET6)) { if (argc < 2) { return -1; Prompt = strdup(argv[1]); diff --git a/configure b/configure index 2911fa0..923f672 100755 --- a/configure +++ b/configure @@ -1,5 +1,11 @@ #!/bin/sh +echo -n "Use interactive mode? [Y/n]: "; read answer +if [ "$answer" = "Y" -o "$answer" = "y" -o "$answer" = "" ] + then NON_INTERACTIVE=0; + else NON_INTERACTIVE=1; +fi + _sleep() { [ "$NON_INTERACTIVE" = 1 ] || sleep "$@" @@ -100,7 +106,7 @@ fi IN="#" HAVENETROM="#undef HAVE_NETROM" HAVEROSE="#undef HAVE_ROSE" - HAVEMHEARD="#undef HAVE_MHEARD" + HAVEMHEARD="#undef HAVE_JHEARD" HAVEAUTOROUTE="#undef HAVE_AUTOROUTE" HAVETCPIP="#undef HAVE_TCPIP" HAVEMOTD="#undef HAVE_MOTD" @@ -174,7 +180,7 @@ fi if [ $? -ne 1 ] then HAVEAX25="#define HAVE_AX25 1" - HAVEMHEARD="#define HAVE_MHEARD 1" + HAVEMHEARD="#define HAVE_JHEARD 1" fi # # echo -n "Include support for ax25 AutoRouter ? [Y/n]: "; read answer @@ -270,7 +276,8 @@ echo "" _sleep 1 echo "Special thanks to: Morgan, sm6tky for his security report" echo "and Barry K2MF for his input on some of my routines and supplying" -echo "some source code." +echo "some source code. If you did not use interactive mode, you must" +echo "run make manually." _sleep 1 echo "" #echo -n "Shall I run the make command for you ? [Y/n]: " diff --git a/etc/axdigi.conf b/etc/axdigi.conf deleted file mode 100644 index 55c809d..0000000 --- a/etc/axdigi.conf +++ /dev/null @@ -1,20 +0,0 @@ -# URONode axdigi module -# load using /usr/sbin/axdigi & -# -#print debuginfo on/off -Debug off -# -#The digi call -MyCall xx0xx -# -# on use ssid 0-15 for digicall ,off use only ssid of mycall -IgnoreSSID on -# -#number of entrys for autorouting -lookupsize 100 -# -#timeout auto routing data in sec. -TIMEOUT 3600 -# -DefaultPort ln.tue -# diff --git a/etc/help/jheard.hlp b/etc/help/jheard.hlp new file mode 100644 index 0000000..6a1f020 --- /dev/null +++ b/etc/help/jheard.hlp @@ -0,0 +1,9 @@ + +USAGE + Jheard [] + +DESCRIPTION + Gives a list of the last 20 heard AX25 stations on all interfaces + and, if specified, on the specified interface. + Use the "INterfaces" command to get a list of available + interfaces. diff --git a/etc/help/jlong.hlp b/etc/help/jlong.hlp new file mode 100644 index 0000000..7f2c626 --- /dev/null +++ b/etc/help/jlong.hlp @@ -0,0 +1,8 @@ + +USAGE + JLong + +DESCRIPTION + Gives a list of ALL heard AX25 stations on all interfaces. + This may be a VERY LONG LIST. If you're on HF you may timeout. + Add an interface to see a long list for just that interface. diff --git a/etc/help/mheard.hlp b/etc/help/mheard.hlp deleted file mode 100644 index 4a08386..0000000 --- a/etc/help/mheard.hlp +++ /dev/null @@ -1,8 +0,0 @@ - -USAGE - Mheard [] - -DESCRIPTION - Gives a list of heard AX25 stations on all ports and, if - specified, on the specified port. - Use the "Ports" command to get a list of available ports. \ No newline at end of file diff --git a/etc/uronode.conf b/etc/uronode.conf index e2af7f6..16a94a0 100644 --- a/etc/uronode.conf +++ b/etc/uronode.conf @@ -33,8 +33,7 @@ LocalNet 44.0.0.0/32 Alias CAllbook "telnet %{3:144.167.99.66} 2000 %1 s" Alias CONVers "telnet %{2:44.88.0.9} 3600 \"/n %u %{1:1}\"" -Alias DXCluster "connect dxnet" -Alias Quit "bye" +Alias DXCluster "telnet %{2:44.88.0.9} 9001 %1 s" Alias WX "telnet %{3:38.102.137.140} %1 s" # Hidden ports. @@ -49,8 +48,7 @@ Alias WX "telnet %{3:38.102.137.140} %1 s" # 2 Reconnected flag # 3 Run through pipe and reconnect # -ExtCmd NEstat 1 nobody /bin/netstat netstat --inet -#ExtCmd PMS 1 root /usr/sbin/pms pms -u %U -o XX0XX +ExtCmd NEtstat 1 nobody /bin/netstat netstat --inet # Node ID. # This displays before all output texts when the user connects into diff --git a/flexd.c b/flexd.c index 3d677b2..8f8741e 100644 --- a/flexd.c +++ b/flexd.c @@ -23,6 +23,7 @@ #include #include "config.h" +#include "node.h" #include "procinfo.h" #define DEFAULT_POLL_TIME 600 @@ -111,7 +112,7 @@ void read_conf(void) } } } - fprintf(stderr,"FlexD started.\n\r"); + fprintf(stderr,"FlexD started.\n"); fclose(fgt); fclose(fp); } @@ -141,7 +142,7 @@ int download_dest(char *gateway, char *fname) } if ((addr = ax25_config_get_addr(port)) == NULL) { - sprintf(buffer, "flexd connect: invalid AX.25 port name - %s\r\n", port); + sprintf(buffer, "flexd connect: invalid AX.25 port name - %s\n", port); write(STDOUT_FILENO, buffer, strlen(buffer)); return 1; } @@ -150,7 +151,7 @@ int download_dest(char *gateway, char *fname) * Open the socket into the kernel. */ if ((s = socket(AF_AX25, SOCK_SEQPACKET, 0)) < 0) { - sprintf(buffer, "flexd connect: cannot open AX.25 socket, %s\r\n", strerror(errno)); + sprintf(buffer, "flexd connect: cannot open AX.25 socket, %s\n", strerror(errno)); write(STDOUT_FILENO, buffer, strlen(buffer)); return 1; } @@ -165,7 +166,7 @@ int download_dest(char *gateway, char *fname) addrlen=sizeof(struct full_sockaddr_ax25); if (bind(s, (struct sockaddr *)&axbind, addrlen) != 0) { - sprintf(buffer, "flexd connect: cannot bind AX.25 socket, %s\r\n", strerror(errno)); + sprintf(buffer, "flexd connect: cannot bind AX.25 socket, %s\n", strerror(errno)); write(STDOUT_FILENO, buffer, strlen(buffer)); close(s); return 1; @@ -178,14 +179,14 @@ int download_dest(char *gateway, char *fname) axconnect.fsa_ax25.sax25_family = AF_AX25; if (fcntl(s, F_SETFL, O_NONBLOCK) == -1) { - sprintf(buffer, "flexd connect: fcntl on socket: %s\r\n", strerror(errno)); + sprintf(buffer, "flexd connect: fcntl on socket: %s\n", strerror(errno)); write(STDOUT_FILENO, buffer, strlen(buffer)); close(s); return 1; } if (ax25_aton_arglist((const char **)dlist, &axconnect) == -1) { - sprintf(buffer, "flexd connect: invalid destination callsign or digipeater\r\n"); + sprintf(buffer, "flexd connect: invalid destination callsign or digipeater\n"); write(STDOUT_FILENO, buffer, strlen(buffer)); close(s); return 1; @@ -194,16 +195,16 @@ int download_dest(char *gateway, char *fname) if (connect(s, (struct sockaddr *)&axconnect, addrlen) == -1 && errno != EINPROGRESS) { switch (errno) { case ECONNREFUSED: - strcpy(buffer, "*** Connection refused - aborting\r\n"); + strcpy(buffer, "*** Connection refused - aborting\n"); break; case ENETUNREACH: - strcpy(buffer, "*** No known route - aborting\r\n"); + strcpy(buffer, "*** No known route - aborting\n"); break; case EINTR: - strcpy(buffer, "*** Connection timed out - aborting\r\n"); + strcpy(buffer, "*** Connection timed out - aborting\n"); break; default: - sprintf(buffer, "*** Cannot connect, %s\r\n", strerror(errno)); + sprintf(buffer, "*** Cannot connect, %s\n", strerror(errno)); break; } @@ -235,7 +236,7 @@ int download_dest(char *gateway, char *fname) if (ret != 0) { cp = strdup(strerror(ret)); strlwr(cp); - sprintf(buffer, "flexd connect: Failure with %s\r\nError: %s\r\n", gateway, cp); + sprintf(buffer, "flexd connect: Failure with %s\nError: %s\n", gateway, cp); write(STDOUT_FILENO, buffer, strlen(buffer)); free(cp); close(s); @@ -373,7 +374,7 @@ void hup_handler(int sig) { signal(SIGHUP, SIG_IGN); - fprintf(stderr, "SIGHUP caught by FlexD, restarting... \n\r"); + fprintf(stderr, "SIGHUP caught by FlexD, restarting... \n"); read_conf(); update_flex(); @@ -405,6 +406,24 @@ int main(int argc, char *argv[]) { FILE *pidfile; + if (argc > 1) + { + if (strcmp(argv[1], "-v") == 0 || strcmp(argv[1], "-h") ==0) + { + printf("FlexD version %s.\n\r", VERSION); + printf("Copywrite (c) 2000-2003 by Roy PE1RJA and Stefano IZ5AWZ\n\r"); + printf("Copywrite (c) 2003 - present by Brian Rogers - N1URO.\n\r"); + printf("FlexD is free sofware and you are welcome to redistribute it\n\r"); + printf("under the terms of GNU General Public Licence as published\n\r"); + printf("by Free Software Foundation; either version 2 of the License, or\n\r"); + printf("(at your option) any later version.\n\r"); + printf("\n\r"); + printf("FlexD comes with NO WARRANTY. Use at your own risk.\n\r"); + return 0; + } + } + + signal(SIGPIPE, SIG_IGN); if (ax25_config_load_ports() == 0) { diff --git a/gateway.c b/gateway.c index e10f23a..e035c07 100644 --- a/gateway.c +++ b/gateway.c @@ -549,7 +549,7 @@ int do_connect(int argc, char **argv) char *connstr = NULL; axio_puts("",NodeIo); - stay = ReConnectTo; + stay = 0; if (!strcasecmp(argv[argc - 1], "s")) { stay = 1; argv[--argc] = NULL; diff --git a/mheard.c b/jheard.c similarity index 52% rename from mheard.c rename to jheard.c index ee46b7b..9ab5b89 100644 --- a/mheard.c +++ b/jheard.c @@ -23,7 +23,7 @@ struct mheard_list { struct mheard_list *next; }; -int do_mheard (int argc,char **argv) { +int do_jheard (int argc,char **argv) { FILE *fp; struct mheard_struct mh; struct mheard_list *list = NULL, *new, *tmp, *p; @@ -35,7 +35,7 @@ int do_mheard (int argc,char **argv) { if(User.ul_type == AF_NETROM) axio_printf(NodeIo,"%s} ",NodeId); - if(argc > 1) { + if(argc > 0) { if(ax25_config_get_dev(argv[1]) == NULL || (check_perms(PERM_HIDDEN, 0) == -1 && is_hidden(argv[1]))) { @@ -85,7 +85,7 @@ int do_mheard (int argc,char **argv) { if(check_perms(PERM_ANSI,0L) != -1) axio_printf(NodeIo,"\e[01;33m"); - node_msg("MHeard list:"); + node_msg("Just Heard list:"); if(check_perms(PERM_ANSI,0L) != -1) axio_printf(NodeIo,"\e[0;m"); @@ -149,3 +149,131 @@ int do_mheard (int argc,char **argv) { node_msg(""); return 0; } + +int do_jlong (int argc,char **argv) { + FILE *fp; + struct mheard_struct mh; + struct mheard_list *list = NULL, *new, *tmp, *p; + char *s, *t, *u; + int mhcount = 0; + + axio_puts("",NodeIo); + + if(User.ul_type == AF_NETROM) + axio_printf(NodeIo,"%s} ",NodeId); + + if(argc > 0) { + if(ax25_config_get_dev(argv[1]) == NULL + || (check_perms(PERM_HIDDEN, 0) == -1 + && is_hidden(argv[1]))) { + axio_printf(NodeIo,"Invalid interface: %s", argv[1]); + + if(User.ul_type == AF_NETROM) + node_msg(""); + + return 0; + } + } + if((fp = fopen(DATA_MHEARD_FILE,"r")) == NULL) { + node_perror(DATA_MHEARD_FILE,errno); + return 0; + } + while (fread(&mh,sizeof(struct mheard_struct),1,fp) + == 1) { + if(argc > 1) { + if(strcmp(argv[1],mh.portname)) + continue; + } + if(check_perms(PERM_HIDDEN,0) == -1 && is_hidden(mh.portname)) + continue; + + if((new = calloc(1,sizeof(struct mheard_list))) == NULL) { + node_perror("do_mheard: calloc",errno); + break; + } + new->data = mh; + + if(list == NULL || mh.last_heard > list->data.last_heard) { + tmp = list; + list = new; + } else { + for(p = list; p->next != NULL; p = p->next) { + if(mh.last_heard > p->next->data.last_heard) + break; + } + tmp = p->next; + p->next = new; + } + new->next = tmp; + mhcount++; + } + fclose(fp); + + if(check_perms(PERM_ANSI,0L) != -1) + axio_printf(NodeIo,"\e[01;33m"); + + node_msg("Just Heard Long list (May timeout HFers):"); + + if(check_perms(PERM_ANSI,0L) != -1) + axio_printf(NodeIo,"\e[0;m"); + + axio_printf(NodeIo,"Callsign Device Packets Date & Time Frame Type(s)\n"); + axio_printf(NodeIo,"--------- ------ -------- --------------- -------------"); + + while(list != NULL) { + s = ctime(&list->data.last_heard); + s[19] = 0; + s += 4; + t = ax25_ntoa(&list->data.from_call); + + if((u = strstr(t,"-0")) != NULL) + *u = '\0'; + + axio_printf(NodeIo,"\n%-9s %-6s %-8d %s",t,list->data.portname,list->data.count,s); + + if(list->data.mode & MHEARD_MODE_ARP) + axio_printf(NodeIo," ARP"); + + if(list->data.mode & MHEARD_MODE_FLEXNET) + axio_printf(NodeIo," FlexNet"); + + if(list->data.mode & MHEARD_MODE_IP_DG) + axio_printf(NodeIo," IP-DG"); + + if(list->data.mode & MHEARD_MODE_IP_VC) + axio_printf(NodeIo," IP-VC"); + + if(list->data.mode & MHEARD_MODE_NETROM) + axio_printf(NodeIo," NetRom"); + + if(list->data.mode & MHEARD_MODE_ROSE) + axio_printf(NodeIo," Rose"); + + if(list->data.mode & MHEARD_MODE_SEGMENT) + axio_printf(NodeIo," Segment"); + + if(list->data.mode & MHEARD_MODE_TEXNET) + axio_printf(NodeIo," TexNet"); + + if(list->data.mode & MHEARD_MODE_TEXT) + axio_printf(NodeIo," Text"); + + if(list->data.mode & MHEARD_MODE_PSATFT) + axio_printf(NodeIo," PacsatFT"); + + if(list->data.mode & MHEARD_MODE_PSATPB) + axio_printf(NodeIo," PacsatPB"); + + if(list->data.mode & MHEARD_MODE_UNKNOWN) + axio_printf(NodeIo," Unknown"); + + tmp = list; + list = list->next; + free(tmp); + + } + if(User.ul_type == AF_NETROM) + node_msg(""); + return 0; +} + diff --git a/man/uronode.8 b/man/uronode.8 index 48d2649..099459f 100644 --- a/man/uronode.8 +++ b/man/uronode.8 @@ -11,19 +11,19 @@ AWZNode, and Flexnode. .SH COMMANDS The following commands are supported for users of .B URONode: -.TP 14 +.TP 13 .BI ? Give short list of available commands. -.TP 14 +.TP 13 .BI Bye Disconnect user from the node. -.TP 14 +.TP 13 .BI "Connect [s|d] For NETROM" -.TP 14 +.TP 13 .BI "Connect [via ...] [d|s] For AX.25" -.TP 14 +.TP 13 .BI "Connect
[] [d|s] For ROSE" -.TP 14 +.TP 13 .BI "Connect [s|d] For FlexNet" .sp 1 Initiates an AX25, NET/ROM, ROSE or Flexnet connection to a remote host. @@ -47,14 +47,14 @@ disconnects you will be returned to this node. If a single `d' is entered as the last argument, you will be disconnected from this node too. The Default behaviour (neither `s' nor `d' entered) is configured in the node configuration file and depends on the sysop preference. -.TP 14 +.TP 13 .BI "CAllbook [@]" Retrieve data about a callsign from an internet-accessible callbook server. The server name can usually be omitted, since the default server configured by the operator is usually valid. The default setting can be overridden by specifying a host name. -.TP 14 +.TP 13 .BI "Escape []" Override the sysop configured default escape character setting. If the Escape command is given without an argument then the current escape character setting @@ -78,29 +78,38 @@ to set the escape character to an Octal value. .IP .BI "off" to disable the escape character. -.TP 14 +.TP 13 .BI "Finger [][@]" Retrieve information about users of a system. If the user name is omitted, shows the users currently logged on the host. If the hostname is omitted, defaults to the local host. -.TP 14 +.TP 13 .BI "Help []" Give help for the specified command or this text if no command is specified. Commands can not be abbreviated. Use the "?" command to retrieve a list of available commands. -.TP 14 +.TP 13 .BI "HOst | " Give the Domain Name Service host name information about or . -.TP 14 +.TP 13 .BI Info Display the version information and the contents of the /usr/local/etc/ax25/uronode.info file, which should describe any aspects of your system that you would like to brag about. -.TP 14 +.TP 13 .BI INTerfaces Display the node's interface schema, most folks often call these "ports". -.TP 14 +.TP 13 +.BI Jheard +Displays the last 20 stations heard to this node. You may use an interface +name to get the last 20 stations heard to that particular interface. +.TP 13 +.BI JLong +Displays the full list of the heards database up to the last 100 callsigns. +Add the name of an interface for the full heards listing for that specific +interface. +.TP 13 .BI "Links [d | n | v | ]" Shows the AX25 link table of the local node. The destinations on this list can be reached using the Connect command without @@ -113,10 +122,7 @@ The optional parameter v show the AX25 links via digipeaters. You can also specify a destination callsign to get the verbose information for a single destination. -.TP 14 -.BI "Mheard []" -Give a list of heard AX.25 stations on the specified port. -.TP 14 +.TP 13 .BI "Nodes [* | ]" Show the NET/ROM node table of the local host. The nodes on this list can be reached using the Connect command without knowing the @@ -128,7 +134,7 @@ neighbour node used to reach each node. You can also specify a node callsign to get the verbose information for a single node. In that case a "which" field that tells what route the kernel will use to reach the node is also shown. -.TP 14 +.TP 13 .BI "Ping []" Check if a host can be reached trough the network by sending an ICMP Echo Request packet to the host and waiting for it to @@ -137,7 +143,7 @@ between the local and remote hosts is shown. .sp If an optional length is specified the data portion of the packet is filled with length number of bytes up to 128. -.TP 14 +.TP 13 .BI Routes Shows the NET/ROM route table of the local host (eg. the nodes which the local node directly talks with). These nodes are used @@ -163,7 +169,7 @@ Is the quality of this route locked by the operator. .IP .BI "QSO" Number of NET/ROM session enties. -.TP 14 +.TP 13 .BI "Telnet [] [] [d|s]" Initiate a telnet session to a remote host using TCP/IP. By default, the telnet command connects to the TCP port 23 @@ -179,7 +185,7 @@ the remote host disconnects you will be returned to this node. If a single `d' is entered as the last parameter, you will be disconnected from this node too. Default behaviour (neither `s' nor `d' entered) depends on sysop configuration. -.TP 14 +.TP 13 .BI "MSG " Send a message to another user of the node. The user in question must be in idle state (ie. not connected/connecting @@ -188,7 +194,7 @@ anywhere or running a program). If the user has an SSID other than zero, the SSID must be specified. If multiple users are logged in with the same callsign/SSID pair, those who are in idle state, get the message. -.TP 14 +.TP 13 .BI Users Show a list of users currently connected to the local node, where the users are coming from, and what are they doing at the diff --git a/node.c b/node.c index 53c4e73..45fba2c 100644 --- a/node.c +++ b/node.c @@ -258,7 +258,11 @@ int main(int argc, char *argv[]) node_msg("Sorry, I'm not allowed to talk to you."); node_log(LOGLVL_LOGIN, "Login denied for %s @ %s", User.call, User.ul_name); node_logout("Login denied"); - } else if (strcmp(pw, "*") != 0) { + } + else if (User.ul_type == AF_AX25 || User.ul_type == AF_NETROM || User.ul_type == AF_ROSE) { + (strcmp(pw, "*") == 0); + } + else if (strcmp(pw, "*") != 0) { axio_printf(NodeIo,"*** Password required! If you don't have a password please email\n%s for a password you wish to use.", Email); axio_printf(NodeIo,"\nPassword: "); if ((User.ul_type == AF_INET) || (User.ul_type == AF_INET6)) { diff --git a/node.h b/node.h index 9fb30cb..d2c73eb 100644 --- a/node.h +++ b/node.h @@ -1,5 +1,5 @@ -#define VERSION "URONode v2.5.1" -#define COMPILING "March 31, 2016" +#define VERSION "URONode v2.6" +#define COMPILING "November 25, 2016" #define STATE_IDLE 0 #define STATE_TRYING 1 @@ -168,5 +168,6 @@ extern void newmail(void); extern void mailcheck(void); extern void lastlog(void); -/* in mheard.c */ -extern int do_mheard(int argc, char **argv); +/* in jheard.c */ +extern int do_jheard(int argc, char **argv); +extern int do_jlong(int argc, char **argv); diff --git a/system.c b/system.c index 679d492..f1079d5 100644 --- a/system.c +++ b/system.c @@ -429,7 +429,7 @@ int examine_user(void) do { if (strcmp(cp, "shell")==0) { shell=1; - add_internal_cmd(&Nodecmds, "SYSop", 1, do_system); +// add_internal_cmd(&Nodecmds, "SYSop", 1, do_system); } cp=strtok(NULL, " ,;-/\t\n\r"); } while(cp!=NULL);