fix more leaks
[oweals/gnunet.git] / src / transport / plugin_transport_smtp.c
index 074bc16fced1afd28760b65162a058c817deeb76..fa0c787d1eb6e38162c92bd4604ae7745f9a3e41 100644 (file)
@@ -40,7 +40,7 @@
  */
 #define SMTP_MESSAGE_SIZE 65528
 
-#define DEBUG_SMTP GNUNET_NO
+#define DEBUG_SMTP GNUNET_EXTRA_LOGGING
 
 #define FILTER_STRING_SIZE 64
 
@@ -72,6 +72,8 @@ typedef struct
 
 } EmailAddress;
 
+GNUNET_NETWORK_STRUCT_BEGIN
+
 /**
  * Encapsulation of a GNUnet message in the SMTP mail body (before
  * base64 encoding).
@@ -86,13 +88,14 @@ typedef struct
   GNUNET_PeerIdentity sender;
 
 } SMTPMessage;
+GNUNET_NETWORK_STRUCT_END
 
 /* *********** globals ************* */
 
 /**
  * apis (our advertised API and the core api )
  */
-static GNUNET_CoreAPIForTransport *coreAPI;
+static GNUNET_CoreAPIForTransport *core_api;
 
 static struct GNUNET_GE_Context *ectx;
 
@@ -145,8 +148,8 @@ static GNUNET_CronTime last_transmission;
 /** ******************** Base64 encoding ***********/
 
 #define FILLCHAR '='
-static char *cvt = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
-    "abcdefghijklmnopqrstuvwxyz" "0123456789+/";
+static char *cvt =
+    "ABCDEFGHIJKLMNOPQRSTUVWXYZ" "abcdefghijklmnopqrstuvwxyz" "0123456789+/";
 
 /**
  * Encode into Base64.
@@ -171,8 +174,10 @@ base64_encode (const char *data, unsigned int len, char **output)
     (*output)[ret++] = '\n'; \
   }
   ret = 0;
-  opt = GNUNET_malloc (2 + (((len * 4 / 3) + 8) * (MAX_CHAR_PER_LINE + 2)) /
-                       MAX_CHAR_PER_LINE);
+  opt =
+      GNUNET_malloc (2 +
+                     (((len * 4 / 3) + 8) * (MAX_CHAR_PER_LINE +
+                                             2)) / MAX_CHAR_PER_LINE);
   /* message must start with \r\n for libesmtp */
   *output = opt;
   opt[0] = '\r';
@@ -317,8 +322,8 @@ listenAndDistribute (void *unused)
     if ( (retl == NULL) || (smtp_shutdown == GNUNET_YES)) {\
       goto END; \
     }\
-    if (coreAPI->load_monitor != NULL) \
-     GNUNET_network_monitor_notify_transmission(coreAPI->load_monitor, GNUNET_ND_DOWNLOAD, strlen(retl)); \
+    if (core_api->load_monitor != NULL) \
+     GNUNET_network_monitor_notify_transmission(core_api->load_monitor, GNUNET_ND_DOWNLOAD, strlen(retl)); \
   } while (0)
 
 
@@ -361,17 +366,14 @@ listenAndDistribute (void *unused)
       if (ntohs (mp->header.size) != size)
       {
         GNUNET_GE_LOG (ectx,
-                       GNUNET_GE_WARNING | GNUNET_GE_BULK |
-                       GNUNET_GE_USER,
-                       _
-                       ("Received malformed message via %s. Ignored.\n"),
+                       GNUNET_GE_WARNING | GNUNET_GE_BULK | GNUNET_GE_USER,
+                       _("Received malformed message via %s. Ignored.\n"),
                        "SMTP");
 #if DEBUG_SMTP
         GNUNET_GE_LOG (ectx,
-                       GNUNET_GE_DEBUG | GNUNET_GE_REQUEST |
-                       GNUNET_GE_USER,
-                       "Size returned by base64=%d, in the msg=%d.\n",
-                       size, ntohl (mp->size));
+                       GNUNET_GE_DEBUG | GNUNET_GE_REQUEST | GNUNET_GE_USER,
+                       "Size returned by base64=%d, in the msg=%d.\n", size,
+                       ntohl (mp->size));
 #endif
         GNUNET_free (out);
         goto END;
@@ -384,17 +386,15 @@ listenAndDistribute (void *unused)
       coreMP->tsession = NULL;
       coreMP->sender = mp->sender;
 #if DEBUG_SMTP
