Commit c5cc666d c5cc666d68f00af1bbe8e13c2c7a8bd0b224d891 by Sergey Poznyakoff

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.
1 parent df67a458
......@@ -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)
{
......
......@@ -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);
......
......@@ -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);
......
......@@ -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.
......
......@@ -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);
......
......@@ -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
......