GUACAMOLE-351: Merge add "-v" parameter
diff --git a/src/guacd/Makefile.am b/src/guacd/Makefile.am
index 8edcd25..fb8e8eb 100644
--- a/src/guacd/Makefile.am
+++ b/src/guacd/Makefile.am
@@ -26,6 +26,7 @@
     man/guacd.conf.5
 
 noinst_HEADERS =  \
+    conf.h        \
     conf-args.h   \
     conf-file.h   \
     conf-parse.h  \
diff --git a/src/guacd/conf-args.c b/src/guacd/conf-args.c
index 448f84d..239eb3a 100644
--- a/src/guacd/conf-args.c
+++ b/src/guacd/conf-args.c
@@ -19,8 +19,8 @@
 
 #include "config.h"
 
+#include "conf.h"
 #include "conf-args.h"
-#include "conf-file.h"
 #include "conf-parse.h"
 
 #include <getopt.h>
@@ -32,7 +32,7 @@
 
     /* Parse arguments */
     int opt;
-    while ((opt = getopt(argc, argv, "l:b:p:L:C:K:f")) != -1) {
+    while ((opt = getopt(argc, argv, "l:b:p:L:C:K:fv")) != -1) {
 
         /* -l: Bind port */
         if (opt == 'l') {
@@ -51,6 +51,11 @@
             config->foreground = 1;
         }
 
+        /* -v: Print version and exit */
+        else if (opt == 'v') {
+            config->print_version = 1;
+        }
+
         /* -p: PID file */
         else if (opt == 'p') {
             free(config->pidfile);
@@ -105,7 +110,8 @@
                     " [-C CERTIFICATE_FILE]"
                     " [-K PEM_FILE]"
 #endif
-                    " [-f]\n", argv[0]);
+                    " [-f]"
+                    " [-v]\n", argv[0]);
 
             return 1;
         }
diff --git a/src/guacd/conf-args.h b/src/guacd/conf-args.h
index 8fa2c3b..2fb86b4 100644
--- a/src/guacd/conf-args.h
+++ b/src/guacd/conf-args.h
@@ -22,7 +22,7 @@
 
 #include "config.h"
 
