Skip to content

Commit d6432ca

Browse files
Gustedearl-warren
authored andcommitted
[GITEA] Make atomic ssh keys replacement robust
- After stumbling upon golang/go#22397 and reading the implementations I realized that Forgejo code doesn't have `Sync()` and it doesn't properly error handle the `Close` function. - (likely) Resolves https://codeberg.org/forgejo/forgejo/issues/1446 (cherry picked from commit 0efcb33) (cherry picked from commit 04ef02c) (cherry picked from commit 85f2065) (cherry picked from commit 8d36b5c) (cherry picked from commit 0f406dc) (cherry picked from commit 347a2e7) (cherry picked from commit f6c04d6) (cherry picked from commit cf8b64f)
1 parent a7a7470 commit d6432ca

File tree

2 files changed

+12
-2
lines changed

2 files changed

+12
-2
lines changed

models/asymkey/ssh_key_authorized_keys.go

+6-1
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,12 @@ func RewriteAllPublicKeys(ctx context.Context) error {
169169
return err
170170
}
171171

172-
t.Close()
172+
if err := t.Sync(); err != nil {
173+
return err
174+
}
175+
if err := t.Close(); err != nil {
176+
return err
177+
}
173178
return util.Rename(tmpPath, fPath)
174179
}
175180

models/asymkey/ssh_key_authorized_principals.go

+6-1
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,12 @@ func RewriteAllPrincipalKeys(ctx context.Context) error {
9292
return err
9393
}
9494

95-
t.Close()
95+
if err := t.Sync(); err != nil {
96+
return err
97+
}
98+
if err := t.Close(); err != nil {
99+
return err
100+
}
96101
return util.Rename(tmpPath, fPath)
97102
}
98103

0 commit comments

Comments
 (0)