commit-mailutils
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[SCM] GNU Mailutils branch, master, updated. release-2.2-120-gc5cc666


From: Sergey Poznyakoff
Subject: [SCM] GNU Mailutils branch, master, updated. release-2.2-120-gc5cc666
Date: Tue, 05 Oct 2010 13:13:17 +0000

This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU Mailutils".

http://git.savannah.gnu.org/cgit/mailutils.git/commit/?id=c5cc666d68f00af1bbe8e13c2c7a8bd0b224d891

The branch, master has been updated
       via  c5cc666d68f00af1bbe8e13c2c7a8bd0b224d891 (commit)
      from  df67a458159e4bbfcfd59248091182e55aaa0a9a (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit c5cc666d68f00af1bbe8e13c2c7a8bd0b224d891
Author: Sergey Poznyakoff <address@hidden>
Date:   Tue Oct 5 15:37:48 2010 +0300

    Remove the use of MAXHOSTNAMELEN macro.
    
    * comsat/comsat.c (hostname): Change type.
    (comsat_init): Use mu_get_host_name.
    * comsat/comsat.h (hostname): Change declaration.
    * libmailutils/locker.c (lock_dotlock): Use mu_get_host_name.
    * libmailutils/mutil.c (mu_get_host_name): Rewrite.
    * pop3d/pop3d.c (pop3d_mainloop): Remove unnecessary call to
    gethostbyname.
    * pop3d/pop3d.h (MAXHOSTNAMELEN): Remove definition.

-----------------------------------------------------------------------

Summary of changes:
 comsat/comsat.c       |   18 ++++++----
 comsat/comsat.h       |    2 +-
 libmailutils/locker.c |   20 ++++++-----
 libmailutils/mutil.c  |   86 ++++++++++++++++++++++++++++++++++++++----------
 pop3d/pop3d.c         |   20 ++++-------
 pop3d/pop3d.h         |    6 ---
 6 files changed, 97 insertions(+), 55 deletions(-)

diff --git a/comsat/comsat.c b/comsat/comsat.c
index 4ec589b..0b511fa 100644
--- a/comsat/comsat.c
+++ b/comsat/comsat.c
@@ -97,12 +97,8 @@ static const char *comsat_argp_capa[] = {
 #define NOT_HERE 1
 #define PERMISSION_DENIED 2
 
-#ifndef MAXHOSTNAMELEN
-# define MAXHOSTNAMELEN 64
-#endif
-
 int maxlines = 5;
-char hostname[MAXHOSTNAMELEN];
+char *hostname;
 const char *username;
 int require_tty;
 mu_m_server_t server;
@@ -190,11 +186,17 @@ sig_hup (int sig)
 void
 comsat_init ()
 {
+  int rc;
+
   /* Register mailbox formats */
   mu_register_all_mbox_formats ();
 
-  gethostname (hostname, sizeof hostname);
-
+  rc = mu_get_host_name (&hostname);
+  if (rc)
+    {
+      mu_diag_funcall (MU_DIAG_ERROR, "mu_get_host_name", NULL, rc);
+      exit (EXIT_FAILURE);
+    } 
   /* Set signal handlers */
   signal (SIGTTOU, SIG_IGN);
   signal (SIGCHLD, SIG_IGN);
@@ -556,7 +558,7 @@ main (int argc, char **argv)
   
   if (mu_app_init (&argp, comsat_argp_capa, comsat_cfg_param, argc, argv, 0,
                   &ind, server))
-    exit (1);
+    exit (EXIT_FAILURE);
 
   if (test_mode)
     {
diff --git a/comsat/comsat.h b/comsat/comsat.h
index b9e9a0b..de4abb9 100644
--- a/comsat/comsat.h
+++ b/comsat/comsat.h
@@ -75,7 +75,7 @@ extern time_t overflow_control_interval;
 extern time_t overflow_delay_time;
 extern int maxlines;
 extern const char *username;
-extern char hostname[];
+extern char *hostname;
 extern struct daemon_param daemon_param;
 
 void run_user_action (FILE *tty, const char *cr, mu_message_t msg);
diff --git a/libmailutils/locker.c b/libmailutils/locker.c
index f752c16..4f0dcf2 100644
--- a/libmailutils/locker.c
+++ b/libmailutils/locker.c
@@ -704,14 +704,11 @@ destroy_dotlock (mu_locker_t locker)
   free (locker->data.dot.nfslock);
 }
 
-#ifndef MAXHOSTNAMELEN
-# define MAXHOSTNAMELEN 256
-#endif
-
 static int
 lock_dotlock (mu_locker_t locker, enum mu_locker_mode mode)
 {
-  char host[MAXHOSTNAMELEN + 1] = "localhost";
+  int rc;
+  char *host = NULL;
   char pid[11];                /* 10 is strlen(2^32 = 4294967296) */
   char now[11];
   size_t sz = 0;
@@ -729,8 +726,9 @@ lock_dotlock (mu_locker_t locker, enum mu_locker_mode mode)
 
   /* build the NFS hitching-post to the lock file */
 
-  gethostname (host, sizeof (host));
-  host[MAXHOSTNAMELEN] = 0;
+  rc = mu_get_host_name (&host);
+  if (rc)
+    return rc;
 
   snprintf (now, sizeof (now), "%lu", (unsigned long) time (0));
   now[sizeof (now) - 1] = 0;
@@ -746,10 +744,14 @@ lock_dotlock (mu_locker_t locker, enum mu_locker_mode 
mode)
   locker->data.dot.nfslock = malloc (sz);
   
   if (!locker->data.dot.nfslock)
-    return ENOMEM;
-  
+    {
+      free (host);
+      return ENOMEM;
+    }
+
   snprintf (locker->data.dot.nfslock, sz, "%s.%s.%s.%s",
            locker->file, pid, now, host);
+  free (host);
   
   fd = open (locker->data.dot.nfslock,
             O_WRONLY | O_CREAT | O_EXCL, LOCKFILE_ATTR);
diff --git a/libmailutils/mutil.c b/libmailutils/mutil.c
index 5342523..2b091ce 100644
--- a/libmailutils/mutil.c
+++ b/libmailutils/mutil.c
@@ -291,30 +291,80 @@ mu_cpystr (char *dst, const char *src, size_t size)
   return len;
 }
 
+#ifndef MAXHOSTNAMELEN
+# define MAXHOSTNAMELEN 64
+#endif
+
 int
 mu_get_host_name (char **host)
 {
-  char hostname[MAXHOSTNAMELEN + 1];
-  struct hostent *hp = NULL;
-  char *domain = NULL;
-
-  gethostname (hostname, sizeof hostname);
-  hostname[sizeof (hostname) - 1] = 0;
-
-  if ((hp = gethostbyname (hostname)))
-    domain = hp->h_name;
-  else
-    domain = hostname;
-
-  domain = strdup (domain);
-
-  if (!domain)
-    return ENOMEM;
+  char *hostname = NULL;
+  size_t size = 0;
+  char *p;
 
-  *host = domain;
+  while (1)
+    {
+      if (size == 0)
+       {
+         size = MAXHOSTNAMELEN;
+         p = malloc (size);
+       }
+      else
+       {
+         size_t ns = size * 2;
+         if (ns < size)
+           {
+             free (hostname);
+             return ENOMEM;
+           }
+         size = ns;
+         p = realloc (hostname, size);
+       }
+      if (!p)
+       {
+         free (hostname);
+         return ENOMEM;
+       }
+      hostname = p;
+      hostname[size - 1] = 0;
+      if (gethostname (hostname, size - 1) == 0)
+       {
+         if (!hostname[size - 1])
+           break;
+       }
+      else if (errno != 0 && errno != ENAMETOOLONG && errno != EINVAL
+              && errno != ENOMEM)
+       {
+         int rc = errno;
+         free (hostname);
+         return rc;
+       }
+    }
 
+  /* Try to return fully qualified host name */
+  if (!strchr (hostname, '.'))
+    {
+      struct hostent *hp = gethostbyname (hostname);
+      if (hp)
+       {
+         size_t len = strlen (hp->h_name);
+         if (size < len + 1)
+           {
+             p = realloc (hostname, len + 1);
+             if (!p)
+               {
+                 free (hostname);
+                 return ENOMEM;
+               }
+             hostname = p;
+           }
+         strcpy (hostname, hp->h_name);
+       }
+    }
+  
+  *host = hostname;
   return 0;
-}
+}  
 
 /*
  * Functions used to convert unix mailbox/user names into RFC822 addr-specs.
diff --git a/pop3d/pop3d.c b/pop3d/pop3d.c
index a614786..ab5ed7c 100644
--- a/pop3d/pop3d.c
+++ b/pop3d/pop3d.c
@@ -227,19 +227,13 @@ pop3d_mainloop (int ifd, int ofd)
   /* Prepare the shared secret for APOP.  */
   {
     char *local_hostname;
-    local_hostname = mu_alloc (MAXHOSTNAMELEN + 1);
-
-    /* Get our canonical hostname. */
-    {
-      struct hostent *htbuf;
-      gethostname (local_hostname, MAXHOSTNAMELEN);
-      htbuf = gethostbyname (local_hostname);
-      if (htbuf)
-       {
-         free (local_hostname);
-         local_hostname = strdup (htbuf->h_name);
-       }
-    }
+    
+    status = mu_get_host_name (&local_hostname);
+    if (status)
+      {
+        mu_diag_funcall (MU_DIAG_ERROR, "mu_get_host_name", NULL, status);
+        exit (EXIT_FAILURE);
+      }
 
     md5shared = mu_alloc (strlen (local_hostname) + 51);
 
diff --git a/pop3d/pop3d.h b/pop3d/pop3d.h
index a80c872..862ce72 100644
--- a/pop3d/pop3d.h
+++ b/pop3d/pop3d.h
@@ -133,12 +133,6 @@ extern int expire_on_exit;
 #include <shadow.h>
 #endif
 
-#ifndef MAXHOSTNAMELEN
-/* Maximum length of a hostname (is this defined somewhere else?).  */
-/* MAXHOSTNAMELEN is already defined on Solaris.  */
-# define MAXHOSTNAMELEN        64
-#endif
-
 #define POP3_ATTRIBUTE_DELE 0x0001
 #define POP3_ATTRIBUTE_RETR 0x0010
 


hooks/post-receive
-- 
GNU Mailutils



reply via email to

[Prev in Thread] Current Thread [Next in Thread]