Changeset 252 for trunk/src/sh_socket.c


Ignore:
Timestamp:
Oct 12, 2009, 10:40:45 AM (15 years ago)
Author:
katerina
Message:

Add code to check for stale file records on close() and fclose(), fix sl_close() to handle open stream (ticket #163).

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/sh_socket.c

    r200 r252  
    396396  if (sizeof(name.sun_path) < (1 + sl_strlen(sh_sockname)))
    397397    {
    398       close(pf_unix_fd); pf_unix_fd = -1;
     398      sl_close_fd(FIL__, __LINE__, pf_unix_fd); pf_unix_fd = -1;
    399399      sh_error_handle ((-1), FIL__, __LINE__, -1, MSG_E_SUBGEN,
    400400                       _("PID dir path too long"),
     
    418418      if (sh_socket_remove() < 0)
    419419        {
    420           close(pf_unix_fd); pf_unix_fd = -1;
     420          sl_close_fd(FIL__, __LINE__, pf_unix_fd); pf_unix_fd = -1;
    421421          sh_error_handle ((-1), FIL__, __LINE__, -1, MSG_E_SUBGEN,
    422422                           _("Unlink of socket failed, maybe path not trusted"),
     
    428428  if (bind ((pf_unix_fd), (struct sockaddr *) &name, size) < 0)
    429429    {
    430       close(pf_unix_fd); pf_unix_fd = -1;
     430      sl_close_fd(FIL__, __LINE__, pf_unix_fd); pf_unix_fd = -1;
    431431      sh_error_handle ((-1), FIL__, __LINE__, errno, MSG_E_SUBGEN,
    432432                       sh_error_message (errno, errbuf, sizeof(errbuf)),
     
    439439                      &optval, sizeof(optval)))
    440440    {
    441       close(pf_unix_fd); pf_unix_fd = -1;
     441      sl_close_fd(FIL__, __LINE__, pf_unix_fd); pf_unix_fd = -1;
    442442      sh_error_handle ((-1), FIL__, __LINE__, errno, MSG_E_SUBGEN,
    443443                       sh_error_message (errno, errbuf, sizeof(errbuf)),
     
    450450  if (flags < 0)
    451451    {
    452       close(pf_unix_fd); pf_unix_fd = -1;
     452      sl_close_fd(FIL__, __LINE__, pf_unix_fd); pf_unix_fd = -1;
    453453      sh_error_handle ((-1), FIL__, __LINE__, errno, MSG_E_SUBGEN,
    454454                       sh_error_message (errno, errbuf, sizeof(errbuf)),
     
    460460  if (flags < 0)
    461461    {
    462       close(pf_unix_fd); pf_unix_fd = -1;
     462      sl_close_fd(FIL__, __LINE__, pf_unix_fd); pf_unix_fd = -1;
    463463      sh_error_handle((-1), FIL__, __LINE__, errno, MSG_E_SUBGEN,
    464464                      sh_error_message (errno, errbuf, sizeof(errbuf)),
     
    469469  if (0 != listen(pf_unix_fd, 5))
    470470    {
    471       close(pf_unix_fd); pf_unix_fd = -1;
     471      sl_close_fd(FIL__, __LINE__, pf_unix_fd); pf_unix_fd = -1;
    472472      sh_error_handle ((-1), FIL__, __LINE__, errno, MSG_E_SUBGEN,
    473473                       sh_error_message (errno, errbuf, sizeof(errbuf)),
     
    630630                        sh_error_message (errno, errbuf, sizeof(errbuf)),
    631631                        _("sh_socket_read: setsockopt"));
    632         close(talkfd);
     632        sl_close_fd(FIL__, __LINE__, talkfd);
    633633        return -1;
    634634      }
     
    643643                        sh_error_message (errno, errbuf, sizeof(errbuf)),
    644644                        _("sh_socket_read: recvmsg"));
    645         close(talkfd); 
     645        sl_close_fd(FIL__, __LINE__, talkfd);   
    646646        return -1;
    647647      }
     
    666666        {
    667667          /* no data */
    668           close(talkfd);
     668          sl_close_fd(FIL__, __LINE__, talkfd);
    669669          return 0;
    670670        }
     
    672672                      sh_error_message (errno, errbuf, sizeof(errbuf)),
    673673                      _("sh_socket_read: recvfrom"));
    674       close(talkfd);
     674      sl_close_fd(FIL__, __LINE__, talkfd);
    675675      return -1;
    676676    }
     
    682682                      sh_error_message (errno, errbuf, sizeof(errbuf)),
    683683                      _("sh_socket_read: getpeereid"));
    684       close(talkfd);
     684      sl_close_fd(FIL__, __LINE__, talkfd);
    685685      return -1;
    686686    }
     
    693693                      sh_error_message (errno, errbuf, sizeof(errbuf)),
    694694                      _("sh_socket_read: getsockopt"));
    695       close(talkfd);
     695      sl_close_fd(FIL__, __LINE__, talkfd);
    696696      return -1;
    697697    }
     
    744744              fdmax = data_size / sizeof(int);
    745745              for (fdcount = 0; fdcount < fdmax; ++fdcount)
    746                 (void) close(fdsbuf[fdcount]);
     746                (void) sl_close_fd(FIL__, __LINE__, fdsbuf[fdcount]);
    747747            }
    748748        }
    749749     
    750       close(talkfd);
     750      sl_close_fd(FIL__, __LINE__, talkfd);
    751751      return -1;
    752752    }
     
    775775                      _("sh_socket_read"));
    776776      sh_set_sockpass();
    777       close(talkfd);
     777      sl_close_fd(FIL__, __LINE__, talkfd);
    778778      return -1;
    779779    }
     
    782782                  _("Socket credentials not supported on this OS"),
    783783                  _("sh_socket_read"));
    784   close(talkfd);
     784  sl_close_fd(FIL__, __LINE__, talkfd);
    785785  return -1;
    786786#endif
     
    796796                      _("client does not have required uid"),
    797797                      _("sh_socket_read: getsockopt"));
    798       close(talkfd);
     798      sl_close_fd(FIL__, __LINE__, talkfd);
    799799      return -1;
    800800    }
     
    816816                          _("Bad message format: command too long"),
    817817                          _("sh_socket_read"));
    818           close(talkfd);
     818          sl_close_fd(FIL__, __LINE__, talkfd);
    819819          return -1;
    820820        }
     
    824824                          _("Bad message format: hostname too long"),
    825825                          _("sh_socket_read"));
    826           close(talkfd);
     826          sl_close_fd(FIL__, __LINE__, talkfd);
    827827          return -1;
    828828        }
     
    848848                      _("Bad message format"),
    849849                      _("sh_socket_read"));
    850       close(talkfd);
     850      sl_close_fd(FIL__, __LINE__, talkfd);
    851851      return -1;
    852852    }
     
    865865  */
    866866  nbytes = send (talkfd, cmd, strlen(cmd) + 1, 0);
    867   close(talkfd);
     867  sl_close_fd(FIL__, __LINE__, talkfd);
    868868  if (nbytes < 0)
    869869    {
     
    904904                              sh_error_message (errno, errbuf, sizeof(errbuf)),
    905905                              _("sh_socket_read: sendto"));
    906               close(talkfd);
     906              sl_close_fd(FIL__, __LINE__, talkfd);
    907907              return -1;
    908908            }
     
    935935                          sh_error_message (errno, errbuf, sizeof(errbuf)),
    936936                          _("sh_socket_read: sendto"));
    937           close(talkfd);
     937          sl_close_fd(FIL__, __LINE__, talkfd);
    938938          return -1;
    939939        }
     
    946946  */
    947947  nbytes = send (talkfd, _("END"), 4, 0);
    948   close(talkfd);
     948  sl_close_fd(FIL__, __LINE__, talkfd);
    949949  return 0;
    950950}
Note: See TracChangeset for help on using the changeset viewer.