menu

module
v0.0.0-...-853189d Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 6, 2026 License: AGPL-3.0

README

modemmenu

A login and menu for dial-up callers, the first thing a caller sees once the modems connect.

modemmenu asks for a user name and password, shows the message of the day and offers a menu of what the caller may do: a bulletin board, PPP dial-up networking, a shell, or any program. It runs behind D-Modem's Asterisk module, app_dmodem, one process per call or one server for all of them.

Welcome to D-Modem.

Connected at 33600 bit/s.

login: alice
Password: ******

Hello alice, on 2026-10-10 at 21:05:09.

The line is down for maintenance on Sunday.

Main menu

  [B] Bulletin board
  [P] PPP (dial-up networking)
  [S] Shell
  [G] Goodbye (hang up)

Selection: ppp
  • Logins from a users file, LDAP, SQL (MySQL/MariaDB, PostgreSQL, SQLite) or system accounts through PAM
  • PPP dialers detected (AutoPPP and PAP), with a pppd plugin
  • Menus with access by user and group, guests and self sign-up
  • Each item starts with the caller's credentials and the call's details: dialed number, caller ID, connect rate, time
  • Drop files for doors, last callers, and handing a caller to another menu
  • A ready-made FreePBX setup (freepbx/)

Quick start

Go 1.22 or later:

make                                                    # with PAM when libpam's headers are there
make install                                            # /usr/local/bin/modemmenu and the samples
modemmenu -config /etc/asterisk/modemmenu.conf -check   # check the configuration

then point an app_dmodem profile at it (docs/running.md).

Documentation

The documentation is also a website, d-modem.github.io/menu, with reference pages made from the code.

docs/ has building, running, configuration, authentication, PPP, security and the tests. samples/modemmenu.conf.sample has every option.

The D-Modem suite

Repository What it is
D-Modem The open V.92 softmodem: dmodemd, libdmodem and the Asterisk, FreeSWITCH and ARI modules
app The D-Modem app for Android and iOS: a dial-up modem on a SIP call
hardware pico-serial: RP2040 serial adapters and phone-line USB sticks
menu modemmenu: the login and menu dial-up callers reach
bbs A bulletin board for telnet, SSH, TN3270 and modem callers
go3270 A Go library for 3270 terminal servers, used by bbs
brand Logos, colours, type and the naming guide

Licence

AGPL-3.0-only (LICENSE), or a commercial licence from the D-Modem Authors (COMMERCIAL-LICENSE.md). Contributions come with a contributor agreement (CONTRIBUTING.md).

If you modify modemmenu and offer it to callers, the AGPL's section 13 has you offer them its source: a menu item, the banner or the message of the day naming where it is will do.

Directories

Path Synopsis
Package authd is modemmenu's auth socket (authd in modemmenu.conf), for the programs that ask it: modemmenu's backends (its users file, LDAP, SQL, the system's accounts by PAM) answer whether a password is a user's, so that a BBS's other logins (telnet, SSH, the web) take the same one as the dial-up line.
Package authd is modemmenu's auth socket (authd in modemmenu.conf), for the programs that ask it: modemmenu's backends (its users file, LDAP, SQL, the system's accounts by PAM) answer whether a password is a user's, so that a BBS's other logins (telnet, SSH, the web) take the same one as the dial-up line.
cmd
modemmenu command
modemmenu: the login and menu of a dial-up line.
modemmenu: the login and menu of a dial-up line.
internal
auth
Package auth checks a user's password with modemmenu's backends (a users file, LDAP, SQL, the system's accounts by PAM), in turn, and changes it in the backend that holds the account.
Package auth checks a user's password with modemmenu's backends (a users file, LDAP, SQL, the system's accounts by PAM), in turn, and changes it in the backend that holds the account.
config
Package config reads modemmenu.conf: [sections] of key = value, the values as strings, yes/no, numbers and durations, and the {name} templates of its strings.
Package config reads modemmenu.conf: [sections] of key = value, the values as strings, yes/no, numbers and durations, and the {name} templates of its strings.
telnet
Package telnet is just enough of a telnet client for a BBS: binary, suppress go ahead and the server's echo, and the terminal type.
Package telnet is just enough of a telnet client for a BBS: binary, suppress go ahead and the server's echo, and the terminal type.
term
Package term is the caller's line: raw reads and writes with timeouts, line editing and echo, the questions that tell what terminal the caller has (ANSI, VT52, an ANSI terminal's identity), PETSCII for a Commodore, and a PPP frame told from typing.
Package term is the caller's line: raw reads and writes with timeouts, line editing and echo, the questions that tell what terminal the caller has (ANSI, VT52, an ANSI terminal's identity), PETSCII for a Commodore, and a PPP frame told from typing.
tools
confref command
Command confref writes docs/reference.md, the configuration reference: every section and key of modemmenu.conf, with the help, the sample's value and the other values the sample shows, all read from the comments of samples/modemmenu.conf.sample.
Command confref writes docs/reference.md, the configuration reference: every section and key of modemmenu.conf, with the help, the sample's value and the other values the sample shows, all read from the comments of samples/modemmenu.conf.sample.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL