From: Jim Meyering Date: Thu, 21 Feb 2008 18:48:06 +0000 (+0000) Subject: Rewrite openvzSetUUID. X-Git-Tag: LIBVIRT_0_4_1~31 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=9bcade46dfe7b17400d06ae93287bed74ec60e61;p=thirdparty%2Flibvirt.git Rewrite openvzSetUUID. * src/openvz_conf.c (openvzSetUUID): Rewrite to avoid unchecked lseek, write, and close as well as a potential file descriptor leak. --- diff --git a/ChangeLog b/ChangeLog index 54ac292ee4..bc0cdec4c0 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,9 @@ Thu Feb 21 19:22:10 CET 2008 Jim Meyering + 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. diff --git a/src/openvz_conf.c b/src/openvz_conf.c index 79d1e90f56..364cb2505d 100644 --- a/src/openvz_conf.c +++ b/src/openvz_conf.c @@ -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) + if (openvzGetVPSUUID(vpsid, uuidstr)) return -1; - ret = openvzGetVPSUUID(vpsid, uuidstr); - if(ret == -1) - return -1; + if (uuidstr[0] == 0) { + FILE *fp = fopen(conf_file, "a"); /* append */ + if (fp == NULL) + return -1; - if(uuidstr[0] == 0) { 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;