From 1b8807010d50030e08d47c55e2f5b4d916ca7137 Mon Sep 17 00:00:00 2001 From: DCreason Date: Thu, 19 Mar 2026 15:46:22 +0000 Subject: [PATCH] wrtie config needs sudo usually --- README.md | 1 + app.go | 80 +++++++++++++++++++++++++++++++++++++++++++++---- samba-configer | Bin 2979918 -> 2992388 bytes 3 files changed, 76 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 40c99b3..04ce50e 100644 --- a/README.md +++ b/README.md @@ -25,6 +25,7 @@ The program: - Checks `valid users` entries against local accounts. - Offers to create missing local accounts with `useradd -M -s /usr/sbin/nologin `. - If user creation fails because admin rights are needed, explains the issue and offers to retry with `sudo`. +- If saving the Samba config or its backup needs admin rights, explains the issue and offers to retry with `sudo`. - Writes a timestamped backup before saving changes. If you create a local account for a Samba-authenticated share, you may still need to add the Samba password separately: diff --git a/app.go b/app.go index f1738e5..36888c1 100644 --- a/app.go +++ b/app.go @@ -238,12 +238,20 @@ func (a *App) deleteShare(doc *Document) error { func (a *App) writeConfig(doc *Document) error { backup := fmt.Sprintf("%s.bak.%s", a.configPath, time.Now().UTC().Format("20060102T150405Z")) + serialized := doc.Serialize() + if err := copyFile(a.configPath, backup); err != nil { - return fmt.Errorf("create backup %s: %w", backup, err) + if shouldOfferPrivilegeRetry(err) { + return a.writeConfigWithPrivilegeRetry(serialized, backup) + } + return friendlyWriteError("create backup", backup, err) } - if err := os.WriteFile(a.configPath, []byte(doc.Serialize()), 0o644); err != nil { - return fmt.Errorf("write config: %w", err) + if err := os.WriteFile(a.configPath, []byte(serialized), 0o644); err != nil { + if shouldOfferPrivilegeRetry(err) { + return a.writeConfigWithPrivilegeRetry(serialized, backup) + } + return friendlyWriteError("write config", a.configPath, err) } a.printf("Config written to %s\n", a.configPath) @@ -357,7 +365,7 @@ func (a *App) createUser(name string) error { args := []string{"-M", "-s", "/usr/sbin/nologin", name} if err := a.runner.Run("useradd", args...); err == nil { return nil - } else if shouldOfferSudoRetry(err) { + } else if shouldOfferPrivilegeRetry(err) { a.println("") a.println("Creating a Linux user usually needs administrator permission.") a.println("I can try again using sudo so you can enter your admin password.") @@ -468,7 +476,7 @@ func copyFile(src, dst string) error { return os.WriteFile(dst, data, 0o644) } -func shouldOfferSudoRetry(err error) bool { +func shouldOfferPrivilegeRetry(err error) bool { if os.Geteuid() == 0 { return false } @@ -478,3 +486,65 @@ func shouldOfferSudoRetry(err error) bool { strings.Contains(text, "operation not permitted") || strings.Contains(text, "exit status") } + +func (a *App) writeConfigWithPrivilegeRetry(serialized, backup string) error { + a.println("") + a.println("Saving Samba settings usually needs administrator permission.") + a.println("I can try again using sudo so you can enter your admin password.") + a.flush() + + canUseSudo := false + if a.lookPath != nil { + _, sudoErr := a.lookPath("sudo") + canUseSudo = sudoErr == nil + } + if !canUseSudo { + return friendlyWriteError("save Samba settings", a.configPath, os.ErrPermission) + } + + retry, err := a.confirm("Retry saving with sudo", true) + if err != nil { + return err + } + if !retry { + return friendlyWriteError("save Samba settings", a.configPath, os.ErrPermission) + } + + tempPath, err := a.writeTempConfig(serialized) + if err != nil { + return fmt.Errorf("prepare config for sudo save: %w", err) + } + defer os.Remove(tempPath) + + if err := a.runner.Run("sudo", "cp", a.configPath, backup); err != nil { + return friendlyWriteError("create backup", backup, err) + } + + if err := a.runner.Run("sudo", "install", "-m", "644", tempPath, a.configPath); err != nil { + return friendlyWriteError("write config", a.configPath, err) + } + + a.printf("Config written to %s\n", a.configPath) + a.printf("Backup saved to %s\n", backup) + return nil +} + +func (a *App) writeTempConfig(serialized string) (string, error) { + file, err := os.CreateTemp("", "samba-configer-*.conf") + if err != nil { + return "", err + } + defer file.Close() + + if _, err := file.WriteString(serialized); err != nil { + return "", err + } + return file.Name(), nil +} + +func friendlyWriteError(action, path string, err error) error { + if errors.Is(err, os.ErrPermission) || strings.Contains(strings.ToLower(err.Error()), "permission denied") { + return fmt.Errorf("%s %s: administrator permission is needed", action, path) + } + return fmt.Errorf("%s %s: %w", action, path, err) +} diff --git a/samba-configer b/samba-configer index 3f3b188355605bd11cc265a6068c0d45e23b409b..14108280a5c656549c97da48c024872df9e757b4 100755 GIT binary patch delta 1201220 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