diff --git a/CHANGES b/CHANGES index 43588fe2f6..391eee464a 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,5 @@ + 797. [func] Issue a warning if the 'directory' option contains + a relative path. [RT #269] 796. [func] When a size limit is associated with a log file, only roll it when the size is reached, not every diff --git a/bin/named/server.c b/bin/named/server.c index f6fdcf334a..9ccb0fcd1d 100644 --- a/bin/named/server.c +++ b/bin/named/server.c @@ -15,7 +15,7 @@ * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: server.c,v 1.313 2001/03/27 18:17:09 gson Exp $ */ +/* $Id: server.c,v 1.314 2001/03/29 02:33:43 bwelling Exp $ */ #include @@ -1396,11 +1396,18 @@ directory_callback(const char *clausename, cfg_obj_t *obj, void *arg) { * Change directory. */ directory = cfg_obj_asstring(obj); + + if (!isc_file_isabsolute(directory) && + !isc_file_iscurrentdir(directory)) + cfg_obj_log(obj, ns_g_lctx, ISC_LOG_WARNING, + "directory '%s' contains a relative path", + directory); + result = isc_dir_chdir(directory); if (result != ISC_R_SUCCESS) { cfg_obj_log(obj, ns_g_lctx, ISC_LOG_ERROR, - "change directory to '%s' failed: %s", - directory, isc_result_totext(result)); + "change directory to '%s' failed: %s", + directory, isc_result_totext(result)); return (result); } diff --git a/lib/isc/include/isc/file.h b/lib/isc/include/isc/file.h index c17919d1fc..526a0bedcc 100644 --- a/lib/isc/include/isc/file.h +++ b/lib/isc/include/isc/file.h @@ -15,7 +15,7 @@ * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: file.h,v 1.14 2001/01/09 21:56:54 bwelling Exp $ */ +/* $Id: file.h,v 1.15 2001/03/29 02:33:47 bwelling Exp $ */ #ifndef ISC_FILE_H #define ISC_FILE_H 1 @@ -171,6 +171,12 @@ isc_file_isabsolute(const char *filename); * Return ISC_TRUE iff the given file name is absolute. */ +isc_boolean_t +isc_file_iscurrentdir(const char *filename); +/* + * Return ISC_TRUE iff the given file name is the current directory ("."). + */ + isc_result_t isc_file_template(const char *path, const char *templet, char *buf, size_t buflen); diff --git a/lib/isc/unix/file.c b/lib/isc/unix/file.c index 105fd59dab..996e46973b 100644 --- a/lib/isc/unix/file.c +++ b/lib/isc/unix/file.c @@ -15,7 +15,7 @@ * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: file.c,v 1.28 2001/01/09 21:58:17 bwelling Exp $ */ +/* $Id: file.c,v 1.29 2001/03/29 02:33:48 bwelling Exp $ */ #include @@ -228,3 +228,8 @@ isc_boolean_t isc_file_isabsolute(const char *filename) { return (ISC_TF(filename[0] == '/')); } + +isc_boolean_t +isc_file_iscurrentdir(const char *filename) { + return (ISC_TF(filename[0] == '.' && filename[1] == '\0')); +}