Skip to content

Commit 38c812a

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 0efcb334c2f123d0869a30d684189eb31e8b983f) (cherry picked from commit 04ef02c0dd98c7437acb39383d311c0901366508) (cherry picked from commit 85f2065c9bc6ded9c21909ec76a9e8fc2d22f462) (cherry picked from commit 8d36b5cce66864e190bad3c9b0973e37ca774a22) (cherry picked from commit 378dc30fb5a88ffe185c54de7e69224289038bff) (cherry picked from commit 2b28bf826e51b8ccb4a693001c03ffe6132f7842) (cherry picked from commit d0625a001e5f8fe202865bec7aadcf0c551d556d) (cherry picked from commit f161a4f60f1cde80a41bece4929836257b9e0423) (cherry picked from commit 7430ca43e57683ca324fb20269a60e05cb393589) (cherry picked from commit ab6d38daf7eeb1dc993bfc0ac1a326af65128168) (cherry picked from commit 0f703fd02e69bdcf2f77e120ff8641f1b8089020) (cherry picked from commit 6931a8f) (cherry picked from commit 5e2065c)
1 parent 43d2181 commit 38c812a

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)