Skip to content

Commit 10c8ca6

Browse files
n0tooseGusted
authored andcommitted
refactor(cli): improve dump's temporary file handling (go-gitea#7350)
- Create temporary directory inside of a temporary directory (useful for a work-in-progress Landlock implementation, as we will not want to "whitelist" the entirety of the /tmp directory in our case, i.e. /tmp/forgejo-dump-133552095). - The database is always removed after dump is complete. - The temporary directory is removed if no temporary directory has been explicitly set (as in, created by Forgejo in /tmp or equivalent). Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/7350 Reviewed-by: Gusted <[email protected]> Co-authored-by: Panagiotis "Ivory" Vasilopoulos <[email protected]> Co-committed-by: Panagiotis "Ivory" Vasilopoulos <[email protected]>
1 parent a9faf1f commit 10c8ca6

File tree

1 file changed

+15
-3
lines changed

1 file changed

+15
-3
lines changed

cmd/dump.go

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,6 @@ It can be used for backup and capture Forgejo server image to send to maintainer
122122
&cli.StringFlag{
123123
Name: "tempdir",
124124
Aliases: []string{"t"},
125-
Value: os.TempDir(),
126125
Usage: "Temporary dir path",
127126
},
128127
&cli.StringFlag{
@@ -288,18 +287,31 @@ func runDump(ctx *cli.Context) error {
288287
}
289288

290289
tmpDir := ctx.String("tempdir")
290+
if tmpDir == "" {
291+
tmpDir, err = os.MkdirTemp("", "forgejo-dump-*")
292+
if err != nil {
293+
fatal("Failed to create temporary directory: %v", err)
294+
}
295+
296+
defer func() {
297+
if err := util.Remove(tmpDir); err != nil {
298+
log.Warn("Failed to remove temporary directory: %s: Error: %v", tmpDir, err)
299+
}
300+
}()
301+
}
302+
291303
if _, err := os.Stat(tmpDir); os.IsNotExist(err) {
292304
fatal("Path does not exist: %s", tmpDir)
293305
}
294306

295307
dbDump, err := os.CreateTemp(tmpDir, "forgejo-db.sql")
296308
if err != nil {
297-
fatal("Failed to create tmp file: %v", err)
309+
fatal("Failed to create temporary file: %v", err)
298310
}
299311
defer func() {
300312
_ = dbDump.Close()
301313
if err := util.Remove(dbDump.Name()); err != nil {
302-
log.Warn("Failed to remove temporary file: %s: Error: %v", dbDump.Name(), err)
314+
log.Warn("Failed to remove temporary database file: %s: Error: %v", dbDump.Name(), err)
303315
}
304316
}()
305317

0 commit comments

Comments
 (0)