New upstream version 2.6
This commit is contained in:
parent
5752427e73
commit
a3886f2ff6
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
|
Xnet may require a larger buffer than FlexNet for some reason? Bob also
|
||||||
checked that in. Thanks Bob.
|
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 --------
|
----------- Note on SystemD --------
|
||||||
In uronode.socket, you'll notice the line:
|
In uronode.socket, you'll notice the line:
|
||||||
ListenStream=0.0.0.0:3694
|
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
|
http://www.tapr.org/mailman/listinfo/uronode
|
||||||
|
|
||||||
73 de Brian N1URO
|
73 de Brian N1URO
|
||||||
|
|
||||||
|
|
|
@ -2,15 +2,15 @@ all: nodeusers uronode axdigi calibrate @FLEXNET@
|
||||||
|
|
||||||
CC = gcc
|
CC = gcc
|
||||||
LD = gcc
|
LD = gcc
|
||||||
# CFLAGS = -O2 -g -s -Wstrict-prototypes
|
# CFLAGS = -O2 -g -s -Wno-unused-result -Wstrict-prototypes
|
||||||
CFLAGS = -O2 -g -Wno-unused-result -Wstrict-prototypes
|
CFLAGS = -DUNIX -g3 -DDEBUG
|
||||||
LDFLAGS =
|
LDFLAGS =
|
||||||
LIBS = -lax25 -lax25io
|
LIBS = -lax25 -lax25io
|
||||||
|
|
||||||
include Makefile.include
|
include Makefile.include
|
||||||
|
|
||||||
COMMON_SRC = user.c util.c
|
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
|
gateway.c extcmd.c procinfo.c router.c system.c sysinfo.c ipc.c
|
||||||
NODEUSERS_SRC = nodeusers.c
|
NODEUSERS_SRC = nodeusers.c
|
||||||
FLEXD_SRC = flexd.c procinfo.c
|
FLEXD_SRC = flexd.c procinfo.c
|
||||||
|
|
19
axdigi.c
19
axdigi.c
|
@ -39,7 +39,7 @@
|
||||||
#include <linux/ax25.h>
|
#include <linux/ax25.h>
|
||||||
/* added by N1URO */
|
/* added by N1URO */
|
||||||
#include <netax25/daemon.h>
|
#include <netax25/daemon.h>
|
||||||
|
#include "node.h"
|
||||||
int recv_packet(unsigned char *buf, int size, unsigned char *port);
|
int recv_packet(unsigned char *buf, int size, unsigned char *port);
|
||||||
void print_call(unsigned char *buf);
|
void print_call(unsigned char *buf);
|
||||||
unsigned char *find_call(char *port);
|
unsigned char *find_call(char *port);
|
||||||
|
@ -53,7 +53,7 @@ void get_interfaces(int skt);
|
||||||
#define E_BIT 0x01 /* Address extension bit */
|
#define E_BIT 0x01 /* Address extension bit */
|
||||||
#define REPEATED 0x80 /* Has-been-repeated bit */
|
#define REPEATED 0x80 /* Has-been-repeated bit */
|
||||||
#define MAX_PORTS 16
|
#define MAX_PORTS 16
|
||||||
#define VERSION "0.3"
|
// #define VERSION "0.3"
|
||||||
#define AXDIGI_PID_FILE "/var/run/axdigi.pid"
|
#define AXDIGI_PID_FILE "/var/run/axdigi.pid"
|
||||||
int port_count = 0;
|
int port_count = 0;
|
||||||
unsigned char portname[MAX_PORTS][20];
|
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)
|
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("modificatiions Copyright (C) 2012-present by Brian N1URO\n\n");
|
||||||
printf("axdigi comes with ABSOLUTELY NO WARRANTY.\n");
|
printf("axdigi comes with ABSOLUTELY NO WARRANTY.\n\r");
|
||||||
printf("This is free software, and you are welcome to redistribute it\n");
|
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");
|
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");
|
printf("by Free Software Foundation; either version 2 of the License, or\n\r");
|
||||||
printf("(at your option) any later version.\n");
|
printf("(at your option) any later version.\n\r");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -122,7 +123,7 @@ if (!daemon_start(TRUE)) {
|
||||||
|
|
||||||
pidfile = fopen(AXDIGI_PID_FILE, "w");
|
pidfile = fopen(AXDIGI_PID_FILE, "w");
|
||||||
fprintf(pidfile, "%d\n", (int)getpid());
|
fprintf(pidfile, "%d\n", (int)getpid());
|
||||||
fprintf(stderr, "axDigi started. \n\r");
|
fprintf(stderr, "axDigi started. \n");
|
||||||
fclose(pidfile);
|
fclose(pidfile);
|
||||||
|
|
||||||
signal(SIGHUP, hup_handler);
|
signal(SIGHUP, hup_handler);
|
||||||
|
|
|
@ -216,7 +216,8 @@ int cmdparse(struct cmd *list, char *cmdline)
|
||||||
static char cmdbuf[1024];
|
static char cmdbuf[1024];
|
||||||
|
|
||||||
/* convert cmdline to argc,argv[] if '#' or empty: return */
|
/* 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 */
|
/* check if the command in argv[0] is in the list */
|
||||||
for (cmdp = list; cmdp != NULL; cmdp = cmdp->next) {
|
for (cmdp = list; cmdp != NULL; cmdp = cmdp->next) {
|
||||||
if (strlen(argv[0]) < cmdp->len || strlen(argv[0]) > strlen(cmdp->name)) continue;
|
if (strlen(argv[0]) < cmdp->len || strlen(argv[0]) > strlen(cmdp->name)) continue;
|
||||||
|
|
|
@ -53,8 +53,9 @@ void init_nodecmds(void)
|
||||||
#ifdef HAVE_FLEX
|
#ifdef HAVE_FLEX
|
||||||
add_internal_cmd(&Nodecmds, "Desti", 1, do_dest);
|
add_internal_cmd(&Nodecmds, "Desti", 1, do_dest);
|
||||||
#endif
|
#endif
|
||||||
#ifdef HAVE_MHEARD
|
#ifdef HAVE_JHEARD
|
||||||
add_internal_cmd(&Nodecmds, "MHeard", 2, do_mheard);
|
add_internal_cmd(&Nodecmds, "Jheard", 1, do_jheard);
|
||||||
|
add_internal_cmd(&Nodecmds, "JLong", 2, do_jlong);
|
||||||
#endif
|
#endif
|
||||||
#ifdef HAVE_NETROM
|
#ifdef HAVE_NETROM
|
||||||
add_internal_cmd(&Nodecmds, "Nodes", 1, do_nodes);
|
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)
|
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) {
|
if (argc < 2) {
|
||||||
return -1;
|
return -1;
|
||||||
Prompt = strdup(argv[1]);
|
Prompt = strdup(argv[1]);
|
||||||
|
|
|
@ -1,5 +1,11 @@
|
||||||
#!/bin/sh
|
#!/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()
|
_sleep()
|
||||||
{
|
{
|
||||||
[ "$NON_INTERACTIVE" = 1 ] || sleep "$@"
|
[ "$NON_INTERACTIVE" = 1 ] || sleep "$@"
|
||||||
|
@ -100,7 +106,7 @@ fi
|
||||||
IN="#"
|
IN="#"
|
||||||
HAVENETROM="#undef HAVE_NETROM"
|
HAVENETROM="#undef HAVE_NETROM"
|
||||||
HAVEROSE="#undef HAVE_ROSE"
|
HAVEROSE="#undef HAVE_ROSE"
|
||||||
HAVEMHEARD="#undef HAVE_MHEARD"
|
HAVEMHEARD="#undef HAVE_JHEARD"
|
||||||
HAVEAUTOROUTE="#undef HAVE_AUTOROUTE"
|
HAVEAUTOROUTE="#undef HAVE_AUTOROUTE"
|
||||||
HAVETCPIP="#undef HAVE_TCPIP"
|
HAVETCPIP="#undef HAVE_TCPIP"
|
||||||
HAVEMOTD="#undef HAVE_MOTD"
|
HAVEMOTD="#undef HAVE_MOTD"
|
||||||
|
@ -174,7 +180,7 @@ fi
|
||||||
if [ $? -ne 1 ]
|
if [ $? -ne 1 ]
|
||||||
then
|
then
|
||||||
HAVEAX25="#define HAVE_AX25 1"
|
HAVEAX25="#define HAVE_AX25 1"
|
||||||
HAVEMHEARD="#define HAVE_MHEARD 1"
|
HAVEMHEARD="#define HAVE_JHEARD 1"
|
||||||
fi
|
fi
|
||||||
#
|
#
|
||||||
# echo -n "Include support for ax25 AutoRouter ? [Y/n]: "; read answer
|
# echo -n "Include support for ax25 AutoRouter ? [Y/n]: "; read answer
|
||||||
|
@ -270,7 +276,8 @@ echo ""
|
||||||
_sleep 1
|
_sleep 1
|
||||||
echo "Special thanks to: Morgan, sm6tky for his security report"
|
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 "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
|
_sleep 1
|
||||||
echo ""
|
echo ""
|
||||||
#echo -n "Shall I run the make command for you ? [Y/n]: "
|
#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 CAllbook "telnet %{3:144.167.99.66} 2000 %1 s"
|
||||||
Alias CONVers "telnet %{2:44.88.0.9} 3600 \"/n %u %{1:1}\""
|
Alias CONVers "telnet %{2:44.88.0.9} 3600 \"/n %u %{1:1}\""
|
||||||
Alias DXCluster "connect dxnet"
|
Alias DXCluster "telnet %{2:44.88.0.9} 9001 %1 s"
|
||||||
Alias Quit "bye"
|
|
||||||
Alias WX "telnet %{3:38.102.137.140} %1 s"
|
Alias WX "telnet %{3:38.102.137.140} %1 s"
|
||||||
|
|
||||||
# Hidden ports.
|
# Hidden ports.
|
||||||
|
@ -49,8 +48,7 @@ Alias WX "telnet %{3:38.102.137.140} %1 s"
|
||||||
# 2 Reconnected flag
|
# 2 Reconnected flag
|
||||||
# 3 Run through pipe and reconnect
|
# 3 Run through pipe and reconnect
|
||||||
#
|
#
|
||||||
ExtCmd NEstat 1 nobody /bin/netstat netstat --inet
|
ExtCmd NEtstat 1 nobody /bin/netstat netstat --inet
|
||||||
#ExtCmd PMS 1 root /usr/sbin/pms pms -u %U -o XX0XX
|
|
||||||
|
|
||||||
# Node ID.
|
# Node ID.
|
||||||
# This displays before all output texts when the user connects into
|
# 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 <netax25/daemon.h>
|
||||||
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
#include "node.h"
|
||||||
#include "procinfo.h"
|
#include "procinfo.h"
|
||||||
|
|
||||||
#define DEFAULT_POLL_TIME 600
|
#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(fgt);
|
||||||
fclose(fp);
|
fclose(fp);
|
||||||
}
|
}
|
||||||
|
@ -141,7 +142,7 @@ int download_dest(char *gateway, char *fname)
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((addr = ax25_config_get_addr(port)) == NULL) {
|
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));
|
write(STDOUT_FILENO, buffer, strlen(buffer));
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
@ -150,7 +151,7 @@ int download_dest(char *gateway, char *fname)
|
||||||
* Open the socket into the kernel.
|
* Open the socket into the kernel.
|
||||||
*/
|
*/
|
||||||
if ((s = socket(AF_AX25, SOCK_SEQPACKET, 0)) < 0) {
|
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));
|
write(STDOUT_FILENO, buffer, strlen(buffer));
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
@ -165,7 +166,7 @@ int download_dest(char *gateway, char *fname)
|
||||||
addrlen=sizeof(struct full_sockaddr_ax25);
|
addrlen=sizeof(struct full_sockaddr_ax25);
|
||||||
|
|
||||||
if (bind(s, (struct sockaddr *)&axbind, addrlen) != 0) {
|
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));
|
write(STDOUT_FILENO, buffer, strlen(buffer));
|
||||||
close(s);
|
close(s);
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -178,14 +179,14 @@ int download_dest(char *gateway, char *fname)
|
||||||
axconnect.fsa_ax25.sax25_family = AF_AX25;
|
axconnect.fsa_ax25.sax25_family = AF_AX25;
|
||||||
|
|
||||||
if (fcntl(s, F_SETFL, O_NONBLOCK) == -1) {
|
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));
|
write(STDOUT_FILENO, buffer, strlen(buffer));
|
||||||
close(s);
|
close(s);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ax25_aton_arglist((const char **)dlist, &axconnect) == -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));
|
write(STDOUT_FILENO, buffer, strlen(buffer));
|
||||||
close(s);
|
close(s);
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -194,16 +195,16 @@ int download_dest(char *gateway, char *fname)
|
||||||
if (connect(s, (struct sockaddr *)&axconnect, addrlen) == -1 && errno != EINPROGRESS) {
|
if (connect(s, (struct sockaddr *)&axconnect, addrlen) == -1 && errno != EINPROGRESS) {
|
||||||
switch (errno) {
|
switch (errno) {
|
||||||
case ECONNREFUSED:
|
case ECONNREFUSED:
|
||||||
strcpy(buffer, "*** Connection refused - aborting\r\n");
|
strcpy(buffer, "*** Connection refused - aborting\n");
|
||||||
break;
|
break;
|
||||||
case ENETUNREACH:
|
case ENETUNREACH:
|
||||||
strcpy(buffer, "*** No known route - aborting\r\n");
|
strcpy(buffer, "*** No known route - aborting\n");
|
||||||
break;
|
break;
|
||||||
case EINTR:
|
case EINTR:
|
||||||
strcpy(buffer, "*** Connection timed out - aborting\r\n");
|
strcpy(buffer, "*** Connection timed out - aborting\n");
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
sprintf(buffer, "*** Cannot connect, %s\r\n", strerror(errno));
|
sprintf(buffer, "*** Cannot connect, %s\n", strerror(errno));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -235,7 +236,7 @@ int download_dest(char *gateway, char *fname)
|
||||||
if (ret != 0) {
|
if (ret != 0) {
|
||||||
cp = strdup(strerror(ret));
|
cp = strdup(strerror(ret));
|
||||||
strlwr(cp);
|
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));
|
write(STDOUT_FILENO, buffer, strlen(buffer));
|
||||||
free(cp);
|
free(cp);
|
||||||
close(s);
|
close(s);
|
||||||
|
@ -373,7 +374,7 @@ void hup_handler(int sig)
|
||||||
{
|
{
|
||||||
signal(SIGHUP, SIG_IGN);
|
signal(SIGHUP, SIG_IGN);
|
||||||
|
|
||||||
fprintf(stderr, "SIGHUP caught by FlexD, restarting... \n\r");
|
fprintf(stderr, "SIGHUP caught by FlexD, restarting... \n");
|
||||||
read_conf();
|
read_conf();
|
||||||
update_flex();
|
update_flex();
|
||||||
|
|
||||||
|
@ -405,6 +406,24 @@ int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
FILE *pidfile;
|
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);
|
signal(SIGPIPE, SIG_IGN);
|
||||||
|
|
||||||
if (ax25_config_load_ports() == 0) {
|
if (ax25_config_load_ports() == 0) {
|
||||||
|
|
|
@ -549,7 +549,7 @@ int do_connect(int argc, char **argv)
|
||||||
char *connstr = NULL;
|
char *connstr = NULL;
|
||||||
axio_puts("",NodeIo);
|
axio_puts("",NodeIo);
|
||||||
|
|
||||||
stay = ReConnectTo;
|
stay = 0;
|
||||||
if (!strcasecmp(argv[argc - 1], "s")) {
|
if (!strcasecmp(argv[argc - 1], "s")) {
|
||||||
stay = 1;
|
stay = 1;
|
||||||
argv[--argc] = NULL;
|
argv[--argc] = NULL;
|
||||||
|
|
|
@ -23,7 +23,7 @@ struct mheard_list {
|
||||||
struct mheard_list *next;
|
struct mheard_list *next;
|
||||||
};
|
};
|
||||||
|
|
||||||
int do_mheard (int argc,char **argv) {
|
int do_jheard (int argc,char **argv) {
|
||||||
FILE *fp;
|
FILE *fp;
|
||||||
struct mheard_struct mh;
|
struct mheard_struct mh;
|
||||||
struct mheard_list *list = NULL, *new, *tmp, *p;
|
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)
|
if(User.ul_type == AF_NETROM)
|
||||||
axio_printf(NodeIo,"%s} ",NodeId);
|
axio_printf(NodeIo,"%s} ",NodeId);
|
||||||
|
|
||||||
if(argc > 1) {
|
if(argc > 0) {
|
||||||
if(ax25_config_get_dev(argv[1]) == NULL
|
if(ax25_config_get_dev(argv[1]) == NULL
|
||||||
|| (check_perms(PERM_HIDDEN, 0) == -1
|
|| (check_perms(PERM_HIDDEN, 0) == -1
|
||||||
&& is_hidden(argv[1]))) {
|
&& is_hidden(argv[1]))) {
|
||||||
|
@ -85,7 +85,7 @@ int do_mheard (int argc,char **argv) {
|
||||||
if(check_perms(PERM_ANSI,0L) != -1)
|
if(check_perms(PERM_ANSI,0L) != -1)
|
||||||
axio_printf(NodeIo,"\e[01;33m");
|
axio_printf(NodeIo,"\e[01;33m");
|
||||||
|
|
||||||
node_msg("MHeard list:");
|
node_msg("Just Heard list:");
|
||||||
|
|
||||||
if(check_perms(PERM_ANSI,0L) != -1)
|
if(check_perms(PERM_ANSI,0L) != -1)
|
||||||
axio_printf(NodeIo,"\e[0;m");
|
axio_printf(NodeIo,"\e[0;m");
|
||||||
|
@ -149,3 +149,131 @@ int do_mheard (int argc,char **argv) {
|
||||||
node_msg("");
|
node_msg("");
|
||||||
return 0;
|
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
|
.SH COMMANDS
|
||||||
The following commands are supported for users of
|
The following commands are supported for users of
|
||||||
.B URONode:
|
.B URONode:
|
||||||
.TP 14
|
.TP 13
|
||||||
.BI ?
|
.BI ?
|
||||||
Give short list of available commands.
|
Give short list of available commands.
|
||||||
.TP 14
|
.TP 13
|
||||||
.BI Bye
|
.BI Bye
|
||||||
Disconnect user from the node.
|
Disconnect user from the node.
|
||||||
.TP 14
|
.TP 13
|
||||||
.BI "Connect <call | alias> [s|d] For NETROM"
|
.BI "Connect <call | alias> [s|d] For NETROM"
|
||||||
.TP 14
|
.TP 13
|
||||||
.BI "Connect <port> <call> [via <call1> ...] [d|s] For AX.25"
|
.BI "Connect <port> <call> [via <call1> ...] [d|s] For AX.25"
|
||||||
.TP 14
|
.TP 13
|
||||||
.BI "Connect <call> <address> [<digi>] [d|s] For ROSE"
|
.BI "Connect <call> <address> [<digi>] [d|s] For ROSE"
|
||||||
.TP 14
|
.TP 13
|
||||||
.BI "Connect <destination> [s|d] For FlexNet"
|
.BI "Connect <destination> [s|d] For FlexNet"
|
||||||
.sp 1
|
.sp 1
|
||||||
Initiates an AX25, NET/ROM, ROSE or Flexnet connection to a remote host.
|
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
|
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
|
behaviour (neither `s' nor `d' entered) is configured in the node configuration
|
||||||
file and depends on the sysop preference.
|
file and depends on the sysop preference.
|
||||||
.TP 14
|
.TP 13
|
||||||
.BI "CAllbook <call>[@<server>]"
|
.BI "CAllbook <call>[@<server>]"
|
||||||
Retrieve data about a callsign from an internet-accessible
|
Retrieve data about a callsign from an internet-accessible
|
||||||
callbook server. The server name can usually be omitted, since
|
callbook server. The server name can usually be omitted, since
|
||||||
the default server configured by the operator is usually
|
the default server configured by the operator is usually
|
||||||
valid. The default setting can be overridden by specifying
|
valid. The default setting can be overridden by specifying
|
||||||
a host name.
|
a host name.
|
||||||
.TP 14
|
.TP 13
|
||||||
.BI "Escape [<escape string>]"
|
.BI "Escape [<escape string>]"
|
||||||
Override the sysop configured default escape character setting. If the Escape
|
Override the sysop configured default escape character setting. If the Escape
|
||||||
command is given without an argument then the current escape character setting
|
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
|
.IP
|
||||||
.BI "off"
|
.BI "off"
|
||||||
to disable the escape character.
|
to disable the escape character.
|
||||||
.TP 14
|
.TP 13
|
||||||
.BI "Finger [<username>][@<hostname>]"
|
.BI "Finger [<username>][@<hostname>]"
|
||||||
Retrieve information about users of a system. If the user
|
Retrieve information about users of a system. If the user
|
||||||
name is omitted, shows the users currently logged on the
|
name is omitted, shows the users currently logged on the
|
||||||
host. If the hostname is omitted, defaults to the local host.
|
host. If the hostname is omitted, defaults to the local host.
|
||||||
.TP 14
|
.TP 13
|
||||||
.BI "Help [<command>]"
|
.BI "Help [<command>]"
|
||||||
Give help for the specified command or this text if no
|
Give help for the specified command or this text if no
|
||||||
command is specified. Commands can not be abbreviated.
|
command is specified. Commands can not be abbreviated.
|
||||||
Use the "?" command to retrieve a list of available commands.
|
Use the "?" command to retrieve a list of available commands.
|
||||||
.TP 14
|
.TP 13
|
||||||
.BI "HOst <hostname> | <ip address>"
|
.BI "HOst <hostname> | <ip address>"
|
||||||
Give the Domain Name Service host name information about <hostname> or
|
Give the Domain Name Service host name information about <hostname> or
|
||||||
<ip address>.
|
<ip address>.
|
||||||
.TP 14
|
.TP 13
|
||||||
.BI Info
|
.BI Info
|
||||||
Display the version information and the contents of the
|
Display the version information and the contents of the
|
||||||
/usr/local/etc/ax25/uronode.info file, which should describe any aspects
|
/usr/local/etc/ax25/uronode.info file, which should describe any aspects
|
||||||
of your system that you would like to brag about.
|
of your system that you would like to brag about.
|
||||||
.TP 14
|
.TP 13
|
||||||
.BI INTerfaces
|
.BI INTerfaces
|
||||||
Display the node's interface schema, most folks often call these "ports".
|
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>]"
|
.BI "Links [d | n | v | <call>]"
|
||||||
Shows the AX25 link table of the local node. The destinations
|
Shows the AX25 link table of the local node. The destinations
|
||||||
on this list can be reached using the Connect command without
|
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
|
You can also specify a destination callsign to get the verbose
|
||||||
information for a single destination.
|
information for a single destination.
|
||||||
.TP 14
|
.TP 13
|
||||||
.BI "Mheard [<portname>]"
|
|
||||||
Give a list of heard AX.25 stations on the specified port.
|
|
||||||
.TP 14
|
|
||||||
.BI "Nodes [* | <node>]"
|
.BI "Nodes [* | <node>]"
|
||||||
Show the NET/ROM node table of the local host. The nodes on this
|
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
|
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.
|
a node callsign to get the verbose information for a single node.
|
||||||
In that case a "which" field that tells what route the kernel
|
In that case a "which" field that tells what route the kernel
|
||||||
will use to reach the node is also shown.
|
will use to reach the node is also shown.
|
||||||
.TP 14
|
.TP 13
|
||||||
.BI "Ping <host> [<size>]"
|
.BI "Ping <host> [<size>]"
|
||||||
Check if a host can be reached trough the network by sending
|
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
|
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
|
.sp
|
||||||
If an optional length is specified the data portion of the
|
If an optional length is specified the data portion of the
|
||||||
packet is filled with length number of bytes up to 128.
|
packet is filled with length number of bytes up to 128.
|
||||||
.TP 14
|
.TP 13
|
||||||
.BI Routes
|
.BI Routes
|
||||||
Shows the NET/ROM route table of the local host (eg. the nodes
|
Shows the NET/ROM route table of the local host (eg. the nodes
|
||||||
which the local node directly talks with). These nodes are used
|
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
|
.IP
|
||||||
.BI "QSO"
|
.BI "QSO"
|
||||||
Number of NET/ROM session enties.
|
Number of NET/ROM session enties.
|
||||||
.TP 14
|
.TP 13
|
||||||
.BI "Telnet <host> [<port>] [<string>] [d|s]"
|
.BI "Telnet <host> [<port>] [<string>] [d|s]"
|
||||||
Initiate a telnet session to a remote host using TCP/IP.
|
Initiate a telnet session to a remote host using TCP/IP.
|
||||||
By default, the telnet command connects to the TCP port 23
|
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
|
If a single `d' is entered as the last parameter, you will
|
||||||
be disconnected from this node too. Default behaviour (neither
|
be disconnected from this node too. Default behaviour (neither
|
||||||
`s' nor `d' entered) depends on sysop configuration.
|
`s' nor `d' entered) depends on sysop configuration.
|
||||||
.TP 14
|
.TP 13
|
||||||
.BI "MSG <user> <message>"
|
.BI "MSG <user> <message>"
|
||||||
Send a message to another user of the node. The user
|
Send a message to another user of the node. The user
|
||||||
in question must be in idle state (ie. not connected/connecting
|
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
|
If the user has an SSID other than zero, the SSID must be
|
||||||
specified. If multiple users are logged in with the same
|
specified. If multiple users are logged in with the same
|
||||||
callsign/SSID pair, those who are in idle state, get the message.
|
callsign/SSID pair, those who are in idle state, get the message.
|
||||||
.TP 14
|
.TP 13
|
||||||
.BI Users
|
.BI Users
|
||||||
Show a list of users currently connected to the local node,
|
Show a list of users currently connected to the local node,
|
||||||
where the users are coming from, and what are they doing at the
|
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_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_log(LOGLVL_LOGIN, "Login denied for %s @ %s", User.call, User.ul_name);
|
||||||
node_logout("Login denied");
|
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,"*** 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: ");
|
axio_printf(NodeIo,"\nPassword: ");
|
||||||
if ((User.ul_type == AF_INET) || (User.ul_type == AF_INET6)) {
|
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 VERSION "URONode v2.6"
|
||||||
#define COMPILING "March 31, 2016"
|
#define COMPILING "November 25, 2016"
|
||||||
|
|
||||||
#define STATE_IDLE 0
|
#define STATE_IDLE 0
|
||||||
#define STATE_TRYING 1
|
#define STATE_TRYING 1
|
||||||
|
@ -168,5 +168,6 @@ extern void newmail(void);
|
||||||
extern void mailcheck(void);
|
extern void mailcheck(void);
|
||||||
extern void lastlog(void);
|
extern void lastlog(void);
|
||||||
|
|
||||||
/* in mheard.c */
|
/* in jheard.c */
|
||||||
extern int do_mheard(int argc, char **argv);
|
extern int do_jheard(int argc, char **argv);
|
||||||
|
extern int do_jlong(int argc, char **argv);
|
||||||
|
|
2
system.c
2
system.c
|
@ -429,7 +429,7 @@ int examine_user(void)
|
||||||
do {
|
do {
|
||||||
if (strcmp(cp, "shell")==0) {
|
if (strcmp(cp, "shell")==0) {
|
||||||
shell=1;
|
shell=1;
|
||||||
add_internal_cmd(&Nodecmds, "SYSop", 1, do_system);
|
// add_internal_cmd(&Nodecmds, "SYSop", 1, do_system);
|
||||||
}
|
}
|
||||||
cp=strtok(NULL, " ,;-/\t\n\r");
|
cp=strtok(NULL, " ,;-/\t\n\r");
|
||||||
} while(cp!=NULL);
|
} while(cp!=NULL);
|
||||||
|
|
Loading…
Reference in New Issue