(create_file_safely): Added the "truncate_file" boolean flag. This is needed since I use this function for both the log file and the pid file, and they behave differently when tinyproxy is started.
(pidfile_create): Call create_file_safely() with a TRUE "truncate_file" flag so that the file is emptied whenever the pid file is needed.
This commit is contained in:
parent
e340b3371b
commit
833186b7be
34
src/utils.c
34
src/utils.c
@ -1,4 +1,4 @@
|
||||
/* $Id: utils.c,v 1.31 2002-05-24 04:45:32 rjkaes Exp $
|
||||
/* $Id: utils.c,v 1.32 2002-05-31 18:26:30 rjkaes Exp $
|
||||
*
|
||||
* Misc. routines which are used by the various functions to handle strings
|
||||
* and memory allocation and pretty much anything else we can think of. Also,
|
||||
@ -138,7 +138,7 @@ indicate_http_error(struct conn_s* connptr, int number, const char* string)
|
||||
* Safely creates filename and returns the low-level file descriptor.
|
||||
*/
|
||||
int
|
||||
create_file_safely(const char *filename)
|
||||
create_file_safely(const char *filename, bool_t truncate_file)
|
||||
{
|
||||
struct stat lstatinfo;
|
||||
int fildes;
|
||||
@ -155,7 +155,7 @@ create_file_safely(const char *filename)
|
||||
*/
|
||||
if (errno != ENOENT) {
|
||||
log_message(LOG_ERR,
|
||||
"create_file_safely: Error checking PID file %s: %s.",
|
||||
"create_file_safely: Error checking file %s: %s.",
|
||||
filename, strerror(errno));
|
||||
return -1;
|
||||
}
|
||||
@ -168,19 +168,24 @@ create_file_safely(const char *filename)
|
||||
if ((fildes =
|
||||
open(filename, O_RDWR | O_CREAT | O_EXCL, 0600)) < 0) {
|
||||
log_message(LOG_ERR,
|
||||
"create_file_safely: Could not create PID file %s: %s.",
|
||||
"create_file_safely: Could not create file %s: %s.",
|
||||
filename, strerror(errno));
|
||||
return -1;
|
||||
}
|
||||
} else {
|
||||
struct stat fstatinfo;
|
||||
int flags;
|
||||
|
||||
flags = O_RDWR;
|
||||
if (!truncate_file)
|
||||
flags |= O_APPEND;
|
||||
|
||||
/*
|
||||
* Open an existing file.
|
||||
*/
|
||||
if ((fildes = open(filename, O_RDWR)) < 0) {
|
||||
if ((fildes = open(filename, flags)) < 0) {
|
||||
log_message(LOG_ERR,
|
||||
"create_file_safely: Could not open PID file %s: %s.",
|
||||
"create_file_safely: Could not open file %s: %s.",
|
||||
filename, strerror(errno));
|
||||
return -1;
|
||||
}
|
||||
@ -194,7 +199,7 @@ create_file_safely(const char *filename)
|
||||
|| lstatinfo.st_ino != fstatinfo.st_ino
|
||||
|| lstatinfo.st_dev != fstatinfo.st_dev) {
|
||||
log_message(LOG_ERR,
|
||||
"create_file_safely: The PID file %s has been changed before it could be opened.",
|
||||
"create_file_safely: The file %s has been changed before it could be opened.",
|
||||
filename);
|
||||
close(fildes);
|
||||
return -1;
|
||||
@ -209,12 +214,19 @@ create_file_safely(const char *filename)
|
||||
*/
|
||||
if (fstatinfo.st_nlink > 1 || !S_ISREG(lstatinfo.st_mode)) {
|
||||
log_message(LOG_ERR,
|
||||
"create_file_safely: The PID file %s has too many links, or is not a regular file: %s.",
|
||||
"create_file_safely: The file %s has too many links, or is not a regular file: %s.",
|
||||
filename, strerror(errno));
|
||||
close(fildes);
|
||||
return -1;
|
||||
}
|
||||
|
||||
/*
|
||||
* Just return the file descriptor if we _don't_ want the file
|
||||
* truncated.
|
||||
*/
|
||||
if (!truncate_file)
|
||||
return fildes;
|
||||
|
||||
/*
|
||||
* On systems which don't support ftruncate() the best we can
|
||||
* do is to close the file and reopen it in create mode, which
|
||||
@ -230,7 +242,7 @@ create_file_safely(const char *filename)
|
||||
if ((fildes =
|
||||
open(filename, O_RDWR | O_CREAT | O_TRUNC, 0600)) < 0) {
|
||||
log_message(LOG_ERR,
|
||||
"create_file_safely: Could not open PID file %s: %s.",
|
||||
"create_file_safely: Could not open file %s: %s.",
|
||||
filename, strerror(errno));
|
||||
return -1;
|
||||
}
|
||||
@ -252,7 +264,7 @@ pidfile_create(const char *filename)
|
||||
/*
|
||||
* Create a new file
|
||||
*/
|
||||
if ((fildes = create_file_safely(filename)) < 0)
|
||||
if ((fildes = create_file_safely(filename, TRUE)) < 0)
|
||||
exit(1);
|
||||
|
||||
/*
|
||||
@ -306,7 +318,7 @@ rotate_log_files(void)
|
||||
|
||||
rename(config.logf_name, rename_file);
|
||||
|
||||
log_file_des = create_file_safely(config.logf_name);
|
||||
log_file_des = create_file_safely(config.logf_name, TRUE);
|
||||
if (log_file_des < 0) {
|
||||
log_message(LOG_CRIT,
|
||||
"Could not properly create the new log file; therefore the log has not been rotated.");
|
||||
|
Loading…
Reference in New Issue
Block a user