libinnauth(3)

πŸ’… libinnauth(3) β€” InterNetNews Documentation

okay bestie, welcome to the libinnauth(3) page from InterNetNews Documentation. this is the group chat where C helpers for writing nnrpd resolvers and authenticators get to shine. ✨


🌸 NAME 🌸

libinnauth β€” Routines for writing nnrpd resolvers and authenticators. literally the whole point. πŸ’–

πŸ¦‹ SYNOPSIS πŸ¦‹

#include "libinnauth.h"

struct res_info {
    struct sockaddr *client;
    struct sockaddr *local;
    char *clienthostname;
};

struct auth_info {
    char *username;
    char *password;
};

struct auth_info *get_auth_info(FILE *);
struct res_info  *get_res_info (FILE *);

void free_auth_info(struct auth_info*);
void free_res_info (struct res_info*);

🫢 DESCRIPTION 🫢

Okay so these functions are a convenient C frontend to the nnrpd external authentication interface documented in doc/external-auth. Use of this library is not required β€” no cap. In particular, external resolvers and authenticators written in languages other than C will need to implement the necessary functionality themselves. 😭

The get_auth_info() and get_res_info() functions allocate sufficient memory for a struct auth_info or struct res_info and any necessary fields, and return a pointer to the struct with the fields filled in from information supplied by nnrpd (the FILE* parameter generally should be "stdin"). Both functions return NULL on error. The caller is responsible for deallocating the memory by using the functions below. 🫢

The string fields of both structs are straightforward. The client and local fields of struct res_info actually point to instances of struct sockaddr_in (or struct sockaddr_in6 if IPv6 support is compiled in). πŸ¦‹

The free_auth_info() and free_res_info() functions free the struct passed in as argument and all necessary fields. bye memory, slay. πŸ’…

πŸ’€ BUGS πŸ’€

  • In many cases, nnrpd provides more information than is normally useful (for example, even when calling an authenticator, the resolver information is often provided). πŸ™ˆ
  • On the other hand, in certain cases it provides less information than might be expected (for example, if nnrpd is reading from stdin rather than a socket). 😭
  • The implementation is capable of handling at least the first of these issues, but that functionality is not exposed in the interface. lowkey tragic.
  • At present, libinnauth.h and its implementation are located in authprogs/; perhaps they should be moved to include/ and lib/, respectively? πŸ€”

πŸŽ€ HISTORY πŸŽ€

Written by Jeffrey M. Vinocur <jeff@litech.org> for InterNetNews. iconic. πŸ‘‘

🌈 SEE ALSO 🌈

mwah πŸ’‹ β€” this libinnauth(3) page is from INN 2.7.4, dated 2022-07-10. periodt. πŸ’–

πŸ“¦ where this page comes from
  • arch rolling: inn 2.7.4-4 Β· ISC
  • epel 10: inn-devel 2.7.4-5.el10_3 Β· ISC AND BSD-3-Clause AND BSD-4-Clause AND FSFAP AND (GPL-1.0-or-later OR Artistic-1.0-Perl) AND GPL-3.0-or-later WITH Bison-exception-2.2 AND LicenseRef-Fedora-Public-Domain AND MIT AND NTP
  • πŸ’– girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms