Fixes for resource leaks foudn with Coverity.
Bug 173, 174, 175, 176 and 177
This commit is contained in:
parent
2135a76f7b
commit
9fe7a83675
@ -122,7 +122,10 @@ char uname[80], passwd[80];
|
||||
if ((fp = fopen(fname, "r")) == NULL)
|
||||
return NULL;
|
||||
if ((rval = users_alloc()) == NULL)
|
||||
{
|
||||
fclose(fp);
|
||||
return NULL;
|
||||
}
|
||||
while (fscanf(fp, "%[^:]:%s\n", uname, passwd) == 2)
|
||||
{
|
||||
users_add(rval, uname, passwd);
|
||||
@ -274,13 +277,15 @@ char* admin_remove_user(
|
||||
* Scan passwd and copy all but matching lines to temp file.
|
||||
*/
|
||||
if (fgetpos(fp, &rpos) != 0) {
|
||||
int err = errno;
|
||||
skygw_log_write( LOGFILE_ERROR,
|
||||
int err = errno;
|
||||
skygw_log_write( LOGFILE_ERROR,
|
||||
"Unable to process passwd file %s : errno %d.\n"
|
||||
"Removing user from file failed, and must be done manually.",
|
||||
fname,
|
||||
err);
|
||||
return ADMIN_ERR_PWDFILEACCESS;
|
||||
fclose(fp_tmp);
|
||||
unlink(fname_tmp);
|
||||
return ADMIN_ERR_PWDFILEACCESS;
|
||||
}
|
||||
|
||||
while (fscanf(fp, "%[^:]:%s\n", fusr, fpwd) == 2)
|
||||
@ -303,6 +308,8 @@ char* admin_remove_user(
|
||||
"done manually.",
|
||||
fname,
|
||||
err);
|
||||
fclose(fp_tmp);
|
||||
unlink(fname_tmp);
|
||||
return ADMIN_ERR_PWDFILEACCESS;
|
||||
}
|
||||
}
|
||||
@ -311,14 +318,15 @@ char* admin_remove_user(
|
||||
* Replace original passwd file with new.
|
||||
*/
|
||||
if (rename(fname_tmp, fname)) {
|
||||
int err = errno;
|
||||
skygw_log_write( LOGFILE_ERROR,
|
||||
int err = errno;
|
||||
skygw_log_write( LOGFILE_ERROR,
|
||||
"Unable to rename new passwd file %s : errno %d.\n"
|
||||
"Rename it to %s manually.",
|
||||
fname_tmp,
|
||||
err,
|
||||
fname);
|
||||
return ADMIN_ERR_PWDFILEACCESS;
|
||||
unlink(fname_tmp);
|
||||
return ADMIN_ERR_PWDFILEACCESS;
|
||||
}
|
||||
|
||||
fclose(fp_tmp);
|
||||
|
@ -376,6 +376,7 @@ int eno = 0;
|
||||
|
||||
if (n < 0)
|
||||
{
|
||||
gwbuf_free(buffer);
|
||||
if ((errno == EAGAIN) || (errno == EWOULDBLOCK))
|
||||
{
|
||||
return n;
|
||||
@ -387,6 +388,7 @@ int eno = 0;
|
||||
}
|
||||
else if (n == 0)
|
||||
{
|
||||
gwbuf_free(buffer);
|
||||
return n;
|
||||
}
|
||||
|
||||
|
@ -106,9 +106,11 @@ int gw_read_gwbuff(DCB *dcb, GWBUF **head, int b) {
|
||||
if (n < 0) {
|
||||
if ((errno == EAGAIN) || (errno == EWOULDBLOCK)) {
|
||||
fprintf(stderr, "Client connection %i: continue for %i, %s\n", dcb->fd, errno, strerror(errno));
|
||||
gwbuf_free(buffer);
|
||||
return 1;
|
||||
} else {
|
||||
fprintf(stderr, "Client connection %i error: %i, %s\n", dcb->fd, errno, strerror(errno));;
|
||||
gwbuf_free(buffer);
|
||||
(dcb->func).close(dcb);
|
||||
return 1;
|
||||
}
|
||||
@ -117,6 +119,7 @@ int gw_read_gwbuff(DCB *dcb, GWBUF **head, int b) {
|
||||
if (n == 0) {
|
||||
// socket closed
|
||||
fprintf(stderr, "Client connection %i closed: %i, %s\n", dcb->fd, errno, strerror(errno));
|
||||
gwbuf_free(buffer);
|
||||
(dcb->func).close(dcb);
|
||||
return 1;
|
||||
}
|
||||
|
@ -106,12 +106,14 @@ int fd;
|
||||
/* read all data from file */
|
||||
if (read(fd, keys, sizeof(MAXKEYS)) != sizeof(MAXKEYS))
|
||||
{
|
||||
free(keys);
|
||||
skygw_log_write( LOGFILE_ERROR, "secrets_readKeys, failed reading from secret file [%s]. Error %i, %s\n", secret_file, errno, strerror(errno));
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* Close the file */
|
||||
if (close(fd) < 0) {
|
||||
free(keys);
|
||||
skygw_log_write( LOGFILE_ERROR, "secrets_readKeys, failed closing the secret file [%s]. Error %i, %s\n", secret_file, errno, strerror(errno));
|
||||
return NULL;
|
||||
}
|
||||
@ -188,14 +190,22 @@ int enlen;
|
||||
return strdup(crypt);
|
||||
/* If the input is not a HEX string return the input - it probably was not encrypted */
|
||||
for (ptr = crypt; *ptr; ptr++)
|
||||
{
|
||||
if (!isxdigit(*ptr))
|
||||
{
|
||||
free(keys);
|
||||
return strdup(crypt);
|
||||
}
|
||||
}
|
||||
|
||||
enlen = strlen(crypt) / 2;
|
||||
gw_hex2bin(encrypted, crypt, strlen(crypt));
|
||||
|
||||
if ((plain = (unsigned char *)malloc(80)) == NULL)
|
||||
{
|
||||
free(keys);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
AES_set_decrypt_key(keys->enckey, 8 * MAXSCALE_KEYLEN, &aeskey);
|
||||
|
||||
|
@ -182,6 +182,7 @@ void
|
||||
dprintAllServers(DCB *dcb)
|
||||
{
|
||||
SERVER *ptr;
|
||||
char *stat;
|
||||
|
||||
spinlock_acquire(&server_spin);
|
||||
ptr = allServers;
|
||||
@ -189,7 +190,9 @@ SERVER *ptr;
|
||||
{
|
||||
dcb_printf(dcb, "Server %p\n", ptr);
|
||||
dcb_printf(dcb, "\tServer: %s\n", ptr->name);
|
||||
dcb_printf(dcb, "\tStatus: %s\n", server_status(ptr));
|
||||
stat = server_status(ptr);
|
||||
dcb_printf(dcb, "\tStatus: %s\n", stat);
|
||||
free(stat);
|
||||
dcb_printf(dcb, "\tProtocol: %s\n", ptr->protocol);
|
||||
dcb_printf(dcb, "\tPort: %d\n", ptr->port);
|
||||
dcb_printf(dcb, "\tNumber of connections: %d\n", ptr->stats.n_connections);
|
||||
@ -208,9 +211,13 @@ SERVER *ptr;
|
||||
void
|
||||
dprintServer(DCB *dcb, SERVER *server)
|
||||
{
|
||||
char *stat;
|
||||
|
||||
dcb_printf(dcb, "Server %p\n", server);
|
||||
dcb_printf(dcb, "\tServer: %s\n", server->name);
|
||||
dcb_printf(dcb, "\tStatus: %s\n", server_status(server));
|
||||
stat = server_status(server);
|
||||
dcb_printf(dcb, "\tStatus: %s\n", stat);
|
||||
free(stat);
|
||||
dcb_printf(dcb, "\tProtocol: %s\n", server->protocol);
|
||||
dcb_printf(dcb, "\tPort: %d\n", server->port);
|
||||
dcb_printf(dcb, "\tNumber of connections: %d\n", server->stats.n_connections);
|
||||
|
Loading…
x
Reference in New Issue
Block a user