Blame SOURCES/autofs-5.1.4-add-systemd-service-command-line-option.patch

306fa1
autofs-5.1.4 - add systemd service command line option
306fa1
306fa1
From: Ian Kent <raven@themaw.net>
306fa1
306fa1
When run as a systemd service using the systemd notification method to
306fa1
synchronise startup, logging should be done to syslog so the log entry
306fa1
format is consistent between daemon and systemd usage.
306fa1
306fa1
So, rather than run use the forground option, add an option to tell
306fa1
the automounter it's being run as a systemd service and use syslog
306fa1
for logging when its present on the command line.
306fa1
306fa1
Signed-off-by: Ian Kent <raven@themaw.net>
306fa1
---
306fa1
 CHANGELOG                 |    1 +
306fa1
 daemon/automount.c        |   22 +++++++++++++++++++---
306fa1
 include/automount.h       |    1 +
306fa1
 man/automount.8           |    4 ++++
306fa1
 samples/autofs.service.in |    2 +-
306fa1
 5 files changed, 26 insertions(+), 4 deletions(-)
306fa1
306fa1
--- autofs-5.0.7.orig/CHANGELOG
306fa1
+++ autofs-5.0.7/CHANGELOG
306fa1
@@ -315,6 +315,7 @@
306fa1
 - update build info with systemd.
306fa1
 - use flags for startup boolean options.
306fa1
 - move close stdio descriptors to become_daemon().
306fa1
+- add systemd service command line option.
306fa1
 
306fa1
 25/07/2012 autofs-5.0.7
306fa1
 =======================
306fa1
--- autofs-5.0.7.orig/daemon/automount.c
306fa1
+++ autofs-5.0.7/daemon/automount.c
306fa1
@@ -1212,13 +1212,21 @@ static void become_daemon(unsigned int f
306fa1
 	}
306fa1
 
306fa1
 	/* Detach from foreground process */
