New upstream version 2.8

This commit is contained in:
hibby 2017-11-24 18:00:45 +00:00
parent fa52d5a185
commit e5129d408c
9 changed files with 81 additions and 20 deletions

View File

@ -298,6 +298,41 @@ Thanks to Han for reporting this.
While working on new node W1WCG, I noticed some code clean up in node.c While working on new node W1WCG, I noticed some code clean up in node.c
There's still a lot more to do especially with ANSI. There's still a lot more to do especially with ANSI.
15/06/2017 - v2.8
In gateway.c I cleaned up the do_ping routing slightly. I was going to add
a default timer but instead decided to let the user hit enter for their own
"timer" of sorts. Users are also now instructed on the node to hit enter
in order to abort a ping.
Cleaned up do_nodes so now if there's a slime trail node, rather than prefix
it with a colon ":", now it will display ##TEMP: instead. This was sorta
bugging me on just how to handle these. While I was at it, I made a
modification to gateway.c so if a user tried to "C ##TEMP" it instructs the
end user to use the callsign-ssid. I can't think of any other node that does
this.
Thanks to Dave Hibbard (at Debian) for pointing out a dropped "t" in the word
"software" in flexd.c when the -v switch is used.
Cleaned up some prompt routines including the ipv4/ipv6 login sequences.
Before (especially with ipv6) if a callsign had no permissions to login via
the internet they were never informed how to gain access - they were simply
denied. I found this to somewhat make the node a bit unfriendly. Fixed.
With all the chatter on the 44-net list about IPv6, I've decided to get my
block active for further testing. In doing so, I noticed that if a user
telnetted in via IPv6 and made a NetRom connect out, the node failed to
inform them that they were connected... fixed.
As of this writing there's no outboud telnet or dns functions for IPv6
but that's not to say it's not in the works. Personally, I don't see a
true need for IPv6 outbound for amateur radio as the amprnet is going
quite strong however that's not to say things may not change either. If
anything, IPv6 through an HE.net tunnel works as slick as the amprnet
does with the exception of how it handles dynamic clients. Other than
that, it does appear to tunnel through your ISP filters as amprnet
does which is a plus.
----------- 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

View File

@ -99,10 +99,10 @@ void node_prompt(const char *fmt, ...)
axio_printf(NodeIo,"\r\e[01;35m-=>\e[0m \b"); axio_printf(NodeIo,"\r\e[01;35m-=>\e[0m \b");
} }
if ((User.ul_type ==AF_INET6) && (check_perms(PERM_ANSI, 0L) == -1)) { if ((User.ul_type ==AF_INET6) && (check_perms(PERM_ANSI, 0L) == -1)) {
axio_printf(NodeIo, "\nSystemD - %s@%s: ",User.call, HostName); axio_printf(NodeIo, "\n%s@%s-IPv6: ",User.call, HostName);
} }
if ((User.ul_type ==AF_INET6) && (check_perms(PERM_ANSI, 0L) != -1)) { if ((User.ul_type ==AF_INET6) && (check_perms(PERM_ANSI, 0L) != -1)) {
axio_printf(NodeIo, "\n\e[01;31mSystemD \e[0m- \e[01;34m%s@\e[0m%s: ",User.call, HostName); axio_printf(NodeIo, "\n\e[01;34m%s\e[0m@\e[01;31m%s\e[0m-\e[01;33mIPv6\e[0m: ",User.call, HostName);
} }
/* axio_flush(NodeIo); */ /* axio_flush(NodeIo); */
} }
@ -118,7 +118,16 @@ void node_logout(char *reason)
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");
} }
} }
if (User.ul_type == AF_INET6) {
if (check_perms(PERM_ANSI, 0L) != -1) {
axio_printf(NodeIo, "\e[03;36m");
}
axio_printf(NodeIo, "Thank you %s, for connecting to the \n%s URONode IPv6 packet shell.\n", User.call, HostName);
if (check_perms(PERM_ANSI, 0L) != -1) {
axio_printf(NodeIo, "\e[0;m");
}
}
if (User.ul_type == AF_NETROM) { if (User.ul_type == AF_NETROM) {
axio_printf(NodeIo,""); axio_printf(NodeIo,"");
} }
@ -662,6 +671,8 @@ int do_nodes(int argc, char **argv)
} }
if ((User.ul_type == AF_NETROM) && (i % 4) != 0) { if ((User.ul_type == AF_NETROM) && (i % 4) != 0) {
node_msg(""); node_msg("");
} else
if ((User.ul_type != AF_NETROM) && (i % 4) == 0) {
} }
free_proc_nr_nodes(list); free_proc_nr_nodes(list);
return 0; return 0;
@ -981,7 +992,7 @@ int nuser_list(int argc, char **argv)
break; break;
case AF_INET6: case AF_INET6:
sprintf(buf, "\nTelnet6 (%.9s @ SystemD)", u.call); sprintf(buf, "\nTelnet6 (%.9s @ IPv6)", u.call);
break; break;
case AF_UNSPEC: case AF_UNSPEC:

View File

@ -144,7 +144,7 @@ static int pipe_extcmd(struct cmd *cmdp, char **argv)
if (check_perms(PERM_ANSI, 0L) != -1) { if (check_perms(PERM_ANSI, 0L) != -1) {
axio_printf(NodeIo, "\e[01;31m"); axio_printf(NodeIo, "\e[01;31m");
} }
axio_printf(NodeIo, "Returning you to the shell... "); axio_printf(NodeIo, "Returning you to the shell...");
} else if (User.ul_type == AF_AX25) { } else if (User.ul_type == AF_AX25) {
if (check_perms(PERM_ANSI, 0L) != -1) { if (check_perms(PERM_ANSI, 0L) != -1) {
axio_printf(NodeIo,"\e[01;31m"); axio_printf(NodeIo,"\e[01;31m");

View File

@ -413,7 +413,7 @@ int main(int argc, char *argv[])
printf("FlexD version %s.\n\r", VERSION); printf("FlexD version %s.\n\r", VERSION);
printf("Copywrite (c) 2000-2003 by Roy PE1RJA and Stefano IZ5AWZ\n\r"); 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("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("FlexD 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("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("by Free Software Foundation; either version 2 of the License, or\n\r");
printf("(at your option) any later version.\n\r"); printf("(at your option) any later version.\n\r");

View File

@ -271,6 +271,7 @@ static ax25io *connect_to(char **addr, int family, int escape, int compr)
/* else node_msg("Trying %s on %s... Type <RETURN> to abort", User.dl_name, User.dl_port); */ /* else node_msg("Trying %s on %s... Type <RETURN> to abort", User.dl_name, User.dl_port); */
break; break;
#endif #endif
case AF_INET6:
case AF_INET: case AF_INET:
if ((fd = socket(AF_INET, SOCK_STREAM, 0)) < 0) { if ((fd = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
node_perror("connect_to: socket", errno); node_perror("connect_to: socket", errno);
@ -493,7 +494,7 @@ static ax25io *connect_to(char **addr, int family, int escape, int compr)
if (check_perms(PERM_ANSI, 0L) != -1) { if (check_perms(PERM_ANSI, 0L) != -1) {
axio_printf(NodeIo,"\e[01;32m"); axio_printf(NodeIo,"\e[01;32m");
} }
if (User.ul_type == AF_INET) { if ((User.ul_type == AF_INET) || (User.ul_type == AF_INET6)) {
axio_printf(NodeIo,"Virtual circuit established to %s\n", User.dl_name); axio_printf(NodeIo,"Virtual circuit established to %s\n", User.dl_name);
} }
if (User.ul_type == AF_NETROM) { if (User.ul_type == AF_NETROM) {
@ -701,7 +702,12 @@ int do_connect(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);
} }
axio_printf(NodeIo,"%s not found, please retry your entry.", argv[1]);
if (strcmp(argv[1], "##TEMP") == 0) {
axio_printf(NodeIo,"%s is not connectable. Use the callsign-ssid.", argv[1]);
} else {
axio_printf(NodeIo,"%s not found. Please retry your entry.", argv[1]);
}
family = AF_UNSPEC; family = AF_UNSPEC;
// free_flex_dst(flx); // free_flex_dst(flx);
// free_ax_routes(ax); // free_ax_routes(ax);
@ -789,7 +795,7 @@ int do_connect(int argc, char **argv)
if (check_perms(PERM_ANSI, 0L) != -1) { if (check_perms(PERM_ANSI, 0L) != -1) {
axio_printf(NodeIo,"\e[01;31m"); axio_printf(NodeIo,"\e[01;31m");
} }
axio_printf(NodeIo,"\nReturning you to the shell... "); axio_printf(NodeIo,"Returning you to the shell...");
} else } else
if ((User.ul_type == AF_AX25) && (!stay)) { if ((User.ul_type == AF_AX25) && (!stay)) {
axio_flush(NodeIo); axio_flush(NodeIo);
@ -1033,6 +1039,12 @@ int do_ping(int argc, char **argv)
node_perror("do_ping: socket", errno); node_perror("do_ping: socket", errno);
return 0; return 0;
} }
if (check_perms(PERM_ANSI, 0L) != -1) {
axio_printf(NodeIo,"\e[01;32mPing engaged, hit <ENTER> to abort.\n\e[0m");
}
if (check_perms(PERM_ANSI, 0L) == -1) {
axio_printf(NodeIo, "Ping engaged, hit <ENTER> to abort.\n");
}
if (check_perms(PERM_ANSI, 0L) != -1) { if (check_perms(PERM_ANSI, 0L) != -1) {
axio_printf(NodeIo,"\e[01;35mICMP Echo request sent to: \e[0m"); axio_printf(NodeIo,"\e[01;35mICMP Echo request sent to: \e[0m");
} }

8
node.c
View File

@ -9,7 +9,8 @@
#include <sys/socket.h> #include <sys/socket.h>
#include <netinet/in.h> #include <netinet/in.h>
#include <arpa/inet.h> #include <arpa/inet.h>
//IPv6
#include <netdb.h>
#include <netax25/ax25.h> #include <netax25/ax25.h>
#include <netrose/rose.h> #include <netrose/rose.h>
#include <netax25/axlib.h> #include <netax25/axlib.h>
@ -194,8 +195,8 @@ int main(int argc, char *argv[])
/* axio_flush(NodeIo); */ /* axio_flush(NodeIo); */
if(NodeIo!=NULL) if(NodeIo!=NULL)
axio_flush(NodeIo); axio_flush(NodeIo);
if (system("telnet 127.0.0.1 3694") < 0 ) { /* VE3TOK - 18Nov2014, return value */ if (system("telnet localhost 3694") < 0 ) { /* VE3TOK - 18Nov2014, return value */
syslog(LOG_DEBUG, "Can't \"execute telnet 127.0.0.1 3694\""); syslog(LOG_DEBUG, "Can't \"execute telnet ::1 or 127.0.0.1 3694\"");
return 1; return 1;
} }
node_log(LOGLVL_ERROR,"Closing console telnet session.", -1); node_log(LOGLVL_ERROR,"Closing console telnet session.", -1);
@ -256,6 +257,7 @@ int main(int argc, char *argv[])
} }
if ((pw = read_perms(&User, saddr.sin.sin_addr.s_addr)) == NULL) { if ((pw = read_perms(&User, saddr.sin.sin_addr.s_addr)) == NULL) {
node_msg("Sorry, I'm not allowed to talk to you."); node_msg("Sorry, I'm not allowed to talk to you.");
axio_printf(NodeIo,"*** Password required! If you don't have a password please email\n%s for a password you wish to use.\n", Email);
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");
} }

4
node.h
View File

@ -1,5 +1,5 @@
#define VERSION "URONode v2.7" #define VERSION "URONode v2.8"
#define COMPILING "June 1, 2017" #define COMPILING "November 23, 2017"
#define STATE_IDLE 0 #define STATE_IDLE 0
#define STATE_TRYING 1 #define STATE_TRYING 1

View File

@ -206,9 +206,9 @@ int do_dest(int argc, char **argv)
} }
if ((i % 4) != 0) axio_printf(NodeIo,""); if ((i % 4) != 0) axio_printf(NodeIo,"");
free_flex_dst(fdst); free_flex_dst(fdst);
if (User.ul_type == AF_NETROM) { // if (User.ul_type == AF_NETROM) {
node_msg(""); // node_msg("");
} // }
return 0; return 0;
} }
if ((flgt=read_flex_gt()) == NULL) { if ((flgt=read_flex_gt()) == NULL) {

7
util.c
View File

@ -79,9 +79,10 @@ char *print_node(const char *alias, const char *call)
static char node[17]; static char node[17];
sprintf(node, "%s%s%s", sprintf(node, "%s%s%s",
!strcmp(alias, "*") ? "" : alias, !strcmp(alias, "*") ? "##TEMP:" : alias,
!strcmp(call, "*") ? "" : ":", call); !strcmp(alias, "*") ? "" : ":",
// !strcmp(call, "*") ? "" : call);
call);
return node; return node;
} }