libauth(3)

πŸ“¦ version 2.6.4, in ubuntu jammy

πŸ’– libauth β€” routines for writing nnrpd resolvers and authenticators πŸ’–

okay bestie, so this is libauth(3), a page from the InterNetNews Documentation, and it's literally the little C helper library that makes writing nnrpd resolvers and authenticators not a whole nightmare. come sit, i got you 🫢


✨ SYNOPSIS ✨

#include "libauth.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 🌸

These functions are basically a convenient C frontend to the nnrpd external authentication interface, which is documented over in doc/external-auth. that's the whole vibe ✨

okay important thing: using this library is not required. fr fr. especially if you're writing external resolvers and authenticators in languages that aren't C β€” you'll have to implement the necessary functionality yourself, no cap. πŸ’…

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, then hand you back a pointer to the struct with the fields filled in from information supplied by nnrpd. (the FILE* parameter generally should be "stdin", just so you know πŸ‘€)

Both functions return NULL on error. and the caller β€” that's you, bestie β€” is responsible for deallocating the memory by using the functions below. don't ghost your mallocs 😭

The string fields of both structs are straightforward, lowkey no drama. but here's the iconic part: 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). highkey important, don't forget πŸ¦‹

The free_auth_info() and free_res_info() functions free the struct passed in as argument and all necessary fields. they're the cleanup crew, they ate πŸ’…


πŸ’€ BUGS πŸ’€

okay so there are some quirks, let's talk about them:

  • In many cases, nnrpd provides more information than is normally useful (for example, even when calling an authenticator, the resolver information is often provided.) like okay girl, oversharing much πŸ™ˆ
  • 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). so it's giving inconsistent, ngl.
  • The implementation is capable of handling at least the first of these issues, but that functionality is not exposed in the interface. tragic. the potential is there and it's just… sitting there. πŸ’€

Also, at present, libauth.h and its implementation are located in authprogs/; perhaps they should be moved to include/ and lib/, respectively? not me asking the real questions πŸ€”


πŸ“œ HISTORY πŸ“œ

Written by Jeffrey M. Vinocur <jeff@litech.org> for InterNetNews.

$Id: libauth.pod 8200 2008-11-30 13:31:30Z iulius $


πŸ‘‘ SEE ALSO πŸ‘‘


and that's the whole page bestie, you're so welcome πŸŽ€ this was the libauth(3) man page, INN 2.6.4, dated 2015-09-12. go write a resolver, i believe in you. periodt. πŸ’–βœ¨πŸ¦‹

πŸ“¦ where this page comes from