comparison src/core/ngx_syslog.c @ 5708:aacd994167d3

Syslog: fixed possible resource leak and more verbose logging. Found by Coverity (CID 1215646).
author Vladimir Homutov <vl@nginx.com>
date Mon, 26 May 2014 23:34:44 +0400
parents 777202558122
children 44532046d9d7
comparison
equal deleted inserted replaced
5707:31dd63dcb9ea 5708:aacd994167d3
287 peer->conn.write = &ngx_syslog_dummy_event; 287 peer->conn.write = &ngx_syslog_dummy_event;
288 peer->conn.log = &ngx_syslog_dummy_log; 288 peer->conn.log = &ngx_syslog_dummy_log;
289 289
290 ngx_syslog_dummy_event.log = &ngx_syslog_dummy_log; 290 ngx_syslog_dummy_event.log = &ngx_syslog_dummy_log;
291 291
292 fd = ngx_socket(peer->server.sockaddr->sa_family, SOCK_DGRAM, 0);
293 if (fd == (ngx_socket_t) -1) {
294 ngx_log_error(NGX_LOG_ALERT, ngx_cycle->log, ngx_socket_errno,
295 ngx_socket_n " failed");
296 return NGX_ERROR;
297 }
298
299 if (ngx_nonblocking(fd) == -1) {
300 ngx_log_error(NGX_LOG_ALERT, ngx_cycle->log, ngx_socket_errno,
301 ngx_nonblocking_n " failed");
302 goto failed;
303 }
304
305 if (connect(fd, peer->server.sockaddr, peer->server.socklen) == -1) {
306 ngx_log_error(NGX_LOG_ALERT, ngx_cycle->log, ngx_socket_errno,
307 "connect() failed");
308 goto failed;
309 }
310
292 cln = ngx_pool_cleanup_add(peer->pool, 0); 311 cln = ngx_pool_cleanup_add(peer->pool, 0);
293 if (cln == NULL) { 312 if (cln == NULL) {
294 return NGX_ERROR; 313 goto failed;
295 } 314 }
296 315
297 cln->data = peer; 316 cln->data = peer;
298 cln->handler = ngx_syslog_cleanup; 317 cln->handler = ngx_syslog_cleanup;
299 318
300 fd = ngx_socket(peer->server.sockaddr->sa_family, SOCK_DGRAM, 0);
301 if (fd == (ngx_socket_t) -1) {
302 ngx_log_error(NGX_LOG_ALERT, ngx_cycle->log, ngx_socket_errno,
303 ngx_socket_n " failed");
304 return NGX_ERROR;
305 }
306
307 if (ngx_nonblocking(fd) == -1) {
308 ngx_log_error(NGX_LOG_ALERT, ngx_cycle->log, ngx_socket_errno,
309 ngx_nonblocking_n " failed");
310 return NGX_ERROR;
311 }
312
313 if (connect(fd, peer->server.sockaddr, peer->server.socklen) == -1) {
314 ngx_log_error(NGX_LOG_ALERT, ngx_cycle->log, ngx_socket_errno,
315 "connect() failed");
316 return NGX_ERROR;
317 }
318
319 peer->conn.fd = fd; 319 peer->conn.fd = fd;
320 return NGX_OK; 320 return NGX_OK;
321
322 failed:
323
324 if (ngx_close_socket(fd) == -1) {
325 ngx_log_error(NGX_LOG_ALERT, ngx_cycle->log, ngx_socket_errno,
326 ngx_close_socket_n " failed");
327 }
328
329 return NGX_ERROR;
321 } 330 }
322 331
323 332
324 static void 333 static void
325 ngx_syslog_cleanup(void *data) 334 ngx_syslog_cleanup(void *data)
326 { 335 {
327 ngx_syslog_peer_t *peer = data; 336 ngx_syslog_peer_t *peer = data;
328 337
329 if (peer->conn.fd != (ngx_socket_t) -1) { 338 if (ngx_close_socket(peer->conn.fd) == -1) {
330 (void) ngx_close_socket(peer->conn.fd); 339 ngx_log_error(NGX_LOG_ALERT, ngx_cycle->log, ngx_socket_errno,
331 } 340 ngx_close_socket_n " failed");
332 } 341 }
342 }