---
name: "_secure_path"
section: "3"
platform: "freebsd"
package: "base"
version: "16.0-CURRENT-20261027-61c70dc16a79"
release: "FreeBSD 16.0-CURRENT (2026-10-27)"
platforms: ["freebsd"]
url: "https://new.carta.tech/_secure_path"
---

# \_secure\_path(3)

determine if a file appears to be secure

## NAME

**\_secure\_path** – determine if a file appears to be secure

## LIBRARY

System Utilities Library (libutil, -lutil)

## SYNOPSIS

**#include \<sys/types.h\>**

**#include \<libutil.h\>**

*int*\

**\_secure\_path**(*const char \*path*, *uid\_t uid*, *gid\_t gid*);

## DESCRIPTION

This function does some basic security checking on a given path. It is intended to be used by processes running with root privileges in order to decide whether or not to trust the contents of a given file. It uses a method often used to detect system compromise.

A file is considered ‘secure’ if it meets the following conditions:

1. The file exists, and is a regular file (not a symlink, device special or named pipe, etc.),

2. Is not world writable.

3. Is owned by the given uid or uid 0, if uid is not -1,

4. Is not group writable or it has group ownership by the given gid, if gid is not -1.

## RETURN VALUES

This function returns zero if the file exists and may be considered secure, -2 if the file does not exist, and -1 otherwise to indicate a security failure. The [syslog(3)](/syslog/3.md) function is used to log any failure of this function, including the reason, at LOG\_ERR priority.

## SEE ALSO

[lstat(2)](/lstat/2.md), [syslog(3)](/syslog/3.md)

## HISTORY

Code from which this function was derived was contributed to the FreeBSD project by Berkeley Software Design, Inc. The function **\_secure\_path**() first appeared in FreeBSD 2.2.5.

## BUGS

The checks carried out are rudimentary and no attempt is made to eliminate race conditions between use of this function and access to the file referenced.
