summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/log.c37
-rw-r--r--src/log.h2
-rw-r--r--src/main.c20
3 files changed, 42 insertions, 17 deletions
diff --git a/src/log.c b/src/log.c
index 57bf925..4398488 100644
--- a/src/log.c
+++ b/src/log.c
@@ -243,3 +243,40 @@ void send_stored_logs (void)
vector_delete (log_message_storage);
log_message_storage = NULL;
}
+
+/**
+ * Initialize the logging subsystem, based on the configuration.
+ * Returns 0 upon success, -1 upon failure.
+ *
+ * This function uses fprintf() instead of log_message(), since
+ * the logging is not yet set up...
+ */
+int setup_logging (void)
+{
+ int ret = -1;
+
+ /* Write to a user supplied log file if it's defined. This will
+ * override using the syslog even if syslog is defined. */
+ if (config.logf_name) {
+ if (open_log_file (config.logf_name) < 0) {
+ fprintf (stderr,
+ "%s: Could not create log file.\n", PACKAGE);
+ goto done;
+ }
+ config.syslog = FALSE; /* disable syslog */
+ } else if (config.syslog) {
+ if (config.godaemon == TRUE)
+ openlog ("tinyproxy", LOG_PID, LOG_DAEMON);
+ else
+ openlog ("tinyproxy", LOG_PID, LOG_USER);
+ } else {
+ fprintf (stderr, "%s: Either define a logfile or "
+ "enable syslog logging.\n", PACKAGE);
+ goto done;
+ }
+
+ ret = 0;
+
+done:
+ return ret;
+}
diff --git a/src/log.h b/src/log.h
index 29b3704..4452cd1 100644
--- a/src/log.h
+++ b/src/log.h
@@ -117,4 +117,6 @@ extern void log_message (int level, const char *fmt, ...);
extern void set_log_level (int level);
extern void send_stored_logs (void);
+extern int setup_logging (void);
+
#endif
diff --git a/src/main.c b/src/main.c
index ef46d00..b00e359 100644
--- a/src/main.c
+++ b/src/main.c
@@ -305,6 +305,7 @@ int
main (int argc, char **argv)
{
FILE *config_file;
+ int ret;
/* Only allow u+rw bits. This may be required for some versions
* of glibc so that mkstemp() doesn't make us vulnerable.
@@ -340,23 +341,8 @@ main (int argc, char **argv)
fclose (config_file);
- /* Write to a user supplied log file if it's defined. This will
- * override using the syslog even if syslog is defined. */
- if (config.logf_name) {
- if (open_log_file (config.logf_name) < 0) {
- fprintf (stderr,
- "%s: Could not create log file.\n", argv[0]);
- exit (EX_SOFTWARE);
- }
- config.syslog = FALSE; /* disable syslog */
- } else if (config.syslog) {
- if (config.godaemon == TRUE)
- openlog ("tinyproxy", LOG_PID, LOG_DAEMON);
- else
- openlog ("tinyproxy", LOG_PID, LOG_USER);
- } else {
- fprintf (stderr, "%s: Either define a logfile or "
- "enable syslog logging.\n", argv[0]);
+ ret = setup_logging ();
+ if (ret != 0) {
exit (EX_SOFTWARE);
}