---
name: "pam_sm_authenticate"
section: "3"
platform: "linux"
package: "pam"
version: "1.7.3-1"
release: "Arch Linux 2026-11-01"
platforms: ["linux", "freebsd", "macos"]
url: "https://new.carta.tech/pam_sm_authenticate"
---

# pam\_sm\_authenticate(3)

PAM service function for user authentication

## NAME

pam\_sm\_authenticate - PAM service function for user authentication

## SYNOPSIS

```
#include <security/pam_modules.h>
```

**int pam\_sm\_authenticate(pam\_handle\_t \****pamh***, int** *flags***, int** *argc***, const char \*\****argv***);**

## DESCRIPTION

The **pam\_sm\_authenticate** function is the service module's implementation of the [**pam\_authenticate**(3)](/pam_authenticate/3.md) interface.

This function performs the task of authenticating the user.

Valid flags, which may be logically OR'd with *PAM\_SILENT*, are:

PAM\_SILENT

Do not emit any messages.

PAM\_DISALLOW\_NULL\_AUTHTOK

Return **PAM\_AUTH\_ERR** if the database of authentication tokens for this authentication mechanism has a *NULL* entry for the user. Without this flag, such a *NULL* token will lead to a success without the user being prompted.

## RETURN VALUES

PAM\_AUTH\_ERR

Authentication failure.

PAM\_CRED\_INSUFFICIENT

For some reason the application does not have sufficient credentials to authenticate the user.

PAM\_AUTHINFO\_UNAVAIL

The modules were not able to access the authentication information. This might be due to a network or hardware failure etc.

PAM\_SUCCESS

The authentication token was successfully updated.

PAM\_USER\_UNKNOWN

The supplied username is not known to the authentication service.

PAM\_MAXTRIES

One or more of the authentication modules has reached its limit of tries authenticating the user. Do not try again.

## SEE ALSO

[**pam**(3)](/pam/3.md), [**pam\_authenticate**(3)](/pam_authenticate/3.md), [**pam\_sm\_setcred**(3)](/pam_sm_setcred/3.md), [**pam\_strerror**(3)](/pam_strerror/3.md), [**PAM**(8)](/PAM/8.md)
