I added a new permissions flag, CNV_NAME_REQD = 16777216 = 0x1000000, which when set for a user in ftpusers, will require that user to invoke /name whenever they use ax.25 mode to connect to the Jnos converse server. This setting also has the effect of allowing a flexnet node connecting via axip or ax.25 to join as a converse node. Thanks to Philippe F4CEP for concept and testing. The following is a context-diff for patching recent Jnos versions through 1.11f. ========================== *** mailbox.h~ Fri Dec 24 11:06:53 1999 --- mailbox.h Tue Apr 24 00:14:40 2001 *************** *** 155,160 **** --- 155,161 ---- #define XG_ALLOWED 2097152L /* 0x200000 Allow XG (dynip route) cmd */ #define T_NO_AMPRNET 4194304L /* 0x400000 Disallow Telnet to 44/8 */ #define T_AMPRNET_ONLY 8388608L /* 0x800000 Allow Telnet to only 44/8 */ + #define CNV_NAME_REQD 16777216L /* 0x1000000 AX.25 convers users must use /NAME */ int32 tel_opts[2]; /* storage for telnet options */ int32 opt_defined[2]; /* option set/reset flag */ *** convers.c.orig Fri Apr 3 06:12:14 1998 --- convers.c Mon May 7 19:10:56 2001 *************** *** 314,320 **** static void channel_command __ARGS((struct convection *cp)); static char *pvia __ARGS((void *p)); static char *skipfields __ARGS((int fnum, char *p)); ! static char *trimfield __ARGS((char *str, int maxlen)); static int link_done __ARGS((struct linklist *head, struct convection *p)); void check_buffer_overload __ARGS((void)); #ifdef CNV_TOPICS --- 314,320 ---- static void channel_command __ARGS((struct convection *cp)); static char *pvia __ARGS((void *p)); static char *skipfields __ARGS((int fnum, char *p)); ! static char *trimfield __ARGS((char *str, unsigned int maxlen)); static int link_done __ARGS((struct linklist *head, struct convection *p)); void check_buffer_overload __ARGS((void)); #ifdef CNV_TOPICS *************** *** 1112,1118 **** /* Given str->field, truncate it to maxlen, and return ptr to next field */ static char * ! trimfield (char *str, int maxlen) { char *cp, *p; --- 1112,1118 ---- /* Given str->field, truncate it to maxlen, and return ptr to next field */ static char * ! trimfield (char *str, unsigned int maxlen) { char *cp, *p; *************** *** 2202,2208 **** int pwdignore; long privs; #ifdef CNV_CALLCHECK ! int i,digits; #endif #ifdef CNV_CHAN_NAMES char *xp; --- 2202,2208 ---- int pwdignore; long privs; #ifdef CNV_CALLCHECK ! unsigned int i,digits; #endif #ifdef CNV_CHAN_NAMES char *xp; *************** *** 2578,2585 **** if(Filterlinks) { /* Check for this ip address */ getpeername(s,(char *)&fsocket,&i); for(fl=Filterlinks;fl;fl=fl->next) ! if(fl->addr == fsocket.sin_addr.s_addr) return FilterMode; /* Not found ! */ return !FilterMode; --- 2578,2589 ---- if(Filterlinks) { /* Check for this ip address */ getpeername(s,(char *)&fsocket,&i); + #ifdef AX25 + if (fsocket.sin_family == AF_AX25) + return 1; /* just check IP hosts */ + #endif for(fl=Filterlinks;fl;fl=fl->next) ! if(fl->addr == (signed)fsocket.sin_addr.s_addr) return FilterMode; /* Not found ! */ return !FilterMode; *************** *** 3093,3099 **** if((chrp=strchr(cp->name,'-')) != NULL) *chrp = '\0'; strlwr(cp->name); - strcpy(cp->host,Chostname); /* now check with ftpusers file - WG7J/N5KNX */ pwdignore = 1; --- 3097,3102 ---- *************** *** 3105,3111 **** --- 3108,3119 ---- free_closed_connections(); return; } + else if(privs & CNV_NAME_REQD) { /* true if we insist on /name */ + *(cp->name) = '\0'; /* no name yet */ + goto ask_for_name; + } + strcpy(cp->host,Chostname); cp->type = CT_USER; cp->xmitted += usprintf(s, "Conference @ %s Type /HELP for help.\n",Chostname); *************** *** 3119,3124 **** --- 3127,3133 ---- ConvUsers++; } else #endif /* AX25 */ + ask_for_name: usputscnt(cp->fd,"\nPlease login with '/n [channel #]'\n\n"); #ifdef LINK }