[PATCH v3 38/42] openvpn-script: Print errors to syslog instead of stderr

Jukka Rissanen jukka.rissanen at linux.intel.com
Wed Nov 7 03:49:04 PST 2012


Use syslog for error printing because normally the stderr
goes to /dev/null and we do not see the errors.
---
 scripts/openvpn-script.c | 42 ++++++++++++++++++++++++++++++++----------
 1 file changed, 32 insertions(+), 10 deletions(-)

diff --git a/scripts/openvpn-script.c b/scripts/openvpn-script.c
index 3d46384..e359c31 100644
--- a/scripts/openvpn-script.c
+++ b/scripts/openvpn-script.c
@@ -27,11 +27,23 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+#include <syslog.h>
+#include <libgen.h>
 
 #include <dbus/dbus.h>
 
 extern char **environ;
 
+static void print(const char *format, ...)
+{
+	va_list ap;
+
+	va_start(ap, format);
+	vsyslog(LOG_INFO, format, ap);
+	va_end(ap);
+}
+
+
 static void append(DBusMessageIter *dict, const char *pattern)
 {
 	DBusMessageIter entry;
@@ -61,6 +73,9 @@ int main(int argc, char *argv[])
 	DBusMessage *msg;
 	DBusMessageIter iter, dict;
 	char **envp, *busname, *interface, *path, *reason;
+	int ret = 0;
+
+	openlog(basename(argv[0]), LOG_NDELAY | LOG_PID, LOG_DAEMON);
 
 	busname = getenv("CONNMAN_BUSNAME");
 	interface = getenv("CONNMAN_INTERFACE");
@@ -69,27 +84,29 @@ int main(int argc, char *argv[])
 	reason = getenv("script_type");
 
 	if (!busname || !interface || !path || !reason) {
-		fprintf(stderr, "Required environment variables not set\n");
-		return 1;
+		print("Required environment variables not set");
+		ret = 1;
+		goto out;
 	}
 	dbus_error_init(&error);
 
 	conn = dbus_bus_get(DBUS_BUS_SYSTEM, &error);
 	if (conn == NULL) {
 		if (dbus_error_is_set(&error) == TRUE) {
-			fprintf(stderr, "%s\n", error.message);
+			print("%s", error.message);
 			dbus_error_free(&error);
 		} else
-			fprintf(stderr, "Failed to get on system bus\n");
-		return 0;
+			print("Failed to get on system bus");
+
+		goto out;
 	}
 
 	msg = dbus_message_new_method_call(busname, path,
 						interface, "notify");
 	if (msg == NULL) {
 		dbus_connection_unref(conn);
-		fprintf(stderr, "Failed to allocate method call\n");
-		return 0;
+		print("Failed to allocate method call");
+		goto out;
 	}
 
 	dbus_message_set_no_reply(msg, TRUE);
@@ -110,8 +127,10 @@ int main(int argc, char *argv[])
 
 	dbus_message_iter_close_container(&iter, &dict);
 
-	if (dbus_connection_send(conn, msg, NULL) == FALSE)
-		fprintf(stderr, "Failed to send message\n");
+	if (dbus_connection_send(conn, msg, NULL) == FALSE) {
+		print("Failed to send message");
+		goto out;
+	}
 
 	dbus_connection_flush(conn);
 
@@ -119,5 +138,8 @@ int main(int argc, char *argv[])
 
 	dbus_connection_unref(conn);
 
-	return 0;
+out:
+	closelog();
+
+	return ret;
 }
-- 
1.7.11.4




More information about the connman mailing list