From 23c38cd2f15acecba8e3db6724709d4b97ac4072 Mon Sep 17 00:00:00 2001 From: CyberMind-FR Date: Mon, 16 Feb 2026 12:38:55 +0100 Subject: [PATCH] feat(mailserver): Add alias management via ubus - Fix alias_add RPCD to read JSON from stdin (ubus compatibility) - Add alias_del function to users.sh - Add alias del command to mailctl - Add alias_del RPCD method Tested: alias_add, alias_list, alias_del all work via ubus call Co-Authored-By: Claude Opus 4.5 --- .../root/usr/libexec/rpcd/luci.mailserver | 31 ++++++++++++++++++- .../files/usr/lib/mailserver/users.sh | 21 +++++++++++++ .../files/usr/sbin/mailctl | 2 ++ 3 files changed, 53 insertions(+), 1 deletion(-) diff --git a/package/secubox/luci-app-mailserver/root/usr/libexec/rpcd/luci.mailserver b/package/secubox/luci-app-mailserver/root/usr/libexec/rpcd/luci.mailserver index c822dd6a..981cbdd4 100644 --- a/package/secubox/luci-app-mailserver/root/usr/libexec/rpcd/luci.mailserver +++ b/package/secubox/luci-app-mailserver/root/usr/libexec/rpcd/luci.mailserver @@ -23,6 +23,7 @@ case "$1" in "user_del": { "email": "string" }, "user_passwd": { "email": "string", "password": "string" }, "alias_add": { "alias": "string", "target": "string" }, + "alias_del": { "alias": "string" }, "dns_setup": {}, "ssl_setup": {}, "webmail_configure": {}, @@ -275,7 +276,13 @@ case "$1" in ;; alias_add) - json_load "$3" + # Read JSON from stdin or $3 + if [ -n "$3" ]; then + json_load "$3" + else + read -r _input + json_load "$_input" + fi json_get_var aalias alias json_get_var target target @@ -291,6 +298,28 @@ case "$1" in json_dump ;; + alias_del) + # Read JSON from stdin or $3 + if [ -n "$3" ]; then + json_load "$3" + else + read -r _input + json_load "$_input" + fi + json_get_var aalias alias + + json_init + if [ -z "$aalias" ]; then + json_add_int "code" 1 + json_add_string "error" "Alias required" + else + output=$($MAILCTL alias del "$aalias" 2>&1) + json_add_int "code" "$?" + json_add_string "output" "$output" + fi + json_dump + ;; + dns_setup) json_init output=$($MAILCTL dns-setup 2>&1) diff --git a/package/secubox/secubox-app-mailserver/files/usr/lib/mailserver/users.sh b/package/secubox/secubox-app-mailserver/files/usr/lib/mailserver/users.sh index 0e731cdb..b9ef5177 100644 --- a/package/secubox/secubox-app-mailserver/files/usr/lib/mailserver/users.sh +++ b/package/secubox/secubox-app-mailserver/files/usr/lib/mailserver/users.sh @@ -156,6 +156,27 @@ alias_add() { echo "Alias added: $alias → $target" } +# Delete alias +alias_del() { + local alias="$1" + + [ -z "$alias" ] && { echo "Usage: alias_del "; return 1; } + + local container=$(get_container) + local data_path=$(get_data_path) + local valias="$data_path/config/valias" + + if [ ! -f "$valias" ] || ! grep -q "^$alias " "$valias"; then + echo "Alias not found: $alias" + return 1 + fi + + sed -i "/^$alias /d" "$valias" + lxc-attach -n "$container" -- postmap /etc/postfix/valias 2>/dev/null + + echo "Alias deleted: $alias" +} + # List aliases alias_list() { local data_path=$(get_data_path) diff --git a/package/secubox/secubox-app-mailserver/files/usr/sbin/mailctl b/package/secubox/secubox-app-mailserver/files/usr/sbin/mailctl index 37d56962..fc6633e6 100644 --- a/package/secubox/secubox-app-mailserver/files/usr/sbin/mailctl +++ b/package/secubox/secubox-app-mailserver/files/usr/sbin/mailctl @@ -172,10 +172,12 @@ cmd_alias() { case "$action" in add) alias_add "$@" ;; + del) alias_del "$@" ;; list) alias_list ;; *) echo "Alias commands:" echo " alias add Add email alias" + echo " alias del Delete email alias" echo " alias list List aliases" ;; esac