openvpn-script: Print errors to syslog instead of stderr
authorJukka Rissanen <jukka.rissanen@linux.intel.com>
Mon, 12 Nov 2012 12:07:54 +0000 (14:07 +0200)
committerPatrik Flykt <patrik.flykt@linux.intel.com>
Fri, 23 Nov 2012 10:58:52 +0000 (12:58 +0200)
Use syslog for error printing because normally the stderr
goes to /dev/null and we do not see the errors.

scripts/openvpn-script.c

index 3d46384..e359c31 100644 (file)
 #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;
 }