AUTHSRV(3)                                             AUTHSRV(3)

     NAME
          authdial, passtokey, nvcsum, readnvram, convT2M, convM2T,
          convTR2M, convM2TR, convA2M, convM2A, convPR2M, convM2PR,
          _asgetticket, _asrdresp - routines for communicating with
          authentication servers

     SYNOPSIS
          #include <u.h>
          #include <libc.h>
          #include <authsrv.h>

          int     authdial(char *netroot, char *ad);

          int     passtokey(char key[DESKEYLEN], char *password)

          uchar   nvcsum(void *mem, int len)

          int     readnvram(Nvrsafe *nv, int flag);

          int     convT2M(Ticket *t, char *msg, char *key)

          void    convM2T(char *msg, Ticket *t, char *key)

          int     convA2M(Authenticator *a, char *msg, char *key)

          void    convM2A(char *msg, Authenticator *a, char *key)

          int     convTR2M(Ticketreq *tr, char *msg)

          void    convM2TR(char *msg, Ticketreq *tr)

          int     convPR2M(Passwordreq *pr, char *msg, char *key)

          void    convM2PR(char *msg, Passwordreq *pr, char *key)

          int     _asgetticket(int fd, char *trbuf, char *tbuf);

          int     _asrdresp(int fd, char *buf, int len);

     DESCRIPTION
          Authdial dials an authentication server over the network
          rooted at net, default /net.  The authentication domain, ad,
          specifies which server to call.  If ad is non-nil, the net-
          work database (see ndb(1)) is queried for an entry which
          contains authdom=ad or dom=ad, the former having precedence,
          and which also contains an auth attribute.  The string
          dialed is then netroot!server!ticket where server is the
          value of the auth attribute.  If no entry is found, the
          error string is set to ``no authentication server found''
          and -1 is returned.  If authdom is nil, the string

     AUTHSRV(3)                                             AUTHSRV(3)

          netroot!$auth!ticket is used to make the call.

          Passtokey converts password into a DES key and stores the
          result in key. It returns 0 if password could not be con-
          verted, and 1 otherwise.

          Readnvram reads authentication information into the struc-
          ture:
              struct Nvrsafe
              {
                  char    machkey[DESKEYLEN];
                  uchar   machsum;
                  char    authkey[DESKEYLEN];
                  uchar   authsum;
                  char    config[CONFIGLEN];
                  uchar   configsum;
                  char    authid[ANAMELEN];
                  uchar   authidsum;
                  char    authdom[DOMLEN];
                  uchar   authdomsum;
              };

          On Sparc, MIPS, and SGI machines this information is in
          non-volatile ram, accessible in the file #r/nvram.  On x86s
          and Alphas readnvram successively opens the following areas
          stopping with the first to succeed:

          - the partition named by the $nvram environment variable
          - the partition #S/sdC0/nvram
          - a file called plan9.nvr in the partition #S/sdC0/9fat
          - the partition #S/sd00/nvram
          - a file called plan9.nvr in the partition #S/sd00/9fat
          - a file called plan9.nvr on a DOS floppy in drive 0
          - a file called plan9.nvr on a DOS floppy in drive 1

          The nvcsums of the fields machkey, authid, and authdom must
          match their respective checksum or that field is zeroed.  If
          flag is NVwrite or at least one checksum fails and flag is
          NVwriteonerr, readnvram will prompt for new values on
          #c/cons and then write them back to the storage area.

          ConvT2M, convA2M, convTR2M, and convPR2M convert tickets,
          authenticators, ticket requests, and password change request
          structures into transmittable messages.  ConvM2T, convM2A,
          convM2TR, and convM2PR are used to convert them back.  Key
          is used for encrypting the message before transmission and
          decrypting after reception.

          The routine _asgetresp receives either a character array or
          an error string.  On error, it sets errstr and returns -1.
          If successful, it returns the number of bytes received.

     AUTHSRV(3)                                             AUTHSRV(3)

          The routine _asgetticket sends a ticket request message and
          then uses _asgetresp to recieve an answer.

     SOURCE
          /src/libauthsrv

     SEE ALSO
          passwd(1), dial(3), Plan 9's authsrv(6).

     DIAGNOSTICS
          These routines set errstr. Integer-valued functions return
          -1 on error.