mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-23 06:05:27 +00:00
dnsmasq: Fix errno handling and don't unlink non-existing files
addnhostsSave and hostsfileSave expect < 0 return value on error from addnhostsWrite and hostsfileWrite but then pass err instead of -err to virReportSystemError that expects an errno value. Also addnhostsWrite returns -ENOMEM and errno, change this to -errno. addnhostsWrite and hostsfileWrite tried to unlink the tempfile after renaming it, making both fail on the final step. Remove the unnecessary unlink calls.
This commit is contained in:
parent
9fdeaeef89
commit
8cce5436dd
@ -185,14 +185,14 @@ addnhostsWrite(const char *path,
|
|||||||
if (!(f = fopen(tmp, "w"))) {
|
if (!(f = fopen(tmp, "w"))) {
|
||||||
istmp = false;
|
istmp = false;
|
||||||
if (!(f = fopen(path, "w"))) {
|
if (!(f = fopen(path, "w"))) {
|
||||||
rc = errno;
|
rc = -errno;
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < nhosts; i++) {
|
for (i = 0; i < nhosts; i++) {
|
||||||
if (fputs(hosts[i].ip, f) == EOF || fputc('\t', f) == EOF) {
|
if (fputs(hosts[i].ip, f) == EOF || fputc('\t', f) == EOF) {
|
||||||
rc = errno;
|
rc = -errno;
|
||||||
VIR_FORCE_FCLOSE(f);
|
VIR_FORCE_FCLOSE(f);
|
||||||
|
|
||||||
if (istmp)
|
if (istmp)
|
||||||
@ -203,7 +203,7 @@ addnhostsWrite(const char *path,
|
|||||||
|
|
||||||
for (ii = 0; ii < hosts[i].nhostnames; ii++) {
|
for (ii = 0; ii < hosts[i].nhostnames; ii++) {
|
||||||
if (fputs(hosts[i].hostnames[ii], f) == EOF || fputc('\t', f) == EOF) {
|
if (fputs(hosts[i].hostnames[ii], f) == EOF || fputc('\t', f) == EOF) {
|
||||||
rc = errno;
|
rc = -errno;
|
||||||
VIR_FORCE_FCLOSE(f);
|
VIR_FORCE_FCLOSE(f);
|
||||||
|
|
||||||
if (istmp)
|
if (istmp)
|
||||||
@ -214,7 +214,7 @@ addnhostsWrite(const char *path,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (fputc('\n', f) == EOF) {
|
if (fputc('\n', f) == EOF) {
|
||||||
rc = errno;
|
rc = -errno;
|
||||||
VIR_FORCE_FCLOSE(f);
|
VIR_FORCE_FCLOSE(f);
|
||||||
|
|
||||||
if (istmp)
|
if (istmp)
|
||||||
@ -225,21 +225,14 @@ addnhostsWrite(const char *path,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (VIR_FCLOSE(f) == EOF) {
|
if (VIR_FCLOSE(f) == EOF) {
|
||||||
rc = errno;
|
rc = -errno;
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (istmp) {
|
if (istmp && rename(tmp, path) < 0) {
|
||||||
if (rename(tmp, path) < 0) {
|
rc = -errno;
|
||||||
rc = errno;
|
unlink(tmp);
|
||||||
unlink(tmp);
|
goto cleanup;
|
||||||
goto cleanup;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (unlink(tmp) < 0) {
|
|
||||||
rc = errno;
|
|
||||||
goto cleanup;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
@ -255,7 +248,7 @@ addnhostsSave(dnsmasqAddnHostsfile *addnhostsfile)
|
|||||||
addnhostsfile->nhosts);
|
addnhostsfile->nhosts);
|
||||||
|
|
||||||
if (err < 0) {
|
if (err < 0) {
|
||||||
virReportSystemError(err, _("cannot write config file '%s'"),
|
virReportSystemError(-err, _("cannot write config file '%s'"),
|
||||||
addnhostsfile->path);
|
addnhostsfile->path);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@ -402,17 +395,10 @@ hostsfileWrite(const char *path,
|
|||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (istmp) {
|
if (istmp && rename(tmp, path) < 0) {
|
||||||
if (rename(tmp, path) < 0) {
|
rc = -errno;
|
||||||
rc = -errno;
|
unlink(tmp);
|
||||||
unlink(tmp);
|
goto cleanup;
|
||||||
goto cleanup;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (unlink(tmp) < 0) {
|
|
||||||
rc = -errno;
|
|
||||||
goto cleanup;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
@ -428,7 +414,7 @@ hostsfileSave(dnsmasqHostsfile *hostsfile)
|
|||||||
hostsfile->nhosts);
|
hostsfile->nhosts);
|
||||||
|
|
||||||
if (err < 0) {
|
if (err < 0) {
|
||||||
virReportSystemError(err, _("cannot write config file '%s'"),
|
virReportSystemError(-err, _("cannot write config file '%s'"),
|
||||||
hostsfile->path);
|
hostsfile->path);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user