Skip to content

Building

Go 1.22 or later:

make                    # or: go build ./cmd/modemmenu (-tags pam for PAM)
make PAM=0              # without PAM, when libpam's headers are there
make test
make install            # /usr/local/bin/modemmenu, and the samples into
                        # /etc/asterisk (and /etc/pam.d) if there are none

make builds with PAM when libpam's headers are installed (libpam0g-dev on Debian and Ubuntu, pam-devel on Fedora). Without them modemmenu builds with the other backends, and auth = system is a configuration error.

The source

One Go module, one program:

Where What
cmd/modemmenu/ the program: the login, the menu, access rules and time limits, the selections, -serve, AutoPPP, drop files, the auth socket's server
internal/config/ modemmenu.conf's sections and keys, and the {name} templates
internal/term/ the caller's line: reads, writes and line editing, terminal detection, PETSCII
internal/auth/ the backends (users file, LDAP, SQL, system by PAM) and password changes
internal/telnet/ the telnet client of mode = telnet items
authd/ the auth socket's protocol and a client, for other programs (a BBS) to import
pppd/ pppd's modemmenu.so plugin, in C
dialup/ the PPP callers' network: VRF, firewall, DNS with overrides (make install-dialup)
samples/ modemmenu.conf, the users file, PAM and systemd samples
freepbx/ the FreePBX setup
tools/confref/ makes docs/reference.md from samples/modemmenu.conf.sample