-      GNUNET_GE_LOG (ectx,
-                     GNUNET_GE_DEBUG | GNUNET_GE_REQUEST | GNUNET_GE_USER,
+      GNUNET_GE_LOG (ectx, GNUNET_GE_DEBUG | GNUNET_GE_REQUEST | GNUNET_GE_USER,
                      "SMTP message passed to the core.\n");
 #endif
 
-      coreAPI->receive (coreMP);
+      core_api->receive (coreMP);
     }
 END:
 #if DEBUG_SMTP
-    GNUNET_GE_LOG (ectx,
-                   GNUNET_GE_DEBUG | GNUNET_GE_REQUEST | GNUNET_GE_USER,
+    GNUNET_GE_LOG (ectx, GNUNET_GE_DEBUG | GNUNET_GE_REQUEST | GNUNET_GE_USER,
                    "SMTP message processed.\n");
 #endif
     if (fdes != NULL)
@@ -423,8 +423,8 @@ api_verify_hello (const GNUNET_MessageHello * hello)
   maddr = (const EmailAddress *) &hello[1];
   if ((ntohs (hello->header.size) !=
        sizeof (GNUNET_MessageHello) + ntohs (hello->senderAddressSize)) ||
-      (maddr->senderAddress[ntohs (hello->senderAddressSize) - 1 -
-                            FILTER_STRING_SIZE] != '\0'))
+      (maddr->senderAddress
+       [ntohs (hello->senderAddressSize) - 1 - FILTER_STRING_SIZE] != '\0'))
   {
     GNUNET_GE_BREAK (ectx, 0);
     return GNUNET_SYSERR;       /* obviously invalid */
@@ -449,13 +449,11 @@ api_create_hello ()
   EmailAddress *haddr;
   int i;
 
-  GNUNET_GC_get_configuration_value_string (coreAPI->cfg,
-                                            "SMTP", "FILTER",
+  GNUNET_GC_get_configuration_value_string (core_api->cfg, "SMTP", "FILTER",
                                             "X-mailer: GNUnet", &filter);
   if (NULL == strstr (filter, ": "))
   {
-    GNUNET_GE_LOG (ectx,
-                   GNUNET_GE_WARNING | GNUNET_GE_BULK | GNUNET_GE_USER,
+    GNUNET_GE_LOG (ectx, GNUNET_GE_WARNING | GNUNET_GE_BULK | GNUNET_GE_USER,
                    _("SMTP filter string to invalid, lacks ': '\n"));
     GNUNET_free (filter);
     return NULL;
@@ -464,8 +462,7 @@ api_create_hello ()
   if (strlen (filter) > FILTER_STRING_SIZE)
   {
     filter[FILTER_STRING_SIZE] = '\0';
-    GNUNET_GE_LOG (ectx,
-                   GNUNET_GE_WARNING | GNUNET_GE_BULK | GNUNET_GE_USER,
+    GNUNET_GE_LOG (ectx, GNUNET_GE_WARNING | GNUNET_GE_BULK | GNUNET_GE_USER,
                    _("SMTP filter string to long, capped to `%s'\n"), filter);
   }
   i = (strlen (email) + 8) & (~7);      /* make multiple of 8 */
@@ -521,8 +518,8 @@ get_message (void **buf, int *len, void *cls)
  * @return GNUNET_SYSERR on error, GNUNET_OK on success
  */
 static int
-api_send (GNUNET_TSession * tsession,
-          const void *msg, const unsigned int size, int important)
+api_send (GNUNET_TSession * tsession, const void *msg, const unsigned int size,
+          int important)
 {
   const GNUNET_MessageHello *hello;
   const EmailAddress *haddr;
@@ -561,10 +558,9 @@ api_send (GNUNET_TSession * tsession,
   {
     GNUNET_GE_LOG (ectx,
                    GNUNET_GE_ERROR | GNUNET_GE_ADMIN | GNUNET_GE_USER |
-                   GNUNET_GE_IMMEDIATE,
-                   _("SMTP: `%s' failed: %s.\n"),
-                   "smtp_create_session",
-                   smtp_strerror (smtp_errno (), ebuf, EBUF_LEN));
+                   GNUNET_GE_IMMEDIATE, _("SMTP: `%s' failed: %s.\n"),
+                   "smtp_create_session", smtp_strerror (smtp_errno (), ebuf,
+                                                         EBUF_LEN));
     GNUNET_mutex_unlock (lock);
     return GNUNET_SYSERR;
   }
@@ -572,10 +568,9 @@ api_send (GNUNET_TSession * tsession,
   {
     GNUNET_GE_LOG (ectx,
                    GNUNET_GE_ERROR | GNUNET_GE_ADMIN | GNUNET_GE_USER |
-                   GNUNET_GE_IMMEDIATE,
-                   _("SMTP: `%s' failed: %s.\n"),
-                   "smtp_set_server",
-                   smtp_strerror (smtp_errno (), ebuf, EBUF_LEN));
+                   GNUNET_GE_IMMEDIATE, _("SMTP: `%s' failed: %s.\n"),
+                   "smtp_set_server", smtp_strerror (smtp_errno (), ebuf,
+                                                     EBUF_LEN));
     smtp_destroy_session (session);
     GNUNET_mutex_unlock (lock);
     return GNUNET_SYSERR;
@@ -586,10 +581,9 @@ api_send (GNUNET_TSession * tsession,
   {
     GNUNET_GE_LOG (ectx,
                    GNUNET_GE_WARNING | GNUNET_GE_ADMIN | GNUNET_GE_USER |
-                   GNUNET_GE_BULK,
-                   _("SMTP: `%s' failed: %s.\n"),
-                   "smtp_add_message",
-                   smtp_strerror (smtp_errno (), ebuf, EBUF_LEN));
+                   GNUNET_GE_BULK, _("SMTP: `%s' failed: %s.\n"),
+                   "smtp_add_message", smtp_strerror (smtp_errno (), ebuf,
+                                                      EBUF_LEN));
     smtp_destroy_session (session);
     GNUNET_mutex_unlock (lock);
     return GNUNET_SYSERR;
@@ -606,10 +600,9 @@ api_send (GNUNET_TSession * tsession,
   {
     GNUNET_GE_LOG (ectx,
                    GNUNET_GE_WARNING | GNUNET_GE_ADMIN | GNUNET_GE_USER |
-                   GNUNET_GE_BULK,
-                   _("SMTP: `%s' failed: %s.\n"),
-                   "smtp_set_header",
-                   smtp_strerror (smtp_errno (), ebuf, EBUF_LEN));
+                   GNUNET_GE_BULK, _("SMTP: `%s' failed: %s.\n"),
+                   "smtp_set_header", smtp_strerror (smtp_errno (), ebuf,
+                                                     EBUF_LEN));
     smtp_destroy_session (session);
     GNUNET_mutex_unlock (lock);
     GNUNET_free (filter);
@@ -621,7 +614,7 @@ api_send (GNUNET_TSession * tsession,
   mp = (SMTPMessage *) &m[size];
   mp->header.size = htons (size + sizeof (SMTPMessage));
   mp->header.type = htons (0);
-  mp->sender = *coreAPI->my_identity;
+  mp->sender = *core_api->my_identity;
   gm_cls.ebody = NULL;
   gm_cls.pos = 0;
   gm_cls.esize = base64_encode (m, size + sizeof (SMTPMessage), &gm_cls.ebody);
@@ -630,19 +623,17 @@ api_send (GNUNET_TSession * tsession,
   {
     GNUNET_GE_LOG (ectx,
                    GNUNET_GE_WARNING | GNUNET_GE_ADMIN | GNUNET_GE_USER |
-                   GNUNET_GE_BULK,
-                   _("SMTP: `%s' failed: %s.\n"),
-                   "smtp_size_set_estimate",
-                   smtp_strerror (smtp_errno (), ebuf, EBUF_LEN));
+                   GNUNET_GE_BULK, _("SMTP: `%s' failed: %s.\n"),
+                   "smtp_size_set_estimate", smtp_strerror (smtp_errno (), ebuf,
+                                                            EBUF_LEN));
   }
   if (0 == smtp_set_messagecb (message, &get_message, &gm_cls))
   {
     GNUNET_GE_LOG (ectx,
                    GNUNET_GE_WARNING | GNUNET_GE_ADMIN | GNUNET_GE_USER |
-                   GNUNET_GE_BULK,
-                   _("SMTP: `%s' failed: %s.\n"),
-                   "smtp_set_messagecb",
-                   smtp_strerror (smtp_errno (), ebuf, EBUF_LEN));
+                   GNUNET_GE_BULK, _("SMTP: `%s' failed: %s.\n"),
+                   "smtp_set_messagecb", smtp_strerror (smtp_errno (), ebuf,
+                                                        EBUF_LEN));
     smtp_destroy_session (session);
     GNUNET_mutex_unlock (lock);
     GNUNET_free (gm_cls.ebody);
@@ -653,10 +644,9 @@ api_send (GNUNET_TSession * tsession,
   {
     GNUNET_GE_LOG (ectx,
                    GNUNET_GE_WARNING | GNUNET_GE_ADMIN | GNUNET_GE_USER |
-                   GNUNET_GE_BULK,
-                   _("SMTP: `%s' failed: %s.\n"),
-                   "smtp_add_recipient",
-                   smtp_strerror (smtp_errno (), ebuf, EBUF_LEN));
+                   GNUNET_GE_BULK, _("SMTP: `%s' failed: %s.\n"),
+                   "smtp_add_recipient", smtp_strerror (smtp_errno (), ebuf,
+                                                        EBUF_LEN));
     smtp_destroy_session (session);
     GNUNET_mutex_unlock (lock);
     return GNUNET_SYSERR;
@@ -665,10 +655,9 @@ api_send (GNUNET_TSession * tsession,
   {
     GNUNET_GE_LOG (ectx,
                    GNUNET_GE_WARNING | GNUNET_GE_ADMIN | GNUNET_GE_USER |
-                   GNUNET_GE_BULK,
-                   _("SMTP: `%s' failed: %s.\n"),
-                   "smtp_start_session",
-                   smtp_strerror (smtp_errno (), ebuf, EBUF_LEN));
+                   GNUNET_GE_BULK, _("SMTP: `%s' failed: %s.\n"),
+                   "smtp_start_session", smtp_strerror (smtp_errno (), ebuf,
+                                                        EBUF_LEN));
     smtp_destroy_session (session);
     GNUNET_mutex_unlock (lock);
     GNUNET_free (gm_cls.ebody);
@@ -676,8 +665,8 @@ api_send (GNUNET_TSession * tsession,
   }
   if (stats != NULL)
     stats->change (stat_bytesSent, size);
-  if (coreAPI->load_monitor != NULL)
-    GNUNET_network_monitor_notify_transmission (coreAPI->load_monitor,
+  if (core_api->load_monitor != NULL)
+    GNUNET_network_monitor_notify_transmission (core_api->load_monitor,
                                                 GNUNET_ND_UPLOAD, gm_cls.esize);
   smtp_message_reset_status (message);  /* this is needed to plug a 28-byte/message memory leak in libesmtp */
   smtp_destroy_session (session);
@@ -694,8 +683,8 @@ api_send (GNUNET_TSession * tsession,
  * @return GNUNET_OK on success, GNUNET_SYSERR if the operation failed
  */
 static int
-api_connect (const GNUNET_MessageHello * hello,
-             GNUNET_TSession ** tsessionPtr, int may_reuse)
+api_connect (const GNUNET_MessageHello * hello, GNUNET_TSession ** tsessionPtr,
+             int may_reuse)
 {
   GNUNET_TSession *tsession;
 
@@ -739,8 +728,8 @@ api_start_transport_server ()
   if (dispatchThread == NULL)
   {
     GNUNET_GE_DIE_STRERROR (ectx,
-                            GNUNET_GE_ADMIN | GNUNET_GE_BULK |
-                            GNUNET_GE_FATAL, "pthread_create");
+                            GNUNET_GE_ADMIN | GNUNET_GE_BULK | GNUNET_GE_FATAL,
+                            "pthread_create");
     return GNUNET_SYSERR;
   }
   return GNUNET_OK;
@@ -765,8 +754,8 @@ api_stop_transport_server ()
  * Convert SMTP hello to an IP address (always fails).
  */
 static int
-api_hello_to_address (const GNUNET_MessageHello * hello,
-                      void **sa, unsigned int *sa_len)
+api_hello_to_address (const GNUNET_MessageHello * hello, void **sa,
+                      unsigned int *sa_len)
 {
   return GNUNET_SYSERR;
 }
@@ -785,7 +774,7 @@ api_associate (GNUNET_TSession * tsession)
  * frequency limits to SMTP in the future!).
  */
 static int
-api_test_would_try (GNUNET_TSession * tsession, const unsigned int size,
+api_test_would_try (GNUNET_TSession * tsession, unsigned int size,
                     int important)
 {
   return GNUNET_OK;             /* we always try... */
@@ -796,55 +785,43 @@ api_test_would_try (GNUNET_TSession * tsession, const unsigned int size,
  * returns the smtp transport API.
  */
 GNUNET_TransportAPI *
-inittransport_smtp (GNUNET_CoreAPIForTransport * core)
+inittransport_smtp (struct GNUNET_CoreAPIForTransport * core)
 {
-
-
   unsigned long long mtu;
   struct sigaction sa;
 
-  coreAPI = core;
+  core_api = core;
   ectx = core->ectx;
-  if (!GNUNET_GC_have_configuration_value (coreAPI->cfg, "SMTP", "EMAIL"))
+  if (!GNUNET_GC_have_configuration_value (core_api->cfg, "SMTP", "EMAIL"))
   {
-    GNUNET_GE_LOG (ectx,
-                   GNUNET_GE_ERROR | GNUNET_GE_BULK | GNUNET_GE_USER,
+    GNUNET_GE_LOG (ectx, GNUNET_GE_ERROR | GNUNET_GE_BULK | GNUNET_GE_USER,
                    _
                    ("No email-address specified, can not start SMTP transport.\n"));
     return NULL;
   }
-  GNUNET_GC_get_configuration_value_number (coreAPI->cfg,
-                                            "SMTP",
-                                            "MTU",
-                                            1200,
+  GNUNET_GC_get_configuration_value_number (core_api->cfg, "SMTP", "MTU", 1200,
                                             SMTP_MESSAGE_SIZE,
                                             SMTP_MESSAGE_SIZE, &mtu);
-  GNUNET_GC_get_configuration_value_number (coreAPI->cfg,
-                                            "SMTP",
-                                            "RATELIMIT",
+  GNUNET_GC_get_configuration_value_number (core_api->cfg, "SMTP", "RATELIMIT",
                                             0, 0, 1024 * 1024, &rate_limit);
-  stats = coreAPI->service_request ("stats");
+  stats = core_api->service_request ("stats");
   if (stats != NULL)
   {
-    stat_bytesReceived
-        stats->create (gettext_noop ("# bytes received via SMTP"));
+    stat_bytesReceived =
+        stats->create (gettext_noop ("# bytes received via SMTP"));
     stat_bytesSent = stats->create (gettext_noop ("# bytes sent via SMTP"));
-    stat_bytesDropped
-        stats->create (gettext_noop ("# bytes dropped by SMTP (outgoing)"));
+    stat_bytesDropped =
+        stats->create (gettext_noop ("# bytes dropped by SMTP (outgoing)"));
   }
-  GNUNET_GC_get_configuration_value_filename (coreAPI->cfg,
-                                              "SMTP",
-                                              "PIPE",
-                                              GNUNET_DEFAULT_DAEMON_VAR_DIRECTORY
-                                              "/smtp-pipe", &pipename);
+  GNUNET_GC_get_configuration_value_filename (core_api->cfg, "SMTP", "PIPE", &pipename);
   UNLINK (pipename);
   if (0 != mkfifo (pipename, S_IWUSR | S_IRUSR | S_IWGRP | S_IWOTH))
   {
     GNUNET_GE_LOG_STRERROR (ectx,
-                            GNUNET_GE_ADMIN | GNUNET_GE_BULK |
-                            GNUNET_GE_FATAL, "mkfifo");
+                            GNUNET_GE_ADMIN | GNUNET_GE_BULK | GNUNET_GE_FATAL,
+                            "mkfifo");
     GNUNET_free (pipename);
-    coreAPI->service_release (stats);
+    core_api->service_release (stats);
     stats = NULL;
     return NULL;
   }
@@ -854,12 +831,10 @@ inittransport_smtp (GNUNET_CoreAPIForTransport * core)
     GNUNET_GE_LOG_STRERROR (ectx,
                             GNUNET_GE_ADMIN | GNUNET_GE_BULK |
                             GNUNET_GE_WARNING, "chmod");
-  GNUNET_GC_get_configuration_value_string (coreAPI->cfg,
-                                            "SMTP", "EMAIL", NULL, &email);
+  GNUNET_GC_get_configuration_value_string (core_api->cfg, "SMTP", "EMAIL", NULL,
+                                            &email);
   lock = GNUNET_mutex_create (GNUNET_NO);
-  GNUNET_GC_get_configuration_value_string (coreAPI->cfg,
-                                            "SMTP",
-                                            "SERVER",
+  GNUNET_GC_get_configuration_value_string (core_api->cfg, "SMTP", "SERVER",
                                             "localhost:25", &smtp_server_name);
   sa.sa_handler = SIG_IGN;
   sigemptyset (&sa.sa_mask);
@@ -889,7 +864,7 @@ donetransport_smtp ()
   GNUNET_free (smtp_server_name);
   if (stats != NULL)
   {
-    coreAPI->service_release (stats);
+    core_api->service_release (stats);
     stats = NULL;
   }
   GNUNET_mutex_destroy (lock);