You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
bforce/source/bfutil/nlookup.c

184 lines
3.9 KiB
C

/*
* binkleyforce -- unix FTN mailer project
*
* Copyright (c) 1998-2000 Alexander Belkin, 2:5020/1398.11
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* $Id$
*/
#include "includes.h"
#include "confread.h"
#include "logger.h"
#include "util.h"
#include "nodelist.h"
#define DEF_DOMAIN "fidonet.org"
/*
* Our fake expressions checker. Allways return FALSE (?)
*/
bool eventexpr(s_expr *expr)
{
return FALSE;
}
static void usage(void)
{
printf_usage("nodelist lookup utility",
"usage: nlookup [-rmh] <address>\n"
"\n"
"options:\n"
" -r show nodelist string\n"
" -m show email address\n"
" -h show this help message\n"
"\n"
);
}
void print_nodemail(const s_node *node)
{
char abuf[BF_MAXADDRSTR+1];
if( node->sysop && *node->sysop && strcmp(node->sysop, "<none>") )
{
char username[BNI_MAXSYSOP+1];
strnxcpy(username, node->sysop, sizeof(node->sysop));
string_replchar(username, ' ', '_');
printf("%s@%s.fidonet.org\n", username,
ftn_addrstr_inet(abuf, node->addr));
}
fflush(stdout);
}
void print_nodeinfo(const s_node *node)
{
char abuf[BF_MAXADDRSTR+1];
char status[6]; /* Maximum size for node keyword, see
* nodelist.c for details */
printf("Address : %s\n", ftn_addrstr(abuf, node->addr));
printf("System : %s\n", node->name);
printf("Phone : %s\n", node->phone);
printf("Sysop : %s\n", node->sysop);
printf("Location : %s\n", node->location);
printf("Speed : %lu\n", node->speed);
printf("Flags : %s\n", node->flags);
if( node->worktime.num )
{
char timebuf[80];
time_t unixtime = time(NULL);
struct tm *now = localtime(&unixtime);
timevec_string(timebuf, &node->worktime, sizeof(timebuf));
printf("Work time : %s (%s)\n", timebuf,
timevec_check(&node->worktime, now) ? "false" : "true");
}
if( node->sysop && *node->sysop && strcmp(node->sysop, "<none>") )
{
char username[BNI_MAXSYSOP+1];
strnxcpy(username, node->sysop, sizeof(node->sysop));
string_replchar(username, ' ', '_');
printf("E-mail : %s@%s\n", username,
ftn_addrstr_inet(abuf, node->addr));
}
switch( node->keyword ) {
case KEYWORD_HOLD :
strcpy(status,"Hold");
break;
case KEYWORD_DOWN :
strcpy(status,"Down");
break;
case KEYWORD_HUB :
strcpy(status,"Hub");
break;
case KEYWORD_HOST :
strcpy(status,"Host");
break;
case KEYWORD_PVT :
strcpy(status,"Pvt");
break;
case KEYWORD_BOSS :
strcpy(status,"Boss");
break;
case KEYWORD_POINT :
strcpy(status,"Point");
break;
default:
strcpy(status,"Node");
break;
}
printf("Type : %s\n",status);
fflush(stdout);
}
int main(int argc, char *argv[])
{
s_node node;
s_faddr addr;
char ch;
bool rawstring = FALSE;
bool emailaddr = FALSE;
/* Initialise random number generation */
(void)srand((unsigned)time(0));
/* Initialise current locale */
(void)setlocale(LC_ALL, "");
while( (ch=getopt(argc, argv, "hrm")) != (char)-1 )
{
switch( ch ) {
case 'h':
usage();
exit(BFERR_NOERROR);
case 'r':
rawstring = TRUE;
break;
case 'm':
emailaddr = TRUE;
break;
default:
usage();
exit(BFERR_FATALERROR);
}
}
if( optind >= argc || ftn_addrparse(&addr, argv[optind], FALSE) )
{
usage();
exit(BFERR_FATALERROR);
}
if( conf_readconf(conf_getconfname(), 0, false) )
exit(BFERR_FATALERROR);
if( rawstring )
{
char buf[512];
if( nodelist_lookup_string(buf, sizeof(buf), addr) == 0 )
printf("%s\n", buf);
}
else if( nodelist_lookup(&node, addr) == 0 )
{
if( emailaddr )
print_nodemail(&node);
else
print_nodeinfo(&node);
}
deinit_conf();
exit(0);
}