revert previous commit, it is the wrong fix.

git-svn: trunk@4828
0.95
Török Edvin 16 years ago
parent a1f0c01189
commit a414efbf5e
  1. 9
      ChangeLog
  2. 21
      clamav-milter/netcode.c
  3. 9
      clamd/others.c
  4. 3
      clamd/server-th.c
  5. 4
      clamd/session.c

@ -1,12 +1,3 @@
Wed Feb 18 21:39:08 EET 2009 (edwin)
------------------------------------
* clamav-milter/netcode.c, clamd/others.c, clamd/server-th.c,
clamd/session.c: Fix wrong use of strerror_r: it doesn't have to
use/fill the buffer, it can return a pointer to a static location,
as described in the manpage. This can happen on a Linux system with
a foreign locale, where the LANG=C messages are returned this way.
(BB #1403)
Wed Feb 18 21:08:50 EET 2009 (edwin) Wed Feb 18 21:08:50 EET 2009 (edwin)
------------------------------------ ------------------------------------
* clamd/server-th.c, unit_tests/check_clamd.c, * clamd/server-th.c, unit_tests/check_clamd.c,

@ -75,18 +75,21 @@ static int nc_socket(struct CP_ENTRY *cpe) {
char er[256]; char er[256];
if (s == -1) { if (s == -1) {
logg("!Failed to create socket: %s\n", strerror_r(errno, er, sizeof(er))); strerror_r(errno, er, sizeof(er));
logg("!Failed to create socket: %s\n", er);
return -1; return -1;
} }
flags = fcntl(s, F_GETFL, 0); flags = fcntl(s, F_GETFL, 0);
if (flags == -1) { if (flags == -1) {
logg("!fcntl_get failed: %s\n", strerror_r(errno, er, sizeof(er))); strerror_r(errno, er, sizeof(er));
logg("!fcntl_get failed: %s\n", er);
close(s); close(s);
return -1; return -1;
} }
flags |= O_NONBLOCK; flags |= O_NONBLOCK;
if (fcntl(s, F_SETFL, flags) == -1) { if (fcntl(s, F_SETFL, flags) == -1) {
logg("!fcntl_set failed: %s\n", strerror_r(errno, er, sizeof(er))); strerror_r(errno, er, sizeof(er));
logg("!fcntl_set failed: %s\n", er);
close(s); close(s);
return -1; return -1;
} }
@ -102,7 +105,8 @@ static int nc_connect(int s, struct CP_ENTRY *cpe) {
if (!res) return 0; if (!res) return 0;
if (errno != EINPROGRESS) { if (errno != EINPROGRESS) {
logg("*connect failed: %s\n", strerror_r(errno, er, sizeof(er))); strerror_r(errno, er, sizeof(er));
logg("*connect failed: %s\n", er);
close(s); close(s);
return -1; return -1;
} }
@ -154,7 +158,8 @@ int nc_send(int s, const void *buff, size_t len) {
continue; continue;
} }
if(errno != EAGAIN && errno != EWOULDBLOCK) { if(errno != EAGAIN && errno != EWOULDBLOCK) {
logg("!send failed: %s\n", strerror_r(errno, er, sizeof(er))); strerror_r(errno, er, sizeof(er));
logg("!send failed: %s\n", er);
close(s); close(s);
return 1; return 1;
} }
@ -214,7 +219,8 @@ int nc_sendmsg(int s, int fd) {
if((ret = sendmsg(s, &msg, 0)) == -1) { if((ret = sendmsg(s, &msg, 0)) == -1) {
char er[256]; char er[256];
logg("!clamfi_eom: FD send failed (%s)\n", strerror_r(errno, er, sizeof(er))); strerror_r(errno, er, sizeof(er));
logg("!clamfi_eom: FD send failed (%s)\n", er);
close(s); close(s);
} }
return ret; return ret;
@ -251,7 +257,8 @@ char *nc_recv(int s) {
res = recv(s, &buf[len], sizeof(buf) - len, 0); res = recv(s, &buf[len], sizeof(buf) - len, 0);
if(res==-1) { if(res==-1) {
char er[256]; char er[256];
logg("!recv failed after successful select: %s\n", strerror_r(errno, er, sizeof(er))); strerror_r(errno, er, sizeof(er));
logg("!recv failed after successful select: %s\n", er);
close(s); close(s);
return NULL; return NULL;
} }

@ -608,16 +608,15 @@ int fds_poll_recv(struct fd_data *data, int timeout, int check_signals)
if (retval == -1 && errno != EINTR) { if (retval == -1 && errno != EINTR) {
char buff[BUFFSIZE + 1]; char buff[BUFFSIZE + 1];
char *p;
#ifdef HAVE_STRERROR_R #ifdef HAVE_STRERROR_R
p = strerror_r(errno, buff, BUFFSIZE); strerror_r(errno, buff, BUFFSIZE);
#else #else
p = ""; buff[0] = '\0';
#endif #endif
#ifdef HAVE_POLL #ifdef HAVE_POLL
logg("!poll_recv_fds: poll failed: %s\n", p); logg("!poll_recv_fds: poll failed: %s\n", buff);
#else #else
logg("!poll_recv_fds: select failed: %s\n", p); logg("!poll_recv_fds: select failed: %s\n", buff);
#endif #endif
} }

@ -421,7 +421,8 @@ static void *acceptloop_th(void *arg)
} else if (errno != EINTR) { } else if (errno != EINTR) {
/* very bad - need to exit or restart */ /* very bad - need to exit or restart */
#ifdef HAVE_STRERROR_R #ifdef HAVE_STRERROR_R
logg("!accept() failed: %s\n", strerror_r(errno, buff, BUFFSIZE)); strerror_r(errno, buff, BUFFSIZE);
logg("!accept() failed: %s\n", buff);
#else #else
logg("!accept() failed\n"); logg("!accept() failed\n");
#endif #endif

@ -157,9 +157,9 @@ int conn_reply_errno(const client_conn_t *conn, const char *path,
const char *msg) const char *msg)
{ {
char buf[BUFFSIZE + sizeof(". ERROR")]; char buf[BUFFSIZE + sizeof(". ERROR")];
char buf2[BUFFSIZE + sizeof(". ERROR")];
#ifdef HAVE_STRERROR_R #ifdef HAVE_STRERROR_R
snprintf(buf, sizeof(buf), "%s. ERROR", strerror_r(errno, buf2, BUFFSIZE-1)); strerror_r(errno, buf, BUFFSIZE-1);
strcat(buf, ". ERROR");
#else #else
snprintf(buf, sizeof(buf), "%u. ERROR", errno); snprintf(buf, sizeof(buf), "%u. ERROR", errno);
#endif #endif

Loading…
Cancel
Save