HP OpenVMS Systemsask the wizard |
The Question is: Is there a way to get all the SYSUAF records, or to get them all one at a time? GETUAI seems to require a specific system name to get SYSUAF data. I'm actually supporting V5.5-2, V6.2 and V7.1 and higher. Thanks. The Answer is :
You will likely want to use RMS calls to walk through SYSUAF to obtain
the usernames, then call $getuai for details. (Direct access to SYSUAF
is not officially supported, and the internals of SYSUAF are subject
to change without notice -- the OpenVMS Wizard strongly encourages
you to identify and use only the keys within the file, via XABKEY and
configuring the appropriate number of keys for the file using XABSUM.)
The included example walks the primary key (and thus assumes it is
a text key, and contains the username), and passes the username to
sys$getuai and to OpenVMS callable MAIL$ functions for further
processing.
int user_context=0, int uai_context=-1, status = SS$_NORMAL;
short new_messages = 0;
main (int argc, char *argv[])
{
struct FAB fab;
struct RAB rab;
item
user_item[] = { 0, MAIL$_USER_USERNAME, &user, 0}, terminator},
set_items[] = { 0, MAIL$_USER_PERSONAL_NAME, &pers, 0, terminator},
get_items[] = { 255, MAIL$_USER_PERSONAL_NAME, &pers, &retlen,
terminator},
uai_items[] = { 32, UAI$_OWNER, &owner, 0, terminator };
desc
user_desc = { 0, &buf };
char buf[BUFSIZ], user[13], pers[255];
struct { char len, dat[31+1]; } owner;
fab = cc$rms_fab;
rab = cc$rms_rab;
fab.fab$b_shr = FAB$M_SHRPUT;
fab.fab$b_fac = FAB$M_GET;
fab.fab$l_fna = "SYSUAF";
fab.fab$b_fns = 6
fab.fab$l_dna = "SYS$SYSTEM:.DAT";
fab.fab$b_dns = strlen (fab.fab$l_dna);
rab.rab$l_fab = &fab;
rab.rab$l_ubf = (char *) &buf
rab.rab$w_usz = BUFSIZ
stat = MAIL$USER_BEGIN(&user_context, &null_list, &null_list);
if (!(stat&1)) return stat;
stat = SYS$OPEN ( &fab );
if (!(stat&1)) return stat;
stat = SYS$CONNECT ( &rab );
while (stat & 1) {
stat = SYS$GET ( &rab )
if (!(stat & 1)) break;
stat = SYS$GETUAI (0, &uai_context, &user_desc, &uai_items, 0, 0);
if (!(stat & 1)) break
owner.dat[owner.len] = 0;
stat= MAIL$USER_GET_INFO(&user_context, user_item, get_items);
pers[retlen] = 0
printf (%12.12s %31.31s %30.30s\n", &buf, &owner.dat, &pers);
}
if (stat == RMS$_EOF) stat = RMS$_NORMAL;
if (stat&1) stat = MAIL$USER_END(&user_context, &null_list,
&null_list);
if (stat&1) stat = SYS$CLOSE(&fab);
}
|