A Linux command-line utility for administering Rapid SCADA v6 BaseDAT configuration files.
Rapid SCADA is an open-source industrial automation and SCADA system. It stores configuration -- users, roles, rights, and other tables -- in binary BaseDAT (.dat) files. Editing these files normally requires the Windows Administrator application. This tool fills the gap for Linux environments.
- Automate user management from shell scripts and Ansible playbooks
- Inspect and modify
user.datwithout the Windows GUI - Validate file integrity before and after changes
- Export/import user data as JSON for backup and migration
- No third-party dependencies -- pure Python standard library
- Linux (primary target)
- macOS / Windows (should work, but untested)
Requires Python 3.11+.
pip install rapidscada-adminOr with pipx (recommended for CLI tools):
pipx install rapidscada-admingit clone https://github.com/Shadow21AR/rapidscada-admin.git
cd rapidscada-admin
pip install .For development:
pip install -e .
pip install pytest ruffrapidscada-admin --versionEvery command takes the .dat file path as a positional argument. No files are hardcoded.
rapidscada-admin <command> [file] [options]
rapidscada-admin users <file> <subcommand> [options]# List all users
rapidscada-admin users user.dat list
# Show one user (displays full details including password hash)
rapidscada-admin users user.dat show --user admin
# Add a user
rapidscada-admin users user.dat add \
--name operator \
--password 'S3cur3P@ss!' \
--role 2 \
--description "Shift operator"
# Delete a user
rapidscada-admin users user.dat delete --user operator
# Rename a user
rapidscada-admin users user.dat rename --old-name operator --new-name op2
# Change password
rapidscada-admin users user.dat passwd --user admin --password 'NewP@ssw0rd!'
# Enable / disable account
rapidscada-admin users user.dat enable --user admin
rapidscada-admin users user.dat disable --user admin# Export all users to JSON
rapidscada-admin users user.dat export > users.json
# Import users from JSON
rapidscada-admin users user.dat import --input users.jsonCompute a Rapid SCADA password hash without modifying any file:
rapidscada-admin hash --password secret
rapidscada-admin hash --user-id 11 --password scadaCheck a BaseDAT file for corruption, schema errors, and duplicate entries:
rapidscada-admin verify user.datExit code 0 means valid, 1 means errors found.
Every mutating command follows a 7-step safety protocol:
- Verify schema -- required fields (
UserID,Enabled,Name,Password,RoleID) must be present - Create backup -- timestamped
.bakfile alongside the original, with automatic pruning (keeps last 5) - Write temporary file -- changes go to a temp file first
- Re-read temporary file -- parse the file we just wrote
- Validate -- check schema, duplicates, integrity
- Atomic replace --
os.replace()ensures no partial writes - Preserve permissions -- original file mode bits are restored after replace
A malformed .dat file can prevent Rapid SCADA from starting. Always verify before and after operations.
By default, a maximum of 5 backup files are kept per .dat file. Older backups are automatically deleted when this limit is exceeded. The backup filename format is <name>.YYYYMMDD-HHMMSS.bak.
- Only supports BaseDAT format version 4.x (Rapid SCADA v6)
- Does not support editing the Windows Administrator application's in-memory state
- Password hashing uses MD5 (matching the Rapid SCADA protocol -- not a general security recommendation)
- Does not validate RoleID values against
role.dat(role table is not yet supported)
This project uses Trusted Publishing (OIDC) -- no API tokens needed.
- Create an account on pypi.org
- Create the project at pypi.org/manage/project/publishing
- Add a GitHub publisher:
- Owner:
Shadow21AR - Repository:
rapidscada-admin - Workflow:
release.yml - Environment:
pypi
- Owner:
- In GitHub repo settings, create an environment named
pypi
git tag v1.0.0
git push origin v1.0.0The CI workflow runs on every push. The release workflow runs only on v* tags and publishes to PyPI.
Contributions are welcome. Please:
- Fork the repository
- Create a feature branch
- Add tests for new functionality
- Run
pytestandruff checkbefore submitting - Open a pull request