mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-08-26 18:41:17 +00:00
Rewrite openvzSetUUID.
* src/openvz_conf.c (openvzSetUUID): Rewrite to avoid unchecked lseek, write, and close as well as a potential file descriptor leak.
This commit is contained in:
parent
5fc07cd840
commit
9bcade46df
@ -1,5 +1,9 @@
|
||||
Thu Feb 21 19:22:10 CET 2008 Jim Meyering <meyering@redhat.com>
|
||||
|
||||
Rewrite openvzSetUUID.
|
||||
* src/openvz_conf.c (openvzSetUUID): Rewrite to avoid unchecked
|
||||
lseek, write, and close as well as a potential file descriptor leak.
|
||||
|
||||
Handle failed openvzLocateConfDir.
|
||||
* src/openvz_conf.c (openvzLocateConfDir, openvzGetVPSUUID):
|
||||
(openvzSetUUID): Don't dereference NULL upon failure.
|
||||
|
@ -677,7 +677,6 @@ openvzSetUUID(int vpsid)
|
||||
char uuidstr[VIR_UUID_STRING_BUFLEN];
|
||||
unsigned char uuid[VIR_UUID_BUFLEN];
|
||||
char *conf_dir;
|
||||
int fd, ret;
|
||||
|
||||
conf_dir = openvzLocateConfDir();
|
||||
if (conf_dir == NULL)
|
||||
@ -685,23 +684,22 @@ openvzSetUUID(int vpsid)
|
||||
sprintf(conf_file, "%s/%d.conf", conf_dir, vpsid);
|
||||
free(conf_dir);
|
||||
|
||||
fd = open(conf_file, O_RDWR);
|
||||
if(fd == -1)
|
||||
return -1;
|
||||
|
||||
ret = openvzGetVPSUUID(vpsid, uuidstr);
|
||||
if(ret == -1)
|
||||
if (openvzGetVPSUUID(vpsid, uuidstr))
|
||||
return -1;
|
||||
|
||||
if (uuidstr[0] == 0) {
|
||||
FILE *fp = fopen(conf_file, "a"); /* append */
|
||||
if (fp == NULL)
|
||||
return -1;
|
||||
|
||||
virUUIDGenerate(uuid);
|
||||
virUUIDFormat(uuid, uuidstr);
|
||||
|
||||
lseek(fd, 0, SEEK_END);
|
||||
write(fd, "\n#UUID: ", 8);
|
||||
write(fd, uuidstr, strlen(uuidstr));
|
||||
write(fd, "\n", 1);
|
||||
close(fd);
|
||||
/* Record failure if fprintf or fclose fails,
|
||||
and be careful always to close the stream. */
|
||||
if ((fprintf(fp, "\n#UUID: %s\n", uuidstr) < 0)
|
||||
+ (fclose(fp) == EOF))
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
Loading…
Reference in New Issue
Block a user