Exemplo n.º 1
0
int
authdial(char *netroot, char *dom)
{
	char *p;
	int rv;

	if(dom == nil)
		/* look for one relative to my machine */
		return dial(netmkaddr("$auth", netroot, "ticket"), 0, 0, 0);

	/* look up an auth server in an authentication domain */
	p = csgetvalue(netroot, "authdom", dom, "auth", nil);

	/* if that didn't work, just try the IP domain */
	if(p == nil)
		p = csgetvalue(netroot, "dom", dom, "auth", nil);
	/*
	 * if that didn't work, try p9auth.$dom.  this is very helpful if
	 * you can't edit /lib/ndb.
	 */
	if(p == nil)
		p = smprint("p9auth.%s", dom);
	if(p == nil){			/* should no longer ever happen */
		werrstr("no auth server found for %s", dom);
		return -1;
	}
	rv = dial(netmkaddr(p, netroot, "ticket"), 0, 0, 0);
	free(p);
	return rv;
}
Exemplo n.º 2
0
Arquivo: main.c Projeto: aahud/harvey
/*
 *  compile WORD = WORD, becomes a single node with a subop
 */
void
compile_cmp(char *proto, Filter *f, Field *fld)
{
	uint8_t x[IPaddrlen];
	char *v;

	if(f->op != '=')
		sysfatal("internal error: compile_cmp %s: not a cmp", proto);

	for(; fld->name != nil; fld++){
		if(strcmp(f->l->s, fld->name) == 0){
			f->op = WORD;
			f->subop = fld->subop;
			switch(fld->ftype){
			case Fnum:
				f->ulv = atoi(f->r->s);
				break;
			case Fether:
				v = csgetvalue(nil, "sys", (char*)f->r->s,
					"ether", 0);
				if(v){
					parseether(f->a, v);
					free(v);
				} else
					parseether(f->a, f->r->s);
				break;
			case Fv4ip:
				v = csgetvalue(nil, "sys", (char*)f->r->s,
					"ip", 0);
				if(v){
					f->ulv = parseip(x, v);
					free(v);
				}else
					f->ulv = parseip(x, f->r->s);
				break;
			case Fv6ip:
				v = csgetvalue(nil, "sys", (char*)f->r->s,
					"ipv6", 0);
				if(v){
					parseip(f->a, v);
					free(v);
				}else
					parseip(f->a, f->r->s);
				break;
			case Fba:
				parseba(f->a, f->r->s);
				break;
			default:
				sysfatal("internal error: compile_cmp %s: %d",
					proto, fld->ftype);
			}
			f->l = f->r = nil;
			return;
		}
	}
	sysfatal("unknown %s field in: %s = %s", proto, f->l->s, f->r->s);
}
Exemplo n.º 3
0
static char*
domainname(void)
{
	static char sysname[Maxpath];
	static char *domain;
	int n;

	if(domain)
		return domain;
	if(*sysname)
		return sysname;

	domain = csgetvalue(0, "sys", sysname, "dom", nil);
	if(domain)
		return domain;

	n = readfile("/dev/sysname", sysname, sizeof(sysname)-1);
	if(n < 0){
		strcpy(sysname, "kremvax");
		return sysname;
	}
	sysname[n] = 0;

	return sysname;
}
Exemplo n.º 4
0
/* side effect: sets network & target */
static int
isv4name(char *name)
{
	int r = 1;
	char *root, *ip, *pr;
	DS ds;

	_dial_string_parse(name, &ds);

	/* cope with leading /net.alt/icmp! and the like */
	root = NULL;
	if (ds.netdir != NULL) {
		pr = strrchr(ds.netdir, '/');
		if (pr == NULL)
			pr = ds.netdir;
		else {
			*pr++ = '\0';
			root = ds.netdir;
			network = strdup(root);
		}
		if (strcmp(pr, v4pr.net) == 0)
			return 1;
		if (strcmp(pr, v6pr.net) == 0)
			return 0;
	}

	/* if it's a literal, it's obvious from syntax which proto it is */
	free(target);
	target = strdup(ds.rem);
	if (isdottedquad(ds.rem))
		return 1;
	else if (isv6lit(ds.rem))
		return 0;
	/*we don't have cs.*/
	/* map name to ip and look at its syntax */
	ip = csgetvalue(root, "sys", ds.rem, "ip", NULL);
	if (ip == NULL)
		ip = csgetvalue(root, "dom", ds.rem, "ip", NULL);
	if (ip == NULL)
		ip = csgetvalue(root, "sys", ds.rem, "ipv6", NULL);
	if (ip == NULL)
		ip = csgetvalue(root, "dom", ds.rem, "ipv6", NULL);
	if (ip != NULL)
		r = isv4name(ip);
	free(ip);
	return r;
}
Exemplo n.º 5
0
char*
getport(char *net, char *p)
{
	static char port[10];

	strncpy(port, p, sizeof(port)-1);
	port[sizeof(port)-1] = 0;
	if(notrans || (p = csgetvalue(netroot, "port", p, net, nil)) == nil)
		return port;
	strncpy(port, p, sizeof(port)-1);
	port[sizeof(port)-1] = 0;
	free(p);
	return port;
}
Exemplo n.º 6
0
Ndbtuple*
csgetval(char *netroot, char *attr, char *val, char *rattr, char *buf)
{
	Ndbtuple *t;
	char *p;

	p = csgetvalue(netroot, attr, val, rattr, &t);
	if(p == nil){
		if(buf != nil)
			*buf = 0;
	} else {
		if(buf != nil){
			strncpy(buf, p, Ndbvlen-1);
			buf[Ndbvlen-1] = 0;
		}
		free(p);
	}
	return t;
}
Exemplo n.º 7
0
void
pip(char *net, Dir *db)
{
	int n, fd;
	char buf[128], *p;
	char *dname;

	if(strcmp(db->name, "clone") == 0)
		return;
	if(strcmp(db->name, "stats") == 0)
		return;

	snprint(buf, sizeof buf, "%s/%s/%s/status", netroot, net, db->name);
	fd = open(buf, OREAD);
	if(fd < 0)
		return;
	n = read(fd, buf, sizeof(buf));
	close(fd);
	if(n < 0)
		return;
	buf[n] = 0;

	p = strchr(buf, ' ');
	if(p != 0)
		*p = 0;
	p = strrchr(buf, '\n');
	if(p != 0)
		*p = 0;
	Bprint(&out, "%-4s %-4s %-10s %-12s ", net, db->name, db->uid, buf);

	snprint(buf, sizeof buf, "%s/%s/%s/local", netroot, net, db->name);
	fd = open(buf, OREAD);
	if(fd < 0) {
		Bprint(&out, "\n");
		return;
	}
	n = read(fd, buf, sizeof(buf));
	close(fd);
	if(n < 0) {
		Bprint(&out, "\n");
		return;
	}
	buf[n-1] = 0;
	p = strchr(buf, '!');
	if(p == 0) {
		Bprint(&out, "\n");
		return;
	}
	*p = '\0';
	Bprint(&out, "%-10s ", getport(net, p+1));

	snprint(buf, sizeof buf, "%s/%s/%s/remote", netroot, net, db->name);
	fd = open(buf, OREAD);
	if(fd < 0) {
		print("\n");
		return;
	}
	n = read(fd, buf, sizeof(buf));
	close(fd);
	if(n < 0) {
		print("\n");
		return;
	}
	buf[n-1] = 0;
	p = strchr(buf, '!');
	if(p != nil)
		*p++ = '\0';

	if(notrans){
		Bprint(&out, "%-10s %s\n", getport(net, p), buf);
		return;
	}
	dname = csgetvalue(netroot, "ip", buf, "dom", nil);
	if(dname == nil) {
		Bprint(&out, "%-10s %s\n", getport(net, p), buf);
		return;
	}
	Bprint(&out, "%-10s %s\n", getport(net, p), dname);
	Bflush(&out);
	free(dname);
}