new
This commit is contained in:
parent
ad017cfbf5
commit
d957951b75
27 changed files with 2521 additions and 0 deletions
203
src/cmd/ndb/ndbmkdb.c
Normal file
203
src/cmd/ndb/ndbmkdb.c
Normal file
|
|
@ -0,0 +1,203 @@
|
|||
#include <u.h>
|
||||
#include <libc.h>
|
||||
#include <bio.h>
|
||||
#include <ctype.h>
|
||||
|
||||
Biobuf in;
|
||||
Biobuf out;
|
||||
|
||||
enum
|
||||
{
|
||||
Empty,
|
||||
Sys,
|
||||
Dk,
|
||||
Ip,
|
||||
Domain,
|
||||
};
|
||||
|
||||
int
|
||||
iscomment(char *name)
|
||||
{
|
||||
return *name == '#';
|
||||
}
|
||||
|
||||
/*
|
||||
* is this a fully specified datakit name?
|
||||
*/
|
||||
int
|
||||
isdk(char *name)
|
||||
{
|
||||
int slash;
|
||||
|
||||
slash = 0;
|
||||
for(; *name; name++){
|
||||
if(isalnum(*name))
|
||||
continue;
|
||||
if(*name == '/'){
|
||||
slash = 1;
|
||||
continue;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
return slash;
|
||||
}
|
||||
|
||||
/*
|
||||
* Is this an internet domain name?
|
||||
*/
|
||||
int
|
||||
isdomain(char *name)
|
||||
{
|
||||
int dot = 0;
|
||||
int alpha = 0;
|
||||
|
||||
for(; *name; name++){
|
||||
if(isalpha(*name) || *name == '-'){
|
||||
alpha = 1;
|
||||
continue;
|
||||
}
|
||||
if(*name == '.'){
|
||||
dot = 1;
|
||||
continue;
|
||||
}
|
||||
if(isdigit(*name))
|
||||
continue;
|
||||
return 0;
|
||||
}
|
||||
return dot && alpha;
|
||||
}
|
||||
|
||||
/*
|
||||
* is this an ip address?
|
||||
*/
|
||||
int
|
||||
isip(char *name)
|
||||
{
|
||||
int dot = 0;
|
||||
|
||||
for(; *name; name++){
|
||||
if(*name == '.'){
|
||||
dot = 1;
|
||||
continue;
|
||||
}
|
||||
if(isdigit(*name))
|
||||
continue;
|
||||
return 0;
|
||||
}
|
||||
return dot;
|
||||
}
|
||||
|
||||
char tup[64][64];
|
||||
int ttype[64];
|
||||
int ntup;
|
||||
|
||||
void
|
||||
tprint(void)
|
||||
{
|
||||
int i, tab;
|
||||
char *p;
|
||||
|
||||
tab = 0;
|
||||
for(i = 0; i < ntup; i++){
|
||||
if(ttype[i] == Sys){
|
||||
Bprint(&out, "sys = %s\n", tup[i]);
|
||||
tab = 1;
|
||||
ttype[i] = Empty;
|
||||
break;
|
||||
}
|
||||
}
|
||||
for(i = 0; i < ntup; i++){
|
||||
if(ttype[i] == Empty)
|
||||
continue;
|
||||
if(tab)
|
||||
Bprint(&out, "\t");
|
||||
tab = 1;
|
||||
|
||||
switch(ttype[i]){
|
||||
case Domain:
|
||||
Bprint(&out, "dom=%s\n", tup[i]);
|
||||
break;
|
||||
case Ip:
|
||||
Bprint(&out, "ip=%s\n", tup[i]);
|
||||
break;
|
||||
case Dk:
|
||||
p = strrchr(tup[i], '/');
|
||||
if(p){
|
||||
p++;
|
||||
if((*p == 'C' || *p == 'R')
|
||||
&& strncmp(tup[i], "nj/astro/", p-tup[i]) == 0)
|
||||
Bprint(&out, "flavor=console ");
|
||||
}
|
||||
Bprint(&out, "dk=%s\n", tup[i]);
|
||||
break;
|
||||
case Sys:
|
||||
Bprint(&out, "sys=%s\n", tup[i]);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#define NFIELDS 64
|
||||
|
||||
/*
|
||||
* make a database file from a merged uucp/inet database
|
||||
*/
|
||||
void
|
||||
main(void)
|
||||
{
|
||||
int n, i, j;
|
||||
char *l;
|
||||
char *fields[NFIELDS];
|
||||
int ftype[NFIELDS];
|
||||
int same, match;
|
||||
|
||||
Binit(&in, 0, OREAD);
|
||||
Binit(&out, 1, OWRITE);
|
||||
ntup = 0;
|
||||
while(l = Brdline(&in, '\n')){
|
||||
l[Blinelen(&in)-1] = 0;
|
||||
n = getfields(l, fields, NFIELDS, 1, " \t");
|
||||
same = 0;
|
||||
for(i = 0; i < n; i++){
|
||||
if(iscomment(fields[i])){
|
||||
n = i;
|
||||
break;
|
||||
}
|
||||
if(isdomain(fields[i])){
|
||||
ftype[i] = Domain;
|
||||
for(j = 0; j < ntup; j++)
|
||||
if(ttype[j] == Domain && strcmp(fields[i], tup[j]) == 0){
|
||||
same = 1;
|
||||
ftype[i] = Empty;
|
||||
break;
|
||||
}
|
||||
} else if(isip(fields[i]))
|
||||
ftype[i] = Ip;
|
||||
else if(isdk(fields[i]))
|
||||
ftype[i] = Dk;
|
||||
else
|
||||
ftype[i] = Sys;
|
||||
}
|
||||
if(!same && ntup){
|
||||
tprint();
|
||||
ntup = 0;
|
||||
}
|
||||
for(i = 0; i < n; i++){
|
||||
match = 0;
|
||||
for(j = 0; j < ntup; j++){
|
||||
if(ftype[i] == ttype[j] && strcmp(fields[i], tup[j]) == 0){
|
||||
match = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(!match){
|
||||
ttype[ntup] = ftype[i];
|
||||
strcpy(tup[ntup], fields[i]);
|
||||
ntup++;
|
||||
}
|
||||
}
|
||||
}
|
||||
if(ntup)
|
||||
tprint();
|
||||
exits(0);
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue