1 GETEXECATTR(3SECDB)             Security Attributes Database Library Functions
   2 
   3 
   4 
   5 NAME
   6        getexecattr, free_execattr, setexecattr, endexecattr, getexecuser,
   7        getexecprof, match_execattr - get execution profile entry
   8 
   9 SYNOPSIS
  10        cc [ flag... ] file... -lsecdb  -lsocket  -lnsl  [ library... ]
  11        #include <exec_attr.h>
  12        #include <secdb.h>
  13 
  14        execattr_t *getexecattr(void);
  15 
  16 
  17        void free_execattr(execattr_t *ep);
  18 
  19 
  20        void setexecattr(void);
  21 
  22 
  23        void endexecattr(void);
  24 
  25 
  26        execattr_t *getexecuser(const char *username, const char *type,
  27             const char *id, int search_flag);
  28 
  29 
  30        execattr_t *getexecprof(const char *profname, const char *type,
  31             const char *id, int search_flag);
  32 
  33 
  34        execattr_t *match_execattr(execattr_t *ep, char *profname,
  35             char *type, char *id);
  36 
  37 
  38 DESCRIPTION
  39        The getexecattr() function returns a single exec_attr(4) entry.
  40        Entries can come from any of the sources specified in the
  41        nsswitch.conf(4) file.
  42 
  43 
  44        Successive calls to getexecattr() return either successive exec_attr
  45        entries or NULL. Because getexecattr() always returns a single entry,
  46        the next pointer in the execattr_t data structure points to NULL.
  47 
  48 
  49        The internal representation of an exec_attr entry is an execattr_t
  50        structure defined in <exec_attr.h> with the following members:
  51 
  52          char              *name;   /* name of the profile */
  53          char              *policy; /* policy under which the attributes are */
  54                                     /* relevant*/
  55          char              *type;   /* type of profile */
  56          char              *res1;   /* reserved for future use */
  57          char              *res2;   /* reserved for future use */
  58          char              *id;     /* unique identifier */
  59          kva_t             *attr;   /* attributes */
  60          struct execattr_s *next;   /* optional pointer to next profile */
  61 
  62 
  63 
  64        The free_execattr() function releases memory. It follows the next
  65        pointers in the execattr_t structure so that the entire linked list is
  66        released.
  67 
  68 
  69        The setexecattr() function "rewinds" to the beginning of the
  70        enumeration of exec_attr entries. Calls to getexecuser() can leave the
  71        enumeration in an indeterminate state. Therefore, setexecattr() should
  72        be called before the first call to getexecattr().
  73 
  74 
  75        The endexecattr() function can be called to indicate that exec_attr
  76        processing is complete; the library can then close any open exec_attr
  77        file, deallocate any internal storage, and so forth.
  78 
  79 
  80        The getexecuser() function returns a linked list of entries that match
  81        the type and id arguments and have a profile that has been assigned to
  82        the user specified by username, as described in passwd(4).  Profiles
  83        for the user are obtained from the list of default profiles in
  84        /etc/security/policy.conf (see policy.conf(4)) and the user_attr(4)
  85        database. Only entries in the name service scope for which the
  86        corresponding profile entry is found in the prof_attr(4) database are
  87        returned.
  88 
  89 
  90        The getexecprof() function returns a linked list of entries that match
  91        the type and id arguments and have the profile specified by the
  92        profname argument. Only entries in the name service scope for which the
  93        corresponding profile entry is found in the prof_attr database are
  94        returned.
  95 
  96 
  97        Using getexecuser() and getexecprof(), programmers can search for any
  98        type argument, such as the manifest constant KV_COMMAND. The arguments
  99        are logically AND-ed together so that only entries exactly matching all
 100        of the arguments are returned. Wildcard matching applies if there is no
 101        exact match for an ID. Any argument can be assigned the NULL value to
 102        indicate that it is not used as part of the matching criteria. The
 103        search_flag controls whether the function returns the first match
 104        (GET_ONE), setting the next pointer to NULL or all matching entries
 105        (GET_ALL), using the next pointer to create a linked list of all
 106        entries that meet the search criteria. See EXAMPLES.
 107 
 108 
 109        Once a list of entries is returned by getexecuser() or getexecprof(),
 110        the convenience function match_execattr() can be used to identify an
 111        individual entry. It returns a pointer to the individual element with
 112        the same profile name (profname), type name (type), and id. Function
 113        parameters set to NULL are not used as part of the matching criteria.
 114        In the event that multiple entries meet the matching criteria, only a
 115        pointer to the first entry is returned. The kva_match(3SECDB) function
 116        can be used to look up a key in a key-value array.
 117 
 118 RETURN VALUES
 119        Those functions returning data only return data related to the active
 120        policy.  The getexecattr() function returns a pointer to a execattr_t
 121        if it successfully enumerates an entry; otherwise it returns NULL,
 122        indicating the end of the enumeration.
 123 
 124 USAGE
 125        The getexecattr(), getexecuser(), and getexecprof() functions all
 126        allocate memory for the pointers they return. This memory should be
 127        deallocated with the free_execattr() call. The match_execattr()
 128        function does not allocate any memory. Therefore, pointers returned by
 129        this function should not be deallocated.
 130 
 131 
 132        Individual attributes may be referenced in the attr structure by
 133        calling the kva_match(3SECDB) function.
 134 
 135 EXAMPLES
 136        Example 1 Find all profiles that have the ping command.
 137 
 138          if ((execprof=getexecprof(NULL, KV_COMMAND, "/usr/sbin/ping",
 139              GET_ONE)) == NULL) {
 140                  /* do error */
 141          }
 142 
 143 
 144        Example 2 Find the entry for the ping command in the Network
 145        Administration Profile.
 146 
 147          if ((execprof=getexecprof("Network Administration", KV_COMMAND,
 148              "/usr/sbin/ping", GET_ALL))==NULL) {
 149                  /* do error */
 150          }
 151 
 152 
 153        Example 3 Tell everything that can be done in the Filesystem Security
 154        profile.
 155 
 156          if ((execprof=getexecprof("Filesystem Security", NULL, NULL,
 157              GET_ALL))==NULL)) {
 158                  /* do error */
 159          }
 160 
 161 
 162        Example 4 Tell if the tar utility is in a profile assigned to user
 163        wetmore. If there is no exact profile entry, the wildcard (*), if
 164        defined, is returned.
 165 
 166          if ((execprof=getexecuser("wetmore", KV_COMMAND, "/usr/bin/tar",
 167              GET_ONE))==NULL) {
 168                  /* do error */
 169          }
 170 
 171 
 172 FILES
 173        /etc/nsswitch.conf
 174                                     configuration file lookup information for
 175                                     the name service switch
 176 
 177 
 178        /etc/user_attr
 179                                     extended user attributes
 180 
 181 
 182        /etc/security/exec_attr
 183                                     execution profiles
 184 
 185 
 186        /etc/security/policy.conf
 187                                     policy definitions
 188 
 189 
 190        /etc/security/prof_attr
 191                                     profile information
 192 
 193 
 194 ATTRIBUTES
 195        See attributes(5) for descriptions of the following attributes:
 196 
 197 
 198 
 199 
 200        +---------------+-----------------+
 201        |ATTRIBUTE TYPE | ATTRIBUTE VALUE |
 202        +---------------+-----------------+
 203        |MT-Level       | MT-Safe         |
 204        +---------------+-----------------+
 205 
 206 SEE ALSO
 207        getauthattr(3SECDB), getprofattr(3SECDB), getuserattr(3SECDB),
 208        kva_match(3SECDB), exec_attr(4), passwd(4), policy.conf(4),
 209        prof_attr(4), user_attr(4), attributes(5)
 210 
 211 
 212 
 213                                 August 13, 2018            GETEXECATTR(3SECDB)