ewhac
Contributor
- Joined
- Aug 20, 2013
- Messages
- 177
I successfully set up (for generous definitions of "successful") a Bacula director and storage daemon inside an iocage jail; it happily backs up my main PC every night. When it does this, it fires off an email to report success/failure. It uses its own tool to do this:
Problem:
Running with debugging turned on, this code coughs up "My hostname is: localhost".
The system commands
bsmtp.Problem:
bsmtp connects to my Postfix server and says, "HELO localhost". By default, Postfix wants an FQDN following HELO, and rejects the message. After looking at the source code for bsmtp, it looks like it's getting the hostname via gethostname(3):Code:
/*
* Find out my own host name for HELO;
* if possible, get the FQDN - fully qualified domain name
*/
if (gethostname(my_hostname, sizeof(my_hostname) - 1) < 0) {
Pmsg1(0, _("Fatal gethostname error: ERR=%s\n"), strerror(errno));
exit(1);
}
#ifdef HAVE_GETADDRINFO
memset(&hints, 0, sizeof(struct addrinfo));
hints.ai_family = AF_UNSPEC;
hints.ai_socktype = 0;
hints.ai_protocol = 0;
hints.ai_flags = AI_CANONNAME;
if ((res = getaddrinfo(my_hostname, NULL, &hints, &ai)) != 0) {
Pmsg2(0, _("Fatal getaddrinfo for myself failed \"%s\": ERR=%s\n"),
my_hostname, gai_strerror(res));
exit(1);
}
bstrncpy(my_hostname, ai->ai_canonname, sizeof(my_hostname));
freeaddrinfo(ai);
#else
if ((hp = gethostbyname(my_hostname)) == NULL) {
Pmsg2(0, _("Fatal gethostbyname for myself failed \"%s\": ERR=%s\n"),
my_hostname, strerror(errno));
exit(1);
}
bstrncpy(my_hostname, hp->h_name, sizeof(my_hostname));
#endif
Dmsg1(20, "My hostname is: %s\n", my_hostname);Running with debugging turned on, this code coughs up "My hostname is: localhost".
The system commands
hostname and domainname return the correct values, so something else is wrong. My current theory is that /etc/hosts is messed up, but not sure how/why. All hints gratefully accepted.