commit
374dc15bb0
84
CHANGES.3
84
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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
19
axdigi.c
19
axdigi.c
|
@ -39,7 +39,7 @@
|
|||
#include <linux/ax25.h>
|
||||
/* added by N1URO */
|
||||
#include <netax25/daemon.h>
|
||||
|
||||
#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);
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
|
2
config.c
2
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]);
|
||||
|
|
|
@ -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]: "
|
||||
|
|
|
@ -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
|
||||
#
|
|
@ -0,0 +1,9 @@
|
|||
|
||||
USAGE
|
||||
Jheard [<interface>]
|
||||
|
||||
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.
|
|
@ -0,0 +1,8 @@
|
|||
|
||||
USAGE
|
||||
JLong <interface>
|
||||
|
||||
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.
|
|
@ -1,8 +0,0 @@
|
|||
|
||||
USAGE
|
||||
Mheard [<port>]
|
||||
|
||||
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.
|
|
@ -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
|
||||
|
|
43
flexd.c
43
flexd.c
|
@ -23,6 +23,7 @@
|
|||
#include <netax25/daemon.h>
|
||||
|
||||
#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) {
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
@ -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 <call | alias> [s|d] For NETROM"
|
||||
.TP 14
|
||||
.TP 13
|
||||
.BI "Connect <port> <call> [via <call1> ...] [d|s] For AX.25"
|
||||
.TP 14
|
||||
.TP 13
|
||||
.BI "Connect <call> <address> [<digi>] [d|s] For ROSE"
|
||||
.TP 14
|
||||
.TP 13
|
||||
.BI "Connect <destination> [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 <call>[@<server>]"
|
||||
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 [<escape string>]"
|
||||
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 [<username>][@<hostname>]"
|
||||
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 [<command>]"
|
||||
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 <hostname> | <ip address>"
|
||||
Give the Domain Name Service host name information about <hostname> or
|
||||
<ip address>.
|
||||
.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 <interface>
|
||||
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 <interface>
|
||||
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 | <call>]"
|
||||
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 [<portname>]"
|
||||
Give a list of heard AX.25 stations on the specified port.
|
||||
.TP 14
|
||||
.TP 13
|
||||
.BI "Nodes [* | <node>]"
|
||||
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 <host> [<size>]"
|
||||
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 <host> [<port>] [<string>] [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 <user> <message>"
|
||||
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
|
||||
|
|
6
node.c
6
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)) {
|
||||
|
|
9
node.h
9
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);
|
||||
|
|
Loading…
Reference in New Issue