- return the zone pathname
cc [flags...] file... -ltsol
#include <tsol/label.h> char *getpathbylabel(const char *path, char *resolved_path, size_t bufsize, const m_label_t *sl);
getpathbylabel() expands all symbolic links and resolves references to '/./', '/../', extra '/' characters, and stores the zone pathname in the buffer named by resolved_path. The bufsize argument specifies the size in bytes of this buffer. The resulting path will have no symbolic links components, nor any '/./', '/. ./'. This function can only be called from the global zone.
The zone pathname is relative to the sensitivity label sl. To specify a sensitivity label for a zone name which does not exist, the process must assert either the PRIV_FILE_UPGRADE_SL or PRIV_FILE_DOWNGRADE_SL privilege depending on whether the specified sensitivity label dominates or does not dominate the process sensitivity label.
getpathbylabel() returns a pointer to the resolved_path on success. On failure, it returns NULL and sets errno to indicate the error.
Search permission is denied for a component of the path prefix of path.
resolved_path extends outside the process's allocated address space or beyond bufsize bytes.
Too many symbolic links were encountered in translating path.
path or resolved_path was NULL, current zone is not the global zone, or sl is invalid.
An I/O error occurred while reading from or writing to the file system.
The named file does not exist.
See attributes(5) for descriptions of the following attributes:
getpathbylabel() indirectly invokes the readlink(2) system call, and hence inherits the possibility of hanging due to inaccessible file system resources.