diff options
| -rw-r--r-- | ldap/servers/slapd/config.c | 18 | ||||
| -rw-r--r-- | ldap/servers/slapd/log.c | 370 | ||||
| -rw-r--r-- | ldap/servers/slapd/log.h | 7 | ||||
| -rw-r--r-- | ldap/servers/slapd/main.c | 32 | ||||
| -rw-r--r-- | ldap/servers/slapd/proto-slap.h | 1 | ||||
| -rw-r--r-- | ldap/servers/slapd/util.c | 27 | ||||
| -rw-r--r-- | ldapserver.spec.tmpl | 6 |
7 files changed, 81 insertions, 380 deletions
diff --git a/ldap/servers/slapd/config.c b/ldap/servers/slapd/config.c index ed012c2a..bc2fd50c 100644 --- a/ldap/servers/slapd/config.c +++ b/ldap/servers/slapd/config.c @@ -222,14 +222,12 @@ slapd_bootstrap_config(const char *configdir) char loglevel[BUFSIZ]; char maxdescriptors[BUFSIZ]; char val[BUFSIZ]; - char _localuser[BUFSIZ]; char logenabled[BUFSIZ]; char schemacheck[BUFSIZ]; Slapi_DN plug_dn; errorlog[0] = loglevel[0] = maxdescriptors[0] = '\0'; val[0] = logenabled[0] = schemacheck[0] = '\0'; - _localuser[0] = '\0'; /* Convert LDIF to entry structures */ slapi_sdn_init_dn_byref(&plug_dn, PLUGIN_BASE_DN); @@ -285,21 +283,6 @@ slapd_bootstrap_config(const char *configdir) } } -#ifndef _WIN32 - /* set the local user name; needed to set up error log */ - if (!_localuser[0] && - entry_has_attr_and_value(e, CONFIG_LOCALUSER_ATTRIBUTE, - _localuser, sizeof(_localuser))) - { - if (config_set_localuser(CONFIG_LOCALUSER_ATTRIBUTE, - _localuser, errorbuf, CONFIG_APPLY) != LDAP_SUCCESS) - { - LDAPDebug(LDAP_DEBUG_ANY, "%s: %s: %s. \n", configfile, - CONFIG_LOCALUSER_ATTRIBUTE, errorbuf); - } - } -#endif - /* set the log file name */ if (!errorlog[0] && entry_has_attr_and_value(e, CONFIG_ERRORLOG_ATTRIBUTE, @@ -312,6 +295,7 @@ slapd_bootstrap_config(const char *configdir) CONFIG_ERRORLOG_ATTRIBUTE, errorbuf); } } + /* set the error log level */ if (!loglevel[0] && entry_has_attr_and_value(e, CONFIG_LOGLEVEL_ATTRIBUTE, diff --git a/ldap/servers/slapd/log.c b/ldap/servers/slapd/log.c index effeae75..e880f86f 100644 --- a/ldap/servers/slapd/log.c +++ b/ldap/servers/slapd/log.c @@ -48,7 +48,6 @@ #include "log.h" #include "fe.h" -#include <pwd.h> /* getpwnam */ #if defined( XP_WIN32 ) #include <fcntl.h> @@ -56,9 +55,6 @@ #include "proto-ntutil.h" extern HANDLE hSlapdEventSource; extern LPTSTR pszServerName; -#define _PSEP '\\' -#else -#define _PSEP '/' #endif /************************************************************************** * GLOBALS, defines, and ... @@ -115,14 +111,12 @@ static int log__access_rotationinfof(char *pathname); static int log__error_rotationinfof(char *pathname); static int log__audit_rotationinfof(char *pathname); static int log__extract_logheader (FILE *fp, long *f_ctime, int *f_size); -static int log__check_prevlogs (FILE *fp, char *filename); static int log__getfilesize(LOGFD fp); static int log__enough_freespace(char *path); static int vslapd_log_error(LOGFD fp, char *subsystem, char *fmt, va_list ap ); static int vslapd_log_access(char *fmt, va_list ap ); static void log_convert_time (time_t ctime, char *tbuf, int type); -static time_t log_reverse_convert_time (char *tbuf); static LogBufferInfo *log_create_buffer(size_t sz); static void log_append_buffer2(time_t tnl, LogBufferInfo *lbi, char *msg1, size_t size1, char *msg2, size_t size2); static void log_flush_buffer(LogBufferInfo *lbi, int type, int sync_now); @@ -2131,8 +2125,8 @@ log__open_accesslogfile(int logfile_state, int locked) logp = loginfo.log_access_logchain; while ( logp) { log_convert_time (logp->l_ctime, tbuf, 1 /*short*/); - PR_snprintf(buffer, sizeof(buffer), "LOGINFO:%s%s.%s (%lu) (%u)\n", - PREVLOGFILE, loginfo.log_access_file, tbuf, logp->l_ctime, logp->l_size); + PR_snprintf(buffer, sizeof(buffer), "LOGINFO:Previous Log File:%s.%s (%lu) (%u)\n", + loginfo.log_access_file, tbuf, logp->l_ctime, logp->l_size); LOG_WRITE(fpinfo, buffer, strlen(buffer), 0); logp = logp->l_next; } @@ -2432,130 +2426,6 @@ delete_logfile: return 1; } - -#define ERRORSLOG 1 -#define ACCESSLOG 2 -#define AUDITLOG 3 - -static int -log__fix_rotationinfof(char *pathname) -{ - char *logsdir = NULL; - time_t now; - PRDir *dirptr = NULL; - PRDirEntry *dirent = NULL; - PRDirFlags dirflags = PR_SKIP_BOTH & PR_SKIP_HIDDEN; - char *log_type = NULL; - int log_type_id; - int rval = LOG_ERROR; - char *p; - - /* rotation info file is broken; can't trust the contents */ - time (&now); - loginfo.log_error_ctime = now; - logsdir = slapi_ch_strdup(pathname); - p = strrchr(logsdir, _PSEP); - if (NULL == p) /* pathname is not path/filename.rotationinfo; do nothing */ - goto done; - - *p = '\0'; - log_type = ++p; - p = strchr(log_type, '.'); - if (NULL == p) /* file is not rotationinfo; do nothing */ - goto done; - *p = '\0'; - - if (0 == strcmp(log_type, "errors")) - log_type_id = ERRORSLOG; - else if (0 == strcmp(log_type, "access")) - log_type_id = ACCESSLOG; - else if (0 == strcmp(log_type, "audit")) - log_type_id = AUDITLOG; - else - goto done; /* file is not errors nor access nor audit; do nothing */ - - if (!(dirptr = PR_OpenDir(logsdir))) - goto done; - - switch (log_type_id) { - case ERRORSLOG: - loginfo.log_numof_error_logs = 0; - loginfo.log_error_logchain = NULL; - break; - case ACCESSLOG: - loginfo.log_numof_access_logs = 0; - loginfo.log_access_logchain = NULL; - break; - case AUDITLOG: - loginfo.log_numof_audit_logs = 0; - loginfo.log_audit_logchain = NULL; - break; - } - /* read the directory entries into a linked list */ - for (dirent = PR_ReadDir(dirptr, dirflags); dirent ; - dirent = PR_ReadDir(dirptr, dirflags)) { - if (0 == strcmp(log_type, dirent->name)) { - switch (log_type_id) { - case ERRORSLOG: - loginfo.log_numof_error_logs++; - break; - case ACCESSLOG: - loginfo.log_numof_access_logs++; - break; - case AUDITLOG: - loginfo.log_numof_audit_logs++; - break; - } - } else if (0 == strncmp(log_type, dirent->name, strlen(log_type)) && - (p = strrchr(dirent->name, '.')) != NULL && - 15 == strlen(++p) && - NULL != strchr(p, '-')) { /* e.g., errors.20051123-165135 */ - struct logfileinfo *logp; - char *q; - int ignoreit = 0; - - for (q = p; q && *q; q++) { - if (*q != '-' && !isdigit(*q)) - ignoreit = 1; - } - if (ignoreit) - continue; - - logp = (struct logfileinfo *) slapi_ch_malloc (sizeof (struct logfileinfo)); - logp->l_ctime = log_reverse_convert_time(p); - switch (log_type_id) { - case ERRORSLOG: - logp->l_size = loginfo.log_error_maxlogsize; /* dummy */ - logp->l_next = loginfo.log_error_logchain; - loginfo.log_error_logchain = logp; - loginfo.log_numof_error_logs++; - break; - case ACCESSLOG: - logp->l_size = loginfo.log_access_maxlogsize; - logp->l_next = loginfo.log_access_logchain; - loginfo.log_access_logchain = logp; - loginfo.log_numof_access_logs++; - break; - case AUDITLOG: - logp->l_size =loginfo.log_audit_maxlogsize; - logp->l_next = loginfo.log_audit_logchain; - loginfo.log_audit_logchain = logp; - loginfo.log_numof_audit_logs++; - break; - } - } - } - rval = LOG_SUCCESS; -done: - if (NULL != dirptr) - PR_CloseDir(dirptr); - slapi_ch_free_string(&logsdir); - return rval; -} -#undef ERRORSLOG -#undef ACCESSLOG -#undef AUDITLOG - /****************************************************************************** * log__access_rotationinfof * @@ -2565,14 +2435,14 @@ done: * Assumption: Lock has been acquired already ******************************************************************************/ static int -log__access_rotationinfof(char *pathname) +log__access_rotationinfof( char *pathname) { - long f_ctime; + long f_ctime; int f_size; int main_log = 1; - time_t now; - FILE *fp; - int rval, logfile_type = LOGFILE_REOPENED; + time_t now; + FILE *fp; + /* ** Okay -- I confess, we want to use NSPR calls but I want to @@ -2591,7 +2461,7 @@ log__access_rotationinfof(char *pathname) ** We have reopened the log access file. Now we need to read the ** log file info and update the values. */ - while ((rval = log__extract_logheader(fp, &f_ctime, &f_size)) == LOG_CONTINUE) { + while (log__extract_logheader(fp, &f_ctime, &f_size) == LOG_CONTINUE) { /* first we would get the main log info */ if (f_ctime == 0 && f_size == 0) continue; @@ -2608,15 +2478,15 @@ log__access_rotationinfof(char *pathname) struct logfileinfo *logp; logp = (struct logfileinfo *) slapi_ch_malloc (sizeof (struct logfileinfo)); - if (f_ctime > 0L) + if (f_ctime > 0L) logp->l_ctime = f_ctime; else logp->l_ctime = now; if (f_size > 0) - logp->l_size = f_size; + logp->l_size = f_size; else { /* make it the max log size */ - logp->l_size = loginfo.log_access_maxlogsize; + logp->l_size = loginfo.log_access_maxlogsize; } logp->l_next = loginfo.log_access_logchain; @@ -2624,13 +2494,6 @@ log__access_rotationinfof(char *pathname) } loginfo.log_numof_access_logs++; } - if (LOG_DONE == rval) - rval = log__check_prevlogs(fp, pathname); - fclose (fp); - - if (LOG_ERROR == rval) - if (LOG_SUCCESS == log__fix_rotationinfof(pathname)) - logfile_type = LOGFILE_NEW; /* Check if there is a rotation overdue */ if (loginfo.log_access_rotationsync_enabled && @@ -2639,79 +2502,8 @@ log__access_rotationinfof(char *pathname) loginfo.log_access_ctime < loginfo.log_access_rotationsyncclock - loginfo.log_access_rotationtime_secs) { loginfo.log_access_rotationsyncclock -= loginfo.log_access_rotationtime_secs; } - return logfile_type; -} - -/* -* log__check_prevlogs -* -* check if a given prev log file (e.g., /opt/fedora-ds/slapd-fe/logs/errors.20051201-101347) -* is found in the rotationinfo file. -*/ -static int -log__check_prevlogs (FILE *fp, char *pathname) -{ - char buf[BUFSIZ], *p; - char *logsdir = NULL; - int rval = LOG_CONTINUE; - char *log_type = NULL; - PRDir *dirptr = NULL; - PRDirEntry *dirent = NULL; - PRDirFlags dirflags = PR_SKIP_BOTH & PR_SKIP_HIDDEN; - - logsdir = slapi_ch_strdup(pathname); - p = strrchr(logsdir, _PSEP); - if (NULL == p) /* pathname is not path/filename.rotationinfo; do nothing */ - goto done; - - *p = '\0'; - log_type = ++p; - p = strchr(log_type, '.'); - if (NULL == p) /* file is not rotationinfo; do nothing */ - goto done; - *p = '\0'; - - if (0 != strcmp(log_type, "errors") && - 0 != strcmp(log_type, "access") && - 0 != strcmp(log_type, "audit")) - goto done; /* file is not errors nor access nor audit; do nothing */ - - if (!(dirptr = PR_OpenDir(logsdir))) - goto done; - - for (dirent = PR_ReadDir(dirptr, dirflags); dirent ; - dirent = PR_ReadDir(dirptr, dirflags)) { - if (0 == strncmp(log_type, dirent->name, strlen(log_type)) && - (p = strrchr(dirent->name, '.')) != NULL && - 15 == strlen(++p) && - NULL != strchr(p, '-')) { /* e.g., errors.20051123-165135 */ - char *q; - int ignoreit = 0; - - for (q = p; q && *q; q++) { - if (*q != '-' && !isdigit(*q)) - ignoreit = 1; - } - if (ignoreit) - continue; - - fseek(fp, 0 ,SEEK_SET); - buf[BUFSIZ-1] = '\0'; - while (fgets(buf, BUFSIZ - 1, fp)) { - if (strstr(buf, dirent->name)) { - rval = LOG_CONTINUE; /* found in .rotationinfo */ - continue; - } - } - rval = LOG_ERROR; /* not found in .rotationinfo */ - break; - } - } -done: - if (NULL != dirptr) - PR_CloseDir(dirptr); - slapi_ch_free_string(&logsdir); - return rval; + fclose (fp); + return LOGFILE_REOPENED; } /****************************************************************************** @@ -2733,9 +2525,8 @@ log__extract_logheader (FILE *fp, long *f_ctime, int *f_size) if ( fp == NULL) return LOG_ERROR; - buf[BUFSIZ-1] = '\0'; /* for safety */ - if (fgets(buf, BUFSIZ - 1, fp) == NULL) { - return LOG_DONE; + if (fgets(buf, BUFSIZ, fp) == NULL) { + return LOG_ERROR; } if ((p=strstr(buf, "LOGINFO")) == NULL) { @@ -2774,23 +2565,6 @@ log__extract_logheader (FILE *fp, long *f_ctime, int *f_size) /* Now p must hold the size value */ *f_size = atoi(p); - /* check if the Previous Log file really exists */ - if ((p = strstr(buf, PREVLOGFILE)) != NULL) { - p += strlen(PREVLOGFILE); - s = strchr(p, ' '); - if (NULL == s) { - s = strchr(p, '('); - if (NULL != s) { - *s = '\0'; - } - } else { - *s = '\0'; - } - if (PR_SUCCESS != PR_Access(p, PR_ACCESS_EXISTS)) { - return LOG_ERROR; - } - } - return LOG_CONTINUE; } @@ -2942,17 +2716,13 @@ log_get_loglist(int logtype) default: return NULL; } - list = (char **) slapi_ch_calloc(1, (num + 1) * sizeof(char *)); + list = (char **) slapi_ch_calloc(1, num * sizeof(char *)); i = 0; while (logp) { log_convert_time (logp->l_ctime, tbuf, 1 /*short */); PR_snprintf(buf, sizeof(buf), "%s.%s", file, tbuf); list[i] = slapi_ch_strdup(buf); i++; - if (i == num) { /* mismatch b/w num and logchain; - cut the chain and save the process */ - break; - } logp = logp->l_next; } list[i] = NULL; @@ -3288,12 +3058,12 @@ delete_logfile: static int log__error_rotationinfof( char *pathname) { - long f_ctime; + long f_ctime; int f_size; int main_log = 1; - time_t now; - FILE *fp; - int rval, logfile_type = LOGFILE_REOPENED; + time_t now; + FILE *fp; + /* ** Okay -- I confess, we want to use NSPR calls but I want to @@ -3312,7 +3082,7 @@ log__error_rotationinfof( char *pathname) ** We have reopened the log error file. Now we need to read the ** log file info and update the values. */ - while ((rval = log__extract_logheader(fp, &f_ctime, &f_size)) == LOG_CONTINUE) { + while (log__extract_logheader(fp, &f_ctime, &f_size) == LOG_CONTINUE) { /* first we would get the main log info */ if (f_ctime == 0 && f_size == 0) continue; @@ -3329,15 +3099,15 @@ log__error_rotationinfof( char *pathname) struct logfileinfo *logp; logp = (struct logfileinfo *) slapi_ch_malloc (sizeof (struct logfileinfo)); - if (f_ctime > 0L) + if (f_ctime > 0L) logp->l_ctime = f_ctime; else logp->l_ctime = now; if (f_size > 0) - logp->l_size = f_size; + logp->l_size = f_size; else { /* make it the max log size */ - logp->l_size = loginfo.log_error_maxlogsize; + logp->l_size = loginfo.log_error_maxlogsize; } logp->l_next = loginfo.log_error_logchain; @@ -3345,13 +3115,6 @@ log__error_rotationinfof( char *pathname) } loginfo.log_numof_error_logs++; } - if (LOG_DONE == rval) - rval = log__check_prevlogs(fp, pathname); - fclose (fp); - - if (LOG_ERROR == rval) - if (LOG_SUCCESS == log__fix_rotationinfof(pathname)) - logfile_type = LOGFILE_NEW; /* Check if there is a rotation overdue */ if (loginfo.log_error_rotationsync_enabled && @@ -3361,7 +3124,8 @@ log__error_rotationinfof( char *pathname) loginfo.log_error_rotationsyncclock -= loginfo.log_error_rotationtime_secs; } - return logfile_type; + fclose (fp); + return LOGFILE_REOPENED; } /****************************************************************************** @@ -3375,12 +3139,12 @@ log__error_rotationinfof( char *pathname) static int log__audit_rotationinfof( char *pathname) { - long f_ctime; + long f_ctime; int f_size; int main_log = 1; - time_t now; - FILE *fp; - int rval, logfile_type = LOGFILE_REOPENED; + time_t now; + FILE *fp; + /* ** Okay -- I confess, we want to use NSPR calls but I want to @@ -3399,7 +3163,7 @@ log__audit_rotationinfof( char *pathname) ** We have reopened the log audit file. Now we need to read the ** log file info and update the values. */ - while ((rval = log__extract_logheader(fp, &f_ctime, &f_size)) == LOG_CONTINUE) { + while (log__extract_logheader(fp, &f_ctime, &f_size) == LOG_CONTINUE) { /* first we would get the main log info */ if (f_ctime == 0 && f_size == 0) continue; @@ -3416,15 +3180,15 @@ log__audit_rotationinfof( char *pathname) struct logfileinfo *logp; logp = (struct logfileinfo *) slapi_ch_malloc (sizeof (struct logfileinfo)); - if (f_ctime > 0L) + if (f_ctime > 0L) logp->l_ctime = f_ctime; else logp->l_ctime = now; if (f_size > 0) - logp->l_size = f_size; + logp->l_size = f_size; else { /* make it the max log size */ - logp->l_size = loginfo.log_audit_maxlogsize; + logp->l_size = loginfo.log_audit_maxlogsize; } logp->l_next = loginfo.log_audit_logchain; @@ -3432,13 +3196,6 @@ log__audit_rotationinfof( char *pathname) } loginfo.log_numof_audit_logs++; } - if (LOG_DONE == rval) - rval = log__check_prevlogs(fp, pathname); - fclose (fp); - - if (LOG_ERROR == rval) - if (LOG_SUCCESS == log__fix_rotationinfof(pathname)) - logfile_type = LOGFILE_NEW; /* Check if there is a rotation overdue */ if (loginfo.log_audit_rotationsync_enabled && @@ -3448,7 +3205,8 @@ log__audit_rotationinfof( char *pathname) loginfo.log_audit_rotationsyncclock -= loginfo.log_audit_rotationtime_secs; } - return logfile_type; + fclose (fp); + return LOGFILE_REOPENED; } /****************************************************************************** @@ -3467,17 +3225,6 @@ log__open_errorlogfile(int logfile_state, int locked) char tbuf[TBUFSIZE]; struct logfileinfo *logp; char buffer[BUFSIZ]; - struct passwd *pw = NULL; - - slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig(); - - if ( slapdFrontendConfig->localuser != NULL ) { - if ( (pw = getpwnam( slapdFrontendConfig->localuser )) == NULL ) - return LOG_UNABLE_TO_OPENFILE; - } - else { - return LOG_UNABLE_TO_OPENFILE; - } if (!locked) LOG_ERROR_LOCK_WRITE( ); @@ -3540,12 +3287,6 @@ log__open_errorlogfile(int logfile_state, int locked) return LOG_UNABLE_TO_OPENFILE; } - /* make sure the logfile is owned by the localuser. If one of the - * alternate ns-slapd modes, such as db2bak, tries to log an error - * at startup, it will create the logfile as root! - */ - slapd_chown_if_not_owner(loginfo.log_error_file, pw->pw_uid, -1); - loginfo.log_error_fdes = fp; if (logfile_state == LOGFILE_REOPENED) { /* we have all the information */ @@ -3572,8 +3313,8 @@ log__open_errorlogfile(int logfile_state, int locked) logp = loginfo.log_error_logchain; while ( logp) { log_convert_time (logp->l_ctime, tbuf, 1 /*short */); - PR_snprintf(buffer, sizeof(buffer), "LOGINFO:%s%s.%s (%lu) (%u)\n", - PREVLOGFILE, loginfo.log_error_file, tbuf, logp->l_ctime, logp->l_size); + PR_snprintf(buffer, sizeof(buffer), "LOGINFO:Previous Log File:%s.%s (%lu) (%u)\n", + loginfo.log_error_file, tbuf, logp->l_ctime, logp->l_size); LOG_WRITE(fpinfo, buffer, strlen(buffer), 0); logp = logp->l_next; } @@ -3693,8 +3434,8 @@ log__open_auditlogfile(int logfile_state, int locked) logp = loginfo.log_audit_logchain; while ( logp) { log_convert_time (logp->l_ctime, tbuf, 1 /*short */); - PR_snprintf(buffer, sizeof(buffer), "LOGINFO:%s%s.%s (%d) (%d)\n", - PREVLOGFILE, loginfo.log_audit_file, tbuf, (int)logp->l_ctime, logp->l_size); + PR_snprintf(buffer, sizeof(buffer), "LOGINFO:Previous Log File:%s.%s (%d) (%d)\n", + loginfo.log_audit_file, tbuf, (int)logp->l_ctime, logp->l_size); LOG_WRITE(fpinfo, buffer, strlen(buffer), 0); logp = logp->l_next; } @@ -3865,14 +3606,15 @@ void log_access_flush() static void log_convert_time (time_t ctime, char *tbuf, int type) { + struct tm *tmsp, tms; #ifdef _WIN32 - { - struct tm *pt = localtime( &ctime ); - tmsp = &tms; - memcpy(&tms, pt, sizeof(struct tm) ); - } + { + struct tm *pt = localtime( &ctime ); + tmsp = &tms; + memcpy(&tms, pt, sizeof(struct tm) ); + } #else (void)localtime_r( &ctime, &tms ); tmsp = &tms; @@ -3881,27 +3623,7 @@ log_convert_time (time_t ctime, char *tbuf, int type) (void) strftime (tbuf, (size_t) TBUFSIZE, "%Y%m%d-%H%M%S",tmsp); else /* wants the long form */ (void) strftime (tbuf, (size_t) TBUFSIZE, "%d/%b/%Y:%H:%M:%S",tmsp); -} - -/* - * log_reverse_convert_time - * convert the given string formatted time (output from log_convert_time) - * into time_t - */ -static time_t -log_reverse_convert_time(char *tbuf) -{ - struct tm tm; - - if (strchr(tbuf, '-')) { /* short format */ - strptime(tbuf, "%Y%m%d-%H%M%S", &tm); - } else if (strchr(tbuf, '/') && strchr(tbuf, ':')) { /* long format */ - strptime(tbuf, "%d/%b/%Y:%H:%M:%S", &tm); - } else { - return 0; - } - return mktime(&tm); } int diff --git a/ldap/servers/slapd/log.h b/ldap/servers/slapd/log.h index 24ec4ab1..5082184e 100644 --- a/ldap/servers/slapd/log.h +++ b/ldap/servers/slapd/log.h @@ -43,10 +43,6 @@ * *************************************************************************/ #include <stdio.h> -#ifdef LINUX -#define _XOPEN_SOURCE /* glibc2 needs this */ -#define __USE_XOPEN -#endif #include <time.h> #include <stdarg.h> #include <sys/types.h> @@ -73,7 +69,6 @@ #define LOG_EXCEEDED 2 /*err: > max logs allowed */ #define LOG_ROTATE 3 /*ok; go to the next log */ #define LOG_UNABLE_TO_OPENFILE 4 -#define LOG_DONE 5 #define LOG_UNIT_UNKNOWN 0 #define LOG_UNIT_MONTHS 1 @@ -96,8 +91,6 @@ #define LOG_BUFFER_MAXSIZE 512 * 1024 -#define PREVLOGFILE "Previous Log File:" - /* see log.c for why this is done */ #ifdef XP_WIN32 typedef FILE *LOGFD; diff --git a/ldap/servers/slapd/main.c b/ldap/servers/slapd/main.c index e09f8862..dbe72b39 100644 --- a/ldap/servers/slapd/main.c +++ b/ldap/servers/slapd/main.c @@ -207,6 +207,32 @@ extern void collation_init(); #ifndef WIN32 +/* Changes the ownership of the given file/directory iff not + already the owner + Returns 0 upon success or non-zero otherwise, usually -1 if + some system error occurred +*/ +static int +chown_if_not_owner(const char *filename, uid_t uid, gid_t gid) +{ + struct stat statbuf; + int result = 1; + if (!filename) + return result; + + memset(&statbuf, '\0', sizeof(statbuf)); + if (!(result = stat(filename, &statbuf))) + { + if (((uid != -1) && (uid != statbuf.st_uid)) || + ((gid != -1) && (gid != statbuf.st_gid))) + { + result = chown(filename, uid, gid); + } + } + + return result; +} + /* Four cases: - change ownership of all files in directory (strip_fn=PR_FALSE) @@ -232,7 +258,7 @@ chown_dir_files(char *name, struct passwd *pw, PRBool strip_fn) if((ptr=strrchr(log,'/'))==NULL) { LDAPDebug(LDAP_DEBUG_ANY, "Caution changing ownership of ./%s \n",name,0,0); - slapd_chown_if_not_owner(log, pw->pw_uid, -1 ); + chown_if_not_owner(log, pw->pw_uid, -1 ); rc=1; } else if(log==ptr) { LDAPDebug(LDAP_DEBUG_ANY, "Caution changing ownership of / directory and its contents to %s\n",pw->pw_name,0,0); @@ -247,7 +273,7 @@ chown_dir_files(char *name, struct passwd *pw, PRBool strip_fn) while( (entry = PR_ReadDir(dir , PR_SKIP_BOTH )) !=NULL ) { PR_snprintf(file,MAXPATHLEN+1,"%s/%s",log,entry->name); - slapd_chown_if_not_owner( file, pw->pw_uid, -1 ); + chown_if_not_owner( file, pw->pw_uid, -1 ); } PR_CloseDir( dir ); } @@ -276,7 +302,7 @@ fix_ownership() } /* The instance directory needs to be owned by the local user */ - slapd_chown_if_not_owner( slapdFrontendConfig->instancedir, pw->pw_uid, -1 ); + chown_if_not_owner( slapdFrontendConfig->instancedir, pw->pw_uid, -1 ); PR_snprintf(dirname,sizeof(dirname),"%s/config",slapdFrontendConfig->instancedir); chown_dir_files(dirname, pw, PR_FALSE); /* config directory */ chown_dir_files(slapdFrontendConfig->accesslog, pw, PR_TRUE); /* do access log directory */ diff --git a/ldap/servers/slapd/proto-slap.h b/ldap/servers/slapd/proto-slap.h index d1fdd406..a40dd3cd 100644 --- a/ldap/servers/slapd/proto-slap.h +++ b/ldap/servers/slapd/proto-slap.h @@ -588,7 +588,6 @@ void g_set_accesslog_level(int val); */ void slapd_nasty(char* str, int c, int err); int strarray2str( char **a, char *buf, size_t buflen, int include_quotes ); -int slapd_chown_if_not_owner(const char *filename, uid_t uid, gid_t gid); /* * modify.c diff --git a/ldap/servers/slapd/util.c b/ldap/servers/slapd/util.c index a129c6cc..ec675709 100644 --- a/ldap/servers/slapd/util.c +++ b/ldap/servers/slapd/util.c @@ -631,30 +631,3 @@ strarray2str( char **a, char *buf, size_t buflen, int include_quotes ) return( rc ); } /*****************************************************************************/ - -/* Changes the ownership of the given file/directory if not - already the owner - Returns 0 upon success or non-zero otherwise, usually -1 if - some system error occurred -*/ -int -slapd_chown_if_not_owner(const char *filename, uid_t uid, gid_t gid) -{ - struct stat statbuf; - int result = 1; - if (!filename) - return result; - - memset(&statbuf, '\0', sizeof(statbuf)); - if (!(result = stat(filename, &statbuf))) - { - if (((uid != -1) && (uid != statbuf.st_uid)) || - ((gid != -1) && (gid != statbuf.st_gid))) - { - result = chown(filename, uid, gid); - } - } - - return result; -} - diff --git a/ldapserver.spec.tmpl b/ldapserver.spec.tmpl index 3ab788d1..d64c825b 100644 --- a/ldapserver.spec.tmpl +++ b/ldapserver.spec.tmpl @@ -122,7 +122,11 @@ echo "" if [ -z "$RPM_INSTALL_PREFIX" ]; then RPM_INSTALL_PREFIX=%{prefix} fi -if [ "$1" -ge 1 ] ; then +# patch file to fix startconsole ld libpath +if [ -f $RPM_INSTALL_PREFIX/setup/console-ld-libpath.patch ] ; then + patch -d $RPM_INSTALL_PREFIX -p0 < $RPM_INSTALL_PREFIX/setup/console-ld-libpath.patch +fi +if [ "$1" -gt 1 ] ; then # patch file to upgrade admin server from 1.0 to 1.0.1 if [ -f $RPM_INSTALL_PREFIX/setup/adminserver10to101.patch ] ; then patch -d $RPM_INSTALL_PREFIX -p0 < $RPM_INSTALL_PREFIX/setup/adminserver10to101.patch |
