fix(aura-gui): rename product to 'Aura' + uppercase SETENV in sudoers
Two bugs visible after user's first Install-admin-access click:
1) `visudo -c` rejected the fragment because sudoers tags must be UPPERCASE.
We wrote `setenv:` (lowercase) which sudoers does not recognise as a tag
and treats as a command path, producing a syntax error at column 29 of
/etc/sudoers.d/aura-gui:2 — and worse, the broken file stayed on disk
so every subsequent `sudo` complained about the syntax error too (sudo
still functions but the warning is noise).
Fix: drop the `setenv:` tag entirely. We never needed it — the GUI only
passes RUST_LOG to the child via env(), which `sudo -E` would forward
but we deliberately chose not to (smaller surface). Removing the tag
also removes the failure mode.
2) Product rename per user feedback ("переименуй пакет на просто Aura"):
- tauri.conf.json `productName` and window title: `aura-gui` -> `Aura`
- bundle now produces /Applications/Aura.app and Aura_0.1.0_aarch64.dmg
- identifier `ru.undergr0und.aura` was already correct, no change
- sudoers file is now /etc/sudoers.d/aura (was aura-gui), so the success
message and revert hint are updated accordingly
The internal MacOS/ binary is still named `aura-gui` (Tauri uses the Cargo
crate name there) — not user-visible, only the dev internals see it.
Manual cleanup also performed on the dev host:
- /Applications/aura-gui.app removed
- /etc/sudoers.d/aura-gui (the broken fragment from the first failed
install attempt) removed via `osascript ... with administrator
privileges` so sudo is no longer logging syntax errors
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -268,22 +268,25 @@ fn install_sudoers_admin(state: tauri::State<'_, Arc<AppState>>) -> Result<Strin
|
|||||||
#[cfg(unix)]
|
#[cfg(unix)]
|
||||||
{
|
{
|
||||||
// Sudoers fragment. `%admin` matches the macOS admin group (which the desktop user is
|
// Sudoers fragment. `%admin` matches the macOS admin group (which the desktop user is
|
||||||
// always a member of on a single-user Mac). `setenv:RUST_LOG` lets us forward verbose
|
// always a member of on a single-user Mac). Sudoers tags must be UPPERCASE — `SETENV:`
|
||||||
// logging from the GUI to the child without `sudo -E`.
|
// would be valid; we omit it because the GUI already sets RUST_LOG and we don't need
|
||||||
|
// sudo to pass it through (the env var inherits through sudo for explicitly named
|
||||||
|
// variables in /etc/sudoers `Defaults env_keep` — and aura has its own defaults anyway).
|
||||||
let fragment = format!(
|
let fragment = format!(
|
||||||
"# Installed by aura-gui — NOPASSWD for `aura client` only.\n\
|
"# Installed by Aura GUI — NOPASSWD for `aura client` only.\n\
|
||||||
%admin ALL=(root) NOPASSWD: setenv: {bin_path} client *\n"
|
%admin ALL=(root) NOPASSWD: {bin_path} client *\n"
|
||||||
);
|
);
|
||||||
|
|
||||||
// The shell script is run inside `osascript do shell script … with administrator
|
// The shell script is run inside `osascript do shell script … with administrator
|
||||||
// privileges`, which prompts via the native auth dialog and runs as root.
|
// privileges`, which prompts via the native auth dialog and runs as root. We write to
|
||||||
|
// a name-stable path (/etc/sudoers.d/aura) so subsequent installs overwrite cleanly.
|
||||||
let escaped = fragment.replace('"', "\\\"").replace('$', "\\$");
|
let escaped = fragment.replace('"', "\\\"").replace('$', "\\$");
|
||||||
let shell_cmd = format!(
|
let shell_cmd = format!(
|
||||||
"umask 077 && \
|
"umask 077 && \
|
||||||
cat > /etc/sudoers.d/aura-gui <<'AURA_GUI_EOF'\n{escaped}AURA_GUI_EOF\n\
|
cat > /etc/sudoers.d/aura <<'AURA_EOF'\n{escaped}AURA_EOF\n\
|
||||||
chown root:wheel /etc/sudoers.d/aura-gui && \
|
chown root:wheel /etc/sudoers.d/aura && \
|
||||||
chmod 0440 /etc/sudoers.d/aura-gui && \
|
chmod 0440 /etc/sudoers.d/aura && \
|
||||||
visudo -c -f /etc/sudoers.d/aura-gui"
|
visudo -c -f /etc/sudoers.d/aura"
|
||||||
);
|
);
|
||||||
let osa = format!(
|
let osa = format!(
|
||||||
"do shell script \"{}\" with administrator privileges",
|
"do shell script \"{}\" with administrator privileges",
|
||||||
@@ -306,8 +309,8 @@ fn install_sudoers_admin(state: tauri::State<'_, Arc<AppState>>) -> Result<Strin
|
|||||||
));
|
));
|
||||||
}
|
}
|
||||||
Ok(format!(
|
Ok(format!(
|
||||||
"✓ /etc/sudoers.d/aura-gui installed. The Connect button now spawns aura without \
|
"✓ /etc/sudoers.d/aura installed. The Connect button now spawns aura without \
|
||||||
a password prompt. To revert later: `sudo rm /etc/sudoers.d/aura-gui`."
|
a password prompt. To revert later: `sudo rm /etc/sudoers.d/aura`."
|
||||||
))
|
))
|
||||||
}
|
}
|
||||||
#[cfg(windows)]
|
#[cfg(windows)]
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"$schema": "https://schema.tauri.app/config/2",
|
"$schema": "https://schema.tauri.app/config/2",
|
||||||
"productName": "aura-gui",
|
"productName": "Aura",
|
||||||
"version": "0.1.0",
|
"version": "0.1.0",
|
||||||
"identifier": "ru.undergr0und.aura",
|
"identifier": "ru.undergr0und.aura",
|
||||||
"build": {
|
"build": {
|
||||||
@@ -12,7 +12,7 @@
|
|||||||
"app": {
|
"app": {
|
||||||
"windows": [
|
"windows": [
|
||||||
{
|
{
|
||||||
"title": "aura-gui",
|
"title": "Aura",
|
||||||
"width": 800,
|
"width": 800,
|
||||||
"height": 600
|
"height": 600
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user