fix(R-1187 a,b,d,f,g): .fab — links carried and restored safely, FIFOs refused, owners kept, busy and bad-path refusals, postgis + ON_ERROR_STOP

Red-proved (6 tests). Commit only.
This commit is contained in:
2026-10-26 20:26:02 +01:00
parent 1170b48e59
commit dfd0f8ec53
8 changed files with 321 additions and 31 deletions
+16 -2
View File
@@ -2,6 +2,7 @@ package appexport
import (
"archive/tar"
"gitea.dooplex.hu/admin/felhom-controller/internal/util"
"io"
"os"
"path/filepath"
@@ -289,7 +290,20 @@ func tarDirectoryExcluding(sourceDir, outputPath string, excludeRels []string) e
return nil
}
}
header, err := tar.FileInfoHeader(info, "")
// R-1187 (a): a symlink is carried AS A LINK (its target's bytes never — the walk used to copy them into the link
// header, the tar failed, and the whole folder was left out); a FIFO, socket or device stops the export with a
// sentence naming the path (os.Open on a FIFO used to HANG the export). Pinned by TestR1187a_*.
mode := info.Mode()
if mode&(os.ModeNamedPipe|os.ModeSocket|os.ModeDevice|os.ModeCharDevice|os.ModeIrregular) != 0 {
return util.MsgError("err.appexport.kulonleges_fajl", path)
}
link := ""
if mode&os.ModeSymlink != 0 {
if link, err = os.Readlink(path); err != nil {
return err
}
}
header, err := tar.FileInfoHeader(info, link)
if err != nil {
return err
}
@@ -297,7 +311,7 @@ func tarDirectoryExcluding(sourceDir, outputPath string, excludeRels []string) e
if err := tw.WriteHeader(header); err != nil {
return err
}
if info.IsDir() {
if info.IsDir() || link != "" {
return nil
}
f, err := os.Open(path)