nscd_log.c revision 18bdb8a7484e018149ac9a2766c97bdea9752c87
cb5caa98562cf06753163f558cbcfe30b8f4673adjl * CDDL HEADER START
cb5caa98562cf06753163f558cbcfe30b8f4673adjl * The contents of this file are subject to the terms of the
cb5caa98562cf06753163f558cbcfe30b8f4673adjl * Common Development and Distribution License (the "License").
cb5caa98562cf06753163f558cbcfe30b8f4673adjl * You may not use this file except in compliance with the License.
cb5caa98562cf06753163f558cbcfe30b8f4673adjl * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
cb5caa98562cf06753163f558cbcfe30b8f4673adjl * See the License for the specific language governing permissions
cb5caa98562cf06753163f558cbcfe30b8f4673adjl * and limitations under the License.
cb5caa98562cf06753163f558cbcfe30b8f4673adjl * When distributing Covered Code, include this CDDL HEADER in each
cb5caa98562cf06753163f558cbcfe30b8f4673adjl * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
cb5caa98562cf06753163f558cbcfe30b8f4673adjl * If applicable, add the following below this CDDL HEADER, with the
cb5caa98562cf06753163f558cbcfe30b8f4673adjl * fields enclosed by brackets "[]" replaced with your own identifying
cb5caa98562cf06753163f558cbcfe30b8f4673adjl * information: Portions Copyright [yyyy] [name of copyright owner]
cb5caa98562cf06753163f558cbcfe30b8f4673adjl * CDDL HEADER END
18bdb8a7484e018149ac9a2766c97bdea9752c87michen * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
cb5caa98562cf06753163f558cbcfe30b8f4673adjl * Use is subject to license terms.
cb5caa98562cf06753163f558cbcfe30b8f4673adjl#pragma ident "%Z%%M% %I% %E% SMI"
cb5caa98562cf06753163f558cbcfe30b8f4673adjl * old nscd debug levels
cb5caa98562cf06753163f558cbcfe30b8f4673adjl/* max. chars in a nscd log entry */
cb5caa98562cf06753163f558cbcfe30b8f4673adjl/* configuration for the nscd log component */
cb5caa98562cf06753163f558cbcfe30b8f4673adjl/* statistics data */
cb5caa98562cf06753163f558cbcfe30b8f4673adjl/* if no log file specified, log entry goes to stderr */
cb5caa98562cf06753163f558cbcfe30b8f4673adjl/* close old log file and open a new one */
cb5caa98562cf06753163f558cbcfe30b8f4673adjl * don't try and open the log file /dev/null
cb5caa98562cf06753163f558cbcfe30b8f4673adjl /* ignore empty log file specs */
cb5caa98562cf06753163f558cbcfe30b8f4673adjl * In order to open this file securely, we'll try a few tricks
cb5caa98562cf06753163f558cbcfe30b8f4673adjl if ((newlogfd = open(lf, O_EXCL|O_WRONLY|O_CREAT, 0644)) < 0) {
cb5caa98562cf06753163f558cbcfe30b8f4673adjl * File already exists... now we need to get cute
cb5caa98562cf06753163f558cbcfe30b8f4673adjl * since opening a file in a world-writeable directory
cb5caa98562cf06753163f558cbcfe30b8f4673adjl * safely is hard = it could be a hard link or a
cb5caa98562cf06753163f558cbcfe30b8f4673adjl * symbolic link to a system file.
18bdb8a7484e018149ac9a2766c97bdea9752c87michen "logfile \"%s\": %sn",
18bdb8a7484e018149ac9a2766c97bdea9752c87michen "Cannot open new "\
18bdb8a7484e018149ac9a2766c97bdea9752c87michen "logfile \"%s\": "\
18bdb8a7484e018149ac9a2766c97bdea9752c87michen "file is/has links or isn't "
cb5caa98562cf06753163f558cbcfe30b8f4673adjl/* log an entry to the configured nscd log file */
cb5caa98562cf06753163f558cbcfe30b8f4673adjl "<time conversion failed>\t");
cb5caa98562cf06753163f558cbcfe30b8f4673adjl * ctime_r() includes some stuff we don't want;
cb5caa98562cf06753163f558cbcfe30b8f4673adjl * adjust length to overwrite " YYYY\n" and
cb5caa98562cf06753163f558cbcfe30b8f4673adjl * include tid string length.
cb5caa98562cf06753163f558cbcfe30b8f4673adjl /*LINTED: E_SEC_PRINTF_VAR_FMT*/
18bdb8a7484e018149ac9a2766c97bdea9752c87michen * Map old nscd debug level (0 -10) to log level:
18bdb8a7484e018149ac9a2766c97bdea9752c87michen * -- >= 6: DBG_ALL --> NSCD_LOG_LEVEL_ALL
18bdb8a7484e018149ac9a2766c97bdea9752c87michen * -- >= 4: DBG_DBG_NETLOOKUPS --> NSCD_LOG_LEVEL_CANT_FIND
18bdb8a7484e018149ac9a2766c97bdea9752c87michen * -- >= 2: DBG_CANT_FIND --> NSCD_LOG_LEVEL_CANT_FIND
18bdb8a7484e018149ac9a2766c97bdea9752c87michen * -- >= 0: DBG_OFF --> NSCD_LOG_LEVEL_NONE
cb5caa98562cf06753163f558cbcfe30b8f4673adjl/* ARGSUSED */
cb5caa98562cf06753163f558cbcfe30b8f4673adjl * At init time, the whole group of config params are received.
cb5caa98562cf06753163f558cbcfe30b8f4673adjl * At update time, group or individual parameter value could
cb5caa98562cf06753163f558cbcfe30b8f4673adjl * be received.
cb5caa98562cf06753163f558cbcfe30b8f4673adjl if (_nscd_cfg_flag_is_set(dflag, NSCD_CFG_DFLAG_GROUP)) {
cb5caa98562cf06753163f558cbcfe30b8f4673adjl * logcfg->logfile should have been opened
cb5caa98562cf06753163f558cbcfe30b8f4673adjl * by _nscd_cfg_log_verify()
cb5caa98562cf06753163f558cbcfe30b8f4673adjl * individual config parameter
cb5caa98562cf06753163f558cbcfe30b8f4673adjl * logcfg->logfile should have been opened
cb5caa98562cf06753163f558cbcfe30b8f4673adjl * by _nscd_cfg_log_verify()
cb5caa98562cf06753163f558cbcfe30b8f4673adjl/* ARGSUSED */
cb5caa98562cf06753163f558cbcfe30b8f4673adjl * There is no switch db specific config params
cb5caa98562cf06753163f558cbcfe30b8f4673adjl * for the nscd log component. It is a bug if
cb5caa98562cf06753163f558cbcfe30b8f4673adjl * the input param description is global.
cb5caa98562cf06753163f558cbcfe30b8f4673adjl if (_nscd_cfg_flag_is_not_set(pdesc->pflag, NSCD_CFG_PFLAG_GLOBAL))
cb5caa98562cf06753163f558cbcfe30b8f4673adjl * At init time, the whole group of config params are received.
cb5caa98562cf06753163f558cbcfe30b8f4673adjl * At update time, group or individual parameter value could
cb5caa98562cf06753163f558cbcfe30b8f4673adjl * be received.
cb5caa98562cf06753163f558cbcfe30b8f4673adjl if (_nscd_cfg_flag_is_set(dflag, NSCD_CFG_DFLAG_GROUP)) {
cb5caa98562cf06753163f558cbcfe30b8f4673adjl * individual config parameter
cb5caa98562cf06753163f558cbcfe30b8f4673adjl if (_nscd_cfg_bitmap_valid(bt, NSCD_LOG_LEVEL_ALL) == 0)
cb5caa98562cf06753163f558cbcfe30b8f4673adjl/* ARGSUSED */
cb5caa98562cf06753163f558cbcfe30b8f4673adjl /* indicate the statistics are static, i.e., do not free */
cb5caa98562cf06753163f558cbcfe30b8f4673adjl *dflag = _nscd_cfg_flag_set(*dflag, NSCD_CFG_DFLAG_STATIC_DATA);
cb5caa98562cf06753163f558cbcfe30b8f4673adjl * set the name of the current log file and make it current.
18bdb8a7484e018149ac9a2766c97bdea9752c87michen/* Set debug level to the new one and make it current */
18bdb8a7484e018149ac9a2766c97bdea9752c87michen int c = -1;
18bdb8a7484e018149ac9a2766c97bdea9752c87michen /* old nscd debug level is 1 to 10, map it to log_level and log_comp */
18bdb8a7484e018149ac9a2766c97bdea9752c87michen if (c != -1) {
18bdb8a7484e018149ac9a2766c97bdea9752c87michen rc = _nscd_cfg_get_handle("debug-components", NULL, &h, NULL);
cb5caa98562cf06753163f558cbcfe30b8f4673adjl rc = _nscd_cfg_get_handle("debug-level", NULL, &h, NULL);