factotum man page on Inferno

Man page or keyword search:  
man Server   579 pages
apropos Keyword Search (all sections)
Output format
Inferno logo
[printable version]

FACTOTUM(2)							   FACTOTUM(2)

NAME
       Factotum:  attrtext, challenge, copyattrs, delattr, findattr, findattr‐
       val, getuserpassd, mount, open, parseattrs, proxy, publicattrs, takeat‐
       trs, respond, response, rpc, rpcattrs - client interface to factotum

SYNOPSIS
       include "factotum.m";
       auth := load Factotum Factotum->PATH;

       Authinfo: adt{
	   cuid: string;    # ID on caller
	   suid: string;    # ID on server
	   cap:	 string;    # capability (only valid on server side)
	   secret: array of byte;   # key for encryption
       };

       AuthRpcMax: con ...;

       init:	      fn();
       mount:  fn(fd: ref Sys->FD, mnt: string, flags: int,
		   aname: string, keyspec: string): (int, ref Authinfo);

       getuserpasswd: fn(keyspec: string): (string, string);

       Challenge: adt {
	   user:  string;      # user (some protocols)
	   chal:  string;      # challenge string
       };

       challenge: fn(keyspec: string): ref Challenge;
       response:  fn(c: ref Challenge, resp: string): ref Authinfo;
       respond:	  fn(chal: string, keyspec: string): (string, string);

       open:	  fn(): ref Sys->FD;
       rpc:	  fn(facfd: ref Sys->FD, verb: string, a: array of byte):
		     (string, array of byte);
       proxy:	  fn(afd: ref Sys->FD, facfd: ref Sys->FD, arg: string):
		     ref Authinfo;
       rpcattrs:  fn(facfd: ref Sys->FD): list of ref Attr;

       Attr: adt {
	   tag:	   int;	     # Aattr, Aval, or Aquery
	   name:   string;
	   val:	   string;

	   text:   fn(a: self ref Attr): string;
       };

       parseattrs:  fn(s: string): list of ref Attr;
       copyattrs:   fn(l: list of ref Attr): list of ref Attr;
       delattr:	    fn(l: list of ref Attr, n: string): list of ref Attr;
       takeattrs:   fn(l: list of ref Attr, names: list of string): list of ref Attr;
       findattr:    fn(l: list of ref Attr, n: string): ref Attr;
       findattrval: fn(l: list of ref Attr, n: string): string;
       publicattrs: fn(l: list of ref Attr): list of ref Attr;
       attrtext:    fn(l: list of ref Attr): string;

