GNURLOPT_USERPWD(3)

πŸ“¦ version 7.72.0, in nixos 26.05, nixpkgs unstable

✨ NAME ✨

GNURLOPT_USERPWD(3) is literally this page, bestie β€” and yeah, it’s one of the curl_easy_setopt options. The actual option is CURLOPT_USERPWD, and it handles the user name and password to use in authentication. 🫢

✨ SYNOPSIS ✨

#include <gnurl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_USERPWD, char *userpwd);

✨ DESCRIPTION ✨

Okay so you pass a char * as the parameter, pointing at a null-terminated login-details string for the connection. The format of which is: [user name]:[password]. πŸ’…

When using Kerberos V5 authentication with a Windows based server, you should specify the user name part with the domain name in order for the server to successfully obtain a Kerberos Ticket. If you don’t, then the initial part of the authentication handshake may fail. 😭

When using NTLM, the user name can be specified simply as the user name without the domain name should the server be part of a single domain and forest. fr fr.

To specify the domain name use either Down-Level Logon Name or UPN (User Principal Name) formats. For example, EXAMPLE\user and user@example.com respectively. πŸŽ€

Some HTTP servers (on Windows) support inclusion of the domain for Basic authentication as well. highkey useful.

When using HTTP and CURLOPT_FOLLOWLOCATION(3), libcurl might perform several requests to possibly different hosts. libcurl will only send this user and password information to hosts using the initial host name (unless CURLOPT_UNRESTRICTED_AUTH(3) is set), so if libcurl follows locations to other hosts it will not send the user and password to those. This is enforced to prevent accidental information leakage. 🫢

No cap, that last bit is the safety girlie of the whole option β€” don’t leak the login details to random redirect hosts. πŸ’€

Use CURLOPT_HTTPAUTH(3) to specify the authentication method for HTTP based connections or CURLOPT_LOGIN_OPTIONS(3) to control IMAP, POP3 and SMTP options. 🌈

The user and password strings are not URL decoded, so there’s no way to send in a user name containing a colon using this option. Use CURLOPT_USERNAME(3) for that, or include it in the URL. periodt.

The application does not have to keep the string around after setting this option. πŸ¦‹

✨ DEFAULT ✨

NULL

That’s the default, bestie β€” no login details unless you set them. πŸŽ€

✨ PROTOCOLS ✨

Most. πŸ’…

✨ EXAMPLE ✨

CURL *curl = curl_easy_init();
if(curl) {
  curl_easy_setopt(curl, CURLOPT_URL, "http://example.com/foo.bin");

  curl_easy_setopt(curl, CURLOPT_USERPWD, "clark:kent");

  ret = curl_easy_perform(curl);

  curl_easy_cleanup(curl);
}

It’s giving Clark Kent login era. πŸ‘‘ Not me noticing the ret = line is just sitting there exactly as the original says it. πŸ™ˆ

✨ AVAILABILITY ✨

Always. Iconic. πŸ’–

✨ RETURN VALUE ✨

Returns CURLE_OK on success or CURLE_OUT_OF_MEMORY if there was insufficient heap space. Heap space said no 😭 β€” otherwise you’re chilling.

✨ SEE ALSO ✨


mwah πŸ’‹ β€” this lil page comes from libcurl 7.37.0, dated 17 Jun 2014, and that’s the source/version + date tea, periodt. πŸŽ€

πŸ“¦ where this page comes from