]> source.dussan.org Git - rspamd.git/commitdiff
* Store sockaddr in large enough buffer
authorVsevolod Stakhov <vsevolod@rambler-co.ru>
Tue, 25 Aug 2009 11:34:00 +0000 (15:34 +0400)
committerVsevolod Stakhov <vsevolod@rambler-co.ru>
Tue, 25 Aug 2009 11:34:00 +0000 (15:34 +0400)
src/fuzzy_storage.c
src/fuzzy_storage.h

index e9cbfa64d9e40f251bf0034e133fdfe8aa9140dc..ac08533032f3623d8ad1cff361944ec5506e99ae 100644 (file)
@@ -305,12 +305,12 @@ process_delete_command (struct fuzzy_cmd *cmd)
 #define CMD_PROCESS(x)                                                                                                                                                 \
 do {                                                                                                                                                                                   \
 if (process_##x##_command (&session->cmd)) {                                                                                                   \
-       if (sendto (session->fd, "OK" CRLF, sizeof ("OK" CRLF) - 1, 0, &session->sa, session->salen) == -1) {                                                   \
+       if (sendto (session->fd, "OK" CRLF, sizeof ("OK" CRLF) - 1, 0, (struct sockaddr *)&session->sa, session->salen) == -1) {                                                        \
                msg_err ("process_fuzzy_command: error while writing reply: %s", strerror (errno));             \
        }                                                                                                                                                                                       \
 }                                                                                                                                                                                              \
 else {                                                                                                                                                                                 \
-       if (sendto (session->fd, "ERR" CRLF, sizeof ("ERR" CRLF) - 1, 0, &session->sa, session->salen) == -1) {                                         \
+       if (sendto (session->fd, "ERR" CRLF, sizeof ("ERR" CRLF) - 1, 0, (struct sockaddr *)&session->sa, session->salen) == -1) {                                              \
                msg_err ("process_fuzzy_command: error while writing reply: %s", strerror (errno));             \
        }                                                                                                                                                                                       \
 }                                                                                                                                                                                              \
@@ -330,7 +330,7 @@ process_fuzzy_command (struct fuzzy_session *session)
                        CMD_PROCESS(delete);
                        break;  
                default:
-                       if (sendto (session->fd, "ERR" CRLF, sizeof ("ERR" CRLF) - 1, 0, &session->sa, session->salen) == -1) {
+                       if (sendto (session->fd, "ERR" CRLF, sizeof ("ERR" CRLF) - 1, 0, (struct sockaddr *)&session->sa, session->salen) == -1) {
                                msg_err ("process_fuzzy_command: error while writing reply: %s", strerror (errno));
                        }
                        break;
@@ -354,10 +354,11 @@ accept_fuzzy_socket (int fd, short what, void *arg)
        session.worker = worker;
        session.fd = fd;
        session.pos = (u_char *)&session.cmd;
+       session.salen = sizeof (session.sa);
 
        /* Got some data */
        if (what == EV_READ) {
-               if ((r = recvfrom (fd, session.pos, sizeof (struct fuzzy_cmd), MSG_WAITALL, &session.sa, &session.salen)) == -1) {
+               if ((r = recvfrom (fd, session.pos, sizeof (struct fuzzy_cmd), MSG_WAITALL, (struct sockaddr *)&session.sa, &session.salen)) == -1) {
                        msg_err ("fuzzy_io_callback: got error while reading from socket: %d, %s", errno, strerror (errno));
                        return;
                }
index b03acfacbd7c2f49c74af570f8938066049a5b65..1630171e46535b4a9c53540ce7cdde0c6698b716 100644 (file)
@@ -21,8 +21,8 @@ struct fuzzy_session {
        struct fuzzy_cmd cmd;
        int fd;
        u_char *pos;
-       int salen;
-       struct sockaddr sa;
+       socklen_t salen;
+       struct sockaddr_storage sa;
 };
 
 void start_fuzzy_storage (struct rspamd_worker *worker);