svn commit: r252623 - head/sbin/dhclient
Pawel Jakub Dawidek
pjd at FreeBSD.org
Wed Jul 3 22:05:37 UTC 2013
Author: pjd
Date: Wed Jul 3 22:05:36 2013
New Revision: 252623
URL: http://svnweb.freebsd.org/changeset/base/252623
Log:
MFp4 @229477:
The gethostname(3) function won't work in capability mode, because reading
kern.hostname sysctl is not permitted there. Cache hostname early and use
cached value later.
Reviewed by: brooks
Sponsored by: The FreeBSD Foundation
Modified:
head/sbin/dhclient/dhclient.c
Modified: head/sbin/dhclient/dhclient.c
==============================================================================
--- head/sbin/dhclient/dhclient.c Wed Jul 3 22:04:35 2013 (r252622)
+++ head/sbin/dhclient/dhclient.c Wed Jul 3 22:05:36 2013 (r252623)
@@ -91,6 +91,8 @@ int log_perror = 1;
int privfd;
int nullfd = -1;
+char hostname[_POSIX_HOST_NAME_MAX + 1];
+
struct iaddr iaddr_broadcast = { 4, { 255, 255, 255, 255 } };
struct in_addr inaddr_any, inaddr_broadcast;
@@ -446,6 +448,13 @@ main(int argc, char *argv[])
error("no such user: nobody");
}
+ /*
+ * Obtain hostname before entering capability mode - it won't be
+ * possible then, as reading kern.hostname is not permitted.
+ */
+ if (gethostname(hostname, sizeof(hostname)) < 0)
+ hostname[0] = '\0';
+
if (pipe(pipe_fd) == -1)
error("pipe");
@@ -1525,9 +1534,8 @@ make_discover(struct interface_info *ip,
}
/* send host name if not set via config file. */
- char hostname[_POSIX_HOST_NAME_MAX+1];
if (!options[DHO_HOST_NAME]) {
- if (gethostname(hostname, sizeof(hostname)) == 0) {
+ if (hostname[0] != '\0') {
size_t len;
char* posDot = strchr(hostname, '.');
if (posDot != NULL)
@@ -1649,9 +1657,8 @@ make_request(struct interface_info *ip,
}
/* send host name if not set via config file. */
- char hostname[_POSIX_HOST_NAME_MAX+1];
if (!options[DHO_HOST_NAME]) {
- if (gethostname(hostname, sizeof(hostname)) == 0) {
+ if (hostname[0] != '\0') {
size_t len;
char* posDot = strchr(hostname, '.');
if (posDot != NULL)
More information about the svn-src-head
mailing list