diff options
| author | Charles.Forsyth <devnull@localhost> | 2006-12-22 20:52:35 +0000 |
|---|---|---|
| committer | Charles.Forsyth <devnull@localhost> | 2006-12-22 20:52:35 +0000 |
| commit | 46439007cf417cbd9ac8049bb4122c890097a0fa (patch) | |
| tree | 6fdb25e5f3a2b6d5657eb23b35774b631d4d97e4 /man/2/security-auth | |
| parent | 37da2899f40661e3e9631e497da8dc59b971cbd0 (diff) | |
20060303-partial
Diffstat (limited to 'man/2/security-auth')
| -rw-r--r-- | man/2/security-auth | 157 |
1 files changed, 157 insertions, 0 deletions
diff --git a/man/2/security-auth b/man/2/security-auth new file mode 100644 index 00000000..045db64e --- /dev/null +++ b/man/2/security-auth @@ -0,0 +1,157 @@ +.TH SECURITY-AUTH 2 +.SH NAME +Auth: init, client, server \- authenticated connections between client and server +.SH SYNOPSIS +.EX +include "keyring.m"; +include "security.m"; +auth := load Auth Auth->PATH; + +init: fn(): string; +client: fn(alg: string, ai: ref Keyring->Authinfo, + fd: ref Sys->FD): (ref Sys->FD, string); +server: fn(algs: list of string, ai: ref Keyring->Authinfo, + fd: ref Sys->FD, setid: int): (ref Sys->FD, string); +.EE +.SH DESCRIPTION +.B Auth +establishes authenticated connections using the station to station protocol described +in +.IR auth (6). +It encapsulates the use of the primitives of +.IR keyring-auth (2) +and +.IR security-ssl (2) +for the particular case where the stations +play the rĂ´les of `client' and `server'. +The underlying primitives must still be accessed directly in some cases, +for instance when completely symmetric authentication is needed between peers. +.PP +.B Init +must be called before using any other functions in +.BR Auth ; +it returns nil if successful, and a diagnostic message otherwise. +.PP +.B Client +authenticates a connection with the server on +.I fd +using the authentication data in +.IR ai . +If successful, and +.I alg +is neither +.B nil +nor the value +.B +"none"\c +, +.B client +will set the connection to digest or encrypt the data, +using the +digest or encryption algorithm specified in +.IR alg . +It returns the file descriptor for the connection, +and a string with information about the connection. +If an authenticated connection cannot be established, +.B client +returns a nil file descriptor and an error message. +.PP +.B Server +authenticates a client connection +.IR fd , +as described in +.IR keyring-auth (2), +using the server's authentication data in +.IR ai . +If successful, and the client requested the use of a digest or +encryption algorithm, and that algorithm is listed in +.IR algs , +.B server +enables the security layer +.IR ssl (3) +using the selected algorithm. +Furthermore, if +.I setid +is non-zero, the current user name is set to the +newly authenticated name. +.B Server +returns a file descriptor for the connection, +and a string with information about the connection. +If an authenticated connection cannot be established, +or the client's chosen algorithm is not listed, +.B server +returns a nil file descriptor and an error message. +.PP +Any string acceptable to +.IR ssl (3), +including +.B +"clear"\c +, can be given as an +.I alg +to +.BR client , +or listed in +.I algs +for +.BR server . +Furthermore, the special string +.B +"none" +tells both functions +that +.IR ssl (3) +should not be used at all on a connection. +.SH EXAMPLE +This selection from +.B /appl/cmd/mount.b +illustrates client-side use. +.PP +.EX + au := load Auth Auth->PATH; + err := au->init(); + if(err != nil){ + sys->fprint(stderr, "mount: %s\en", err); + exit; + } + fd: ref Sys->FD; + (fd, err) = au->client("none", ai, c.dfd); + if(fd == nil){ + sys->fprint(stderr, "mount: authentication failed: %s\en", err); + exit; + } + dir := hd argv; + ok = sys->mount(fd, dir, flags, ""); + if(ok < 0) + sys->fprint(stderr, "mount: %r\en"); +.EE +.PP +The following example from +.B /appl/lib/styxd.b +shows server-side use; +note that +.B readauthinfo +is called first to fetch the authentication data to pass to +.BR server . +.PP +.EX + kr := load Keyring Keyring->PATH; + ... + ai := kr->readauthinfo("/usr/"+user+"/keyring/default"); + auth->init(); + (fd, info_or_err) := auth->server(argv, ai, stdin, 1); + if(fd == nil){ + sys->fprint(stderr, "styxd: %s\en", info_or_err); + exit; + } + sys->pctl(Sys->FORKNS, nil); + if(sys->export(fd, Sys->EXPASYNC) < 0) + sys->fprint(stderr, "styxd: file export: %r\en"); +.EE +.SH SOURCE +.B /appl/lib/auth.b +.SH "SEE ALSO" +.IR keyring-auth (2), +.IR security-ssl (2), +.IR ssl (3), +.IR auth (6) |
