[comp.os.vms] How to

AWPSYS@RITVAX.BITNET.UUCP (06/15/87)

Here is a program to demo the use of $GETUAI system service.
This program uses the service exactly as documented in
the DOCs.

Points to note:


        1)  many fields in the UAF are counted ascii
        2)  The password is in incripted form. Useless unless you
            want to verify an account password.  (To do this you need
            to enter HPWD.MAR from the fiche.
        3)  You need no priv to read info about your OWN account only.
            You need Grpprv to read about accounts in your Group and
            SYSPRV for all others.

We like these services...The make our life a lot easier.
They obviously need a lot of work to complete them.

        THis demo can be modified to do a SETUAI to change UAF items
        (From Suitably Prived accounts)

*
*
*
        implicit integer(a-z)
*
        include'($uaidef)'
        character*64 lgicmd
        character*(12) username
        character*32 owner

        structure /itmlist_struct/

         union
          map
           integer*2 buff_len              ! length of equiv name
           integer*2 item_code             ! code saying type of Eqiv name
           integer*4 buffaddr              ! address of equiv name
           integer*4 ret_lenadr            ! return addr for actual length
          end map
          map
           integer*4 end_list              ! code to end list
          end map
         end union
        end structure
*
        record /itmlist_struct/ uaflist(5)
        integer dummy
*
        nularg = 0

        call lib$get_input(username,'Enter User: ',l_u)
        uaflist(1).buff_len = 32
        uaflist(1).item_code = UAI$_OWNER
        uaflist(1).buffaddr = %loc(owner)
        uaflist(1).ret_lenadr = %loc(dummy)

        uaflist(2).buff_len = 64
        uaflist(2).item_code = UAI$_LGICMD
        uaflist(2).buffaddr = %loc(lgicmd)
        uaflist(2).ret_lenadr = %loc(dummy)

*
        uaflist(3).end_list = 0

        istat = sys$getuai(,,username(1:l_u),uaflist(1),,,)
        if (.not.istat) call lib$stop(%val(istat))
*
        len_own = ichar(owner(1:1))
        if (len_own.lt.1) then
           owner = ' '
           len_own = 1
        else
          owner = owner(2:len_own+1)
        endif

        len_lgi = ichar(lgicmd(1:1))
        if (len_own.lt.1) then
           lgicmd = ' '
           len_lgi = 1
        else
          lgicmd = lgicmd(2:len_lgi+1)
        endif
        print *,'Owner:   '//owner(:len_own)
        print *,'LGICMD:  '//lgicmd(:len_lgi)
        end