Pass a strdup'd ident string to openlog(), to ensure that reallocation
authorTom Lane <tgl@sss.pgh.pa.us>
Fri, 14 Oct 2005 16:41:28 +0000 (16:41 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Fri, 14 Oct 2005 16:41:28 +0000 (16:41 +0000)
of GUC memory doesn't cause us to start emitting a bogus ident string.
Per report from Han Holl.  Also some trivial code cleanup in write_syslog.

src/backend/utils/error/elog.c

index 1771832d9e84d5fdddc59d80f71551cfaea14ae1..9e56bc9dea8771d344de9fbf1af7790cd59ed0ee 100644 (file)
@@ -923,7 +923,6 @@ write_syslog(int level, const char *line)
 {
        static bool openlog_done = false;
        static unsigned long seq = 0;
-       static int      syslog_fac = LOG_LOCAL0;
 
        int                     len = strlen(line);
 
@@ -932,6 +931,9 @@ write_syslog(int level, const char *line)
 
        if (!openlog_done)
        {
+               int     syslog_fac = LOG_LOCAL0;
+               char   *syslog_ident;
+
                if (strcasecmp(Syslog_facility, "LOCAL0") == 0)
                        syslog_fac = LOG_LOCAL0;
                if (strcasecmp(Syslog_facility, "LOCAL1") == 0)
@@ -948,7 +950,10 @@ write_syslog(int level, const char *line)
                        syslog_fac = LOG_LOCAL6;
                if (strcasecmp(Syslog_facility, "LOCAL7") == 0)
                        syslog_fac = LOG_LOCAL7;
-               openlog(Syslog_ident, LOG_PID | LOG_NDELAY, syslog_fac);
+               syslog_ident = strdup(Syslog_ident);
+               if (syslog_ident == NULL)                       /* out of memory already!? */
+                       syslog_ident = "postgres";
+               openlog(syslog_ident, LOG_PID | LOG_NDELAY, syslog_fac);
                openlog_done = true;
        }