Plan 9 from Bell Labs’s /usr/web/sources/contrib/nemo/octopus/port/lib/netutil.b

Copyright © 2021 Plan 9 Foundation.
Distributed under the MIT License.
Download the Plan 9 distribution.


implement Netutil;

include "sys.m";
	sys: Sys;
	FD: import Sys;
	stat, sprint, werrstr: import sys;
include "security.m";
	auth: Auth;
include "keyring.m";
	kring: Keyring;
include "env.m";
	env: Env;
	getenv: import env;
include "netutil.m";

netmkaddr(addr, net, svc: string): string
{
	if (sys == nil)
		sys = load Sys Sys->PATH;

	if(net == nil)
		net = "net";
	(n, nil) := sys->tokenize(addr, "!");
	if(n <= 1){
		if(svc== nil)
			return sys->sprint("%s!%s", net, addr);
		return sys->sprint("%s!%s!%s", net, addr, svc);
	}
	if(svc == nil || n > 2)
		return addr;
	return sys->sprint("%s!%s", addr, svc);
}

authfd(fd: ref FD, role: int, alg, kfile, addr: string): (ref FD, string)
{
	if (sys == nil)
		sys = load Sys Sys->PATH;
	if (auth == nil){
		auth = load Auth Auth->PATH;
		auth = load Auth Auth->PATH;
		kring = load Keyring Keyring->PATH;
		env = load Env Env->PATH;
		if (auth == nil || kring == nil || env == nil)
			return(nil, nil);
	}
	home := getenv("home");
	if (home == nil)
		return (nil, nil);
	kdir := home + "/keyring";
	if (addr == nil)
		addr = "default";
	if (kfile == nil){
		kfile = kdir + "/" + addr;
		(e, nil) := stat(kfile);
		if (e < 0)
			kfile = kdir + "/" + "default";
	} else if (kfile[0] != '/')
			kfile = kdir + "/" + kfile;
	ai := kring->readauthinfo(kfile);
	if (ai == nil){
		werrstr(sprint("%s: %r", kfile));
		return (nil, nil);
	}
	e := auth->init();
	if (e != nil){
		werrstr(e);
		return (nil, nil);
	}
	if (alg == nil)
		alg = "rc4";
	if (role == Client)
		(fd, e) = auth->client(alg, ai, fd);
	else {
		algs := list of {alg, "rc4_40", "rc4_128", "rc4_256", 
				"des_56_cbc", "des_56_ecb", "ideacbc",
				"ideaecb", "md4", "md5", "sha" };
		(fd, e) = auth->server(algs, ai, fd, 0);
	}
	if (fd == nil)
		werrstr("auth failed: " + e);
	return(fd, e);
}

Bell Labs OSI certified Powered by Plan 9

(Return to Plan 9 Home Page)

Copyright © 2021 Plan 9 Foundation. All Rights Reserved.
Comments to webmaster@9p.io.