DNETD.CONF(5)

πŸ“¦ version 2.65build2, in ubuntu jammy

πŸ’– DNETD.CONF β€” the DECnet objects file, bestie edition πŸ’–

okay so quick vibe check: this is the manual page for /etc/dnetd.conf from the File Formats Manual section. yes we're doing file formats today, it's giving "config file but make it DECnet". sit down, grab a strawberry πŸ“, let's go.


✨ NAME ✨

/etc/dnetd.conf β€” the DECnet objects file πŸ¦‹


🌸 DESCRIPTION 🌸

/etc/dnetd.conf is an ASCII file that holds the description of all the objects the DECnet super-server dnetd knows about. think of it as the guest list, and dnetd is the bouncer πŸ’…

There's one entry per line, and every single line is shaped like this:

Name  Number Authenticate User command

and here's what each field is doing, no gatekeeping:

  • Name β€” the name of the object. for numbered objects this is literally just there for documentation purposes (decorative, iconic, does nothing). for named objects it is the actual object name. and there's a special little object name * that can execute an arbitrarily named program or script (more on that later πŸ‘€).
  • Number β€” the DECnet object number. these numbers should match the well-known object numbers in a VMS object database, fr fr. if the object number is zero then the name is used instead. also: there should be no duplicate object numbers in the file, apart from number 0. don't do it. just don't.
  • Authenticate β€” whether to authenticate incoming connections. this flag should be a Y or an N, no in-between situationships.
    • if it's Y, incoming connections get authenticated either by the username and password given on the remote command line, or by the DECnet proxy database decnet.proxy.
    • if it's N, the next field specifies the username that the daemon will be run as.
  • Username β€” the username the daemon will run as when the incoming command is not authenticated (i.e. when the Authenticate flag is set to N). ⚠️ if this username doesn't exist and Authenticate is set to N, then incoming connections for that object will fail. like, full on ghosted.
  • Command β€” the name and arguments of the command to run when a connection comes in for that object.
    • if it's the string "internal" then the object gets handled by dnetd if it can. currently only MIRROR and arbitrary TASKs can be handled internally by dnetd.
    • if the name starts with a slash /, it's assumed to be the full path of the program to run.
    • if it doesn't start with a slash, dnetd will search its default directory for program files. iykyk 🧚

πŸ’€ NOTES πŸ’€

when an incoming connection is handled by dnetd, it forks and executes the command named in the command field with stdin and stdout pointing to the DECnet socket. stderr gets set to /dev/null (it's giving silent treatment, honestly relatable). the DECnet daemons supplied in the dnprogs suite automatically detect this, so they can be run from dnetd or standalone. flexible queen πŸ‘‘

there is a subtle difference between objects handled by the special name * and those explicitly named in the file, and the way that this is such a big deal, let me explain:

  • objects handled by name * internally are run under the control of a pseudo-tty, which means they appear to be talking to a terminal, and CR/LF conversion will be done, so that TYPE "0=TASK" will produce sensible output on VMS. ✨tty services✨
  • objects explicitly named just connect directly to the DECnet socket, so they cannot take advantage of tty services and do not have CR/LF conversion done for them. of course, these objects are more secure, because the system administrator has total control over which objects can be run. main character energy: security edition πŸ”’

dnetd will convert all task names to lower case. this is for convenience more than anything else, because VMS converts them to uppercase and all-uppercase file names are genuinely unwieldy on Unix 😭

it is recommended that arbitrary objects be run as a special anonymous user to avoid security problems. please bestie, listen to the manpage on this one πŸ™ˆ

and the best part: any changes to /etc/dnetd.conf will take effect immediately β€” you do not need to tell dnetd that it has changed. it just knows. iconic behavior, honestly. no reload, no restart, no "did you try turning it off and on again". periodt πŸ’…


🌈 EXAMPLE 🌈

this is the default file provided. note that the * object is commented out for security reasons β€” do not come for me, it's literally in the file:

# /etc/dnetd.conf
#
# name         number     auth?     user       command
#
FAL            17         Y         none       fal
MIRROR         25         Y         root       internal
MAIL           27         N         vmsmail    vmsmaild
CTERM          42         N         root       ctermd
DTERM          23         N         root       rmtermd
# *               0         Y         none       internal

look at her. a whole functional config file. we love to see it πŸŽ€


πŸ”₯ SEE ALSO πŸ”₯

go read those too, they're part of the lore 🫢


and that's the whole page, bestie!! this was the DECnet for Linux version, dated 5 December 1999 β€” so like, vintage. retro. a classic. she was slaying before we were even born and she's still serving βœ¨πŸ‘‘πŸ’–

πŸ“¦ where this page comes from