DESCRIPTION
       Factotum	 interacts with an instance of the authentication agent facto‐
       tum(4) to authenticate a client to a server.  It can also interact with
       Plan  9's  factotum if that is in the name space (as well as or instead
       of factotum(4)).

       Factotum supports both the basic RPC interface to factotum and  various
       high-level  operations built on that.  The high-level functions will be
       described first.

       Init must be called before any other function.

       Mount is similar to Sys->mount (see sys-bind(2)), but uses factotum  to
       authenticate,  if  the  server  requires it.  Factotum->mount should be
       used  instead  of  Sys->mount  when  mounting  file  servers  that  use
       attach(5)  to  authenticate.   (If  the	server	on fd does not require
       authentication,	Factotum->mount	 simply	 calls	 Sys->mount.)	 Mount
       returns (v,ai).	If the integer v is non-negative, the mount succeeded;
       on error, v is negative, either the authentication or the mount failed,
       ai  is  nil, and the system error string contains a diagnostic.	If the
       server required authentication and that was successful, ai is a non-nil
       reference  to an Authinfo value containing the agreed user IDs, a capa‐
       bility for cap(3) that is valid only on the server,  and	 an  array  of
       bytes  containing a shared secret that can be used by client and server
       to create encryption and hashing keys for the conversation.

       Getuserpasswd returns a tuple (user,password) containing the values for
       the  user  and  !password  attributes  of  a  factotum  entry  that has
       proto=pass and matches the given keyspec.  The tuple values are nil  if
       no entry matches or the caller lacks permission to see them.

       The  pair  of  functions	 challenge and response give servers access to
       challenge/response protocols provided by factotum.  All such  authenti‐
       cation  protocols are embedded in an application-level protocol such as
       FTP, IMAP, POP3 and so on, in a way specific to that  protocol.	 These
       functions calculate parameters for application-specific messages.

       A  server  calls	 challenge  to get a challenge value to present to the
       user who will answer the challenge.  The	 server	 verifies  the	user's
       response	 by  calling  response,	 which	returns	 an Authinfo value (as
       described above) if  the	 response  is  correct.	  The  specific	 chal‐
       lenge/response  protocol	 is  selected  by  the	proto attribute in the
       keyspec for challenge, which opens a connection to factotum, obtains  a
       string  representing  a	challenge  value, and returns a reference to a
       Challenge adt that gives the challenge and a user name.	Some protocols
       take  the  user	name  from a user attribute in the keyspec, and others
       negotiate it within the authentication protocol.	 In the	 latter	 case,
       the user field of the resulting Challenge gives the name negotiated.

       In the other direction, a process uses respond to calculate the correct
       response to a given challenge.  Chal is the challenge  presented	 by  a
       server,	and  keyspec  gives  the attributes of the relevant key in the
       local factotum.	Respond interacts with factotum and  returns  a	 tuple
       (response, user)	 that  gives  the  response  string  to	 return to the
       server, and an optional user  name,  depending  on  the	protocol.   On
       error,  the  response  is  nil,	and the system error string contains a
       diagnostic.

       Factotum(4) represents keys as attribute value pairs in	textual	 form,
       with space-separated fields.  A field can be a value-less attribute, an
       attribute=value pair, or attribute?  to mark a required attribute  with
       unknown	value.	An attribute name that begins with an exclamation mark
       (!)  is to be considered hidden or  secret.   Values  containing	 white
       space  or  special  characters  can  be quoted using the conventions of
       sh(1).

       Parseattrs parses a string s of that form into a list  of  Attr	refer‐
       ences.	Each  Attr  has	 a  tag	 that identifies the value as Aattr (a
       value-less attribute), a Aval (an attribute-value pair), or Aquery  (an
       attribute for which a value is needed).	Other operations include:

       copyattrs      Return a copy of attribute list l.

       delattr	      Return a copy of l removing all attributes with name n.

       takeattrs      Return  the  subset  of  list  l	that contains only the
		      attributes listed in names.

       findattr	      Return a reference to the first Attr in l with the  name
		      n.

       findattrval    Return  the  value of the first attribute in l with name
		      n; return nil if the attribute is not found  or  has  no
		      value.

       publicattrs    Return  a	 copy of l in which all secret attributes have
		      been removed.

       attrtext	      Return the textual representation of attribute  list  l,
		      acceptable to parseattrs.

       The low-level interfaces to factotum are as follows.

       Proxy  links an authenticating server on afd with the factotum agent on
       facfd.  Typically facfd is the result of calling Factotum->open,	 which
       is equivalent to

	      sys->open("/mnt/factotum/rpc", Sys->ORDWR)

       Afd  is	a  file descriptor that represents a connection to the service
       that requires authentication.  It  is  typically	 the  result  of  sys-
       open(2),	 dial(2),  or  sys-fauth(2).   Params gives any parameters for
       factotum, as a  string  containing  space-separated  attr=value	pairs.
       Proxy ferries messages between the server and factotum until the end of
       the selected authentication protocol.  If authentication failed,	 proxy
       returns nil; otherwise on success it always returns a non-nil reference
       to an Authinfo value with contents as above, but if the	protocol  does
       not supply that authentication data, all the values are nil.

       Rpcattrs	 returns the initial attributes provided in the start request,
       and any others added later by the protocol.

       Rpc does one message exchange with the factotum on facfd.  It writes  a
       message	containing the given verb and optional binary parameter a, and
       returns (v,a) where v is the response string from factotum and a is  an
       optional	 binary	 parameter for that response.  Exceptionally, v is the
       string "rpc failure" if communication fails or a message is garbled, or
       "no  key"  if  rpc  cannot  find	 a  suitable key.  See factotum(4) for
       details of the protocol.

       AuthRpcMax is an integer constant giving the maximum size of a  message
       in an rpc exchange.

SOURCE
       /appl/lib/factotum.b

SEE ALSO
       sys-bind(2), sys-fauth(2), factotum(4), attach(5)

DIAGNOSTICS
       Functions  that	 return	 nil  references  on error also set the system
       error string.

								   FACTOTUM(2)
[top]

List of man pages available for Inferno

Copyright (c) for man pages and the logo by the respective OS vendor.

For those who want to learn more, the polarhome community provides shell access and support.

[legal] [privacy] [GNU] [policy] [cookies] [netiquette] [sponsors] [FAQ]
Tweet
Polarhome, production since 1999.
Member of Polarhome portal.
Based on Fawad Halim's script.
....................................................................
Vote for polarhome
Free Shell Accounts :: the biggest list on the net