} psci_info[COALITION_NUM_TYPES];
};
+/*
+ * Persona attributes
+ */
+struct _posix_spawn_persona_info {
+ uid_t pspi_id; /* persona ID (unix UID) */
+ uint32_t pspi_flags; /* spawn persona flags */
+ uid_t pspi_uid; /* alternate posix/unix UID */
+ gid_t pspi_gid; /* alternate posix/unix GID */
+ uint32_t pspi_ngroups; /* alternate advisory groups */
+ gid_t pspi_groups[NGROUPS];
+ uid_t pspi_gmuid; /* group membership UID */
+};
+
+#define POSIX_SPAWN_PERSONA_FLAGS_NONE 0x0
+#define POSIX_SPAWN_PERSONA_FLAGS_OVERRIDE 0x1
+#define POSIX_SPAWN_PERSONA_FLAGS_VERIFY 0x2
+
+#define POSIX_SPAWN_PERSONA_ALL_FLAGS \
+ (POSIX_SPAWN_PERSONA_FLAGS_OVERRIDE \
+ | POSIX_SPAWN_PERSONA_FLAGS_VERIFY \
+ )
+
+#define POSIX_SPAWN_PERSONA_UID 0x00010000
+#define POSIX_SPAWN_PERSONA_GID 0x00020000
+#define POSIX_SPAWN_PERSONA_GROUPS 0x00040000
+
+
/*
* A posix_spawnattr structure contains all of the attribute elements that
* can be set, as well as any metadata whose validity is signalled by the
_posix_spawn_port_actions_t psa_ports; /* special/exception ports */
_posix_spawn_mac_policy_extensions_t psa_mac_extensions; /* MAC policy-specific extensions. */
struct _posix_spawn_coalition_info *psa_coalition_info; /* coalition info */
- void *reserved;
+ struct _posix_spawn_persona_info *psa_persona_info; /* spawn new process into given persona */
} *_posix_spawnattr_t;
/*
__darwin_size_t coal_info_size;
struct _posix_spawn_coalition_info *coal_info; /* pointer to coalition info */
- __darwin_size_t reserved_size;
- void *reserved;
+ __darwin_size_t persona_info_size;
+ struct _posix_spawn_persona_info *persona_info;
};
#ifdef KERNEL
uint32_t mac_extensions;
uint32_t coal_info_size;
uint32_t coal_info;
- uint32_t reserved_size;
- uint32_t reserved;
+ uint32_t persona_info_size;
+ uint32_t persona_info;
};
struct user__posix_spawn_args_desc {
user_addr_t mac_extensions; /* pointer to block */
user_size_t coal_info_size;
user_addr_t coal_info;
- user_size_t reserved_size;
- user_addr_t reserved;
+ user_size_t persona_info_size;
+ user_addr_t persona_info;
};