306fa1
-	if (flags & DAEMON_FLAGS_FOREGROUND) {
306fa1
+	if (flags & DAEMON_FLAGS_FOREGROUND &&
306fa1
+	   !(flags & DAEMON_FLAGS_SYSTEMD_SERVICE)) {
306fa1
 		if ((flags & DAEMON_FLAGS_CHECK_DAEMON) && !aquire_flag_file()) {
306fa1
 			fprintf(stderr, "%s: program is already running.\n",
306fa1
 				program);
306fa1
 			exit(1);
306fa1
 		}
306fa1
 		log_to_stderr();
306fa1
+	} else if (flags & DAEMON_FLAGS_SYSTEMD_SERVICE) {
306fa1
+		if ((flags & DAEMON_FLAGS_CHECK_DAEMON) && !aquire_flag_file()) {
306fa1
+			fprintf(stderr, "%s: program is already running.\n",
306fa1
+				program);
306fa1
+			exit(1);
306fa1
+		}
306fa1
+		open_log();
306fa1
 	} else {
306fa1
 		int nullfd;
306fa1
 
306fa1
@@ -1923,6 +1931,8 @@ static void usage(void)
306fa1
 		"	-v --verbose	be verbose\n"
306fa1
 		"	-d --debug	log debuging info\n"
306fa1
 		"	-D --define	define global macro variable\n"
306fa1
+		"	-S --systemd-service\n"
306fa1
+		"			run automounter as a systemd service\n"
306fa1
 		"	-f --foreground do not fork into background\n"
306fa1
 		"	-r --random-multimount-selection\n"
306fa1
 		"			use ramdom replicated server selection\n"
306fa1
@@ -2191,7 +2201,7 @@ int main(int argc, char *argv[])
306fa1
 	time_t timeout;
306fa1
 	time_t age = time(NULL);
306fa1
 	struct rlimit rlim;
306fa1
-	const char *options = "+hp:t:vmdD:fVrO:l:n:CFM";
306fa1
+	const char *options = "+hp:t:vmdD:SfVrO:l:n:CFM";
306fa1
 	static const struct option long_options[] = {
306fa1
 		{"help", 0, 0, 'h'},
306fa1
 		{"pid-file", 1, 0, 'p'},
306fa1
@@ -2199,6 +2209,7 @@ int main(int argc, char *argv[])
306fa1
 		{"verbose", 0, 0, 'v'},
306fa1
 		{"debug", 0, 0, 'd'},
306fa1
 		{"define", 1, 0, 'D'},
306fa1
+		{"systemd-service", 0, 0, 'S'},
306fa1
 		{"foreground", 0, 0, 'f'},
306fa1
 		{"random-multimount-selection", 0, 0, 'r'},
306fa1
 		{"negative-timeout", 1, 0, 'n'},
306fa1
@@ -2267,6 +2278,10 @@ int main(int argc, char *argv[])
306fa1
 			macro_parse_globalvar(optarg);
306fa1
 			break;
306fa1
 
306fa1
+		case 'S':
306fa1
+			flags |= DAEMON_FLAGS_SYSTEMD_SERVICE;
306fa1
+			break;
306fa1
+
306fa1
 		case 'f':
306fa1
 			flags |= DAEMON_FLAGS_FOREGROUND;
306fa1
 			break;
306fa1
@@ -2660,7 +2675,8 @@ int main(int argc, char *argv[])
306fa1
 	}
306fa1
 
306fa1
 #ifdef WITH_SYSTEMD
306fa1
-	sd_notify(1, "READY=1");
306fa1
+	if (flags & DAEMON_FLAGS_SYSTEMD_SERVICE)
306fa1
+		sd_notify(1, "READY=1");
306fa1
 #endif
306fa1
 
306fa1
 	state_mach_thid = pthread_self();
306fa1
--- autofs-5.0.7.orig/include/automount.h
306fa1
+++ autofs-5.0.7/include/automount.h
306fa1
@@ -74,6 +74,7 @@ int load_autofs4_module(void);
306fa1
 #endif
306fa1
 
306fa1
 #define DAEMON_FLAGS_FOREGROUND			0x0001
306fa1
+#define DAEMON_FLAGS_SYSTEMD_SERVICE		0x0002
306fa1
 #define DAEMON_FLAGS_HAVE_GLOBAL_OPTIONS	0x0004
306fa1
 #define DAEMON_FLAGS_GHOST			0x0008
306fa1
 #define DAEMON_FLAGS_CHECK_DAEMON		0x0010
306fa1
--- autofs-5.0.7.orig/man/automount.8
306fa1
+++ autofs-5.0.7/man/automount.8
306fa1
@@ -57,6 +57,10 @@ Define a global macro substitution varia
306fa1
 are over-ridden macro definitions of the same name specified in
306fa1
 mount entries.
306fa1
 .TP
306fa1
+.I \-S, \-\-systemd-service
306fa1
+Used when running the automounter as a systemd service to ensure log entry
306fa1
+format is consistent with the log entry format when running as a daemon.
306fa1
+.TP
306fa1
 .I "\-f, \-\-foreground"
306fa1
 Run the daemon in the foreground and log to stderr instead of syslog."
306fa1
 .TP
306fa1
--- autofs-5.0.7.orig/samples/autofs.service.in
306fa1
+++ autofs-5.0.7/samples/autofs.service.in
306fa1
@@ -6,7 +6,7 @@ Wants=network-online.target rpc-statd.se
306fa1
 [Service]
306fa1
 Type=notify
306fa1
 EnvironmentFile=-@@autofsconfdir@@/autofs
306fa1
-ExecStart=@@sbindir@@/automount $OPTIONS --foreground --dont-check-daemon
306fa1
+ExecStart=@@sbindir@@/automount $OPTIONS --systemd-service --dont-check-daemon
306fa1
 ExecReload=/usr/bin/kill -HUP $MAINPID
306fa1
 KillMode=process
306fa1
 TimeoutSec=180