-#include "conf-file.h"
+#include "conf.h"
 
 /**
  * Parses the given arguments into the given configuration. Zero is returned on
diff --git a/src/guacd/conf-file.c b/src/guacd/conf-file.c
index 21044b6..460ec95 100644
--- a/src/guacd/conf-file.c
+++ b/src/guacd/conf-file.c
@@ -19,6 +19,7 @@
 
 #include "config.h"
 
+#include "conf.h"
 #include "conf-file.h"
 #include "conf-parse.h"
 
@@ -179,6 +180,7 @@
     conf->bind_port = strdup("4822");
     conf->pidfile = NULL;
     conf->foreground = 0;
+    conf->print_version = 0;
     conf->max_log_level = GUAC_LOG_INFO;
 
 #ifdef ENABLE_SSL
diff --git a/src/guacd/conf-file.h b/src/guacd/conf-file.h
index 9042cc8..c38d859 100644
--- a/src/guacd/conf-file.h
+++ b/src/guacd/conf-file.h
@@ -22,51 +22,7 @@
 
 #include "config.h"
 
-#include <guacamole/client.h>
-
-/**
- * The contents of a guacd configuration file.
- */
-typedef struct guacd_config {
-
-    /**
-     * The host to bind on.
-     */
-    char* bind_host;
-
-    /**
-     * The port to bind on.
-     */
-    char* bind_port;
-
-    /**
-     * The file to write the PID in, if any.
-     */
-    char* pidfile;
-
-    /**
-     * Whether guacd should run in the foreground.
-     */
-    int foreground;
-
-#ifdef ENABLE_SSL
-    /**
-     * SSL certificate file.
-     */
-    char* cert_file;
-
-    /**
-     * SSL private key file.
-     */
-    char* key_file;
-#endif
-
-    /**
-     * The maximum log level to be logged by guacd.
-     */
-    guac_client_log_level max_log_level;
-
-} guacd_config;
+#include "conf.h"
 
 /**
  * Reads the given file descriptor, parsing its contents into the guacd_config.
diff --git a/src/guacd/conf-parse.c b/src/guacd/conf-parse.c
index e5a034f..8381aba 100644
--- a/src/guacd/conf-parse.c
+++ b/src/guacd/conf-parse.c
@@ -19,6 +19,7 @@
 
 #include "config.h"
 
+#include "conf.h"
 #include "conf-parse.h"
 
 #include <guacamole/client.h>
diff --git a/src/guacd/conf.h b/src/guacd/conf.h
new file mode 100644
index 0000000..f444cee
--- /dev/null
+++ b/src/guacd/conf.h
@@ -0,0 +1,77 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#ifndef GUACD_CONF_H
+#define GUACD_CONF_H
+
+#include "config.h"
+
+#include <guacamole/client.h>
+
+/**
+ * The contents of a guacd configuration file.
+ */
+typedef struct guacd_config {
+
+    /**
+     * The host to bind on.
+     */
+    char* bind_host;
+
+    /**
+     * The port to bind on.
+     */
+    char* bind_port;
+
+    /**
+     * The file to write the PID in, if any.
+     */
+    char* pidfile;
+
+    /**
+     * Whether guacd should run in the foreground.
+     */
+    int foreground;
+
+    /**
+     * Whether guacd should simply print its version information and exit.
+     */
+    int print_version;
+
+#ifdef ENABLE_SSL
+    /**
+     * SSL certificate file.
+     */
+    char* cert_file;
+
+    /**
+     * SSL private key file.
+     */
+    char* key_file;
+#endif
+
+    /**
+     * The maximum log level to be logged by guacd.
+     */
+    guac_client_log_level max_log_level;
+
+} guacd_config;
+
+#endif
+
diff --git a/src/guacd/daemon.c b/src/guacd/daemon.c
index 2e80ef3..054821a 100644
--- a/src/guacd/daemon.c
+++ b/src/guacd/daemon.c
@@ -19,9 +19,10 @@
 
 #include "config.h"
 
-#include "connection.h"
+#include "conf.h"
 #include "conf-args.h"
 #include "conf-file.h"
+#include "connection.h"
 #include "log.h"
 #include "proc-map.h"
 
@@ -279,6 +280,13 @@
     if (config == NULL || guacd_conf_parse_args(config, argc, argv))
        exit(EXIT_FAILURE);
 
+    /* If requested, simply print version and exit, without initializing the
+     * logging system, etc. */
+    if (config->print_version) {
+        printf("Guacamole proxy daemon (guacd) version " VERSION "\n");
+        exit(EXIT_SUCCESS);
+    }
+
     /* Init logging as early as possible */
     guacd_log_level = config->max_log_level;
     openlog(GUACD_LOG_NAME, LOG_PID, LOG_DAEMON);
diff --git a/src/guacd/man/guacd.8.in b/src/guacd/man/guacd.8.in
index c5ed918..65fc9d5 100644
--- a/src/guacd/man/guacd.8.in
+++ b/src/guacd/man/guacd.8.in
@@ -30,6 +30,7 @@
 [\fB-C\fR \fICERTIFICATE FILE\fR]
 [\fB-K\fR \fIKEY FILE\fR]
 [\fB-f\fR]
+[\fB-v\fR]
 .
 .SH DESCRIPTION
 .B guacd
@@ -80,6 +81,11 @@
 .B guacd
 to run in the foreground, rather than automatically forking into the
 background.
+.TP
+\fB\-v\fR
+Causes
+.B guacd
+to simply print its version information and exit.
 .
 .SH SSL/TLS OPTIONS
 If libssl was present at the time