summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMariusz Zaborski <oshogbo@FreeBSD.org>2017-11-12 08:42:43 +0000
committerMariusz Zaborski <oshogbo@FreeBSD.org>2017-11-12 08:42:43 +0000
commitcb003dd91847ffa2e788edb9b3790ae2e1e11d34 (patch)
treef05940342f356e56486c1cf94677af9b336cdb82
parent7b4fce76cc2397e86ad90a4a4fbf7292b566cf1b (diff)
downloadsrc-test2-cb003dd91847ffa2e788edb9b3790ae2e1e11d34.tar.gz
src-test2-cb003dd91847ffa2e788edb9b3790ae2e1e11d34.zip
Notes
-rw-r--r--sbin/dhclient/Makefile6
-rw-r--r--sbin/dhclient/dhclient.c25
-rw-r--r--sbin/dhclient/dhcpd.h4
-rw-r--r--sbin/dhclient/dispatch.c12
-rw-r--r--sbin/dhclient/errwarn.c16
5 files changed, 46 insertions, 17 deletions
diff --git a/sbin/dhclient/Makefile b/sbin/dhclient/Makefile
index 98beb6e44634..75b578824bb3 100644
--- a/sbin/dhclient/Makefile
+++ b/sbin/dhclient/Makefile
@@ -44,6 +44,12 @@ MAN= dhclient.8 dhclient.conf.5 dhclient.leases.5 dhcp-options.5 \
dhclient-script.8
LIBADD= util
+.if ${MK_CASPER} != "no" && !defined(RESCUE)
+LIBADD+= casper
+LIBADD+= cap_syslog
+CFLAGS+=-DWITH_CASPER
+.endif
+
WARNS?= 2
HAS_TESTS=
diff --git a/sbin/dhclient/dhclient.c b/sbin/dhclient/dhclient.c
index c9c74144c1b8..26e06619fb0d 100644
--- a/sbin/dhclient/dhclient.c
+++ b/sbin/dhclient/dhclient.c
@@ -84,6 +84,8 @@ __FBSDID("$FreeBSD$");
#define CLIENT_PATH "PATH=/usr/bin:/usr/sbin:/bin:/sbin"
+cap_channel_t *capsyslog;
+
time_t cur_time;
time_t default_lease_time = 43200; /* 12 hours... */
@@ -345,6 +347,21 @@ die:
exit(1);
}
+static void
+init_casper(void)
+{
+ cap_channel_t *casper;
+
+ casper = cap_init();
+ if (casper == NULL)
+ error("unable to start casper");
+
+ capsyslog = cap_service_open(casper, "system.syslog");
+ cap_close(casper);
+ if (capsyslog == NULL)
+ error("unable to open system.syslog service");
+}
+
int
main(int argc, char *argv[])
{
@@ -356,9 +373,11 @@ main(int argc, char *argv[])
pid_t otherpid;
cap_rights_t rights;
+ init_casper();
+
/* Initially, log errors to stderr as well as to syslogd. */
- openlog(__progname, LOG_PID | LOG_NDELAY, DHCPD_LOG_FACILITY);
- setlogmask(LOG_UPTO(LOG_DEBUG));
+ cap_openlog(capsyslog, __progname, LOG_PID | LOG_NDELAY, DHCPD_LOG_FACILITY);
+ cap_setlogmask(capsyslog, LOG_UPTO(LOG_DEBUG));
while ((ch = getopt(argc, argv, "bc:dl:p:qu")) != -1)
switch (ch) {
@@ -518,7 +537,7 @@ main(int argc, char *argv[])
setproctitle("%s", ifi->name);
- if (cap_enter() < 0 && errno != ENOSYS)
+ if (CASPER_SUPPORT && cap_enter() < 0 && errno != ENOSYS)
error("can't enter capability mode: %m");
if (immediate_daemon)
diff --git a/sbin/dhclient/dhcpd.h b/sbin/dhclient/dhcpd.h
index 9210cd422e1c..9d80fc253676 100644
--- a/sbin/dhclient/dhcpd.h
+++ b/sbin/dhclient/dhcpd.h
@@ -73,6 +73,9 @@
#include <time.h>
#include <unistd.h>
+#include <libcasper.h>
+#include <casper/cap_syslog.h>
+
#include "dhcp.h"
#include "tree.h"
@@ -352,6 +355,7 @@ int addr_eq(struct iaddr, struct iaddr);
char *piaddr(struct iaddr);
/* dhclient.c */
+extern cap_channel_t *capsyslog;
extern char *path_dhclient_conf;
extern char *path_dhclient_db;
extern time_t cur_time;
diff --git a/sbin/dhclient/dispatch.c b/sbin/dhclient/dispatch.c
index a2f5eef24603..51d5c7af04c5 100644
--- a/sbin/dhclient/dispatch.c
+++ b/sbin/dhclient/dispatch.c
@@ -298,7 +298,8 @@ interface_status(struct interface_info *ifinfo)
memset(&ifr, 0, sizeof(ifr));
strlcpy(ifr.ifr_name, ifname, sizeof(ifr.ifr_name));
if (ioctl(ifsock, SIOCGIFFLAGS, &ifr) < 0) {
- syslog(LOG_ERR, "ioctl(SIOCGIFFLAGS) on %s: %m", ifname);
+ cap_syslog(capsyslog, LOG_ERR, "ioctl(SIOCGIFFLAGS) on %s: %m",
+ ifname);
goto inactive;
}
@@ -316,9 +317,8 @@ interface_status(struct interface_info *ifinfo)
strlcpy(ifmr.ifm_name, ifname, sizeof(ifmr.ifm_name));
if (ioctl(ifsock, SIOCGIFMEDIA, (caddr_t)&ifmr) < 0) {
if (errno != EINVAL) {
- syslog(LOG_DEBUG, "ioctl(SIOCGIFMEDIA) on %s: %m",
- ifname);
-
+ cap_syslog(capsyslog, LOG_DEBUG,
+ "ioctl(SIOCGIFMEDIA) on %s: %m", ifname);
ifinfo->noifmedia = 1;
goto active;
}
@@ -479,8 +479,8 @@ interface_link_status(char *ifname)
if (ioctl(sock, SIOCGIFMEDIA, (caddr_t)&ifmr) == -1) {
/* EINVAL -> link state unknown. treat as active */
if (errno != EINVAL)
- syslog(LOG_DEBUG, "ioctl(SIOCGIFMEDIA) on %s: %m",
- ifname);
+ cap_syslog(capsyslog, LOG_DEBUG,
+ "ioctl(SIOCGIFMEDIA) on %s: %m", ifname);
close(sock);
return (1);
}
diff --git a/sbin/dhclient/errwarn.c b/sbin/dhclient/errwarn.c
index 57207807902f..596505e21d55 100644
--- a/sbin/dhclient/errwarn.c
+++ b/sbin/dhclient/errwarn.c
@@ -69,7 +69,7 @@ error(char *fmt, ...)
va_end(list);
#ifndef DEBUG
- syslog(log_priority | LOG_ERR, "%s", mbuf);
+ cap_syslog(capsyslog, log_priority | LOG_ERR, "%s", mbuf);
#endif
/* Also log it to stderr? */
@@ -78,7 +78,7 @@ error(char *fmt, ...)
write(2, "\n", 1);
}
- syslog(LOG_CRIT, "exiting.");
+ cap_syslog(capsyslog, LOG_CRIT, "exiting.");
if (log_perror) {
fprintf(stderr, "exiting.\n");
fflush(stderr);
@@ -103,7 +103,7 @@ warning(char *fmt, ...)
va_end(list);
#ifndef DEBUG
- syslog(log_priority | LOG_ERR, "%s", mbuf);
+ cap_syslog(capsyslog, log_priority | LOG_ERR, "%s", mbuf);
#endif
if (log_perror) {
@@ -129,7 +129,7 @@ note(char *fmt, ...)
va_end(list);
#ifndef DEBUG
- syslog(log_priority | LOG_INFO, "%s", mbuf);
+ cap_syslog(capsyslog, log_priority | LOG_INFO, "%s", mbuf);
#endif
if (log_perror) {
@@ -155,7 +155,7 @@ debug(char *fmt, ...)
va_end(list);
#ifndef DEBUG
- syslog(log_priority | LOG_DEBUG, "%s", mbuf);
+ cap_syslog(capsyslog, log_priority | LOG_DEBUG, "%s", mbuf);
#endif
if (log_perror) {
@@ -217,10 +217,10 @@ parse_warn(char *fmt, ...)
va_end(list);
#ifndef DEBUG
- syslog(log_priority | LOG_ERR, "%s", mbuf);
- syslog(log_priority | LOG_ERR, "%s", token_line);
+ cap_syslog(capsyslog, log_priority | LOG_ERR, "%s", mbuf);
+ cap_syslog(capsyslog, log_priority | LOG_ERR, "%s", token_line);
if (lexline < 81)
- syslog(log_priority | LOG_ERR,
+ cap_syslog(capsyslog, log_priority | LOG_ERR,
"%s^", &spaces[sizeof(spaces) - lexchar]);
#endif