diff -ru squid-2.5.STABLE10/src/logfile.c squid-2.5.STABLE10-pl1/src/logfile.c --- squid-2.5.STABLE10/src/logfile.c Tue Jan 21 00:57:50 2003 +++ squid-2.5.STABLE10-pl1/src/logfile.c Mon Jul 11 18:11:02 2005 @@ -20,12 +20,12 @@ * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. - * + * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. - * + * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA. @@ -41,23 +41,34 @@ { int fd; Logfile *lf; - fd = file_open(path, O_WRONLY | O_CREAT | O_TEXT); - if (DISK_ERROR == fd) { - if (ENOENT == errno && fatal_flag) { - fatalf("Cannot open '%s' because\n" + const char *args[2]; + lf = xcalloc(1, sizeof(*lf)); + if (path[0] != '|') { + fd = file_open(path, O_WRONLY | O_CREAT | O_TEXT); + if (DISK_ERROR == fd) { + if (ENOENT == errno && fatal_flag) { + fatalf("Cannot open '%s' because\n" "\tthe parent directory does not exist.\n" "\tPlease create the directory.\n", path); - } else if (EACCES == errno && fatal_flag) { - fatalf("Cannot open '%s' for writing.\n" + } else if (EACCES == errno && fatal_flag) { + fatalf("Cannot open '%s' for writing.\n" "\tThe parent directory must be writeable by the\n" "\tuser '%s', which is the cache_effective_user\n" "\tset in squid.conf.", path, Config.effectiveUser); - } else { - debug(50, 1) ("logfileOpen: %s: %s\n", path, xstrerror()); - return NULL; + } else { + debug(50, 1) ("logfileOpen: %s: %s\n", path, xstrerror()); + return NULL; + } + } + lf->flags.isipc = 0; + } else { + args[0] = "(logger)"; + args[1] = NULL; + if ( ipcCreate(IPC_FIFO,&path[1],args,NULL,NULL,&fd) <= 0 ) { + fatalf("Cannot start log listener %s :s", path, xstrerror()); } + lf->flags.isipc = 1; } - lf = xcalloc(1, sizeof(*lf)); lf->fd = fd; if (fatal_flag) lf->flags.fatal = 1; @@ -88,32 +99,44 @@ int i; char from[MAXPATHLEN]; char to[MAXPATHLEN]; - assert(lf->path); + + const char *args[2]; + + if (lf->flags.isipc) { + file_close(lf->fd); + args[0] = "(logger)"; + args[1] = NULL; + if ( ipcCreate(IPC_FIFO,&(lf->path[1]),args,NULL,NULL,&(lf->fd)) <= 0 ) { + fatalf("Cannot start log listener %s :s", lf->path, xstrerror()); + } + } else { + assert(lf->path); #ifdef S_ISREG - if (stat(lf->path, &sb) == 0) - if (S_ISREG(sb.st_mode) == 0) - return; + if (stat(lf->path, &sb) == 0) + if (S_ISREG(sb.st_mode) == 0) + return; #endif - debug(0, 1) ("logfileRotate: %s\n", lf->path); - /* Rotate numbers 0 through N up one */ - for (i = Config.Log.rotateNumber; i > 1;) { - i--; - snprintf(from, MAXPATHLEN, "%s.%d", lf->path, i - 1); - snprintf(to, MAXPATHLEN, "%s.%d", lf->path, i); - xrename(from, to); - } - /* Rotate the current log to .0 */ - logfileFlush(lf); - file_close(lf->fd); /* always close */ - if (Config.Log.rotateNumber > 0) { - snprintf(to, MAXPATHLEN, "%s.%d", lf->path, 0); - xrename(lf->path, to); - } - /* Reopen the log. It may have been renamed "manually" */ - lf->fd = file_open(lf->path, O_WRONLY | O_CREAT | O_TEXT); - if (DISK_ERROR == lf->fd && lf->flags.fatal) { - debug(50, 1) ("logfileRotate: %s: %s\n", lf->path, xstrerror()); - fatalf("Cannot open %s: %s", lf->path, xstrerror()); + debug(0, 1) ("logfileRotate: %s\n", lf->path); + /* Rotate numbers 0 through N up one */ + for (i = Config.Log.rotateNumber; i > 1;) { + i--; + snprintf(from, MAXPATHLEN, "%s.%d", lf->path, i - 1); + snprintf(to, MAXPATHLEN, "%s.%d", lf->path, i); + xrename(from, to); + } + /* Rotate the current log to .0 */ + logfileFlush(lf); + file_close(lf->fd); /* always close */ + if (Config.Log.rotateNumber > 0) { + snprintf(to, MAXPATHLEN, "%s.%d", lf->path, 0); + xrename(lf->path, to); + } + /* Reopen the log. It may have been renamed "manually" */ + lf->fd = file_open(lf->path, O_WRONLY | O_CREAT | O_TEXT); + if (DISK_ERROR == lf->fd && lf->flags.fatal) { + debug(50, 1) ("logfileRotate: %s: %s\n", lf->path, xstrerror()); + fatalf("Cannot open %s: %s", lf->path, xstrerror()); + } } } diff -ru squid-2.5.STABLE10/src/structs.h squid-2.5.STABLE10-pl1/src/structs.h --- squid-2.5.STABLE10/src/structs.h Thu May 5 01:03:47 2005 +++ squid-2.5.STABLE10-pl1/src/structs.h Mon Jul 11 18:12:56 2005 @@ -2201,6 +2201,7 @@ ssize_t offset; struct { unsigned int fatal:1; + unsigned int isipc:1; } flags; };