mirror of
http://galexander.org/git/simplesshd.git
synced 2025-01-01 02:40:52 +00:00
use rename() if the underlying filesystem doesn't support link()
This commit is contained in:
parent
bb8753a5a6
commit
80bb4d95c9
@ -143,10 +143,11 @@ int signkey_generate(enum signkey_type keytype, int bits, const char* filename,
|
|||||||
if (link(fn_temp, filename) < 0) {
|
if (link(fn_temp, filename) < 0) {
|
||||||
/* If generating keys on connection (skipexist) it's OK to get EEXIST
|
/* If generating keys on connection (skipexist) it's OK to get EEXIST
|
||||||
- we probably just lost a race with another connection to generate the key */
|
- we probably just lost a race with another connection to generate the key */
|
||||||
if (!(skip_exist && errno == EEXIST)) {
|
/* fallback to rename() if the fs doesn't support link() */
|
||||||
|
if ((!(skip_exist && errno == EEXIST)) &&
|
||||||
|
(rename(fn_temp, filename) < 0)) {
|
||||||
dropbear_log(LOG_ERR, "Failed moving key file to %s: %s", filename,
|
dropbear_log(LOG_ERR, "Failed moving key file to %s: %s", filename,
|
||||||
strerror(errno));
|
strerror(errno));
|
||||||
/* XXX fallback to non-atomic copy for some filesystems? */
|
|
||||||
ret = DROPBEAR_FAILURE;
|
ret = DROPBEAR_FAILURE;
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user