- Use heredoc instead of echo for password input (not visible in ps/proc) - Add username validation (alphanumeric, underscore, hyphen only) - Add share name validation (alphanumeric, space, underscore, hyphen) - Add path validation (must be absolute) - Replace 'which' with POSIX-compliant 'command -v' - Add logging for custom command execution - Improve error handling with proper quoting 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
3.0 KiB
Changelog
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog.
[Unreleased]
Added
- Performance optimizations (Dockerfile)
dead time = 30— disconnect idle clients after 30 seconds to free resourceslarge readwrite = yes— improved performance for large file transfersmax xmit = 65535— maximum packet size for better throughputwrite cache size = 1048576— 1MB write cache for improved write performance
Security
-
Secure password handling in user() function (samba.sh)
- Replaced
echowith heredoc for password input to prevent exposure in process list - Password is no longer visible via
psor/proc
- Replaced
-
Input validation for users and shares (samba.sh)
- Added username validation (alphanumeric, underscore, hyphen only)
- Added share name validation (alphanumeric, space, underscore, hyphen only)
- Added path validation (must be absolute path)
-
Improved command execution safety (samba.sh)
- Replaced
whichwith POSIX-compliantcommand -v - Added logging for custom command execution
- Improved error messages
- Replaced
Fixed
-
Fixed chown syntax error in perms function (samba.sh:122)
- Changed
smbuser.tosmbuser:smbfor correct group assignment
- Changed
-
Fixed paths with spaces handling in perms function (samba.sh:121)
- Replaced
forloop withwhile IFS= read -rto correctly handle paths containing spaces
- Replaced
-
Fixed unquoted variables in import function (samba.sh:112-113)
- Added quotes around
$filevariable to prevent word splitting issues
- Added quotes around
-
Removed /etc from VOLUME declaration (Dockerfile:83)
/etcis too broad and can cause unexpected behavior with system configurations
-
Share-specific parameters not overriding global settings (#issue)
Problem: When creating public shares with guest write access, the
-Gparameters for individual shares did not override the globalforce userandforce groupsettings from the basesmb.conf.Example that didn't work:
-s "public;/cloud/share;yes;no;yes" -G "public;force user = nobody" -G "public;force group = nogroup"testparm -sshowed that the share used globalforce user = smbuserandforce group = smbinstead of the specified values.Root cause:
- When using environment variables,
GENERICwas processed beforeSHARE, so share sections didn't exist when-Goptions tried to modify them. - The regex
\sin sed was not POSIX-compatible for Alpine/busybox.
Solution:
- Reordered environment variable processing:
SHAREis now processed beforeGENERIC - Replaced
\swith POSIX-compatible[[:space:]]in regex patterns - Added
^anchor to sed append command for precise matching
- When using environment variables,
Changed
- Environment variable processing order:
GLOBAL->SHARE->GENERIC(was:GENERIC->GLOBAL->SHARE)