# Domain/OS PROT Trait

This trait is undocumented. It is described below, click here for a replacement header file.

## The entry point vector:

    typedef struct prot_$epv
    {
        void
        (*set_rights)   /* set read/write/execute/search/owner/set-id rights */
        (
            void *&handle,                          /* the object handle */
            prot_$rights_vec_t rights_vector,       /* the rights for person, project, organization, world. */
            prot_$user_class_set_t &valid_entries,  /* set only *these* rights */
            status_$t *status
        );

        void
        (*inq_rights)
        (
            void *&handle,
            prot_$rights_vec_t rights_vector,       /* store rights here */
            prot_$user_class_set_t *valid_entries,  /* only *these* rights are significant */
            status_$t *status
        );

        void
        (*set_user_class_ids)   /* set owner/project/organization IDs */
        (
            void *&handle,
            prot_$user_class_set_t &valid_entries,  /* set only *these* IDs */
            prot_$user_class_id_vec_t uids,         /* the IDs */
            status_$t *status
        );

        void
        (*inq_user_class_ids)
        (
            void *&handle,
            prot_$user_class_set_t *valid_entries,  /* only *these* IDs are recognized */
            prot_$user_class_id_vec_t uids,         /* store IDs here */
            status_$t *status
        );
    } prot_$epv;

## The prot_trait structure

A source file is here.

    trait_$t prot_$trait =
    {
        4,                          /* four calls */
        { 3108BE90.60007123 },      /* prot trait UID */
        { { 3108BE90.70007123 }, unimp_prot_trait_$4_args },    /* set_rights */
        { { 3108BE90.80007123 }, unimp_prot_trait_$4_args },    /* inq_rights */
        { { 3108BE90.90007123 }, unimp_prot_trait_$4_args },    /* set_user_class_ids */
        { { 3108BE90.A0007123 }, unimp_prot_trait_$4_args },    /* inq_user_class_ids */
    };