---
name: "ne_set_server_auth"
section: "3"
platform: "linux"
package: "neon"
version: "0.37.1-1"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/ne_set_server_auth"
---

# ne\_set\_server\_auth(3)

register authentication callbacks

## NAME

ne\_set\_server\_auth, ne\_set\_proxy\_auth, ne\_forget\_auth - register authentication callbacks

## SYNOPSIS

```
#include <ne_auth.h>
```

**typedef int (\*ne\_auth\_creds)(void \****userdata***, const char \****realm***, int** *attempt***, char \****username***, char \****password***);**

**void ne\_set\_server\_auth(ne\_session \****session***, ne\_auth\_creds** *callback***, void \****userdata***);**

**void ne\_set\_proxy\_auth(ne\_session \****session***, ne\_auth\_creds** *callback***, void \****userdata***);**

**void ne\_forget\_auth(ne\_session \****session***);**

## DESCRIPTION

The **ne\_auth\_creds** function type defines a callback which is invoked when a server or proxy server requires user authentication for a particular request. The *realm* string is supplied by the server. The *attempt* is a counter giving the number of times the request has been retried with different authentication credentials. The first time the callback is invoked for a particular request, *attempt* will be zero.

To retry the request using new authentication credentials, the callback should return zero, and the *username* and *password* buffers must contain NUL-terminated strings. The NE\_ABUFSIZ constant gives the size of these buffers.

**Tip**\

If you only wish to allow the user one attempt to enter credentials, use the value of the *attempt* parameter as the return value of the callback.

To abort the request, the callback should return a non-zero value; in which case the contents of the *username* and *password* buffers are ignored.

The **ne\_forget\_auth** function can be used to discard the cached authentication credentials.

## EXAMPLES

```
/* Function which prompts for a line of user input: */
extern char *prompt_for(const char *prompt);
static int
my_auth(void *userdata, const char *realm, int attempts,
        char *username, char *password)
{
   strncpy(username, prompt_for("Username: "), NE_ABUFSIZ);
   strncpy(password, prompt_for("Password: "), NE_ABUFSIZ);
   return attempts;
}
int main(...)
{
   ne_session *sess = ne_session_create(...);
   ne_set_server_auth(sess, my_auth, NULL);
   /* ... */
}
```

## COPYRIGHT

Copyright © 2001-2026 Joe Orton\
