Trusted Solaris Developer's Guide

Working with Rights Header Data

The rights profile data is spread between two databases: prof_attr(4) and exec_attr(4). There are two corresponding interface families for accessing rights profiles data: getprofattr(3SECDB) and getexecattr(3SECDB).

The getprofattr function enumerates the prof_attr entries. The getprofnam function searches for a prof_attr entry with a given name. The getproflist function searches for supplementary profiles.

An example program using the getprofattr function follows.

#include <stdio.h> 
#include <prof_attr.h> 

main(int argc, char *argv[])
{
        profattr_t      *profp = NULL;
        int             i;
        char            *kv_str = NULL;
        char            *attr[] = {     PROFATTR_AUTHS_KW,
                                        PROFATTR_PROFS_KW,
                                        "help",
                                        NULL };

        if (argc != 2) {
                printf("\tUsage: %s \"profile name\"\n", argv[0]);
                printf("\t\tPut multi-word profile names in quotes\n");
                exit(1);
        }

        if ((profp = getprofnam(argv[1])) == NULL) {
                printf("\tNo prof_attr entry found for %s\n", argv[1]);
                exit(0);
        }
        if (profp->name)
                printf("\t%s: %s\n", PROFATTR_COL0_KW, profp->name);
        if (profp->res1)
                printf("\t%s: %s\n", PROFATTR_COL1_KW, profp->res1);
        if (profp->res2)
                printf("\t%s: %s\n", PROFATTR_COL2_KW, profp->res2);
        if (profp->desc)
                printf("\t%s: %s\n", PROFATTR_COL3_KW, profp->desc);
        if (profp->attr) {
                for (i = 0; attr[i] != NULL; i++) {
                        if (kv_str = kva_match(profp->attr, attr[i]))
                                printf("\t%s: %s\n", attr[i], kv_str);
                }
        }

        free_profattr(profp);
}

This program gets the six fields in the argument's prof_attr record and dumps them to a display as follows:


% getprof ``Media Backup''
	name: Media Backup
	res1:
	res2:
	desc: Backup files and file systems
	auths: solaris.device.allocate
	help: RtMediaBkup.html