Branch '389-ds-base-1.3.0' - ldap/admin
by Nathan Kinder
ldap/admin/src/scripts/DSCreate.pm.in | 16 ++++++++++------
1 file changed, 10 insertions(+), 6 deletions(-)
New commits:
commit 57f4381395e2181e5610acc715e8c71592616ffd
Author: Nathan Kinder <nkinder(a)redhat.com>
Date: Wed Jan 16 14:20:14 2013 -0800
Ticket 556 - Don't overwrite certmap.conf during upgrade
The certmap.conf config files were being overwritten with the
default template during upgrade. We need to skip writing the
certmap.conf files if they already exist so config changes are
not lost.
diff --git a/ldap/admin/src/scripts/DSCreate.pm.in b/ldap/admin/src/scripts/DSCreate.pm.in
index 1d5e71a..0acd74f 100644
--- a/ldap/admin/src/scripts/DSCreate.pm.in
+++ b/ldap/admin/src/scripts/DSCreate.pm.in
@@ -482,12 +482,16 @@ sub makeOtherConfigFiles {
my $src = "$inf->{General}->{prefix}@configdir(a)/certmap.conf";
my $dest = "$inf->{slapd}->{config_dir}/certmap.conf";
$! = 0; # clear errno
- copy($src, $dest);
- if ($!) {
- return ('error_copying_file', $src, $dest, $!);
- }
- if (@errs = changeOwnerMode($inf, 4, $dest)) {
- return @errs;
+
+ #in skip mode, skip files that already exist
+ unless ($skip and -f $dest) {
+ copy($src, $dest);
+ if ($!) {
+ return ('error_copying_file', $src, $dest, $!);
+ }
+ if (@errs = changeOwnerMode($inf, 4, $dest)) {
+ return @errs;
+ }
}
$src = "$inf->{General}->{prefix}@configdir(a)/slapd-collations.conf";
11 years, 2 months
ldap/admin
by Nathan Kinder
ldap/admin/src/scripts/DSCreate.pm.in | 16 ++++++++++------
1 file changed, 10 insertions(+), 6 deletions(-)
New commits:
commit 5285304756536917d1c6e8b708a68853f2a997e8
Author: Nathan Kinder <nkinder(a)redhat.com>
Date: Wed Jan 16 14:20:14 2013 -0800
Ticket 556 - Don't overwrite certmap.conf during upgrade
The certmap.conf config files were being overwritten with the
default template during upgrade. We need to skip writing the
certmap.conf files if they already exist so config changes are
not lost.
diff --git a/ldap/admin/src/scripts/DSCreate.pm.in b/ldap/admin/src/scripts/DSCreate.pm.in
index 92035a2..30de40e 100644
--- a/ldap/admin/src/scripts/DSCreate.pm.in
+++ b/ldap/admin/src/scripts/DSCreate.pm.in
@@ -482,12 +482,16 @@ sub makeOtherConfigFiles {
my $src = "$inf->{General}->{prefix}@configdir(a)/certmap.conf";
my $dest = "$inf->{slapd}->{config_dir}/certmap.conf";
$! = 0; # clear errno
- copy($src, $dest);
- if ($!) {
- return ('error_copying_file', $src, $dest, $!);
- }
- if (@errs = changeOwnerMode($inf, 4, $dest)) {
- return @errs;
+
+ #in skip mode, skip files that already exist
+ unless ($skip and -f $dest) {
+ copy($src, $dest);
+ if ($!) {
+ return ('error_copying_file', $src, $dest, $!);
+ }
+ if (@errs = changeOwnerMode($inf, 4, $dest)) {
+ return @errs;
+ }
}
$src = "$inf->{General}->{prefix}@configdir(a)/slapd-collations.conf";
11 years, 2 months
aclocal.m4 admserv/cfgstuff compile config.guess config.sub configure depcomp install-sh Makefile.am Makefile.in missing
by Noriko Hosoi
Makefile.am | 3
Makefile.in | 219 ++++------
aclocal.m4 | 395 ++++++++++---------
admserv/cfgstuff/httpd-2.4.conf.in | 742 +++++++++++++++++++++++++++++++++++++
compile | 3
config.guess | 4
config.sub | 11
configure | 156 ++++---
depcomp | 3
install-sh | 14
missing | 99 ++--
11 files changed, 1219 insertions(+), 430 deletions(-)
New commits:
commit 1e2a818e8403e8b4b5f346841ea7f06e7942d48c
Author: Noriko Hosoi <nhosoi(a)redhat.com>
Date: Wed Jan 16 13:49:49 2013 -0800
Ticket #476 - 389 ds do not start on F18 due to missing modules
Bug description: Since apache 2.4, some module are no longer
loaded by default.
Fix description: As suggeted by the bug reporter, this patch
adds httpd-2.4.conf.in to the source tree which loads missing
modules:
mpm_worker_module, access_compat_module, authn_core_module
authz_core_module, authz_user_module, unixd_module
https://fedorahosted.org/389/ticket/476
Reviewed by Rich (Thank you!!)
diff --git a/Makefile.am b/Makefile.am
index e9ebf3c..e3f119a 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -408,7 +408,8 @@ nodist_config_DATA = admserv/cfgstuff/console.conf admserv/cfgstuff/admserv.conf
admserv/cfgstuff/nss.conf admserv/cfgstuff/httpd.conf
if APACHE24
-HTTPD_CONF_SRC = admserv/cfgstuff/httpd-2.2.conf.in
+# F18 and newer
+HTTPD_CONF_SRC = admserv/cfgstuff/httpd-2.4.conf.in
else
if APACHE22
HTTPD_CONF_SRC = admserv/cfgstuff/httpd-2.2.conf.in
diff --git a/Makefile.in b/Makefile.in
index ef7e584..537ac1d 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -1,9 +1,8 @@
-# Makefile.in generated by automake 1.11.5 from Makefile.am.
+# Makefile.in generated by automake 1.12.2 from Makefile.am.
# @configure_input@
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software
-# Foundation, Inc.
+# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@@ -310,6 +309,8 @@ DATA = $(dist_help_DATA) $(dist_html_DATA) $(dist_icon_DATA) \
$(systemdsystemunit_DATA) $(update_DATA)
ETAGS = etags
CTAGS = ctags
+CSCOPE = cscope
+AM_RECURSIVE_TARGETS = cscope
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
distdir = $(PACKAGE)-$(VERSION)
top_distdir = $(distdir)
@@ -319,8 +320,10 @@ am__remove_distdir = \
&& rm -rf "$(distdir)" \
|| { sleep 5 && rm -rf "$(distdir)"; }; \
else :; fi
+am__post_remove_distdir = $(am__remove_distdir)
DIST_ARCHIVES = $(distdir).tar.gz
GZIP_ENV = --best
+DIST_TARGETS = dist-gzip
distuninstallcheck_listfiles = find . -type f -print
am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \
| sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$'
@@ -854,7 +857,9 @@ nodist_config_DATA = admserv/cfgstuff/console.conf admserv/cfgstuff/admserv.conf
@APACHE22_FALSE@@APACHE24_FALSE@HTTPD_CONF_SRC = admserv/cfgstuff/httpd.conf.in
@APACHE22_TRUE@@APACHE24_FALSE@HTTPD_CONF_SRC = admserv/cfgstuff/httpd-2.2.conf.in
-@APACHE24_TRUE@HTTPD_CONF_SRC = admserv/cfgstuff/httpd-2.2.conf.in
+
+# F18 and newer
+@APACHE24_TRUE@HTTPD_CONF_SRC = admserv/cfgstuff/httpd-2.4.conf.in
MOSTLYCLEANFILES = $(nodist_cmdbin_SCRIPTS) $(nodist_config_DATA) \
$(RESOURCE_BUNDLES_ROOT)
@WINNT_FALSE@ICU_GENRB = sh -x $(srcdir)/admserv/genrb_wrapper.sh "@icu_bin@" "@icu_libdir@"
@@ -1157,12 +1162,14 @@ uninstall-admmodLTLIBRARIES:
clean-admmodLTLIBRARIES:
-test -z "$(admmod_LTLIBRARIES)" || rm -f $(admmod_LTLIBRARIES)
- @list='$(admmod_LTLIBRARIES)'; for p in $$list; do \
- dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
- test "$$dir" != "$$p" || dir=.; \
- echo "rm -f \"$${dir}/so_locations\""; \
- rm -f "$${dir}/so_locations"; \
- done
+ @list='$(admmod_LTLIBRARIES)'; \
+ locs=`for p in $$list; do echo $$p; done | \
+ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+ sort -u`; \
+ test -z "$$locs" || { \
+ echo rm -f $${locs}; \
+ rm -f $${locs}; \
+ }
install-libLTLIBRARIES: $(lib_LTLIBRARIES)
@$(NORMAL_INSTALL)
@list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
@@ -1189,12 +1196,14 @@ uninstall-libLTLIBRARIES:
clean-libLTLIBRARIES:
-test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES)
- @list='$(lib_LTLIBRARIES)'; for p in $$list; do \
- dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
- test "$$dir" != "$$p" || dir=.; \
- echo "rm -f \"$${dir}/so_locations\""; \
- rm -f "$${dir}/so_locations"; \
- done
+ @list='$(lib_LTLIBRARIES)'; \
+ locs=`for p in $$list; do echo $$p; done | \
+ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+ sort -u`; \
+ test -z "$$locs" || { \
+ echo rm -f $${locs}; \
+ rm -f $${locs}; \
+ }
lib/base/$(am__dirstamp):
@$(MKDIR_P) lib/base
@: > lib/base/$(am__dirstamp)
@@ -1649,72 +1658,19 @@ uninstall-updateSCRIPTS:
mostlyclean-compile:
-rm -f *.$(OBJEXT)
- -rm -f admserv/cgi-ds/ds_listdb-ds_listdb.$(OBJEXT)
- -rm -f admserv/cgi-ds/ds_listdb-init_ds_env.$(OBJEXT)
- -rm -f admserv/cgi-ds/ds_restart-init_ds_env.$(OBJEXT)
- -rm -f admserv/cgi-ds/ds_restart-restart.$(OBJEXT)
- -rm -f admserv/cgi-ds/ds_shutdown-init_ds_env.$(OBJEXT)
- -rm -f admserv/cgi-ds/ds_shutdown-shutdown.$(OBJEXT)
- -rm -f admserv/cgi-ds/ds_snmpctrl-ds_snmpctrl.$(OBJEXT)
- -rm -f admserv/cgi-ds/ds_snmpctrl-init_ds_env.$(OBJEXT)
- -rm -f admserv/cgi-ds/ds_start-init_ds_env.$(OBJEXT)
- -rm -f admserv/cgi-ds/ds_start-start.$(OBJEXT)
- -rm -f admserv/cgi-src40/ReadLog.$(OBJEXT)
- -rm -f admserv/cgi-src40/admpw.$(OBJEXT)
- -rm -f admserv/cgi-src40/config.$(OBJEXT)
- -rm -f admserv/cgi-src40/download.$(OBJEXT)
- -rm -f admserv/cgi-src40/dsconfig.$(OBJEXT)
- -rm -f admserv/cgi-src40/help.$(OBJEXT)
- -rm -f admserv/cgi-src40/htmladmin.$(OBJEXT)
- -rm -f admserv/cgi-src40/monreplication.$(OBJEXT)
- -rm -f admserv/cgi-src40/restartsrv.$(OBJEXT)
- -rm -f admserv/cgi-src40/sec-activate.$(OBJEXT)
- -rm -f admserv/cgi-src40/security.$(OBJEXT)
- -rm -f admserv/cgi-src40/start_config_ds.$(OBJEXT)
- -rm -f admserv/cgi-src40/statpingserv.$(OBJEXT)
- -rm -f admserv/cgi-src40/statusping.$(OBJEXT)
- -rm -f admserv/cgi-src40/stopsrv.$(OBJEXT)
- -rm -f admserv/cgi-src40/ugdsconfig.$(OBJEXT)
- -rm -f admserv/cgi-src40/viewdata.$(OBJEXT)
- -rm -f admserv/cgi-src40/viewlog.$(OBJEXT)
- -rm -f lib/base/file.$(OBJEXT)
- -rm -f lib/base/file.lo
- -rm -f lib/base/nscperror.$(OBJEXT)
- -rm -f lib/base/nscperror.lo
- -rm -f lib/base/nscputil.$(OBJEXT)
- -rm -f lib/base/nscputil.lo
- -rm -f lib/base/system.$(OBJEXT)
- -rm -f lib/base/system.lo
- -rm -f lib/libadmin/cluster.$(OBJEXT)
- -rm -f lib/libadmin/cluster.lo
- -rm -f lib/libadmin/error.$(OBJEXT)
- -rm -f lib/libadmin/error.lo
- -rm -f lib/libadmin/form_get.$(OBJEXT)
- -rm -f lib/libadmin/form_get.lo
- -rm -f lib/libadmin/httpcon.$(OBJEXT)
- -rm -f lib/libadmin/httpcon.lo
- -rm -f lib/libadmin/install.$(OBJEXT)
- -rm -f lib/libadmin/install.lo
- -rm -f lib/libadmin/referer.$(OBJEXT)
- -rm -f lib/libadmin/referer.lo
- -rm -f lib/libadmin/template.$(OBJEXT)
- -rm -f lib/libadmin/template.lo
- -rm -f lib/libadmin/util.$(OBJEXT)
- -rm -f lib/libadmin/util.lo
- -rm -f lib/libdsa/libdsa_a-dsalib_conf.$(OBJEXT)
- -rm -f lib/libdsa/libdsa_a-dsalib_confs.$(OBJEXT)
- -rm -f lib/libdsa/libdsa_a-dsalib_db.$(OBJEXT)
- -rm -f lib/libdsa/libdsa_a-dsalib_debug.$(OBJEXT)
- -rm -f lib/libdsa/libdsa_a-dsalib_location.$(OBJEXT)
- -rm -f lib/libdsa/libdsa_a-dsalib_tailf.$(OBJEXT)
- -rm -f lib/libdsa/libdsa_a-dsalib_updown.$(OBJEXT)
- -rm -f lib/libdsa/libdsa_a-dsalib_util.$(OBJEXT)
- -rm -f lib/libsi18n/getstrprop.$(OBJEXT)
- -rm -f lib/libsi18n/getstrprop.lo
- -rm -f mod_admserv/mod_admserv_la-mod_admserv.$(OBJEXT)
- -rm -f mod_admserv/mod_admserv_la-mod_admserv.lo
- -rm -f mod_restartd/mod_restartd_la-mod_restartd@ap_ver_suf@.$(OBJEXT)
- -rm -f mod_restartd/mod_restartd_la-mod_restartd@ap_ver_suf@.lo
+ -rm -f admserv/cgi-ds/*.$(OBJEXT)
+ -rm -f admserv/cgi-src40/*.$(OBJEXT)
+ -rm -f lib/base/*.$(OBJEXT)
+ -rm -f lib/base/*.lo
+ -rm -f lib/libadmin/*.$(OBJEXT)
+ -rm -f lib/libadmin/*.lo
+ -rm -f lib/libdsa/*.$(OBJEXT)
+ -rm -f lib/libsi18n/*.$(OBJEXT)
+ -rm -f lib/libsi18n/*.lo
+ -rm -f mod_admserv/*.$(OBJEXT)
+ -rm -f mod_admserv/*.lo
+ -rm -f mod_restartd/*.$(OBJEXT)
+ -rm -f mod_restartd/*.lo
distclean-compile:
-rm -f *.tab.c
@@ -2422,8 +2378,32 @@ GTAGS:
&& $(am__cd) $(top_srcdir) \
&& gtags -i $(GTAGS_ARGS) "$$here"
+cscope: cscope.files
+ test ! -s cscope.files \
+ || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS)
+
+clean-cscope:
+ -rm -f cscope.files
+
+cscope.files: clean-cscope cscopelist
+
+cscopelist: $(HEADERS) $(SOURCES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+ -rm -f cscope.out cscope.in.out cscope.po.out cscope.files
distdir: $(DISTFILES)
@list='$(MANS)'; if test -n "$$list"; then \
@@ -2432,10 +2412,10 @@ distdir: $(DISTFILES)
if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \
if test -n "$$list" && \
grep 'ab help2man is required to generate this page' $$list >/dev/null; then \
- echo "error: found man pages containing the \`missing help2man' replacement text:" >&2; \
+ echo "error: found man pages containing the 'missing help2man' replacement text:" >&2; \
grep -l 'ab help2man is required to generate this page' $$list | sed 's/^/ /' >&2; \
echo " to fix them, install help2man, remove and regenerate the man pages;" >&2; \
- echo " typically \`make maintainer-clean' will remove them" >&2; \
+ echo " typically 'make maintainer-clean' will remove them" >&2; \
exit 1; \
else :; fi; \
else :; fi
@@ -2479,40 +2459,36 @@ distdir: $(DISTFILES)
|| chmod -R a+r "$(distdir)"
dist-gzip: distdir
tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
- $(am__remove_distdir)
+ $(am__post_remove_distdir)
dist-bzip2: distdir
tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2
- $(am__remove_distdir)
+ $(am__post_remove_distdir)
dist-lzip: distdir
tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz
- $(am__remove_distdir)
-
-dist-lzma: distdir
- tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma
- $(am__remove_distdir)
+ $(am__post_remove_distdir)
dist-xz: distdir
tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz
- $(am__remove_distdir)
+ $(am__post_remove_distdir)
dist-tarZ: distdir
tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
- $(am__remove_distdir)
+ $(am__post_remove_distdir)
dist-shar: distdir
shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
- $(am__remove_distdir)
+ $(am__post_remove_distdir)
dist-zip: distdir
-rm -f $(distdir).zip
zip -rq $(distdir).zip $(distdir)
- $(am__remove_distdir)
+ $(am__post_remove_distdir)
-dist dist-all: distdir
- tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
- $(am__remove_distdir)
+dist dist-all:
+ $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:'
+ $(am__post_remove_distdir)
# This target untars the dist file and tries a VPATH configuration. Then
# it guarantees that the distribution is self-contained by making another
@@ -2523,8 +2499,6 @@ distcheck: dist
GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\
*.tar.bz2*) \
bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\
- *.tar.lzma*) \
- lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\
*.tar.lz*) \
lzip -dc $(distdir).tar.lz | $(am__untar) ;;\
*.tar.xz*) \
@@ -2536,7 +2510,7 @@ distcheck: dist
*.zip*) \
unzip $(distdir).zip ;;\
esac
- chmod -R a-w $(distdir); chmod a+w $(distdir)
+ chmod -R a-w $(distdir); chmod u+w $(distdir)
mkdir $(distdir)/_build
mkdir $(distdir)/_inst
chmod a-w $(distdir)
@@ -2570,7 +2544,7 @@ distcheck: dist
&& $(MAKE) $(AM_MAKEFLAGS) distcleancheck \
&& cd "$$am__cwd" \
|| exit 1
- $(am__remove_distdir)
+ $(am__post_remove_distdir)
@(echo "$(distdir) archives ready for distribution: "; \
list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'
@@ -2756,25 +2730,26 @@ uninstall-man: uninstall-man8
.MAKE: all check install install-am install-data-am install-strip
.PHONY: CTAGS GTAGS all all-am am--refresh check check-am clean \
- clean-admmodLTLIBRARIES clean-cgibinPROGRAMS clean-generic \
- clean-libLTLIBRARIES clean-libtool clean-local \
- clean-noinstLIBRARIES ctags dist dist-all dist-bzip2 dist-gzip \
- dist-lzip dist-lzma dist-shar dist-tarZ dist-xz dist-zip \
- distcheck distclean distclean-compile distclean-generic \
- distclean-hdr distclean-libtool distclean-tags distcleancheck \
- distdir distuninstallcheck dvi dvi-am html html-am info \
- info-am install install-admmodLTLIBRARIES install-am \
- install-cgibinPROGRAMS install-cgibinSCRIPTS \
- install-cmdbinSCRIPTS install-data install-data-am \
- install-data-hook install-dist_helpDATA install-dist_htmlDATA \
- install-dist_iconDATA install-dvi install-dvi-am install-exec \
- install-exec-am install-html install-html-am install-infDATA \
- install-info install-info-am install-initSCRIPTS \
- install-initconfigDATA install-ldifDATA install-libLTLIBRARIES \
- install-man install-man8 install-nodist_cmdbinSCRIPTS \
- install-nodist_configDATA install-pdf install-pdf-am \
- install-perlDATA install-propertyDATA install-ps install-ps-am \
- install-strip install-systemdsystemunitDATA install-updateDATA \
+ clean-admmodLTLIBRARIES clean-cgibinPROGRAMS clean-cscope \
+ clean-generic clean-libLTLIBRARIES clean-libtool clean-local \
+ clean-noinstLIBRARIES cscope cscopelist ctags dist dist-all \
+ dist-bzip2 dist-gzip dist-lzip dist-shar dist-tarZ dist-xz \
+ dist-zip distcheck distclean distclean-compile \
+ distclean-generic distclean-hdr distclean-libtool \
+ distclean-tags distcleancheck distdir distuninstallcheck dvi \
+ dvi-am html html-am info info-am install \
+ install-admmodLTLIBRARIES install-am install-cgibinPROGRAMS \
+ install-cgibinSCRIPTS install-cmdbinSCRIPTS install-data \
+ install-data-am install-data-hook install-dist_helpDATA \
+ install-dist_htmlDATA install-dist_iconDATA install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-infDATA install-info install-info-am \
+ install-initSCRIPTS install-initconfigDATA install-ldifDATA \
+ install-libLTLIBRARIES install-man install-man8 \
+ install-nodist_cmdbinSCRIPTS install-nodist_configDATA \
+ install-pdf install-pdf-am install-perlDATA \
+ install-propertyDATA install-ps install-ps-am install-strip \
+ install-systemdsystemunitDATA install-updateDATA \
install-updateSCRIPTS installcheck installcheck-am installdirs \
maintainer-clean maintainer-clean-generic mostlyclean \
mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
diff --git a/aclocal.m4 b/aclocal.m4
index b239a6b..9997c9c 100644
--- a/aclocal.m4
+++ b/aclocal.m4
@@ -1,8 +1,7 @@
-# generated automatically by aclocal 1.11.5 -*- Autoconf -*-
+# generated automatically by aclocal 1.12.2 -*- Autoconf -*-
+
+# Copyright (C) 1996-2012 Free Software Foundation, Inc.
-# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-# 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation,
-# Inc.
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@@ -18,7 +17,7 @@ m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],,
[m4_warning([this file was generated for autoconf 2.69.
You have another version of autoconf. It may work, but is not guaranteed to.
If you have problems, you may need to regenerate the build system entirely.
-To do so, use the procedure documented by the package, typically `autoreconf'.])])
+To do so, use the procedure documented by the package, typically 'autoreconf'.])])
# pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*-
# serial 1 (pkg-config-0.24)
@@ -180,14 +179,53 @@ else
fi[]dnl
])# PKG_CHECK_MODULES
-# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008, 2011 Free Software
-# Foundation, Inc.
+
+# PKG_INSTALLDIR(DIRECTORY)
+# -------------------------
+# Substitutes the variable pkgconfigdir as the location where a module
+# should install pkg-config .pc files. By default the directory is
+# $libdir/pkgconfig, but the default can be changed by passing
+# DIRECTORY. The user can override through the --with-pkgconfigdir
+# parameter.
+AC_DEFUN([PKG_INSTALLDIR],
+[m4_pushdef([pkg_default], [m4_default([$1], ['${libdir}/pkgconfig'])])
+m4_pushdef([pkg_description],
+ [pkg-config installation directory @<:@]pkg_default[@:>@])
+AC_ARG_WITH([pkgconfigdir],
+ [AS_HELP_STRING([--with-pkgconfigdir], pkg_description)],,
+ [with_pkgconfigdir=]pkg_default)
+AC_SUBST([pkgconfigdir], [$with_pkgconfigdir])
+m4_popdef([pkg_default])
+m4_popdef([pkg_description])
+]) dnl PKG_INSTALLDIR
+
+
+# PKG_NOARCH_INSTALLDIR(DIRECTORY)
+# -------------------------
+# Substitutes the variable noarch_pkgconfigdir as the location where a
+# module should install arch-independent pkg-config .pc files. By
+# default the directory is $datadir/pkgconfig, but the default can be
+# changed by passing DIRECTORY. The user can override through the
+# --with-noarch-pkgconfigdir parameter.
+AC_DEFUN([PKG_NOARCH_INSTALLDIR],
+[m4_pushdef([pkg_default], [m4_default([$1], ['${datadir}/pkgconfig'])])
+m4_pushdef([pkg_description],
+ [pkg-config arch-independent installation directory @<:@]pkg_default[@:>@])
+AC_ARG_WITH([noarch-pkgconfigdir],
+ [AS_HELP_STRING([--with-noarch-pkgconfigdir], pkg_description)],,
+ [with_noarch_pkgconfigdir=]pkg_default)
+AC_SUBST([noarch_pkgconfigdir], [$with_noarch_pkgconfigdir])
+m4_popdef([pkg_default])
+m4_popdef([pkg_description])
+]) dnl PKG_NOARCH_INSTALLDIR
+
+# Copyright (C) 2002-2012 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
-# serial 1
+# serial 8
# AM_AUTOMAKE_VERSION(VERSION)
# ----------------------------
@@ -195,10 +233,10 @@ fi[]dnl
# generated from the m4 files accompanying Automake X.Y.
# (This private macro should not be called outside this file.)
AC_DEFUN([AM_AUTOMAKE_VERSION],
-[am__api_version='1.11'
+[am__api_version='1.12'
dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
dnl require some minimum version. Point them to the right macro.
-m4_if([$1], [1.11.5], [],
+m4_if([$1], [1.12.2], [],
[AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
])
@@ -214,24 +252,24 @@ m4_define([_AM_AUTOCONF_VERSION], [])
# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
# This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
-[AM_AUTOMAKE_VERSION([1.11.5])dnl
+[AM_AUTOMAKE_VERSION([1.12.2])dnl
m4_ifndef([AC_AUTOCONF_VERSION],
[m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
# AM_AUX_DIR_EXPAND -*- Autoconf -*-
-# Copyright (C) 2001, 2003, 2005, 2011 Free Software Foundation, Inc.
+# Copyright (C) 2001-2012 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
-# serial 1
+# serial 2
# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
-# $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to
-# `$srcdir', `$srcdir/..', or `$srcdir/../..'.
+# $ac_aux_dir to '$srcdir/foo'. In other projects, it is set to
+# '$srcdir', '$srcdir/..', or '$srcdir/../..'.
#
# Of course, Automake must honor this variable whenever it calls a
# tool from the auxiliary directory. The problem is that $srcdir (and
@@ -250,7 +288,7 @@ _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
#
# The reason of the latter failure is that $top_srcdir and $ac_aux_dir
# are both prefixed by $srcdir. In an in-source build this is usually
-# harmless because $srcdir is `.', but things will broke when you
+# harmless because $srcdir is '.', but things will broke when you
# start a VPATH build or use an absolute $srcdir.
#
# So we could use something similar to $top_srcdir/$ac_aux_dir/missing,
@@ -276,22 +314,21 @@ am_aux_dir=`cd $ac_aux_dir && pwd`
# AM_CONDITIONAL -*- Autoconf -*-
-# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008
-# Free Software Foundation, Inc.
+# Copyright (C) 1997-2012 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
-# serial 9
+# serial 10
# AM_CONDITIONAL(NAME, SHELL-CONDITION)
# -------------------------------------
# Define a conditional.
AC_DEFUN([AM_CONDITIONAL],
-[AC_PREREQ(2.52)dnl
- ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])],
- [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
+[AC_PREREQ([2.52])dnl
+ m4_if([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])],
+ [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
AC_SUBST([$1_TRUE])dnl
AC_SUBST([$1_FALSE])dnl
_AM_SUBST_NOTMAKE([$1_TRUE])dnl
@@ -310,16 +347,15 @@ AC_CONFIG_COMMANDS_PRE(
Usually this means the macro was only invoked conditionally.]])
fi])])
-# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009,
-# 2010, 2011 Free Software Foundation, Inc.
+# Copyright (C) 1999-2012 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
-# serial 12
+# serial 17
-# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be
+# There are a few dirty hacks below to avoid letting 'AC_PROG_CC' be
# written in clear, in which case automake, when reading aclocal.m4,
# will think it sees a *use*, and therefore will trigger all it's
# C support machinery. Also note that it means that autoscan, seeing
@@ -329,7 +365,7 @@ fi])])
# _AM_DEPENDENCIES(NAME)
# ----------------------
# See how the compiler implements dependency checking.
-# NAME is "CC", "CXX", "GCJ", or "OBJC".
+# NAME is "CC", "CXX", "OBJC", "OBJCXX", "UPC", or "GJC".
# We try a few techniques and use that to set a single cache variable.
#
# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was
@@ -342,12 +378,13 @@ AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl
AC_REQUIRE([AM_MAKE_INCLUDE])dnl
AC_REQUIRE([AM_DEP_TRACK])dnl
-ifelse([$1], CC, [depcc="$CC" am_compiler_list=],
- [$1], CXX, [depcc="$CXX" am_compiler_list=],
- [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'],
- [$1], UPC, [depcc="$UPC" am_compiler_list=],
- [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'],
- [depcc="$$1" am_compiler_list=])
+m4_if([$1], [CC], [depcc="$CC" am_compiler_list=],
+ [$1], [CXX], [depcc="$CXX" am_compiler_list=],
+ [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'],
+ [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'],
+ [$1], [UPC], [depcc="$UPC" am_compiler_list=],
+ [$1], [GCJ], [depcc="$GCJ" am_compiler_list='gcc3 gcc'],
+ [depcc="$$1" am_compiler_list=])
AC_CACHE_CHECK([dependency style of $depcc],
[am_cv_$1_dependencies_compiler_type],
@@ -355,8 +392,8 @@ AC_CACHE_CHECK([dependency style of $depcc],
# We make a subdir and do the tests there. Otherwise we can end up
# making bogus files that we don't know about and never remove. For
# instance it was reported that on HP-UX the gcc test will end up
- # making a dummy file named `D' -- because `-MD' means `put the output
- # in D'.
+ # making a dummy file named 'D' -- because '-MD' means "put the output
+ # in D".
rm -rf conftest.dir
mkdir conftest.dir
# Copy depcomp to subdir because otherwise we won't find it if we're
@@ -396,16 +433,16 @@ AC_CACHE_CHECK([dependency style of $depcc],
: > sub/conftest.c
for i in 1 2 3 4 5 6; do
echo '#include "conftst'$i'.h"' >> sub/conftest.c
- # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
- # Solaris 8's {/usr,}/bin/sh.
- touch sub/conftst$i.h
+ # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with
+ # Solaris 10 /bin/sh.
+ echo '/* dummy */' > sub/conftst$i.h
done
echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
- # We check with `-c' and `-o' for the sake of the "dashmstdout"
+ # We check with '-c' and '-o' for the sake of the "dashmstdout"
# mode. It turns out that the SunPro C++ compiler does not properly
- # handle `-M -o', and we need to detect this. Also, some Intel
- # versions had trouble with output in subdirs
+ # handle '-M -o', and we need to detect this. Also, some Intel
+ # versions had trouble with output in subdirs.
am__obj=sub/conftest.${OBJEXT-o}
am__minus_obj="-o $am__obj"
case $depmode in
@@ -414,8 +451,8 @@ AC_CACHE_CHECK([dependency style of $depcc],
test "$am__universal" = false || continue
;;
nosideeffect)
- # after this tag, mechanisms are not by side-effect, so they'll
- # only be used when explicitly requested
+ # After this tag, mechanisms are not by side-effect, so they'll
+ # only be used when explicitly requested.
if test "x$enable_dependency_tracking" = xyes; then
continue
else
@@ -423,7 +460,7 @@ AC_CACHE_CHECK([dependency style of $depcc],
fi
;;
msvc7 | msvc7msys | msvisualcpp | msvcmsys)
- # This compiler won't grok `-c -o', but also, the minuso test has
+ # This compiler won't grok '-c -o', but also, the minuso test has
# not run yet. These depmodes are late enough in the game, and
# so weak that their functioning should not be impacted.
am__obj=conftest.${OBJEXT-o}
@@ -471,7 +508,7 @@ AM_CONDITIONAL([am__fastdep$1], [
# AM_SET_DEPDIR
# -------------
# Choose a directory name for dependency files.
-# This macro is AC_REQUIREd in _AM_DEPENDENCIES
+# This macro is AC_REQUIREd in _AM_DEPENDENCIES.
AC_DEFUN([AM_SET_DEPDIR],
[AC_REQUIRE([AM_SET_LEADING_DOT])dnl
AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl
@@ -481,9 +518,13 @@ AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl
# AM_DEP_TRACK
# ------------
AC_DEFUN([AM_DEP_TRACK],
-[AC_ARG_ENABLE(dependency-tracking,
-[ --disable-dependency-tracking speeds up one-time build
- --enable-dependency-tracking do not reject slow dependency extractors])
+[AC_ARG_ENABLE([dependency-tracking], [dnl
+AS_HELP_STRING(
+ [--enable-dependency-tracking],
+ [do not reject slow dependency extractors])
+AS_HELP_STRING(
+ [--disable-dependency-tracking],
+ [speeds up one-time build])])
if test "x$enable_dependency_tracking" != xno; then
am_depcomp="$ac_aux_dir/depcomp"
AMDEPBACKSLASH='\'
@@ -498,14 +539,13 @@ _AM_SUBST_NOTMAKE([am__nodep])dnl
# Generate code to set up dependency tracking. -*- Autoconf -*-
-# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008
-# Free Software Foundation, Inc.
+# Copyright (C) 1999-2012 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
-#serial 5
+# serial 6
# _AM_OUTPUT_DEPENDENCY_COMMANDS
# ------------------------------
@@ -524,7 +564,7 @@ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
# Strip MF so we end up with the name of the file.
mf=`echo "$mf" | sed -e 's/:.*$//'`
# Check whether this is an Automake generated Makefile or not.
- # We used to match only the files named `Makefile.in', but
+ # We used to match only the files named 'Makefile.in', but
# some people rename them; so instead we look at the file content.
# Grep'ing the first line is not enough: some people post-process
# each Makefile.in and add a new line on top of each file to say so.
@@ -536,21 +576,19 @@ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
continue
fi
# Extract the definition of DEPDIR, am__include, and am__quote
- # from the Makefile without running `make'.
+ # from the Makefile without running 'make'.
DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
test -z "$DEPDIR" && continue
am__include=`sed -n 's/^am__include = //p' < "$mf"`
test -z "am__include" && continue
am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
- # When using ansi2knr, U may be empty or an underscore; expand it
- U=`sed -n 's/^U = //p' < "$mf"`
# Find all dependency output files, they are included files with
# $(DEPDIR) in their names. We invoke sed twice because it is the
# simplest approach to changing $(DEPDIR) to its actual value in the
# expansion.
for file in `sed -n "
s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
- sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
+ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do
# Make sure the directory exists.
test -f "$dirpart/$file" && continue
fdir=`AS_DIRNAME(["$file"])`
@@ -568,7 +606,7 @@ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
# This macro should only be invoked once -- use via AC_REQUIRE.
#
# This code is only required when automatic dependency tracking
-# is enabled. FIXME. This creates each `.P' file that we will
+# is enabled. FIXME. This creates each '.P' file that we will
# need in order to bootstrap the dependency handling code.
AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
[AC_CONFIG_COMMANDS([depfiles],
@@ -578,14 +616,13 @@ AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
# Do all the work for Automake. -*- Autoconf -*-
-# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-# 2005, 2006, 2008, 2009 Free Software Foundation, Inc.
+# Copyright (C) 1996-2012 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
-# serial 16
+# serial 19
# This macro actually does too much. Some checks are only needed if
# your package does certain things. But this isn't really a big deal.
@@ -631,31 +668,41 @@ AC_SUBST([CYGPATH_W])
# Define the identity of the package.
dnl Distinguish between old-style and new-style calls.
m4_ifval([$2],
-[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
+[AC_DIAGNOSE([obsolete],
+[$0: two- and three-arguments forms are deprecated. For more info, see:
+http://www.gnu.org/software/automake/manual/automake.html#Modernize-AM_INIT_AUTOMAKE-invocation])
+m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
AC_SUBST([PACKAGE], [$1])dnl
AC_SUBST([VERSION], [$2])],
[_AM_SET_OPTIONS([$1])dnl
dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT.
-m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,,
+m4_if(
+ m4_ifdef([AC_PACKAGE_NAME], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]),
+ [ok:ok],,
[m4_fatal([AC_INIT should be called with package and version arguments])])dnl
AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl
AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl
_AM_IF_OPTION([no-define],,
-[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
- AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl
+[AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package])
+ AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl
# Some tools Automake needs.
AC_REQUIRE([AM_SANITY_CHECK])dnl
AC_REQUIRE([AC_ARG_PROGRAM])dnl
-AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version})
-AM_MISSING_PROG(AUTOCONF, autoconf)
-AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version})
-AM_MISSING_PROG(AUTOHEADER, autoheader)
-AM_MISSING_PROG(MAKEINFO, makeinfo)
+AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}])
+AM_MISSING_PROG([AUTOCONF], [autoconf])
+AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}])
+AM_MISSING_PROG([AUTOHEADER], [autoheader])
+AM_MISSING_PROG([MAKEINFO], [makeinfo])
AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl
-AC_REQUIRE([AM_PROG_MKDIR_P])dnl
+AC_REQUIRE([AC_PROG_MKDIR_P])dnl
+# For better backward compatibility. To be removed once Automake 1.9.x
+# dies out for good. For more background, see:
+# <http://lists.gnu.org/archive/html/automake/2012-07/msg00001.html>
+# <http://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>
+AC_SUBST([mkdir_p], ['$(MKDIR_P)'])
# We need awk for the "check" target. The system "awk" is bad on
# some platforms.
AC_REQUIRE([AC_PROG_AWK])dnl
@@ -666,28 +713,35 @@ _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])],
[_AM_PROG_TAR([v7])])])
_AM_IF_OPTION([no-dependencies],,
[AC_PROVIDE_IFELSE([AC_PROG_CC],
- [_AM_DEPENDENCIES(CC)],
- [define([AC_PROG_CC],
- defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl
+ [_AM_DEPENDENCIES([CC])],
+ [m4_define([AC_PROG_CC],
+ m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl
AC_PROVIDE_IFELSE([AC_PROG_CXX],
- [_AM_DEPENDENCIES(CXX)],
- [define([AC_PROG_CXX],
- defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl
+ [_AM_DEPENDENCIES([CXX])],
+ [m4_define([AC_PROG_CXX],
+ m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl
AC_PROVIDE_IFELSE([AC_PROG_OBJC],
- [_AM_DEPENDENCIES(OBJC)],
- [define([AC_PROG_OBJC],
- defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl
+ [_AM_DEPENDENCIES([OBJC])],
+ [m4_define([AC_PROG_OBJC],
+ m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl
+dnl Support for Objective C++ was only introduced in Autoconf 2.65,
+dnl but we still cater to Autoconf 2.62.
+m4_ifdef([AC_PROG_OBJCXX],
+[AC_PROVIDE_IFELSE([AC_PROG_OBJCXX],
+ [_AM_DEPENDENCIES([OBJCXX])],
+ [m4_define([AC_PROG_OBJCXX],
+ m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])])dnl
])
_AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl
-dnl The `parallel-tests' driver may need to know about EXEEXT, so add the
-dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro
+dnl The 'parallel-tests' driver may need to know about EXEEXT, so add the
+dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro
dnl is hooked onto _AC_COMPILER_EXEEXT early, see below.
AC_CONFIG_COMMANDS_PRE(dnl
[m4_provide_if([_AM_COMPILER_EXEEXT],
[AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl
])
-dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion. Do not
+dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not
dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further
dnl mangled by Autoconf and run in a shell conditional statement.
m4_define([_AC_COMPILER_EXEEXT],
@@ -715,14 +769,13 @@ for _am_header in $config_headers :; do
done
echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
-# Copyright (C) 2001, 2003, 2005, 2008, 2011 Free Software Foundation,
-# Inc.
+# Copyright (C) 2001-2012 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
-# serial 1
+# serial 8
# AM_PROG_INSTALL_SH
# ------------------
@@ -737,9 +790,9 @@ if test x"${install_sh}" != xset; then
install_sh="\${SHELL} $am_aux_dir/install-sh"
esac
fi
-AC_SUBST(install_sh)])
+AC_SUBST([install_sh])])
-# Copyright (C) 2003, 2005 Free Software Foundation, Inc.
+# Copyright (C) 2003-2012 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -763,20 +816,19 @@ AC_SUBST([am__leading_dot])])
# Add --enable-maintainer-mode option to configure. -*- Autoconf -*-
# From Jim Meyering
-# Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004, 2005, 2008,
-# 2011 Free Software Foundation, Inc.
+# Copyright (C) 1996-2012 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
-# serial 5
+# serial 7
# AM_MAINTAINER_MODE([DEFAULT-MODE])
# ----------------------------------
# Control maintainer-specific portions of Makefiles.
-# Default is to disable them, unless `enable' is passed literally.
-# For symmetry, `disable' may be passed as well. Anyway, the user
+# Default is to disable them, unless 'enable' is passed literally.
+# For symmetry, 'disable' may be passed as well. Anyway, the user
# can override the default with the --enable/--disable switch.
AC_DEFUN([AM_MAINTAINER_MODE],
[m4_case(m4_default([$1], [disable]),
@@ -787,10 +839,11 @@ AC_DEFUN([AM_MAINTAINER_MODE],
AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles])
dnl maintainer-mode's default is 'disable' unless 'enable' is passed
AC_ARG_ENABLE([maintainer-mode],
-[ --][am_maintainer_other][-maintainer-mode am_maintainer_other make rules and dependencies not useful
- (and sometimes confusing) to the casual installer],
- [USE_MAINTAINER_MODE=$enableval],
- [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes]))
+ [AS_HELP_STRING([--]am_maintainer_other[-maintainer-mode],
+ am_maintainer_other[ make rules and dependencies not useful
+ (and sometimes confusing) to the casual installer])],
+ [USE_MAINTAINER_MODE=$enableval],
+ [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes]))
AC_MSG_RESULT([$USE_MAINTAINER_MODE])
AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes])
MAINT=$MAINTAINER_MODE_TRUE
@@ -802,13 +855,13 @@ AU_DEFUN([jm_MAINTAINER_MODE], [AM_MAINTAINER_MODE])
# Check to see how 'make' treats includes. -*- Autoconf -*-
-# Copyright (C) 2001, 2002, 2003, 2005, 2009 Free Software Foundation, Inc.
+# Copyright (C) 2001-2012 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
-# serial 4
+# serial 5
# AM_MAKE_INCLUDE()
# -----------------
@@ -827,7 +880,7 @@ am__quote=
_am_result=none
# First try GNU make style include.
echo "include confinc" > confmf
-# Ignore all kinds of additional output from `make'.
+# Ignore all kinds of additional output from 'make'.
case `$am_make -s -f confmf 2> /dev/null` in #(
*the\ am__doit\ target*)
am__include=include
@@ -852,8 +905,7 @@ AC_MSG_RESULT([$_am_result])
rm -f confinc confmf
])
-# Copyright (C) 1999, 2000, 2001, 2003, 2004, 2005, 2008
-# Free Software Foundation, Inc.
+# Copyright (C) 1999-2012 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -889,14 +941,13 @@ m4_define([AC_PROG_CC],
# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*-
-# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008
-# Free Software Foundation, Inc.
+# Copyright (C) 1997-2012 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
-# serial 6
+# serial 7
# AM_MISSING_PROG(NAME, PROGRAM)
# ------------------------------
@@ -926,49 +977,19 @@ if eval "$MISSING --run true"; then
am_missing_run="$MISSING --run "
else
am_missing_run=
- AC_MSG_WARN([`missing' script is too old or missing])
+ AC_MSG_WARN(['missing' script is too old or missing])
fi
])
-# Copyright (C) 2003, 2004, 2005, 2006, 2011 Free Software Foundation,
-# Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# serial 1
-
-# AM_PROG_MKDIR_P
-# ---------------
-# Check for `mkdir -p'.
-AC_DEFUN([AM_PROG_MKDIR_P],
-[AC_PREREQ([2.60])dnl
-AC_REQUIRE([AC_PROG_MKDIR_P])dnl
-dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P,
-dnl while keeping a definition of mkdir_p for backward compatibility.
-dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile.
-dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of
-dnl Makefile.ins that do not define MKDIR_P, so we do our own
-dnl adjustment using top_builddir (which is defined more often than
-dnl MKDIR_P).
-AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl
-case $mkdir_p in
- [[\\/$]]* | ?:[[\\/]]*) ;;
- */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
-esac
-])
-
# Helper functions for option handling. -*- Autoconf -*-
-# Copyright (C) 2001, 2002, 2003, 2005, 2008, 2010 Free Software
-# Foundation, Inc.
+# Copyright (C) 2001-2012 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
-# serial 5
+# serial 6
# _AM_MANGLE_OPTION(NAME)
# -----------------------
@@ -979,7 +1000,7 @@ AC_DEFUN([_AM_MANGLE_OPTION],
# --------------------
# Set option NAME. Presently that only means defining a flag for this option.
AC_DEFUN([_AM_SET_OPTION],
-[m4_define(_AM_MANGLE_OPTION([$1]), 1)])
+[m4_define(_AM_MANGLE_OPTION([$1]), [1])])
# _AM_SET_OPTIONS(OPTIONS)
# ------------------------
@@ -995,22 +1016,18 @@ AC_DEFUN([_AM_IF_OPTION],
# Check to make sure that the build environment is sane. -*- Autoconf -*-
-# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008
-# Free Software Foundation, Inc.
+# Copyright (C) 1996-2012 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
-# serial 5
+# serial 9
# AM_SANITY_CHECK
# ---------------
AC_DEFUN([AM_SANITY_CHECK],
[AC_MSG_CHECKING([whether build environment is sane])
-# Just in case
-sleep 1
-echo timestamp > conftest.file
# Reject unsafe characters in $srcdir or the absolute working directory
# name. Accept space and tab only in the latter.
am_lf='
@@ -1021,32 +1038,40 @@ case `pwd` in
esac
case $srcdir in
*[[\\\"\#\$\&\'\`$am_lf\ \ ]]*)
- AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);;
+ AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);;
esac
-# Do `set' in a subshell so we don't clobber the current shell's
+# Do 'set' in a subshell so we don't clobber the current shell's
# arguments. Must try -L first in case configure is actually a
# symlink; some systems play weird games with the mod time of symlinks
# (eg FreeBSD returns the mod time of the symlink's containing
# directory).
if (
- set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
- if test "$[*]" = "X"; then
- # -L didn't work.
- set X `ls -t "$srcdir/configure" conftest.file`
- fi
- rm -f conftest.file
- if test "$[*]" != "X $srcdir/configure conftest.file" \
- && test "$[*]" != "X conftest.file $srcdir/configure"; then
-
- # If neither matched, then we have a broken ls. This can happen
- # if, for instance, CONFIG_SHELL is bash and it inherits a
- # broken ls alias from the environment. This has actually
- # happened. Such a system could not be considered "sane".
- AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken
-alias in your environment])
- fi
-
+ am_has_slept=no
+ for am_try in 1 2; do
+ echo "timestamp, slept: $am_has_slept" > conftest.file
+ set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
+ if test "$[*]" = "X"; then
+ # -L didn't work.
+ set X `ls -t "$srcdir/configure" conftest.file`
+ fi
+ if test "$[*]" != "X $srcdir/configure conftest.file" \
+ && test "$[*]" != "X conftest.file $srcdir/configure"; then
+
+ # If neither matched, then we have a broken ls. This can happen
+ # if, for instance, CONFIG_SHELL is bash and it inherits a
+ # broken ls alias from the environment. This has actually
+ # happened. Such a system could not be considered "sane".
+ AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken
+ alias in your environment])
+ fi
+ if test "$[2]" = conftest.file || test $am_try -eq 2; then
+ break
+ fi
+ # Just in case.
+ sleep 1
+ am_has_slept=yes
+ done
test "$[2]" = conftest.file
)
then
@@ -1056,39 +1081,55 @@ else
AC_MSG_ERROR([newly created file is older than distributed files!
Check your system clock])
fi
-AC_MSG_RESULT(yes)])
+AC_MSG_RESULT([yes])
+# If we didn't sleep, we still need to ensure time stamps of config.status and
+# generated files are strictly newer.
+am_sleep_pid=
+if grep 'slept: no' conftest.file >/dev/null 2>&1; then
+ ( sleep 1 ) &
+ am_sleep_pid=$!
+fi
+AC_CONFIG_COMMANDS_PRE(
+ [AC_MSG_CHECKING([that generated files are newer than configure])
+ if test -n "$am_sleep_pid"; then
+ # Hide warnings about reused PIDs.
+ wait $am_sleep_pid 2>/dev/null
+ fi
+ AC_MSG_RESULT([done])])
+rm -f conftest.file
+])
-# Copyright (C) 2001, 2003, 2005, 2011 Free Software Foundation, Inc.
+# Copyright (C) 2001-2012 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
-# serial 1
+# serial 2
# AM_PROG_INSTALL_STRIP
# ---------------------
-# One issue with vendor `install' (even GNU) is that you can't
+# One issue with vendor 'install' (even GNU) is that you can't
# specify the program used to strip binaries. This is especially
# annoying in cross-compiling environments, where the build's strip
# is unlikely to handle the host's binaries.
# Fortunately install-sh will honor a STRIPPROG variable, so we
-# always use install-sh in `make install-strip', and initialize
+# always use install-sh in "make install-strip", and initialize
# STRIPPROG with the value of the STRIP variable (set by the user).
AC_DEFUN([AM_PROG_INSTALL_STRIP],
[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
-# Installed binaries are usually stripped using `strip' when the user
-# run `make install-strip'. However `strip' might not be the right
+# Installed binaries are usually stripped using 'strip' when the user
+# run "make install-strip". However 'strip' might not be the right
# tool to use in cross-compilation environments, therefore Automake
-# will honor the `STRIP' environment variable to overrule this program.
-dnl Don't test for $cross_compiling = yes, because it might be `maybe'.
+# will honor the 'STRIP' environment variable to overrule this program.
+dnl Don't test for $cross_compiling = yes, because it might be 'maybe'.
if test "$cross_compiling" != no; then
AC_CHECK_TOOL([STRIP], [strip], :)
fi
INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
AC_SUBST([INSTALL_STRIP_PROGRAM])])
-# Copyright (C) 2006, 2008, 2010 Free Software Foundation, Inc.
+# Copyright (C) 2006-2012 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -1109,18 +1150,18 @@ AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
# Check how to create a tarball. -*- Autoconf -*-
-# Copyright (C) 2004, 2005, 2012 Free Software Foundation, Inc.
+# Copyright (C) 2004-2012 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
-# serial 2
+# serial 3
# _AM_PROG_TAR(FORMAT)
# --------------------
# Check how to create a tarball in format FORMAT.
-# FORMAT should be one of `v7', `ustar', or `pax'.
+# FORMAT should be one of 'v7', 'ustar', or 'pax'.
#
# Substitute a variable $(am__tar) that is a command
# writing to stdout a FORMAT-tarball containing the directory
@@ -1143,7 +1184,7 @@ AC_MSG_CHECKING([how to create a $1 tar archive])
_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none'
_am_tools=${am_cv_prog_tar_$1-$_am_tools}
# Do not fold the above two line into one, because Tru64 sh and
-# Solaris sh will not grok spaces in the rhs of `-'.
+# Solaris sh will not grok spaces in the rhs of '-'.
for _am_tool in $_am_tools
do
case $_am_tool in
diff --git a/admserv/cfgstuff/httpd-2.4.conf.in b/admserv/cfgstuff/httpd-2.4.conf.in
new file mode 100644
index 0000000..5946d3a
--- /dev/null
+++ b/admserv/cfgstuff/httpd-2.4.conf.in
@@ -0,0 +1,742 @@
+# BEGIN COPYRIGHT BLOCK
+# Copyright (C) 2013 Red Hat, Inc.
+# All rights reserved.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; version 2
+# of the License.
+#
+# 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+
+# END COPYRIGHT BLOCK
+#
+# Based upon the NCSA server configuration files originally by Rob McCool.
+#
+# This is the main Apache server configuration file. It contains the
+# configuration directives that give the server its instructions.
+# See <URL:http://httpd.apache.org/docs-2.0/> for detailed information about
+# the directives.
+#
+# Do NOT simply read the instructions in here without understanding
+# what they do. They're here only as hints or reminders. If you are unsure
+# consult the online docs. You have been warned.
+#
+# The configuration directives are grouped into three basic sections:
+# 1. Directives that control the operation of the Apache server process as a
+# whole (the 'global environment').
+# 2. Directives that define the parameters of the 'main' or 'default' server,
+# which responds to requests that aren't handled by a virtual host.
+# These directives also provide default values for the settings
+# of all virtual hosts.
+# 3. Settings for virtual hosts, which allow Web requests to be sent to
+# different IP addresses or hostnames and have them handled by the
+# same Apache server process.
+#
+# Configuration and logfile names: If the filenames you specify for many
+# of the server's control files begin with "/" (or "drive:/" for Win32), the
+# server will use that explicit path. If the filenames do *not* begin
+# with "/", the value of ServerRoot is prepended -- so "logs/foo.log"
+# with ServerRoot set to "/path/redhat/apache" will be interpreted by the
+# server as "/path/redhat/apache/logs/foo.log".
+#
+
+### Section 1: Global Environment
+#
+# The directives in this section affect the overall operation of Apache,
+# such as the number of concurrent requests it can handle or where it
+# can find its configuration files.
+#
+
+#
+# ServerRoot: The top of the directory tree under which the server's
+# configuration, error, and log files are kept.
+#
+# NOTE! If you intend to place this on an NFS (or otherwise network)
+# mounted filesystem then please read the LockFile documentation (available
+# at <URL:http://httpd.apache.org/docs-2.0/mod/mpm_common.html#lockfile>);
+# you will save yourself a lot of trouble.
+#
+# Do NOT add a slash at the end of the directory path.
+#
+#ServerRoot This is passed in via the start-admin command line
+
+#
+# Timeout: The number of seconds before receives and sends time out.
+#
+Timeout 300
+
+#
+# KeepAlive: Whether or not to allow persistent connections (more than
+# one request per connection). Set to "Off" to deactivate.
+#
+KeepAlive Off
+
+#
+# MaxKeepAliveRequests: The maximum number of requests to allow
+# during a persistent connection. Set to 0 to allow an unlimited amount.
+# We recommend you leave this number high, for maximum performance.
+#
+MaxKeepAliveRequests 100
+
+#
+# KeepAliveTimeout: Number of seconds to wait for the next request from the
+# same client on the same connection.
+#
+KeepAliveTimeout 15
+
+# The console bombs on the x.y.z version format, so omit the .z
+ServerTokens Minor
+
+# start one server in multi threaded mode
+StartServers 1
+# mtm
+ServerLimit 1
+
+MaxClients 64
+MinSpareThreads 32
+MaxSpareThreads 64
+ThreadsPerChild 64
+
+#
+# Dynamic Shared Object (DSO) Support
+#
+# To be able to use the functionality of a module which was built as a DSO you
+# have to place corresponding `LoadModule' lines at this location so the
+# directives contained in it are actually available _before_ they are used.
+# Statically compiled modules (those listed by `httpd -l') do not need
+# to be loaded here.
+#
+# Example:
+# LoadModule foo_module modules/mod_foo.so
+LoadModule authz_host_module @moddir(a)/mod_authz_host.so
+LoadModule auth_basic_module @moddir(a)/mod_auth_basic.so
+LoadModule authn_file_module @moddir(a)/mod_authn_file.so
+LoadModule log_config_module @moddir(a)/mod_log_config.so
+LoadModule env_module @moddir(a)/mod_env.so
+LoadModule mime_magic_module @moddir(a)/mod_mime_magic.so
+LoadModule unique_id_module @moddir(a)/mod_unique_id.so
+LoadModule setenvif_module @moddir(a)/mod_setenvif.so
+LoadModule mime_module @moddir(a)/mod_mime.so
+LoadModule negotiation_module @moddir(a)/mod_negotiation.so
+LoadModule dir_module @moddir(a)/mod_dir.so
+LoadModule alias_module @moddir(a)/mod_alias.so
+LoadModule rewrite_module @moddir(a)/mod_rewrite.so
+LoadModule cgi_module @moddir(a)/mod_cgi.so
+LoadModule restartd_module @admmoddir(a)/mod_restartd.so
+LoadModule nss_module @nssmoddir(a)/libmodnss.so
+LoadModule admserv_module @admmoddir(a)/mod_admserv.so
+LoadModule mpm_worker_module @moddir(a)/mod_mpm_worker.so
+LoadModule access_compat_module @moddir(a)/mod_access_compat.so
+LoadModule authn_core_module @moddir(a)/mod_authn_core.so
+LoadModule authz_core_module @moddir(a)/mod_authz_core.so
+LoadModule authz_user_module @moddir(a)/mod_authz_user.so
+LoadModule unixd_module @moddir(a)/mod_unixd.so
+
+### Section 2: 'Main' server configuration
+#
+# The directives in this section set up the values used by the 'main'
+# server, which responds to any requests that aren't handled by a
+# <VirtualHost> definition. These values also provide defaults for
+# any <VirtualHost> containers you may define later in the file.
+#
+# All of these directives may appear inside <VirtualHost> containers,
+# in which case these default settings will be overridden for the
+# virtual host being defined.
+#
+
+#
+# ServerAdmin: Your address, where problems with the server should be
+# e-mailed. This address appears on some server-generated pages, such
+# as error documents. e.g. admin(a)your-domain.com
+#
+#ServerAdmin you(a)example.com
+
+#
+# ServerName gives the name and port that the server uses to identify itself.
+# This can often be determined automatically, but we recommend you specify
+# it explicitly to prevent problems during startup.
+#
+# If this is not set to valid DNS name for your host, server-generated
+# redirections will not work. See also the UseCanonicalName directive.
+#
+# If your host doesn't have a registered DNS name, enter its IP address here.
+# You will have to access it by its address anyway, and this will make
+# redirections work in a sensible way.
+#
+#ServerName www.example.com:80
+
+#
+# UseCanonicalName: Determines how Apache constructs self-referencing
+# URLs and the SERVER_NAME and SERVER_PORT variables.
+# When set "Off", Apache will use the Hostname and Port supplied
+# by the client. When set "On", Apache will use the value of the
+# ServerName directive.
+#
+UseCanonicalName Off
+
+#
+# DocumentRoot: The directory out of which you will serve your
+# documents. By default, all requests are taken from this directory, but
+# symbolic links and aliases may be used to point to other locations.
+#
+DocumentRoot @htmldir@
+
+#
+# Each directory to which Apache has access can be configured with respect
+# to which services and features are allowed and/or disabled in that
+# directory (and its subdirectories).
+#
+# First, we configure the "default" to be a very restrictive set of
+# features.
+#
+<Directory />
+ Options FollowSymLinks
+ AllowOverride None
+</Directory>
+
+#
+# Note that from this point forward you must specifically allow
+# particular features to be enabled - so if something's not working as
+# you might expect, make sure that you have specifically enabled it
+# below.
+#
+
+#
+# This should be changed to whatever you set DocumentRoot to.
+#
+<Directory @htmldir@>
+
+#
+# Possible values for the Options directive are "None", "All",
+# or any combination of:
+# Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
+#
+# Note that "MultiViews" must be named *explicitly* --- "Options All"
+# doesn't give it to you.
+#
+# The Options directive is both complicated and important. Please see
+# http://httpd.apache.org/docs-2.0/mod/core.html#options
+# for more information.
+#
+ Options Indexes FollowSymLinks
+
+#
+# AllowOverride controls what directives may be placed in .htaccess files.
+# It can be "All", "None", or any combination of the keywords:
+# Options FileInfo AuthConfig Limit
+#
+ AllowOverride None
+
+#
+# Controls who can get stuff from this server.
+# By default, no one may access anything
+# Access must be explicitly granted in admserv.conf
+ Order deny,allow
+ Deny from all
+
+</Directory>
+
+#
+# DirectoryIndex: sets the file that Apache will serve if a directory
+# is requested.
+#
+# The index.html.var file (a type-map) is used to deliver content-
+# negotiated documents. The MultiViews Option can be used for the
+# same purpose, but it is much slower.
+#
+DirectoryIndex index.html index.html.var
+
+#
+# AccessFileName: The name of the file to look for in each directory
+# for additional configuration directives. See also the AllowOverride
+# directive.
+#
+AccessFileName .htaccess
+
+#
+# The following lines prevent .htaccess and .htpasswd files from being
+# viewed by Web clients.
+#
+<Files ~ "^\.ht">
+ Order allow,deny
+ Deny from all
+</Files>
+
+#
+# TypesConfig describes where the mime.types file (or equivalent) is
+# to be found.
+#
+TypesConfig /etc/mime.types
+
+#
+# DefaultType is the default MIME type the server will use for a document
+# if it cannot otherwise determine one, such as from filename extensions.
+# If your server contains mostly text or HTML documents, "text/plain" is
+# a good value. If most of your content is binary, such as applications
+# or images, you may want to use "application/octet-stream" instead to
+# keep browsers from trying to display binary files as though they are
+# text.
+#
+DefaultType none
+
+#
+# The mod_mime_magic module allows the server to use various hints from the
+# contents of the file itself to determine its type. The MIMEMagicFile
+# directive tells the module where the hint definitions are located.
+#
+<IfModule mod_mime_magic.c>
+ MIMEMagicFile @mimemagic@
+</IfModule>
+
+#
+# HostnameLookups: Log the names of clients or just their IP addresses
+# e.g., www.apache.org (on) or 204.62.129.132 (off).
+# The default is off because it'd be overall better for the net if people
+# had to knowingly turn this feature on, since enabling it means that
+# each client request will result in AT LEAST one lookup request to the
+# nameserver.
+#
+HostnameLookups Off
+
+#
+# EnableMMAP: Control whether memory-mapping is used to deliver
+# files (assuming that the underlying OS supports it).
+# The default is on; turn this off if you serve from NFS-mounted
+# filesystems. On some systems, turning it off (regardless of
+# filesystem) can improve performance; for details, please see
+# http://httpd.apache.org/docs-2.0/mod/core.html#enablemmap
+#
+#EnableMMAP off
+
+#
+# EnableSendfile: Control whether the sendfile kernel support is
+# used to deliver files (assuming that the OS supports it).
+# The default is on; turn this off if you serve from NFS-mounted
+# filesystems. Please see
+# http://httpd.apache.org/docs-2.0/mod/core.html#enablesendfile
+#
+#EnableSendfile off
+
+#
+# LogLevel: Control the number of messages logged to the error_log.
+# Possible values include: debug, info, notice, warn, error, crit,
+# alert, emerg.
+#
+LogLevel warn
+
+#
+# The following directives define some format nicknames for use with
+# a CustomLog directive (see below).
+#
+LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
+LogFormat "%h %l %u %t \"%r\" %>s %b" common
+LogFormat "%{Referer}i -> %U" referer
+LogFormat "%{User-agent}i" agent
+
+# You need to enable mod_logio.c to use %I and %O
+#LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
+
+#
+# Optionally add a line containing the server version and virtual host
+# name to server-generated pages (internal error documents, FTP directory
+# listings, mod_status and mod_info output etc., but not CGI generated
+# documents or custom error documents).
+# Set to "EMail" to also include a mailto: link to the ServerAdmin.
+# Set to one of: On | Off | EMail
+#
+ServerSignature On
+
+#
+# Aliases: Add here as many aliases as you need (with no limit). The format is
+# Alias fakename realname
+#
+# Note that if you include a trailing / on fakename then the server will
+# require it to be present in the URL. So "/icons" isn't aliased in this
+# example, only "/icons/". If the fakename is slash-terminated, then the
+# realname must also be slash terminated, and if the fakename omits the
+# trailing slash, the realname must also omit it.
+#
+# We include the /icons/ alias for FancyIndexed directory listings. If you
+# do not use FancyIndexing, you may comment this out.
+#
+
+#
+# This should be changed to the ServerRoot/manual/. The alias provides
+# the manual, even if you choose to move your DocumentRoot. You may comment
+# this out if you do not care for the documentation.
+#
+
+#
+# ScriptAlias: This controls which directories contain server scripts.
+# ScriptAliases are essentially the same as Aliases, except that
+# documents in the realname directory are treated as applications and
+# run by the server when requested rather than as documents sent to the client.
+# The same rules about trailing "/" apply to ScriptAlias directives as to
+# Alias.
+#
+
+<IfModule mod_cgid.c>
+#
+# Additional to mod_cgid.c settings, mod_cgid has Scriptsock <path>
+# for setting UNIX socket for communicating with cgid.
+#
+Scriptsock @piddir(a)/admin-serv.cgisock
+</IfModule>
+
+# and this one is for mod_restartd because mod_cgid will consume the other one
+Scriptsock @piddir(a)/admin-serv.cgisock
+
+#
+# Redirect allows you to tell clients about documents which used to exist in
+# your server's namespace, but do not anymore. This allows you to tell the
+# clients where to look for the relocated document.
+# Example:
+# Redirect permanent /foo http://www.example.com/bar
+
+#
+# DefaultLanguage and AddLanguage allows you to specify the language of
+# a document. You can then use content negotiation to give a browser a
+# file in a language the user can understand.
+#
+# Specify a default language. This means that all data
+# going out without a specific language tag (see below) will
+# be marked with this one. You probably do NOT want to set
+# this unless you are sure it is correct for all cases.
+#
+# * It is generally better to not mark a page as
+# * being a certain language than marking it with the wrong
+# * language!
+#
+# DefaultLanguage nl
+#
+# Note 1: The suffix does not have to be the same as the language
+# keyword --- those with documents in Polish (whose net-standard
+# language code is pl) may wish to use "AddLanguage pl .po" to
+# avoid the ambiguity with the common suffix for perl scripts.
+#
+# Note 2: The example entries below illustrate that in some cases
+# the two character 'Language' abbreviation is not identical to
+# the two character 'Country' code for its country,
+# E.g. 'Danmark/dk' versus 'Danish/da'.
+#
+# Note 3: In the case of 'ltz' we violate the RFC by using a three char
+# specifier. There is 'work in progress' to fix this and get
+# the reference data for rfc1766 cleaned up.
+#
+# Catalan (ca) - Croatian (hr) - Czech (cs) - Danish (da) - Dutch (nl)
+# English (en) - Esperanto (eo) - Estonian (et) - French (fr) - German (de)
+# Greek-Modern (el) - Hebrew (he) - Italian (it) - Japanese (ja)
+# Korean (ko) - Luxembourgeois* (ltz) - Norwegian Nynorsk (nn)
+# Norwegian (no) - Polish (pl) - Portugese (pt)
+# Brazilian Portuguese (pt-BR) - Russian (ru) - Swedish (sv)
+# Simplified Chinese (zh-CN) - Spanish (es) - Traditional Chinese (zh-TW)
+#
+AddLanguage ca .ca
+AddLanguage cs .cz .cs
+AddLanguage da .dk
+AddLanguage de .de
+AddLanguage el .el
+AddLanguage en .en
+AddLanguage eo .eo
+AddLanguage es .es
+AddLanguage et .et
+AddLanguage fr .fr
+AddLanguage he .he
+AddLanguage hr .hr
+AddLanguage it .it
+AddLanguage ja .ja
+AddLanguage ko .ko
+AddLanguage ltz .ltz
+AddLanguage nl .nl
+AddLanguage nn .nn
+AddLanguage no .no
+AddLanguage pl .po
+AddLanguage pt .pt
+AddLanguage pt-BR .pt-br
+AddLanguage ru .ru
+AddLanguage sv .sv
+AddLanguage zh-CN .zh-cn
+AddLanguage zh-TW .zh-tw
+
+#
+# LanguagePriority allows you to give precedence to some languages
+# in case of a tie during content negotiation.
+#
+# Just list the languages in decreasing order of preference. We have
+# more or less alphabetized them here. You probably want to change this.
+#
+LanguagePriority en ca cs da de el eo es et fr he hr it ja ko ltz nl nn no pl pt pt-BR ru sv zh-CN zh-TW
+
+#
+# ForceLanguagePriority allows you to serve a result page rather than
+# MULTIPLE CHOICES (Prefer) [in case of a tie] or NOT ACCEPTABLE (Fallback)
+# [in case no accepted languages matched the available variants]
+#
+ForceLanguagePriority Prefer Fallback
+
+#
+# Commonly used filename extensions to character sets. You probably
+# want to avoid clashes with the language extensions, unless you
+# are good at carefully testing your setup after each change.
+# See http://www.iana.org/assignments/character-sets for the
+# official list of charset names and their respective RFCs.
+#
+AddCharset ISO-8859-1 .iso8859-1 .latin1
+AddCharset ISO-8859-2 .iso8859-2 .latin2 .cen
+AddCharset ISO-8859-3 .iso8859-3 .latin3
+AddCharset ISO-8859-4 .iso8859-4 .latin4
+AddCharset ISO-8859-5 .iso8859-5 .latin5 .cyr .iso-ru
+AddCharset ISO-8859-6 .iso8859-6 .latin6 .arb
+AddCharset ISO-8859-7 .iso8859-7 .latin7 .grk
+AddCharset ISO-8859-8 .iso8859-8 .latin8 .heb
+AddCharset ISO-8859-9 .iso8859-9 .latin9 .trk
+AddCharset ISO-2022-JP .iso2022-jp .jis
+AddCharset ISO-2022-KR .iso2022-kr .kis
+AddCharset ISO-2022-CN .iso2022-cn .cis
+AddCharset Big5 .Big5 .big5
+# For russian, more than one charset is used (depends on client, mostly):
+AddCharset WINDOWS-1251 .cp-1251 .win-1251
+AddCharset CP866 .cp866
+AddCharset KOI8-r .koi8-r .koi8-ru
+AddCharset KOI8-ru .koi8-uk .ua
+AddCharset ISO-10646-UCS-2 .ucs2
+AddCharset ISO-10646-UCS-4 .ucs4
+AddCharset UTF-8 .utf8
+
+# The set below does not map to a specific (iso) standard
+# but works on a fairly wide range of browsers. Note that
+# capitalization actually matters (it should not, but it
+# does for some browsers).
+#
+# See http://www.iana.org/assignments/character-sets
+# for a list of sorts. But browsers support few.
+#
+AddCharset GB2312 .gb2312 .gb
+AddCharset utf-7 .utf7
+AddCharset utf-8 .utf8
+AddCharset big5 .big5 .b5
+AddCharset EUC-TW .euc-tw
+AddCharset EUC-JP .euc-jp
+AddCharset EUC-KR .euc-kr
+AddCharset shift_jis .sjis
+
+#
+# AddType allows you to add to or override the MIME configuration
+# file mime.types for specific file types.
+#
+#AddType application/x-tar .tgz
+#
+# AddEncoding allows you to have certain browsers uncompress
+# information on the fly. Note: Not all browsers support this.
+# Despite the name similarity, the following Add* directives have nothing
+# to do with the FancyIndexing customization directives above.
+#
+#AddEncoding x-compress .Z
+#AddEncoding x-gzip .gz .tgz
+#
+# If the AddEncoding directives above are commented-out, then you
+# probably should define those extensions to indicate media types:
+#
+AddType application/x-compress .Z
+AddType application/x-gzip .gz .tgz
+
+#
+# AddHandler allows you to map certain file extensions to "handlers":
+# actions unrelated to filetype. These can be either built into the server
+# or added with the Action directive (see below)
+#
+# To use CGI scripts outside of ScriptAliased directories:
+# (You will also need to add "ExecCGI" to the "Options" directive.)
+#
+AddHandler cgi-script .pl
+
+#
+# For files that include their own HTTP headers:
+#
+#AddHandler send-as-is asis
+
+#
+# For server-parsed imagemap files:
+#
+#AddHandler imap-file map
+
+#
+# For type maps (negotiated resources):
+# (This is enabled by default to allow the Apache "It Worked" page
+# to be distributed in multiple languages.)
+#
+AddHandler type-map var
+
+#
+# Filters allow you to process content before it is sent to the client.
+#
+# To parse .shtml files for server-side includes (SSI):
+# (You will also need to add "Includes" to the "Options" directive.)
+#
+#AddType text/html .shtml
+#AddOutputFilter INCLUDES .shtml
+
+#
+# Action lets you define media types that will execute a script whenever
+# a matching file is called. This eliminates the need for repeated URL
+# pathnames for oft-used CGI file processors.
+# Format: Action media/type /cgi-script/location
+# Format: Action handler-name /cgi-script/location
+#
+
+#
+# Customizable error responses come in three flavors:
+# 1) plain text 2) local redirects 3) external redirects
+#
+# Some examples:
+#ErrorDocument 500 "The server made a boo boo."
+#ErrorDocument 404 /missing.html
+#ErrorDocument 404 "/cgi-bin/missing_handler.pl"
+#ErrorDocument 402 http://www.example.com/subscription_info.html
+#
+
+#
+# Putting this all together, we can internationalize error responses.
+#
+# We use Alias to redirect any /error/HTTP_<error>.html.var response to
+# our collection of by-error message multi-language collections. We use
+# includes to substitute the appropriate text.
+#
+# You can modify the messages' appearance without changing any of the
+# default HTTP_<error>.html.var files by adding the line:
+#
+# Alias /error/include/ "/your/include/path/"
+#
+# which allows you to create your own set of files by starting with the
+# /path/to/error/include/ files and copying them to /your/include/path/,
+# even on a per-VirtualHost basis. The default include files will display
+# your Apache version number and your ServerAdmin email address regardless
+# of the setting of ServerSignature.
+#
+# The internationalized error documents require mod_alias, mod_include
+# and mod_negotiation. To activate them, uncomment the following 30 lines.
+
+# Alias /error/ "/path/redhat/apache/error/"
+#
+# <Directory "/path/redhat/apache/error">
+# AllowOverride None
+# Options IncludesNoExec
+# AddOutputFilter Includes html
+# AddHandler type-map var
+# Order allow,deny
+# Allow from all
+# LanguagePriority en cs de es fr it ja ko nl pl pt-br ro sv tr
+# ForceLanguagePriority Prefer Fallback
+# </Directory>
+#
+# ErrorDocument 400 /error/HTTP_BAD_REQUEST.html.var
+# ErrorDocument 401 /error/HTTP_UNAUTHORIZED.html.var
+# ErrorDocument 403 /error/HTTP_FORBIDDEN.html.var
+# ErrorDocument 404 /error/HTTP_NOT_FOUND.html.var
+# ErrorDocument 405 /error/HTTP_METHOD_NOT_ALLOWED.html.var
+# ErrorDocument 408 /error/HTTP_REQUEST_TIME_OUT.html.var
+# ErrorDocument 410 /error/HTTP_GONE.html.var
+# ErrorDocument 411 /error/HTTP_LENGTH_REQUIRED.html.var
+# ErrorDocument 412 /error/HTTP_PRECONDITION_FAILED.html.var
+# ErrorDocument 413 /error/HTTP_REQUEST_ENTITY_TOO_LARGE.html.var
+# ErrorDocument 414 /error/HTTP_REQUEST_URI_TOO_LARGE.html.var
+# ErrorDocument 415 /error/HTTP_UNSUPPORTED_MEDIA_TYPE.html.var
+# ErrorDocument 500 /error/HTTP_INTERNAL_SERVER_ERROR.html.var
+# ErrorDocument 501 /error/HTTP_NOT_IMPLEMENTED.html.var
+# ErrorDocument 502 /error/HTTP_BAD_GATEWAY.html.var
+# ErrorDocument 503 /error/HTTP_SERVICE_UNAVAILABLE.html.var
+# ErrorDocument 506 /error/HTTP_VARIANT_ALSO_VARIES.html.var
+
+
+#
+# The following directives modify normal HTTP response behavior to
+# handle known problems with browser implementations.
+#
+BrowserMatch "Mozilla/2" nokeepalive
+BrowserMatch "MSIE 4\.0b2;" nokeepalive downgrade-1.0 force-response-1.0
+BrowserMatch "RealPlayer 4\.0" force-response-1.0
+BrowserMatch "Java/1\.0" force-response-1.0
+BrowserMatch "JDK/1\.0" force-response-1.0
+
+#
+# The following directive disables redirects on non-GET requests for
+# a directory that does not include the trailing slash. This fixes a
+# problem with Microsoft WebFolders which does not appropriately handle
+# redirects for folders with DAV methods.
+# Same deal with Apple's DAV filesystem and Gnome VFS support for DAV.
+#
+BrowserMatch "Microsoft Data Access Internet Publishing Provider" redirect-carefully
+BrowserMatch "^WebDrive" redirect-carefully
+BrowserMatch "^WebDAVFS/1.[012]" redirect-carefully
+BrowserMatch "^gnome-vfs" redirect-carefully
+
+#
+# Allow server status reports generated by mod_status,
+# with the URL of http://servername/server-status
+# Change the ".example.com" to match your domain to enable.
+#
+#<Location /server-status>
+# SetHandler server-status
+# Order deny,allow
+# Deny from all
+# Allow from .example.com
+#</Location>
+
+#
+# Allow remote server configuration reports, with the URL of
+# http://servername/server-info (requires that mod_info.c be loaded).
+# Change the ".example.com" to match your domain to enable.
+#
+#<Location /server-info>
+# SetHandler server-info
+# Order deny,allow
+# Deny from all
+# Allow from .example.com
+#</Location>
+
+
+### Section 3: Virtual Hosts
+#
+# VirtualHost: If you want to maintain multiple domains/hostnames on your
+# machine you can setup VirtualHost containers for them. Most configurations
+# use only name-based virtual hosts so the server doesn't need to worry about
+# IP addresses. This is indicated by the asterisks in the directives below.
+#
+# Please see the documentation at
+# <URL:http://httpd.apache.org/docs-2.0/vhosts/>
+# for further details before you try to setup virtual hosts.
+#
+# You may use the command line option '-S' to verify your virtual host
+# configuration.
+
+#
+# Use name-based virtual hosting.
+#
+#NameVirtualHost *:80
+
+#
+# VirtualHost example:
+# Almost any Apache directive may go into a VirtualHost container.
+# The first VirtualHost section is used for requests without a known
+# server name.
+#
+#<VirtualHost *:80>
+# ServerAdmin webmaster(a)dummy-host.example.com
+# DocumentRoot /www/docs/dummy-host.example.com
+# ServerName dummy-host.example.com
+# ErrorLog logs/dummy-host.example.com-error_log
+# CustomLog logs/dummy-host.example.com-access_log common
+#</VirtualHost>
+
+Include @configdir(a)/admserv.conf
+Include @configdir(a)/nss.conf
+Include @configdir(a)/console.conf
diff --git a/compile b/compile
index 862a14e..7b4a9a7 100755
--- a/compile
+++ b/compile
@@ -3,8 +3,7 @@
scriptversion=2012-03-05.13; # UTC
-# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2009, 2010, 2012 Free
-# Software Foundation, Inc.
+# Copyright (C) 1999-2012 Free Software Foundation, Inc.
# Written by Tom Tromey <tromey(a)cygnus.com>.
#
# This program is free software; you can redistribute it and/or modify
diff --git a/config.guess b/config.guess
index d622a44..c0adba9 100755
--- a/config.guess
+++ b/config.guess
@@ -4,7 +4,7 @@
# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
# 2011, 2012 Free Software Foundation, Inc.
-timestamp='2012-02-10'
+timestamp='2012-06-10'
# This file is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
@@ -1256,7 +1256,7 @@ EOF
NEO-?:NONSTOP_KERNEL:*:*)
echo neo-tandem-nsk${UNAME_RELEASE}
exit ;;
- NSE-?:NONSTOP_KERNEL:*:*)
+ NSE-*:NONSTOP_KERNEL:*:*)
echo nse-tandem-nsk${UNAME_RELEASE}
exit ;;
NSR-?:NONSTOP_KERNEL:*:*)
diff --git a/config.sub b/config.sub
index c894da4..6205f84 100755
--- a/config.sub
+++ b/config.sub
@@ -4,7 +4,7 @@
# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
# 2011, 2012 Free Software Foundation, Inc.
-timestamp='2012-02-10'
+timestamp='2012-04-18'
# This file is (in principle) common to ALL GNU software.
# The presence of a machine in this file suggests that SOME GNU software
@@ -225,6 +225,12 @@ case $os in
-isc*)
basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
;;
+ -lynx*178)
+ os=-lynxos178
+ ;;
+ -lynx*5)
+ os=-lynxos5
+ ;;
-lynx*)
os=-lynxos
;;
@@ -1537,6 +1543,9 @@ case $basic_machine in
c4x-* | tic4x-*)
os=-coff
;;
+ hexagon-*)
+ os=-elf
+ ;;
tic54x-*)
os=-coff
;;
diff --git a/configure b/configure
index dd6381d..5039a51 100755
--- a/configure
+++ b/configure
@@ -1552,10 +1552,13 @@ Optional Features:
--disable-option-checking ignore unrecognized --enable/--with options
--disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
--enable-FEATURE[=ARG] include FEATURE [ARG=yes]
- --enable-maintainer-mode enable make rules and dependencies not useful
- (and sometimes confusing) to the casual installer
- --disable-dependency-tracking speeds up one-time build
- --enable-dependency-tracking do not reject slow dependency extractors
+ --enable-maintainer-mode
+ enable make rules and dependencies not useful (and
+ sometimes confusing) to the casual installer
+ --enable-dependency-tracking
+ do not reject slow dependency extractors
+ --disable-dependency-tracking
+ speeds up one-time build
--enable-static[=PKGS] build static libraries [default=no]
--enable-shared[=PKGS] build shared libraries [default=yes]
--enable-fast-install[=PKGS]
@@ -2682,7 +2685,7 @@ cat >>confdefs.h <<_ACEOF
#define ADM_PACKAGE_STRING "$PACKAGE_STRING"
_ACEOF
-am__api_version='1.11'
+am__api_version='1.12'
ac_aux_dir=
for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do
@@ -2808,9 +2811,6 @@ test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5
$as_echo_n "checking whether build environment is sane... " >&6; }
-# Just in case
-sleep 1
-echo timestamp > conftest.file
# Reject unsafe characters in $srcdir or the absolute working directory
# name. Accept space and tab only in the latter.
am_lf='
@@ -2821,32 +2821,40 @@ case `pwd` in
esac
case $srcdir in
*[\\\"\#\$\&\'\`$am_lf\ \ ]*)
- as_fn_error $? "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;;
+ as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;;
esac
-# Do `set' in a subshell so we don't clobber the current shell's
+# Do 'set' in a subshell so we don't clobber the current shell's
# arguments. Must try -L first in case configure is actually a
# symlink; some systems play weird games with the mod time of symlinks
# (eg FreeBSD returns the mod time of the symlink's containing
# directory).
if (
- set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
- if test "$*" = "X"; then
- # -L didn't work.
- set X `ls -t "$srcdir/configure" conftest.file`
- fi
- rm -f conftest.file
- if test "$*" != "X $srcdir/configure conftest.file" \
- && test "$*" != "X conftest.file $srcdir/configure"; then
-
- # If neither matched, then we have a broken ls. This can happen
- # if, for instance, CONFIG_SHELL is bash and it inherits a
- # broken ls alias from the environment. This has actually
- # happened. Such a system could not be considered "sane".
- as_fn_error $? "ls -t appears to fail. Make sure there is not a broken
-alias in your environment" "$LINENO" 5
- fi
-
+ am_has_slept=no
+ for am_try in 1 2; do
+ echo "timestamp, slept: $am_has_slept" > conftest.file
+ set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
+ if test "$*" = "X"; then
+ # -L didn't work.
+ set X `ls -t "$srcdir/configure" conftest.file`
+ fi
+ if test "$*" != "X $srcdir/configure conftest.file" \
+ && test "$*" != "X conftest.file $srcdir/configure"; then
+
+ # If neither matched, then we have a broken ls. This can happen
+ # if, for instance, CONFIG_SHELL is bash and it inherits a
+ # broken ls alias from the environment. This has actually
+ # happened. Such a system could not be considered "sane".
+ as_fn_error $? "ls -t appears to fail. Make sure there is not a broken
+ alias in your environment" "$LINENO" 5
+ fi
+ if test "$2" = conftest.file || test $am_try -eq 2; then
+ break
+ fi
+ # Just in case.
+ sleep 1
+ am_has_slept=yes
+ done
test "$2" = conftest.file
)
then
@@ -2858,6 +2866,16 @@ Check your system clock" "$LINENO" 5
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; }
+# If we didn't sleep, we still need to ensure time stamps of config.status and
+# generated files are strictly newer.
+am_sleep_pid=
+if grep 'slept: no' conftest.file >/dev/null 2>&1; then
+ ( sleep 1 ) &
+ am_sleep_pid=$!
+fi
+
+rm -f conftest.file
+
test "$program_prefix" != NONE &&
program_transform_name="s&^&$program_prefix&;$program_transform_name"
# Use a double $ so make ignores it.
@@ -2884,8 +2902,8 @@ if eval "$MISSING --run true"; then
am_missing_run="$MISSING --run "
else
am_missing_run=
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5
-$as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5
+$as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;}
fi
if test x"${install_sh}" != xset; then
@@ -2897,10 +2915,10 @@ if test x"${install_sh}" != xset; then
esac
fi
-# Installed binaries are usually stripped using `strip' when the user
-# run `make install-strip'. However `strip' might not be the right
+# Installed binaries are usually stripped using 'strip' when the user
+# run "make install-strip". However 'strip' might not be the right
# tool to use in cross-compilation environments, therefore Automake
-# will honor the `STRIP' environment variable to overrule this program.
+# will honor the 'STRIP' environment variable to overrule this program.
if test "$cross_compiling" != no; then
if test -n "$ac_tool_prefix"; then
# Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
@@ -3039,12 +3057,6 @@ fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5
$as_echo "$MKDIR_P" >&6; }
-mkdir_p="$MKDIR_P"
-case $mkdir_p in
- [\\/$]* | ?:[\\/]*) ;;
- */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
-esac
-
for ac_prog in gawk mawk nawk awk
do
# Extract the first word of "$ac_prog", so it can be a program name with args.
@@ -3177,6 +3189,12 @@ AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"}
MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
+# For better backward compatibility. To be removed once Automake 1.9.x
+# dies out for good. For more background, see:
+# <http://lists.gnu.org/archive/html/automake/2012-07/msg00001.html>
+# <http://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>
+mkdir_p='$(MKDIR_P)'
+
# We need awk for the "check" target. The system "awk" is bad on
# some platforms.
# Always define AMTAR for backward compatibility. Yes, it's still used
@@ -3826,7 +3844,7 @@ am__quote=
_am_result=none
# First try GNU make style include.
echo "include confinc" > confmf
-# Ignore all kinds of additional output from `make'.
+# Ignore all kinds of additional output from 'make'.
case `$am_make -s -f confmf 2> /dev/null` in #(
*the\ am__doit\ target*)
am__include=include
@@ -3882,8 +3900,8 @@ else
# We make a subdir and do the tests there. Otherwise we can end up
# making bogus files that we don't know about and never remove. For
# instance it was reported that on HP-UX the gcc test will end up
- # making a dummy file named `D' -- because `-MD' means `put the output
- # in D'.
+ # making a dummy file named 'D' -- because '-MD' means "put the output
+ # in D".
rm -rf conftest.dir
mkdir conftest.dir
# Copy depcomp to subdir because otherwise we won't find it if we're
@@ -3918,16 +3936,16 @@ else
: > sub/conftest.c
for i in 1 2 3 4 5 6; do
echo '#include "conftst'$i'.h"' >> sub/conftest.c
- # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
- # Solaris 8's {/usr,}/bin/sh.
- touch sub/conftst$i.h
+ # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with
+ # Solaris 10 /bin/sh.
+ echo '/* dummy */' > sub/conftst$i.h
done
echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
- # We check with `-c' and `-o' for the sake of the "dashmstdout"
+ # We check with '-c' and '-o' for the sake of the "dashmstdout"
# mode. It turns out that the SunPro C++ compiler does not properly
- # handle `-M -o', and we need to detect this. Also, some Intel
- # versions had trouble with output in subdirs
+ # handle '-M -o', and we need to detect this. Also, some Intel
+ # versions had trouble with output in subdirs.
am__obj=sub/conftest.${OBJEXT-o}
am__minus_obj="-o $am__obj"
case $depmode in
@@ -3936,8 +3954,8 @@ else
test "$am__universal" = false || continue
;;
nosideeffect)
- # after this tag, mechanisms are not by side-effect, so they'll
- # only be used when explicitly requested
+ # After this tag, mechanisms are not by side-effect, so they'll
+ # only be used when explicitly requested.
if test "x$enable_dependency_tracking" = xyes; then
continue
else
@@ -3945,7 +3963,7 @@ else
fi
;;
msvc7 | msvc7msys | msvisualcpp | msvcmsys)
- # This compiler won't grok `-c -o', but also, the minuso test has
+ # This compiler won't grok '-c -o', but also, the minuso test has
# not run yet. These depmodes are late enough in the game, and
# so weak that their functioning should not be impacted.
am__obj=conftest.${OBJEXT-o}
@@ -4549,8 +4567,8 @@ else
# We make a subdir and do the tests there. Otherwise we can end up
# making bogus files that we don't know about and never remove. For
# instance it was reported that on HP-UX the gcc test will end up
- # making a dummy file named `D' -- because `-MD' means `put the output
- # in D'.
+ # making a dummy file named 'D' -- because '-MD' means "put the output
+ # in D".
rm -rf conftest.dir
mkdir conftest.dir
# Copy depcomp to subdir because otherwise we won't find it if we're
@@ -4585,16 +4603,16 @@ else
: > sub/conftest.c
for i in 1 2 3 4 5 6; do
echo '#include "conftst'$i'.h"' >> sub/conftest.c
- # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
- # Solaris 8's {/usr,}/bin/sh.
- touch sub/conftst$i.h
+ # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with
+ # Solaris 10 /bin/sh.
+ echo '/* dummy */' > sub/conftst$i.h
done
echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
- # We check with `-c' and `-o' for the sake of the "dashmstdout"
+ # We check with '-c' and '-o' for the sake of the "dashmstdout"
# mode. It turns out that the SunPro C++ compiler does not properly
- # handle `-M -o', and we need to detect this. Also, some Intel
- # versions had trouble with output in subdirs
+ # handle '-M -o', and we need to detect this. Also, some Intel
+ # versions had trouble with output in subdirs.
am__obj=sub/conftest.${OBJEXT-o}
am__minus_obj="-o $am__obj"
case $depmode in
@@ -4603,8 +4621,8 @@ else
test "$am__universal" = false || continue
;;
nosideeffect)
- # after this tag, mechanisms are not by side-effect, so they'll
- # only be used when explicitly requested
+ # After this tag, mechanisms are not by side-effect, so they'll
+ # only be used when explicitly requested.
if test "x$enable_dependency_tracking" = xyes; then
continue
else
@@ -4612,7 +4630,7 @@ else
fi
;;
msvc7 | msvc7msys | msvisualcpp | msvcmsys)
- # This compiler won't grok `-c -o', but also, the minuso test has
+ # This compiler won't grok '-c -o', but also, the minuso test has
# not run yet. These depmodes are late enough in the game, and
# so weak that their functioning should not be impacted.
am__obj=conftest.${OBJEXT-o}
@@ -20319,6 +20337,14 @@ LIBOBJS=$ac_libobjs
LTLIBOBJS=$ac_ltlibobjs
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5
+$as_echo_n "checking that generated files are newer than configure... " >&6; }
+ if test -n "$am_sleep_pid"; then
+ # Hide warnings about reused PIDs.
+ wait $am_sleep_pid 2>/dev/null
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5
+$as_echo "done" >&6; }
if test -n "$EXEEXT"; then
am__EXEEXT_TRUE=
am__EXEEXT_FALSE='#'
@@ -21963,7 +21989,7 @@ $as_echo "$as_me: executing $ac_file commands" >&6;}
# Strip MF so we end up with the name of the file.
mf=`echo "$mf" | sed -e 's/:.*$//'`
# Check whether this is an Automake generated Makefile or not.
- # We used to match only the files named `Makefile.in', but
+ # We used to match only the files named 'Makefile.in', but
# some people rename them; so instead we look at the file content.
# Grep'ing the first line is not enough: some people post-process
# each Makefile.in and add a new line on top of each file to say so.
@@ -21997,21 +22023,19 @@ $as_echo X"$mf" |
continue
fi
# Extract the definition of DEPDIR, am__include, and am__quote
- # from the Makefile without running `make'.
+ # from the Makefile without running 'make'.
DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
test -z "$DEPDIR" && continue
am__include=`sed -n 's/^am__include = //p' < "$mf"`
test -z "am__include" && continue
am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
- # When using ansi2knr, U may be empty or an underscore; expand it
- U=`sed -n 's/^U = //p' < "$mf"`
# Find all dependency output files, they are included files with
# $(DEPDIR) in their names. We invoke sed twice because it is the
# simplest approach to changing $(DEPDIR) to its actual value in the
# expansion.
for file in `sed -n "
s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
- sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
+ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do
# Make sure the directory exists.
test -f "$dirpart/$file" && continue
fdir=`$as_dirname -- "$file" ||
diff --git a/depcomp b/depcomp
index 25a39e6..debb6ff 100755
--- a/depcomp
+++ b/depcomp
@@ -3,8 +3,7 @@
scriptversion=2012-03-27.16; # UTC
-# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009, 2010,
-# 2011, 2012 Free Software Foundation, Inc.
+# Copyright (C) 1999-2012 Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
diff --git a/install-sh b/install-sh
index a9244eb..377bb86 100755
--- a/install-sh
+++ b/install-sh
@@ -1,7 +1,7 @@
#!/bin/sh
# install - install a program, script, or datafile
-scriptversion=2011-01-19.21; # UTC
+scriptversion=2011-11-20.07; # UTC
# This originates from X11R5 (mit/util/scripts/install.sh), which was
# later released in X11R6 (xc/config/util/install.sh) with the
@@ -35,7 +35,7 @@ scriptversion=2011-01-19.21; # UTC
# FSF changes to this file are in the public domain.
#
# Calling this script install-sh is preferred over install.sh, to prevent
-# `make' implicit rules from creating a file called install from it
+# 'make' implicit rules from creating a file called install from it
# when there is no Makefile.
#
# This script is compatible with the BSD install script, but was written
@@ -156,7 +156,7 @@ while test $# -ne 0; do
-s) stripcmd=$stripprog;;
-t) dst_arg=$2
- # Protect names problematic for `test' and other utilities.
+ # Protect names problematic for 'test' and other utilities.
case $dst_arg in
-* | [=\(\)!]) dst_arg=./$dst_arg;;
esac
@@ -190,7 +190,7 @@ if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
fi
shift # arg
dst_arg=$arg
- # Protect names problematic for `test' and other utilities.
+ # Protect names problematic for 'test' and other utilities.
case $dst_arg in
-* | [=\(\)!]) dst_arg=./$dst_arg;;
esac
@@ -202,7 +202,7 @@ if test $# -eq 0; then
echo "$0: no input file specified." >&2
exit 1
fi
- # It's OK to call `install-sh -d' without argument.
+ # It's OK to call 'install-sh -d' without argument.
# This can happen when creating conditional directories.
exit 0
fi
@@ -240,7 +240,7 @@ fi
for src
do
- # Protect names problematic for `test' and other utilities.
+ # Protect names problematic for 'test' and other utilities.
case $src in
-* | [=\(\)!]) src=./$src;;
esac
@@ -354,7 +354,7 @@ do
if test -z "$dir_arg" || {
# Check for POSIX incompatibilities with -m.
# HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
- # other-writeable bit of parent directory when it shouldn't.
+ # other-writable bit of parent directory when it shouldn't.
# FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
ls_ld_tmpdir=`ls -ld "$tmpdir"`
case $ls_ld_tmpdir in
diff --git a/missing b/missing
index 86a8fc3..9a55648 100755
--- a/missing
+++ b/missing
@@ -1,10 +1,9 @@
#! /bin/sh
# Common stub for a few missing GNU programs while installing.
-scriptversion=2012-01-06.13; # UTC
+scriptversion=2012-01-06.18; # UTC
-# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006,
-# 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
+# Copyright (C) 1996-2012 Free Software Foundation, Inc.
# Originally by Fran,cois Pinard <pinard(a)iro.umontreal.ca>, 1996.
# This program is free software; you can redistribute it and/or modify
@@ -26,7 +25,7 @@ scriptversion=2012-01-06.13; # UTC
# the same distribution terms that you use for the rest of that program.
if test $# -eq 0; then
- echo 1>&2 "Try \`$0 --help' for more information"
+ echo 1>&2 "Try '$0 --help' for more information"
exit 1
fi
@@ -34,7 +33,7 @@ run=:
sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p'
sed_minuso='s/.* -o \([^ ]*\).*/\1/p'
-# In the cases where this matters, `missing' is being run in the
+# In the cases where this matters, 'missing' is being run in the
# srcdir already.
if test -f configure.ac; then
configure_ac=configure.ac
@@ -65,7 +64,7 @@ case $1 in
echo "\
$0 [OPTION]... PROGRAM [ARGUMENT]...
-Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an
+Handle 'PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an
error status if there is no known handling for PROGRAM.
Options:
@@ -74,20 +73,20 @@ Options:
--run try to run the given command, and emulate it if it fails
Supported PROGRAM values:
- aclocal touch file \`aclocal.m4'
- autoconf touch file \`configure'
- autoheader touch file \`config.h.in'
+ aclocal touch file 'aclocal.m4'
+ autoconf touch file 'configure'
+ autoheader touch file 'config.h.in'
autom4te touch the output file, or create a stub one
- automake touch all \`Makefile.in' files
- bison create \`y.tab.[ch]', if possible, from existing .[ch]
- flex create \`lex.yy.c', if possible, from existing .c
+ automake touch all 'Makefile.in' files
+ bison create 'y.tab.[ch]', if possible, from existing .[ch]
+ flex create 'lex.yy.c', if possible, from existing .c
help2man touch the output file
- lex create \`lex.yy.c', if possible, from existing .c
+ lex create 'lex.yy.c', if possible, from existing .c
makeinfo touch the output file
- yacc create \`y.tab.[ch]', if possible, from existing .[ch]
+ yacc create 'y.tab.[ch]', if possible, from existing .[ch]
-Version suffixes to PROGRAM as well as the prefixes \`gnu-', \`gnu', and
-\`g' are ignored when checking the name.
+Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and
+'g' are ignored when checking the name.
Send bug reports to <bug-automake(a)gnu.org>."
exit $?
@@ -99,8 +98,8 @@ Send bug reports to <bug-automake(a)gnu.org>."
;;
-*)
- echo 1>&2 "$0: Unknown \`$1' option"
- echo 1>&2 "Try \`$0 --help' for more information"
+ echo 1>&2 "$0: Unknown '$1' option"
+ echo 1>&2 "Try '$0 --help' for more information"
exit 1
;;
@@ -127,7 +126,7 @@ case $1 in
exit 1
elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
# Could not run --version or --help. This is probably someone
- # running `$TOOL --version' or `$TOOL --help' to check whether
+ # running '$TOOL --version' or '$TOOL --help' to check whether
# $TOOL exists and not knowing $TOOL uses missing.
exit 1
fi
@@ -139,27 +138,27 @@ esac
case $program in
aclocal*)
echo 1>&2 "\
-WARNING: \`$1' is $msg. You should only need it if
- you modified \`acinclude.m4' or \`${configure_ac}'. You might want
- to install the \`Automake' and \`Perl' packages. Grab them from
+WARNING: '$1' is $msg. You should only need it if
+ you modified 'acinclude.m4' or '${configure_ac}'. You might want
+ to install the Automake and Perl packages. Grab them from
any GNU archive site."
touch aclocal.m4
;;
autoconf*)
echo 1>&2 "\
-WARNING: \`$1' is $msg. You should only need it if
- you modified \`${configure_ac}'. You might want to install the
- \`Autoconf' and \`GNU m4' packages. Grab them from any GNU
+WARNING: '$1' is $msg. You should only need it if
+ you modified '${configure_ac}'. You might want to install the
+ Autoconf and GNU m4 packages. Grab them from any GNU
archive site."
touch configure
;;
autoheader*)
echo 1>&2 "\
-WARNING: \`$1' is $msg. You should only need it if
- you modified \`acconfig.h' or \`${configure_ac}'. You might want
- to install the \`Autoconf' and \`GNU m4' packages. Grab them
+WARNING: '$1' is $msg. You should only need it if
+ you modified 'acconfig.h' or '${configure_ac}'. You might want
+ to install the Autoconf and GNU m4 packages. Grab them
from any GNU archive site."
files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}`
test -z "$files" && files="config.h"
@@ -176,9 +175,9 @@ WARNING: \`$1' is $msg. You should only need it if
automake*)
echo 1>&2 "\
-WARNING: \`$1' is $msg. You should only need it if
- you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'.
- You might want to install the \`Automake' and \`Perl' packages.
+WARNING: '$1' is $msg. You should only need it if
+ you modified 'Makefile.am', 'acinclude.m4' or '${configure_ac}'.
+ You might want to install the Automake and Perl packages.
Grab them from any GNU archive site."
find . -type f -name Makefile.am -print |
sed 's/\.am$/.in/' |
@@ -187,10 +186,10 @@ WARNING: \`$1' is $msg. You should only need it if
autom4te*)
echo 1>&2 "\
-WARNING: \`$1' is needed, but is $msg.
+WARNING: '$1' is needed, but is $msg.
You might have modified some files without having the
proper tools for further handling them.
- You can get \`$1' as part of \`Autoconf' from any GNU
+ You can get '$1' as part of Autoconf from any GNU
archive site."
file=`echo "$*" | sed -n "$sed_output"`
@@ -210,10 +209,10 @@ WARNING: \`$1' is needed, but is $msg.
bison*|yacc*)
echo 1>&2 "\
-WARNING: \`$1' $msg. You should only need it if
- you modified a \`.y' file. You may need the \`Bison' package
+WARNING: '$1' $msg. You should only need it if
+ you modified a '.y' file. You may need the Bison package
in order for those modifications to take effect. You can get
- \`Bison' from any GNU archive site."
+ Bison from any GNU archive site."
rm -f y.tab.c y.tab.h
if test $# -ne 1; then
eval LASTARG=\${$#}
@@ -240,10 +239,10 @@ WARNING: \`$1' $msg. You should only need it if
lex*|flex*)
echo 1>&2 "\
-WARNING: \`$1' is $msg. You should only need it if
- you modified a \`.l' file. You may need the \`Flex' package
+WARNING: '$1' is $msg. You should only need it if
+ you modified a '.l' file. You may need the Flex package
in order for those modifications to take effect. You can get
- \`Flex' from any GNU archive site."
+ Flex from any GNU archive site."
rm -f lex.yy.c
if test $# -ne 1; then
eval LASTARG=\${$#}
@@ -263,10 +262,10 @@ WARNING: \`$1' is $msg. You should only need it if
help2man*)
echo 1>&2 "\
-WARNING: \`$1' is $msg. You should only need it if
+WARNING: '$1' is $msg. You should only need it if
you modified a dependency of a manual page. You may need the
- \`Help2man' package in order for those modifications to take
- effect. You can get \`Help2man' from any GNU archive site."
+ Help2man package in order for those modifications to take
+ effect. You can get Help2man from any GNU archive site."
file=`echo "$*" | sed -n "$sed_output"`
test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
@@ -281,12 +280,12 @@ WARNING: \`$1' is $msg. You should only need it if
makeinfo*)
echo 1>&2 "\
-WARNING: \`$1' is $msg. You should only need it if
- you modified a \`.texi' or \`.texinfo' file, or any other file
+WARNING: '$1' is $msg. You should only need it if
+ you modified a '.texi' or '.texinfo' file, or any other file
indirectly affecting the aspect of the manual. The spurious
- call might also be the consequence of using a buggy \`make' (AIX,
- DU, IRIX). You might want to install the \`Texinfo' package or
- the \`GNU make' package. Grab either from any GNU archive site."
+ call might also be the consequence of using a buggy 'make' (AIX,
+ DU, IRIX). You might want to install the Texinfo package or
+ the GNU make package. Grab either from any GNU archive site."
# The file to touch is that specified with -o ...
file=`echo "$*" | sed -n "$sed_output"`
test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
@@ -310,12 +309,12 @@ WARNING: \`$1' is $msg. You should only need it if
*)
echo 1>&2 "\
-WARNING: \`$1' is needed, and is $msg.
+WARNING: '$1' is needed, and is $msg.
You might have modified some files without having the
- proper tools for further handling them. Check the \`README' file,
+ proper tools for further handling them. Check the 'README' file,
it often tells you about the needed prerequisites for installing
this package. You may also peek at any GNU archive site, in case
- some other package would contain this missing \`$1' program."
+ some other package would contain this missing '$1' program."
exit 1
;;
esac
11 years, 2 months
ldap/servers
by Noriko Hosoi
ldap/servers/plugins/acl/acl.c | 28 ++++++++++++++++++++++------
ldap/servers/plugins/acl/acl.h | 1 +
2 files changed, 23 insertions(+), 6 deletions(-)
New commits:
commit 892bf12c1bb8b10afea3d6ff711059bf04e362cc
Author: Noriko Hosoi <nhosoi(a)totoro.usersys.redhat.com>
Date: Tue Jan 15 16:11:45 2013 -0800
Ticket #342 - better error message when cache overflows
Bug description: ACL cache overflow error message is not very clear
and repeated too many times.
Fix description:
1) print a message like this:
Your ACL cache of %d slots has overflowed. This can happen
when you have many ACIs. This ACI evaluation requires %d
slots to cache. You can increase your max value by setting
the attribute nsslapd-aclpb-max-selected-acls in cn=ACL
Plugin,cn=plugins,cn=config to a value higher. A server
restart is required.
2) print the error message only once per ACI evaluation instead
of hundreds of times
https://fedorahosted.org/389/ticket/342
Reviewed by Mark (Thanks!!)
diff --git a/ldap/servers/plugins/acl/acl.c b/ldap/servers/plugins/acl/acl.c
index a5884fb..79213b3 100644
--- a/ldap/servers/plugins/acl/acl.c
+++ b/ldap/servers/plugins/acl/acl.c
@@ -3108,17 +3108,33 @@ acl__TestRights(Acl_PBlock *aclpb,int access, char **right, char ** map_generic,
}
}
- if ( j < aclpb->aclpb_last_cache_result) {
+ if (j < aclpb->aclpb_last_cache_result) {
/* already in cache */
- } else if ( j < aclpb_max_cache_results ) {
- /* j == aclpb->aclpb_last_cache_result &&
- j < ACLPB_MAX_CACHE_RESULTS */
+ aclpb->aclpb_cache_result[j].result &=
+ ~ACLPB_CACHE_ERROR_REPORTED;
+ } else if (j < aclpb_max_cache_results) {
+ /* j == aclpb->aclpb_last_cache_result &&
+ j < ACLPB_MAX_CACHE_RESULTS */
aclpb->aclpb_last_cache_result++;
aclpb->aclpb_cache_result[j].aci_index = index;
aclpb->aclpb_cache_result[j].aci_ruleType = aci->aci_ruleType;
+ aclpb->aclpb_cache_result[j].result &=
+ ~ACLPB_CACHE_ERROR_REPORTED;
} else { /* cache overflow */
- slapi_log_error (SLAPI_LOG_FATAL, "acl__TestRights", "cache overflown\n");
- if ( rights_rv == ACL_RES_ALLOW) {
+ if (!(aclpb->aclpb_cache_result[j].result &
+ ACLPB_CACHE_ERROR_REPORTED)) {
+ slapi_log_error (SLAPI_LOG_FATAL, "acl__TestRights",
+ "Your ACL cache of %d slots has overflowed. "
+ "This can happen when you have many ACIs. "
+ "This ACI evaluation requires %d slots to cache. "
+ "You can increase your max value by setting the attribute "
+ "%s in cn=ACL Plugin,cn=plugins,cn=config to a value higher. "
+ "A server restart is required.\n",
+ j, aclpb_max_cache_results, ATTR_ACLPB_MAX_SELECTED_ACLS);
+ aclpb->aclpb_cache_result[j].result |=
+ ACLPB_CACHE_ERROR_REPORTED;
+ }
+ if (rights_rv == ACL_RES_ALLOW) {
result_reason->deciding_aci = aci;
result_reason->reason = ACL_REASON_EVALUATED_ALLOW;
TNF_PROBE_1_DEBUG(acl__TestRights_end,"ACL","",
diff --git a/ldap/servers/plugins/acl/acl.h b/ldap/servers/plugins/acl/acl.h
index 28c38e7..5e840a9 100644
--- a/ldap/servers/plugins/acl/acl.h
+++ b/ldap/servers/plugins/acl/acl.h
@@ -361,6 +361,7 @@ typedef struct result_cache {
#define ACLPB_CACHE_SEARCH_RES_DENY (short)0x0008 /* used for DENY handles only */
#define ACLPB_CACHE_SEARCH_RES_SKIP (short)0x0010 /* used for both types */
#define ACLPB_CACHE_READ_RES_SKIP (short)0x0020 /* used for both types */
+#define ACLPB_CACHE_ERROR_REPORTED (short)0x8000 /* error is reported */
}r_cache_t;
11 years, 2 months
ldap/admin
by Mark Reynolds
ldap/admin/src/logconv.pl | 2639 ++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 2639 insertions(+)
New commits:
commit 16651d642bf6f7ba624f62cac867b495253b4f3f
Author: Mark Reynolds <mreynolds(a)redhat.com>
Date: Tue Jan 15 15:36:33 2013 -0500
Ticket 419 - logconv.pl - improve memory management
Bug Description: logconv.pl memory usage is very high, and doesn't
appear to be efficient.
Fix Description: For verbose stats/hashes/arrays we now write this
information to disk, and read it in and process it
when printing the report. This dramatically improved
memory growth when dealing with larger and larger log sets.
Also updated the oids which some were incorrect, but
many new oids were missing. Added stats for "Paged Searches",
and "Max BER size exceeded".
Finally, renamed most variables to be readable names,
removed redundant counters, and other generic imrpovements.
https://fedorahosted.org/389/ticket/419
Reviewed by: Noriko(Thanks!)
diff --git a/ldap/admin/src/logconv.pl b/ldap/admin/src/logconv.pl
new file mode 100755
index 0000000..7ea7f09
--- /dev/null
+++ b/ldap/admin/src/logconv.pl
@@ -0,0 +1,2639 @@
+#!/usr/bin/env perl
+
+#
+# BEGIN COPYRIGHT BLOCK
+# This Program is free software; you can redistribute it and/or modify it under
+# the terms of the GNU General Public License as published by the Free Software
+# Foundation; version 2 of the License.
+#
+# 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-1307 USA.
+#
+# In addition, as a special exception, Red Hat, Inc. gives You the additional
+# right to link the code of this Program with code not covered under the GNU
+# General Public License ("Non-GPL Code") and to distribute linked combinations
+# including the two, subject to the limitations in this paragraph. Non-GPL Code
+# permitted under this exception must only link to the code of this Program
+# through those well defined interfaces identified in the file named EXCEPTION
+# found in the source code files (the "Approved Interfaces"). The files of
+# Non-GPL Code may instantiate templates or use macros or inline functions from
+# the Approved Interfaces without causing the resulting work to be covered by
+# the GNU General Public License. Only Red Hat, Inc. may make changes or
+# additions to the list of Approved Interfaces. You must obey the GNU General
+# Public License in all respects for all of the Program code and other code used
+# in conjunction with the Program except the Non-GPL Code covered by this
+# exception. If you modify this file, you may extend this exception to your
+# version of the file, but you are not obligated to do so. If you do not wish to
+# provide this exception without modification, you must delete this exception
+# statement from your version and license this file solely under the GPL without
+# exception.
+#
+#
+# Copyright (C) 2001 Sun Microsystems, Inc. Used by permission.
+# Copyright (C) 2013 Red Hat, Inc.
+# All rights reserved.
+# END COPYRIGHT BLOCK
+#
+
+#
+# Check for usage
+#
+use Time::Local;
+use IO::File;
+use Getopt::Long;
+
+Getopt::Long::Configure ("bundling");
+Getopt::Long::Configure ("permute");
+
+if ($#ARGV < 0){;
+&displayUsage;
+}
+
+#######################################
+# #
+# parse commandline switches #
+# #
+#######################################
+
+$file_count = 0;
+$arg_count = 0;
+$logversion = "7.0";
+$sizeCount = "20";
+$startFlag = 0;
+$startTime = 0;
+$endFlag = 0;
+$endTime = 0;
+$reportStats = "";
+$dataLocation = "/tmp";
+$s_stats = new_stats_block( );
+$m_stats = new_stats_block( );
+
+GetOptions(
+ 'd|rootDN=s' => \$rootDN,
+ 'v|version' => sub { print "Access Log Analyzer v$logversion\n"; exit (0); },
+ 'V|verbose' => sub { $verb = "yes"; },
+ 'D|data=s' => \$dataLocation,
+ 'X|excludeIP=s' => \$excludeIP[$xi++],
+ 's|sizeLimit=s' => \$sizeCount,
+ 'S|startTime=s' => \$startTime,
+ 'E|endTime=s' => \$endTime,
+ 'B|bind=s' => sub { $reportBinds = "yes"; $bindReportDN=($_[1]) },
+ 'm|reportFileSecs=s' => sub { my ($opt,$value) = @_; $s_stats = new_stats_block($value); $reportStats = "-m";},
+ 'M|reportFileMins=s' => sub { my ($opt,$value) = @_; $m_stats = new_stats_block($value); $reportStats = "-M";},
+ 'h|help' => sub { displayUsage() },
+ # usage options '-efcibaltnxgjuiryp'
+ 'e' => sub { $usage = $usage . "e"; },
+ 'f' => sub { $usage = $usage . "f"; },
+ 'c' => sub { $usage = $usage . "c"; },
+ 'i' => sub { $usage = $usage . "i"; },
+ 'b' => sub { $usage = $usage . "b"; },
+ 'a' => sub { $usage = $usage . "a"; },
+ 'l' => sub { $usage = $usage . "l"; },
+ 't' => sub { $usage = $usage . "t"; },
+ 'n' => sub { $usage = $usage . "n"; },
+ 'x' => sub { $usage = $usage . "x"; },
+ 'g' => sub { $usage = $usage . "g"; },
+ 'j' => sub { $usage = $usage . "j"; },
+ 'u' => sub { $usage = $usage . "u"; },
+ 'r' => sub { $usage = $usage . "r"; },
+ 'y' => sub { $usage = $usage . "y"; },
+ 'p' => sub { $usage = $usage . "p"; }
+);
+
+#
+# setup the report Bind DN if any
+#
+if($reportBinds eq "yes"){
+ $bindReportDN =~ tr/A-Z/a-z/;
+ if($bindReportDN eq "all"){
+ $bindReportDN = "";
+ }
+ if($bindReportDN eq "anonymous"){
+ $bindReportDN = "Anonymous";
+ }
+}
+
+#
+# set the default root DN
+#
+if($rootDN eq ""){
+ $rootDN = "cn=directory manager";
+}
+
+#
+# get the logs
+#
+while($arg_count <= $#ARGV){
+ $files[$file_count] = $ARGV[$arg_count];
+ $file_count++;
+ $arg_count++;
+}
+
+if($file_count == 0){
+ if($reportStats){
+ print "Usage error for option $reportStats, either the output file or access log is missing!\n\n";
+ } else {
+ print "There are no access logs specified!\n\n";
+ }
+ exit 1;
+}
+
+if ($sizeCount eq "all"){$sizeCount = "100000";}
+
+#######################################
+# #
+# Initialize Arrays and variables #
+# #
+#######################################
+
+print "\nAccess Log Analyzer $logversion\n";
+print "\nCommand: logconv.pl @ARGV\n\n";
+
+$rootDNBindCount = 0;
+$anonymousBindCount = 0;
+$unindexedSrchCount = 0;
+$vlvNotesCount= 0;
+$srchCount = 0;
+$fdTaken = 0;
+$fdReturned = 0;
+$highestFdTaken = 0;
+$unbindCount = 0;
+$cmpCount = 0;
+$modCount = 0;
+$delCount = 0;
+$addCount = 0;
+$modrdnCount = 0;
+$abandonCount = 0;
+$extopCount = 0;
+$vlvCount = 0;
+$errorCount = 0;
+$proxiedAuthCount = 0;
+$serverRestartCount = 0;
+$resourceUnavailCount = 0;
+$brokenPipeCount = 0;
+$v2BindCount = 0;
+$v3BindCount = 0;
+$vlvSortCount = 0;
+$connResetByPeerCount = 0;
+$isVlvNotes = 0;
+$successCount = 0;
+$sslCount = 0;
+$sslClientBindCount = 0;
+$sslClientFailedCount = 0;
+$objectclassTopCount= 0;
+$pagedSearchCount = 0;
+$bindCount = 0;
+$filterCount = 0;
+$baseCount = 0;
+$scopeCount = 0;
+$allOps = 0;
+$allResults = 0;
+$badPwdCount = 0;
+$saslBindCount = 0;
+$internalOpCount = 0;
+$entryOpCount = 0;
+$referralCount = 0;
+$anyAttrs = 0;
+$persistentSrchCount = 0;
+$maxBerSizeCount = 0;
+$connectionCount = 0;
+$timerange = 0;
+$simConnection = 0;
+$maxsimConnection = 0;
+$firstFile = 1;
+$elapsedDays = 0;
+$logCount = 0;
+$limit = 25000; # number of lines processed to trigger output
+
+# hash files
+$ATTR = "$dataLocation/attr.logconv";
+$RC = "$dataLocation/rc.logconv";
+$SRC = "$dataLocation/src.logconv";
+$RSRC = "$dataLocation/rsrc.logconv";
+$EXCOUNT = "$dataLocation/excount.logconv";
+$CONN_HASH = "$dataLocation/conn_hash.logconv";
+$IP_HASH = "$dataLocation/ip_hash.logconv";
+$CONNCOUNT = "$dataLocation/conncount.logconv";
+$NENTRIES = "$dataLocation/nentries.logconv";
+$FILTER = "$dataLocation/filter.logconv";
+$BASE = "$dataLocation/base.logconv";
+$DS6XBADPWD = "$dataLocation/ds6xbadpwd.logconv";
+$SASLMECH = "$dataLocation/saslmech.logconv";
+$BINDLIST = "$dataLocation/bindlist.logconv";
+$ETIME = "$dataLocation/etime.logconv";
+$OID = "$dataLocation/oid.logconv";
+
+# array files
+$SRCH_CONN = "$dataLocation/srchconn.logconv";
+$SRCH_OP = "$dataLocation/srchop.logconv";
+$DEL_CONN = "$dataLocation/delconn.logconv";
+$DEL_OP = "$dataLocation/delop.logconv";
+$MOD_CONN = "$dataLocation/modconn.logconv";
+$MOD_OP = "$dataLocation/modop.logconv";
+$ADD_CONN = "$dataLocation/addconn.logconv";
+$ADD_OP = "$dataLocation/addop.logconv";
+$MODRDN_CONN = "$dataLocation/modrdnconn.logconv";
+$MODRDN_OP = "$dataLocation/modrdnop.logconv";
+$CMP_CONN = "$dataLocation/cmpconn.logconv";
+$CMP_OP = "$dataLocation/cmpop.logconv";
+$TARGET_CONN = "$dataLocation/targetconn.logconv";
+$TARGET_OP = "$dataLocation/targetop.logconv";
+$MSGID = "$dataLocation/msgid.logconv";
+$BIND_CONN = "$dataLocation/bindconn.logconv";
+$BIND_OP = "$dataLocation/bindop.logconv";
+$UNBIND_CONN = "$dataLocation/unbindconn.logconv";
+$UNBIND_OP = "$dataLocation/unbindop.logconv";
+$EXT_CONN = "$dataLocation/extconn.logconv";
+$EXT_OP = "$dataLocation/extop.logconv";
+$NOTES_ETIME = "$dataLocation/notesetime.logconv";
+$NOTES_CONN = "$dataLocation/notesconn.logconv";
+$NOTES_OP = "$dataLocation/notesop.logconv";
+$NOTES_TIME = "$dataLocation/notestime.logconv";
+$NOTES_NENTRIES = "$dataLocation/notesnentries.logconv";
+$BADPWDCONN = "$dataLocation/badpwdconn.logconv";
+$BADPWDOP = "$dataLocation/badpwdop.logconv";
+$BADPWDIP = "$dataLocation/badpwdip.logconv";
+
+# info files
+$BINDINFO = "$dataLocation/bindinfo.logconv";
+$BASEINFO = "$dataLocation/baseinfo.logconv";
+$FILTERINFO = "$dataLocation/filterinfo.logconv";
+$SCOPEINFO = "$dataLocation/scopeinfo.logconv";
+
+$err[0] = "Successful Operations\n";
+$err[1] = "Operations Error(s)\n";
+$err[2] = "Protocal Errors\n";
+$err[3] = "Time Limit Exceeded\n";
+$err[4] = "Size Limit Exceeded\n";
+$err[5] = "Compare False\n";
+$err[6] = "Compare True\n";
+$err[7] = "Strong Authentication Not Supported\n";
+$err[8] = "Strong Authentication Required\n";
+$err[9] = "Partial Results\n";
+$err[10] = "Referral Received\n";
+$err[11] = "Administrative Limit Exceeded (Look Through Limit)\n";
+$err[12] = "Unavailable Critical Extension\n";
+$err[13] = "Confidentiality Required\n";
+$err[14] = "SASL Bind in Progress\n";
+$err[16] = "No Such Attribute\n";
+$err[17] = "Undefined Type\n";
+$err[18] = "Inappropriate Matching\n";
+$err[19] = "Constraint Violation\n";
+$err[20] = "Type or Value Exists\n";
+$err[21] = "Invalid Syntax\n";
+$err[32] = "No Such Object\n";
+$err[33] = "Alias Problem\n";
+$err[34] = "Invalid DN Syntax\n";
+$err[35] = "Is Leaf\n";
+$err[36] = "Alias Deref Problem\n";
+$err[48] = "Inappropriate Authentication (No password presented, etc)\n";
+$err[49] = "Invalid Credentials (Bad Password)\n";
+$err[50] = "Insufficent (write) Privledges\n";
+$err[51] = "Busy\n";
+$err[52] = "Unavailable\n";
+$err[53] = "Unwilling To Perform\n";
+$err[54] = "Loop Detected\n";
+$err[60] = "Sort Control Missing\n";
+$err[61] = "Index Range Error\n";
+$err[64] = "Naming Violation\n";
+$err[65] = "Objectclass Violation\n";
+$err[66] = "Not Allowed on Non Leaf\n";
+$err[67] = "Not Allowed on RDN\n";
+$err[68] = "Already Exists\n";
+$err[69] = "No Objectclass Mods\n";
+$err[70] = "Results Too Large\n";
+$err[71] = "Effect Multiple DSA's\n";
+$err[80] = "Other :-)\n";
+$err[81] = "Server Down\n";
+$err[82] = "Local Error\n";
+$err[83] = "Encoding Error\n";
+$err[84] = "Decoding Error\n";
+$err[85] = "Timeout\n";
+$err[86] = "Authentication Unknown\n";
+$err[87] = "Filter Error\n";
+$err[88] = "User Canceled\n";
+$err[89] = "Parameter Error\n";
+$err[90] = "No Memory\n";
+$err[91] = "Connect Error\n";
+$err[92] = "Not Supported\n";
+$err[93] = "Control Not Found\n";
+$err[94] = "No Results Returned\n";
+$err[95] = "More Results To Return\n";
+$err[96] = "Client Loop\n";
+$err[97] = "Referral Limit Exceeded\n";
+
+
+$conn{"A1"} = "A1";
+$conn{"B1"} = "B1";
+$conn{"B4"} = "B4";
+$conn{"T1"} = "T1";
+$conn{"T2"} = "T2";
+$conn{"B2"} = "B2";
+$conn{"B3"} = "B3";
+$conn{"R1"} = "R1";
+$conn{"P1"} = "P1";
+$conn{"P2"} = "P2";
+$conn{"U1"} = "U1";
+
+$connmsg{"A1"} = "Client Aborted Connections";
+$connmsg{"B1"} = "Bad Ber Tag Encountered";
+$connmsg{"B4"} = "Server failed to flush data (response) back to Client";
+$connmsg{"T1"} = "Idle Timeout Exceeded";
+$connmsg{"T2"} = "IO Block Timeout Exceeded or NTSSL Timeout";
+$connmsg{"B2"} = "Ber Too Big";
+$connmsg{"B3"} = "Ber Peek";
+$connmsg{"R1"} = "Revents";
+$connmsg{"P1"} = "Plugin";
+$connmsg{"P2"} = "Poll";
+$connmsg{"U1"} = "Cleanly Closed Connections";
+
+%monthname = (
+ "Jan" => 0,
+ "Feb" => 1,
+ "Mar" => 2,
+ "Apr" => 3,
+ "May" => 4,
+ "Jun" => 5,
+ "Jul" => 6,
+ "Aug" => 7,
+ "Sep" => 8,
+ "Oct" => 9,
+ "Nov" => 10,
+ "Dec" => 11,
+
+);
+
+openDataFiles();
+
+##########################################
+# #
+# Parse Access Logs #
+# #
+##########################################
+
+if ($files[$#files] =~ m/access.rotationinfo/) { $file_count--; }
+
+print "Processing $file_count Access Log(s)...\n\n";
+
+#print "Filename\t\t\t Total Lines\n";
+#print "--------------------------------------------------\n";
+
+if ($file_count > 1 && $files[0] =~ /\/access$/){
+ $files[$file_count] = $files[0];
+ $file_count++;
+ $skipFirstFile = 1;
+}
+$logCount = $file_count;
+
+for ($count=0; $count < $file_count; $count++){
+ # we moved access to the end of the list, so if its the first file skip it
+ if($file_count > 1 && $count == 0 && $skipFirstFile == 1){
+ next;
+ }
+ $logsize = `wc -l $files[$count]`;
+ $logsize =~ /([0-9]+)/;
+ $linesProcessed = 0; $lineBlockCount = 0;
+ $logCount--;
+ if($logCount < 10 ){
+ # add a zero for formatting purposes
+ $logCountStr = "0" . $logCount;
+ } else {
+ $logCountStr = $logCount;
+ }
+ print sprintf "[%s] %-30s\tlines: %7s\n",$logCountStr, $files[$count], $1;
+
+ open(LOG,"$files[$count]") or do { openFailed($!, $files[$count]) };
+ $firstline = "yes";
+ while(<LOG>){
+ unless ($endFlag) {
+ if ($firstline eq "yes"){
+ if (/^\[/) {
+ $logline = $_;
+ $firstline = "no";
+ }
+ $linesProcessed++;$lineBlockCount++;
+ } elsif (/^\[/ && $firstline eq "no"){
+ &parseLine();
+ $logline = $_;
+ } else {
+ $logline = $logline . $_;
+ $logline =~ s/\n//;
+ }
+ }
+ }
+ &parseLine();
+ close (LOG);
+ print_stats_block( $s_stats );
+ print_stats_block( $m_stats );
+ $totalLineCount = $totalLineCount + $linesProcessed;
+ if($linesProcessed => $limit){print sprintf " %10s Lines Processed\n\n",--$linesProcessed;}
+}
+
+print "\n\nTotal Log Lines Analysed: " . ($totalLineCount - 1) . "\n";
+
+$allOps = $srchCount + $modCount + $addCount + $cmpCount + $delCount + $modrdnCount + $bindCount + $extopCount + $abandonCount + $vlvCount;
+
+##################################################################
+# #
+# Calculate the total elapsed time of the processed access logs #
+# #
+##################################################################
+
+# if we are using startTime & endTime then we need to clean it up for our processing
+
+if($startTime){
+ if ($start =~ / *([0-9a-z:\/]+)/i){$start=$1;}
+}
+if($endTime){
+ if ($end =~ / *([0-9a-z:\/]+)/i){$end =$1;}
+}
+
+#
+# Get the start time in seconds
+#
+
+$logStart = $start;
+
+if ($logStart =~ / *([0-9A-Z\/]+)/i ){
+ $logDate = $1;
+ @dateComps = split /\//, $logDate;
+
+ $timeMonth = 1 +$monthname{$dateComps[1]};
+ $timeMonth = $timeMonth * 3600 *24 * 30;
+ $timeDay= $dateComps[0] * 3600 *24;
+ $timeYear = $dateComps[2] *365 * 3600 * 24;
+ $dateTotal = $timeMonth + $timeDay + $timeYear;
+}
+
+if ($logStart =~ / *(:[0-9:]+)/i ){
+ $logTime = $1;
+ @timeComps = split /:/, $logTime;
+
+ $timeHour = $timeComps[1] * 3600;
+ $timeMinute = $timeComps[2] *60;
+ $timeSecond = $timeComps[3];
+ $timeTotal = $timeHour + $timeMinute + $timeSecond;
+}
+
+$startTotal = $timeTotal + $dateTotal;
+
+#
+# Get the end time in seconds
+#
+
+$logEnd = $end;
+
+if ($logEnd =~ / *([0-9A-Z\/]+)/i ){
+ $logDate = $1;
+ @dateComps = split /\//, $logDate;
+
+ $endDay = $dateComps[0] *3600 * 24;
+ $endMonth = 1 + $monthname{$dateComps[1]};
+ $endMonth = $endMonth * 3600 * 24 * 30;
+ $endYear = $endTotal + $dateComps[2] *365 * 3600 * 24 ;
+ $dateTotal = $endDay + $endMonth + $endYear;
+}
+
+if ($logEnd =~ / *(:[0-9:]+)/i ){
+ $logTime = $1;
+ @timeComps = split /:/, $logTime;
+
+ $endHour = $timeComps[1] * 3600;
+ $endMinute = $timeComps[2] *60;
+ $endSecond = $timeComps[3];
+ $timeTotal = $endHour + $endMinute + $endSecond;
+}
+
+$endTotal = $timeTotal + $dateTotal;
+
+#
+# Tally the numbers
+#
+$totalTimeInSecs = $endTotal - $startTotal;
+$remainingTimeInSecs = $totalTimeInSecs;
+
+#
+# Calculate the elapsed time
+#
+
+# days
+while(($remainingTimeInSecs - 86400) > 0){
+ $elapsedDays++;
+ $remainingTimeInSecs = $remainingTimeInSecs - 86400;
+
+}
+
+# hours
+while(($remainingTimeInSecs - 3600) > 0){
+ $elapsedHours++;
+ $remainingTimeInSecs = $remainingTimeInSecs - 3600;
+}
+
+# minutes
+while($remainingTimeInSecs - 60 > 0){
+ $elapsedMinutes++;
+ $remainingTimeInSecs = $remainingTimeInSecs - 60;
+}
+
+# seconds
+$elapsedSeconds = $remainingTimeInSecs;
+
+# Initialize empty values
+if($elapsedHours eq ""){
+ $elapsedHours = "0";
+}
+if($elapsedMinutes eq ""){
+ $elapsedMinutes = "0";
+}
+if($elapsedSeconds eq ""){
+ $elapsedSeconds = "0";
+}
+
+&closeDataFiles();
+
+
+#####################################
+# #
+# Display Basic Results #
+# #
+#####################################
+
+
+print "\n\n----------- Access Log Output ------------\n";
+print "\nStart of Logs: $start\n";
+print "End of Logs: $end\n\n";
+
+if($elapsedDays eq "0"){
+ print "Processed Log Time: $elapsedHours Hours, $elapsedMinutes Minutes, $elapsedSeconds Seconds\n\n";
+} else {
+ print "Processed Log Time: $elapsedDays Days, $elapsedHours Hours, $elapsedMinutes Minutes, $elapsedSeconds Seconds\n\n";
+}
+
+#
+# Check here if we are producing any unqiue reports
+#
+
+if($reportBinds eq "yes"){
+ &displayBindReport();
+}
+
+#
+# Continue with standard report
+#
+
+print "Restarts: $serverRestartCount\n";
+print "Total Connections: $connectionCount\n";
+print "SSL Connections: $sslCount\n";
+print "Peak Concurrent Connections: $maxsimConnection\n";
+print "Total Operations: $allOps\n";
+print "Total Results: $allResults\n";
+if ($allOps ne "0"){
+ print sprintf "Overall Performance: %.1f%\n\n" , ($perf = ($tmp = ($allResults / $allOps)*100) > 100 ? 100.0 : $tmp) ;
+ }
+else {
+ print "Overall Performance: No Operations to evaluate\n\n";
+}
+
+$searchStat = sprintf "(%.2f/sec) (%.2f/min)\n",($srchCount / $totalTimeInSecs), $srchCount / ($totalTimeInSecs/60);
+$modStat = sprintf "(%.2f/sec) (%.2f/min)\n",$modCount / $totalTimeInSecs, $modCount/($totalTimeInSecs/60);
+$addStat = sprintf "(%.2f/sec) (%.2f/min)\n",$addCount/$totalTimeInSecs, $addCount/($totalTimeInSecs/60);
+$deleteStat = sprintf "(%.2f/sec) (%.2f/min)\n",$delCount/$totalTimeInSecs, $delCount/($totalTimeInSecs/60);
+$modrdnStat = sprintf "(%.2f/sec) (%.2f/min)\n",$modrdnCount/$totalTimeInSecs, $modrdnCount/($totalTimeInSecs/60);
+$compareStat = sprintf "(%.2f/sec) (%.2f/min)\n",$cmpCount/$totalTimeInSecs, $cmpCount/($totalTimeInSecs/60);
+$bindCountStat = sprintf "(%.2f/sec) (%.2f/min)\n",$bindCount/$totalTimeInSecs, $bindCount/($totalTimeInSecs/60);
+
+format STDOUT =
+Searches: @<<<<<<<<< @<<<<<<<<<<<<<<<<<<<<<<<<
+ $srchCount, $searchStat
+Modifications: @<<<<<<<<< @<<<<<<<<<<<<<<<<<<<<<<<<
+ $modCount, $modStat
+Adds: @<<<<<<<<< @<<<<<<<<<<<<<<<<<<<<<<<<
+ $addCount, $addStat
+Deletes: @<<<<<<<<< @<<<<<<<<<<<<<<<<<<<<<<<<
+ $delCount, $deleteStat
+Mod RDNs: @<<<<<<<<< @<<<<<<<<<<<<<<<<<<<<<<<<
+ $modrdnCount, $modrdnStat
+Compares: @<<<<<<<<< @<<<<<<<<<<<<<<<<<<<<<<<<
+ $cmpCount, $compareStat
+Binds: @<<<<<<<<< @<<<<<<<<<<<<<<<<<<<<<<<<
+ $bindCount $bindCountStat
+.
+write STDOUT;
+
+print "\n";
+print "Proxied Auth Operations: $proxiedAuthCount\n";
+print "Persistent Searches: $persistentSrchCount\n";
+print "Internal Operations: $internalOpCount\n";
+print "Entry Operations: $entryOpCount\n";
+print "Extended Operations: $extopCount\n";
+print "Abandoned Requests: $abandonCount\n";
+print "Smart Referrals Received: $referralCount\n";
+print "\n";
+print "VLV Operations: $vlvCount\n";
+print "VLV Unindexed Searches: $vlvNotesCount\n";
+print "SORT Operations: $vlvSortCount\n";
+print "\n";
+print "Entire Search Base Queries: $objectclassTopCount\n";
+print "Paged Searches: $pagedSearchCount\n";
+print "Unindexed Searches: $unindexedSrchCount\n";
+if ($verb eq "yes" || $usage =~ /u/){
+ if ($unindexedSrchCount > 0){
+ %conn_hash = getHashFromFile($CONN_HASH);
+ @notesConn = getArrayFromFile($NOTES_CONN);
+ @notesOp = getArrayFromFile($NOTES_OP);
+ @notesEtime = getArrayFromFile($NOTES_ETIME);
+ @notesTime = getArrayFromFile($NOTES_TIME);
+ @notesNentries = getArrayFromFile($NOTES_NENTRIES);
+ getInfoArraysFromFile($BASEINFO);
+ @base_val = @fileArray1;
+ @base_conn = @fileArray2;
+ @base_op = @fileArray3;
+ getInfoArraysFromFile($SCOPEINFO);
+ @scope_val = @fileArray1;
+ @scope_conn = @fileArray2;
+ @scope_op = @fileArray3;
+ getInfoArraysFromFile($FILTERINFO);
+ @filter_val = @fileArray1;
+ @filter_conn = @fileArray2;
+ @filter_op = @fileArray3;
+
+ $notesCount = "1";
+ for ($n = 0; $n <= $#notesEtime; $n++){
+ @alreadyseenDN = ();
+ if($conn_hash{$notesConn[$n]} eq ""){
+ $unindexedIp = "?";
+ } else {
+ $unindexedIp = $conn_hash{$notesConn[$n]};
+ }
+ print "\n Unindexed Search #".$notesCount."\n"; $notesCount++;
+ print " - Date/Time: $notesTime[$n]\n";
+ print " - Connection Number: $notesConn[$n]\n";
+ print " - Operation Number: $notesOp[$n]\n";
+ print " - Etime: $notesEtime[$n]\n";
+ print " - Nentries: $notesNentries[$n]\n";
+ print " - IP Address: $unindexedIp\n";
+
+ for ($nnn = 0; $nnn < $baseCount; $nnn++){
+ if ($notesConn[$n] eq $base_conn[$nnn] && $notesOp[$n] eq $base_op[$nnn]){
+ print " - Search Base: $base_val[$nnn]\n";
+ last;
+ }
+ }
+ for ($nnn = 0; $nnn < $scopeCount; $nnn++){
+ if ($notesConn[$n] eq $scope_conn[$nnn] && $notesOp[$n] eq $scope_op[$nnn]){
+ print " - Search Scope: $scope_val[$nnn]\n";
+ last;
+ }
+ }
+ for ($nnn = 0; $nnn < $filterCount; $nnn++){
+ if ($notesConn[$n] eq $filter_conn[$nnn] && $notesOp[$n] eq $filter_op[$nnn]){
+ print " - Search Filter: $filter_val[$nnn]\n";
+ last;
+ }
+ }
+ }
+ undef %conn_hash;
+ undef @notesConn;
+ undef @notesOp;
+ undef @notesEtime;
+ undef @notesTime;
+ undef @notesNentries;
+ undef @notesIp;
+ undef @filter_val;
+ undef @filter_conn;
+ undef @filter_op;
+ undef @base_val;
+ undef @base_conn;
+ undef @base_op;
+ undef @scope_val;
+ undef @scope_conn;
+ undef @scope_op;
+ }
+} # end of unindexed search report
+
+print "\n";
+print "FDs Taken: $fdTaken\n";
+print "FDs Returned: $fdReturned\n";
+print "Highest FD Taken: $highestFdTaken\n\n";
+print "Broken Pipes: $brokenPipeCount\n";
+if ($brokenPipeCount > 0){
+ foreach $key (sort { $rc{$b} <=> $rc{$a} } keys %rc) {
+ if ($rc{$key} > 0){
+ if ($conn{$key} eq ""){$conn{$key} = "**Unknown**";}
+ push @etext, sprintf " - %-4s (%2s) %-40s\n",$rc{$key},$conn{$key},$connmsg{$key
+};
+ }
+ }
+ print @etext;
+ print "\n";
+}
+
+print "Connections Reset By Peer: $connResetByPeerCount\n";
+if ($connResetByPeerCount > 0){
+ foreach $key (sort { $src{$b} <=> $src{$a} } keys %src) {
+ if ($src{$key} > 0){
+ if ($conn{$key} eq ""){$conn{$key} = "**Unknown**";}
+ push @retext, sprintf " - %-4s (%2s) %-40s\n",$src{$key},$conn{$key},$connmsg{$key
+};
+ }
+ }
+ print @retext;
+ print "\n";
+}
+
+print "Resource Unavailable: $resourceUnavailCount\n";
+if ($resourceUnavailCount > 0){
+ foreach $key (sort { $rsrc{$b} <=> $rsrc{$a} } keys %rsrc) {
+ if ($rsrc{$key} > 0){
+ if ($conn{$key} eq ""){$conn{$key} = "**Resource Issue**";}
+ push @rtext, sprintf " - %-4s (%2s) %-40s\n",$rsrc{$key},$conn{$key},$connmsg{$key};
+ }
+ }
+ print @rtext;
+}
+print "Max BER Size Exceeded: $maxBerSizeCount\n";
+print "\n";
+print "Binds: $bindCount\n";
+print "Unbinds: $unbindCount\n";
+print "\n LDAP v2 Binds: $v2BindCount\n";
+print " LDAP v3 Binds: $v3BindCount\n";
+print " SSL Client Binds: $sslClientBindCount\n";
+print " Failed SSL Client Binds: $sslClientFailedCount\n";
+print " SASL Binds: $saslBindCount\n";
+if ($saslBindCount > 0){
+ foreach $saslb ( sort {$saslmech{$b} <=> $saslmech{$a} } (keys %saslmech) ){
+ printf " %-4s %-12s\n",$saslmech{$saslb}, $saslb;
+ }
+}
+
+print "\n Directory Manager Binds: $rootDNBindCount\n";
+print " Anonymous Binds: $anonymousBindCount\n";
+$otherBindCount = $bindCount -($rootDNBindCount + $anonymousBindCount);
+print " Other Binds: $otherBindCount\n\n";
+
+##########################################################################
+# Verbose Logging Section #
+##########################################################################
+
+###################################
+# #
+# Display Connection Latency #
+# #
+###################################
+
+if ($verb eq "yes" || $usage =~ /y/){
+ print "\n\n----- Connection Latency Details -----\n\n";
+ print " (in seconds)\t\t<=1\t2\t3\t4-5\t6-10\t11-15\t>15\n";
+ print " --------------------------------------------------------------------------\n";
+ print " (# of connections)\t";
+ for ($i=0; $i <=$#latency; $i++) {
+ print "$latency[$i]\t";
+ }
+}
+
+###################################
+# #
+# Display Open Connections #
+# #
+###################################
+
+if ($verb eq "yes" || $usage =~ /p/){
+ if ($openConnection[0] ne ""){
+ print "\n\n----- Current Open Connection IDs ----- \n\n";
+ for ($i=0; $i <= $#openConnection ; $i++) {
+ if ($openConnection[$i]) {
+ print "Conn Number: $i (" . getIPfromConn($i) . ")\n";
+ }
+ }
+ }
+}
+
+###################################
+# #
+# Display Error Codes #
+# #
+###################################
+
+if ($usage =~ /e/i || $verb eq "yes"){
+ print "\n\n----- Errors -----\n";
+
+ %er = sort( {$b <=> $a} %er);
+ for ($i = 0; $i<98; $i++){
+ if ($err[$i] ne "" && $errorCode[$i] >0) {
+ push @errtext, sprintf "%-8s %12s %-25s","err=$i",$errorCode[$i],$err[$i];
+ }
+ }
+
+ for ($i = 0; $i < $#errtext; $i++){
+ for ($ii = 0; $ii < $#errtext; $ii++){
+ $yy="0";
+ $zz="0";
+ while ($errtext[$ii] =~ /(\w+)\s/g){
+ $errornum[$yy]="$1";
+ $yy++;
+ }
+ while ($errtext[$ii+1] =~ /(\w+)\s/g){
+ $errornum2[$zz]="$1";
+ $zz++;
+ }
+ if ($errornum2[1] > $errornum[1]){
+ $tmp = $errtext[$ii];
+ $errtext[$ii] = $errtext[$ii+1];
+ $errtext[$ii+1] = $tmp;
+ }
+ }
+ }
+ for ($i = 0; $i <= $#errtext; $i++){
+ $errtext[$i] =~ s/\n//g;
+ print "\n" . $errtext[$i];
+ }
+}
+
+####################################
+# #
+# Print Failed Logins #
+# #
+####################################
+
+if ($verb eq "yes" || $usage =~ /f/ ){
+ if ($badPwdCount > 0){
+ print "\n\n----- Top $sizeCount Failed Logins ------\n\n";
+
+ if ($ds6x eq "true"){
+ %ds6xbadpwd = getCounterHashFromFile($DS6XBADPWD);
+ $ds6loop = 0;
+ foreach $ds6bp (sort { $ds6xbadpwd{$b} <=> $ds6xbadpwd{$a} } keys %ds6xbadpwd) {
+ if ($eloop > $sizeCount){ last; }
+ printf "%-4s %-40s\n", $ds6xbadpwd{$ds6bp}, $ds6bp;
+ $ds6loop++;
+ }
+ undef %ds6xbadpwd;
+ } else {
+ getInfoArraysFromFile($BINDINFO);
+ @bindVal = @fileArray1;
+ @bindConn = @fileArray2;
+ @bindOp = @fileArray3;
+ @badPasswordConn = getArrayFromFile($BADPWDCONN);
+ @badPasswordOp = getArrayFromFile($BADPWDOP);
+ @badPasswordIp = getArrayFromFile($BADPWDIP);
+ for ($ii =0 ; $ii < $badPwdCount; $ii++){
+ for ($i = 0; $i < $bindCount; $i++){
+ if ($badPasswordConn[$ii] eq $bindConn[$i] && $badPasswordOp[$ii] eq $bindOp[$i] ){
+ $badPassword{ "$bindVal[$i]" } = $badPassword{ "$bindVal[$i]" } + 1;
+ }
+ }
+ }
+ # sort the new hash of $badPassword{}
+ $bpTotal = 0;
+ $bpCount = 0;
+ foreach $badpw (sort {$badPassword{$b} <=> $badPassword{$a} } keys %badPassword){
+ if ($bpCount > $sizeCount){ last;}
+ $bpCount++;
+ $bpTotal = $bpTotal + $badPassword{"$badpw"};
+ printf "%-4s %-40s\n", $badPassword{"$badpw"}, $badpw;
+ }
+ print "\nFrom the IP address(s) :\n\n";
+ for ($i=0; $i<$badPwdCount; $i++) {
+ print "\t\t$badPasswordIp[$i]\n";
+ }
+ if ($bpTotal > $badPwdCount){
+ print "\n** Warning : Wrongly reported failed login attempts : ". ($bpTotal - $badPwdCount) . "\n";
+ }
+ undef @bindVal;
+ undef @bindConn;
+ undef @bindOp;
+ undef @badPasswordConn;
+ undef @badPasswordOp;
+ undef @badPasswordIp;
+ } # this ends the if $ds6x = true
+ }
+}
+
+####################################
+# #
+# Print Connection Codes #
+# #
+####################################
+
+
+if ($connCodeCount > 0){
+ if ($usage =~ /c/i || $verb eq "yes"){
+ print "\n\n----- Total Connection Codes -----\n\n";
+ %conncount = &getCounterHashFromFile($CONNCOUNT);
+
+ foreach $key (sort { $conncount{$b} <=> $conncount{$a} } keys %conncount) {
+ if ($conncount{$key} > 0){
+ push @conntext, sprintf "%-4s %6s %-40s\n",$key,$conncount{$key},$connmsg{ $key };
+ }
+ }
+ print @conntext;
+ undef %conncount;
+ }
+}
+
+########################################
+# #
+# Gather and Process all unique IPs #
+# #
+########################################
+
+if ($usage =~ /i/i || $verb eq "yes"){
+ %ip_hash = getTwoDimHashFromFile($IP_HASH);
+ %exCount = getCounterHashFromFile($EXCOUNT);
+ @ipkeys = keys %ip_hash;
+ @exxCount = keys %exCount;
+ $ip_count = ($#ipkeys + 1)-($#exxCount + 1);
+ if ($ip_count > 0){
+ print "\n\n----- Top $sizeCount Clients -----\n\n";
+ print "Number of Clients: $ip_count\n\n";
+ foreach $key (sort { $ip_hash{$b}{"count"} <=> $ip_hash{$a}{"count"} } keys %ip_hash) {
+ $exc = "no";
+ if ($ccount > $sizeCount){ last;}
+ $ccount++;
+ for ($xxx =0; $xxx <= $#excludeIP; $xxx++){
+ if ($excludeIP[$xxx] eq $key){$exc = "yes";}
+ }
+ if ($exc ne "yes"){
+ if ($ip_hash{ $key }{"count"} eq ""){$ip_hash{ $key }{"count"} = "?";}
+ printf "[%s] Client: %s\n",$ccount, $key;
+ printf "%10s - Connections\n", $ip_hash{ $key }{"count"};
+ foreach $code (sort { $ip_hash{ $key }{$b} <=> $ip_hash{ $key }{$a} } keys %{$ip_hash{ $key }}) {
+ if ($code eq 'count' ) { next; }
+ printf "%10s - %s (%s)\n", $ip_hash{ $key }{ $code }, $code, $connmsg{ $code };
+ }
+ print "\n";
+ }
+ }
+ }
+ undef %exCount;
+ undef %ip_hash;
+}
+
+###################################
+# #
+# Gather All unique Bind DN's #
+# #
+###################################
+
+if ($usage =~ /b/i || $verb eq "yes"){
+ %bindlist = getCounterHashFromFile($BINDLIST);
+ @bindkeys = keys %bindlist;
+ $bind_count = $#bindkeys + 1;
+ if ($bind_count > 0){
+ print "\n\n----- Top $sizeCount Bind DN's -----\n\n";
+ print "Number of Unique Bind DN's: $bind_count\n\n";
+ $bindcount = 0;
+ foreach $dn (sort { $bindlist{$b} <=> $bindlist{$a} } keys %bindlist) {
+ if ($bindcount < $sizeCount){
+ printf "%-8s %-40s\n", $bindlist{ $dn },$dn;
+ }
+ $bindcount++;
+ }
+ }
+ undef %bindlist;
+}
+
+#########################################
+# #
+# Gather and process search bases #
+# #
+#########################################
+
+if ($usage =~ /a/i || $verb eq "yes"){
+ %base = getCounterHashFromFile($BASE);
+ @basekeys = keys %base;
+ $base_count = $#basekeys + 1;
+ if ($base_count > 0){
+ print "\n\n----- Top $sizeCount Search Bases -----\n\n";
+ print "Number of Unique Search Bases: $base_count\n\n";
+ $basecount = 0;
+ foreach $bas (sort { $base{$b} <=> $base{$a} } keys %base) {
+ if ($basecount < $sizeCount){
+ printf "%-8s %-40s\n", $base{ $bas },$bas;
+ }
+ $basecount++;
+ }
+ }
+ undef %base;
+}
+
+#########################################
+# #
+# Gather and process search filters #
+# #
+#########################################
+
+if ($usage =~ /l/ || $verb eq "yes"){
+ %filter = getCounterHashFromFile($FILTER);
+ @filterkeys = keys %filter;
+ $filter_count = $#filterkeys + 1;
+ if ($filter_count > 0){
+ print "\n\n----- Top $sizeCount Search Filters -----\n";
+ print "\nNumber of Unique Search Filters: $filter_count\n\n";
+ $filtercount = 0;
+ foreach $filt (sort { $filter{$b} <=> $filter{$a} } keys %filter){
+ if ($filtercount < $sizeCount){
+ printf "%-8s %-40s\n", $filter{$filt}, $filt;
+ }
+ $filtercount++;
+ }
+ }
+ undef %filter;
+}
+
+#########################################
+# #
+# Gather and Process the unique etimes #
+# #
+#########################################
+
+if ($usage =~ /t/i || $verb eq "yes"){
+ %etime = getCounterHashFromFile($ETIME);
+ #
+ # print most often etimes
+ #
+ print "\n\n----- Top $sizeCount Most Frequent etimes -----\n\n";
+ $eloop = 0;
+ foreach $et (sort { $etime{$b} <=> $etime{$a} } keys %etime) {
+ if ($eloop == $sizeCount) { last; }
+ if ($retime ne "2"){
+ $first = $et;
+ $retime = "2";
+ }
+ printf "%-8s %-12s\n", $etime{ $et }, "etime=$et";
+ $eloop++;
+ }
+ #
+ # print longest etimes
+ #
+ print "\n\n----- Top $sizeCount Longest etimes -----\n\n";
+ $eloop = 0;
+ foreach $et (sort { $b <=> $a } (keys %etime)) {
+ if ($eloop == $sizeCount) { last; }
+ printf "%-12s %-10s\n","etime=$et",$etime{ $et };
+ $eloop++;
+ }
+ undef %etime;
+}
+
+#######################################
+# #
+# Gather and Process unique nentries #
+# #
+#######################################
+
+
+if ($usage =~ /n/i || $verb eq "yes"){
+ %nentries = getCounterHashFromFile($NENTRIES);
+ print "\n\n----- Top $sizeCount Largest nentries -----\n\n";
+ $eloop = 0;
+ foreach $nentry (sort { $b <=> $a } (keys %nentries)){
+ if ($eloop == $sizeCount) { last; }
+ printf "%-18s %12s\n","nentries=$nentry", $nentries{ $nentry };
+ $eloop++;
+ }
+ print "\n\n----- Top $sizeCount Most returned nentries -----\n\n";
+ $eloop = 0;
+ foreach $nentry (sort { $nentries{$b} <=> $nentries{$a} } (keys %nentries)){
+ if ($eloop == $sizeCount) { last; }
+ printf "%-12s %-14s\n", $nentries{ $nentry }, "nentries=$nentry";
+ $eloop++;
+ }
+ print "\n";
+ undef %nentries;
+}
+
+##########################################
+# #
+# Gather and process extended operations #
+# #
+##########################################
+
+if ($usage =~ /x/i || $verb eq "yes"){
+ if ($extopCount > 0){
+ %oid = getCounterHashFromFile($OID);
+ print "\n\n----- Extended Operations -----\n\n";
+ foreach $oids (sort { $oid{$b} <=> $oid{$a} } (keys %oid) ){
+ if ($oids eq "2.16.840.1.113730.3.5.1"){ $oidmessage = "Transaction Request"} #depreciated?
+ elsif ($oids eq "2.16.840.1.113730.3.5.2"){ $oidmessage = "Transaction Response"} #depreciated?
+ elsif ($oids eq "2.16.840.1.113730.3.5.3"){ $oidmessage = "Start Replication Request (incremental update)"}
+ elsif ($oids eq "2.16.840.1.113730.3.5.4"){ $oidmessage = "Replication Response"}
+ elsif ($oids eq "2.16.840.1.113730.3.5.5"){ $oidmessage = "End Replication Request (incremental update)"}
+ elsif ($oids eq "2.16.840.1.113730.3.5.6"){ $oidmessage = "Replication Entry Request"}
+ elsif ($oids eq "2.16.840.1.113730.3.5.7"){ $oidmessage = "Start Bulk Import"}
+ elsif ($oids eq "2.16.840.1.113730.3.5.8"){ $oidmessage = "Finished Bulk Import"}
+ elsif ($oids eq "2.16.840.1.113730.3.5.9"){ $oidmessage = "DS71 Replication Entry Request"}
+ elsif ($oids eq "2.16.840.1.113730.3.6.1"){ $oidmessage = "Incremental Update Replication Protocol"}
+ elsif ($oids eq "2.16.840.1.113730.3.6.2"){ $oidmessage = "Total Update Replication Protocol (Initialization)"}
+ elsif ($oids eq "2.16.840.1.113730.3.4.13"){ $oidmessage = "Replication Update Info Control"}
+ elsif ($oids eq "2.16.840.1.113730.3.6.4"){ $oidmessage = "DS71 Replication Incremental Update Protocol"}
+ elsif ($oids eq "2.16.840.1.113730.3.6.3"){ $oidmessage = "DS71 Replication Total Update Protocol"}
+ elsif ($oids eq "2.16.840.1.113730.3.5.12"){ $oidmessage = "DS90 Start Replication Request"}
+ elsif ($oids eq "2.16.840.1.113730.3.5.13"){ $oidmessage = "DS90 Replication Response"}
+ elsif ($oids eq "1.2.840.113556.1.4.841"){ $oidmessage = "Replication Dirsync Control"}
+ elsif ($oids eq "1.2.840.113556.1.4.417"){ $oidmessage = "Replication Return Deleted Objects"}
+ elsif ($oids eq "1.2.840.113556.1.4.1670"){ $oidmessage = "Replication WIN2K3 Active Directory"}
+ elsif ($oids eq "2.16.840.1.113730.3.6.5"){ $oidmessage = "Replication CleanAllRUV"}
+ elsif ($oids eq "2.16.840.1.113730.3.6.6"){ $oidmessage = "Replication Abort CleanAllRUV"}
+ elsif ($oids eq "2.16.840.1.113730.3.6.7"){ $oidmessage = "Replication CleanAllRUV Get MaxCSN"}
+ elsif ($oids eq "2.16.840.1.113730.3.6.8"){ $oidmessage = "Replication CleanAllRUV Check Status"}
+ elsif ($oids eq "2.16.840.1.113730.3.5.10"){ $oidmessage = "DNA Plugin Request"}
+ elsif ($oids eq "2.16.840.1.113730.3.5.11"){ $oidmessage = "DNA Plugin Response"}
+ elsif ($oids eq "1.3.6.1.4.1.1466.20037"){ $oidmessage = "Start TLS"}
+ elsif ($oids eq "1.3.6.1.4.1.4203.1.11.1"){ $oidmessage = "Password Modify"}
+ elsif ($oids eq "2.16.840.1.113730.3.4.20"){ $oidmessage = "MTN Control Use One Backend"}
+ else {$oidmessage = "Other"}
+ printf "%-6s %-23s %-60s\n", $oid{ $oids }, $oids, $oidmessage;
+ }
+ undef %oid;
+ }
+}
+
+############################################
+# #
+# Print most commonly requested attributes #
+# #
+############################################
+
+if ($usage =~ /r/i || $verb eq "yes"){
+ if ($anyAttrs > 0){
+ %attr = getCounterHashFromFile($ATTR);
+ print "\n\n----- Top $sizeCount Most Requested Attributes -----\n\n";
+ $eloop = 0;
+ foreach $mostAttr (sort { $attr{$b} <=> $attr{$a} } (keys %attr) ){
+ if ($eloop eq $sizeCount){ last; }
+ printf "%-10s %-19s\n", $attr{$mostAttr}, $mostAttr;
+ $eloop++;
+ }
+ undef %attr;
+ }
+}
+
+#############################
+# #
+# abandoned operation stats #
+# #
+#############################
+
+if ($usage =~ /g/i || $verb eq "yes"){
+ $abandonTotal = $srchCount + $delCount + $modCount + $addCount + $modrdnCount + $bindCount + $extopCount + $cmpCount;
+ if ($verb eq "yes" && $abandonCount > 0 && $abandonTotal > 0){
+ %conn_hash = getHashFromFile($CONN_HASH);
+ @srchConn = getArrayFromFile($SRCH_CONN);
+ @srchOp = getArrayFromFile($SRCH_OP);
+ @delConn = getArrayFromFile($DEL_CONN);
+ @delOp = getArrayFromFile($DEL_OP);
+ @targetConn = getArrayFromFile($TARGET_CONN);
+ @targetOp = getArrayFromFile($TARGET_OP);
+ @msgid = getArrayFromFile($MSGID);
+ @addConn = getArrayFromFile($ADD_CONN);
+ @addOp = getArrayFromFile($ADD_OP);
+ @modConn = getArrayFromFile($MOD_CONN);
+ @modOp = getArrayFromFile($MOD_OP);
+ @cmpConn = getArrayFromFile($CMP_CONN);
+ @cmpOp = getArrayFromFile($CMP_OP);
+ @modrdnConn = getArrayFromFile($MODRDN_CONN);
+ @modrdnOp = getArrayFromFile($MODRDN_OP);
+ @bindConn = getArrayFromFile($BIND_CONN);
+ @bindOp = getArrayFromFile($BIND_OP);
+ @unbindConn = getArrayFromFile($UNBIND_CONN);
+ @unbindOp = getArrayFromFile($UNBIND_OP);
+ @extConn = getArrayFromFile($EXT_CONN);
+ @extOp = getArrayFromFile($EXT_OP);
+
+ print "\n\n----- Abandon Request Stats -----\n\n";
+
+ for ($g = 0; $g < $abandonCount; $g++){
+ for ($sc = 0; $sc < $srchCount; $sc++){
+ if ($srchConn[$sc] eq $targetConn[$g] && $srchOp[$sc] eq $targetOp[$g] ){
+ print " - SRCH conn=$targetConn[$g] op=$targetOp[$g] msgid=$msgid[$g] client=$conn_hash{$targetConn[$g]}\n";
+ }
+ }
+ for ($dc = 0; $dc < $delCount; $dc++){
+ if ($delConn[$dc] eq $targetConn[$g] && $delOp[$dc] eq $targetOp[$g]){
+ print " - DEL conn=$targetConn[$g] op=$targetOp[$g] msgid=$msgid[$g] client=$conn_hash{$targetConn[$g]}\n";
+ }
+ }
+ for ($adc = 0; $adc < $addCount; $adc++){
+ if ($addConn[$adc] eq $targetConn[$g] && $addOp[$adc] eq $targetOp[$g]){
+ print " - ADD conn=$targetConn[$g] op=$targetOp[$g] msgid=$msgid[$g] client=$conn_hash{$targetConn[$g]}\n";
+ }
+ }
+ for ($mc = 0; $mc < $modCount; $mc++){
+ if ($modConn[$mc] eq $targetConn[$g] && $modOp[$mc] eq $targetOp[$g]){
+ print " - MOD conn=$targetConn[$g] op=$targetOp[$g] msgid=$msgid[$g] client=$conn_hash{$targetConn[$g]}\n";
+ }
+ }
+ for ($cc = 0; $cc < $cmpCount; $cc++){
+ if ($cmpConn[$mdc] eq $targetConn[$g] && $cmpOp[$mdc] eq $targetOp[$g]){
+ print " - CMP conn=$targetConn[$g] op=$targetOp[$g] msgid=$msgid[$g] client=$conn_hash{$targetConn[$g]}\n";
+ }
+ }
+ for ($mdc = 0; $mdc < $modrdnCount; $mdc++){
+ if ($modrdnConn[$mdc] eq $targetConn[$g] && $modrdnOp[$mdc] eq $targetOp[$g]){
+ print " - MODRDN conn=$targetConn[$g] op=$targetOp[$g] msgid=$msgid[$g] client=$conn_hash{$targetConn[$g]}\n";
+ }
+ }
+ for ($bcb = 0; $bcb < $bindCount; $bcb++){
+ if ($bindConn[$bcb] eq $targetConn[$g] && $bindOp[$bcb] eq $targetOp[$g]){
+ print " - BIND conn=$targetConn[$g] op=$targetOp[$g] msgid=$msgid[$g] client=$conn_hash{$targetConn[$g]}\n";
+ }
+ }
+ for ($ubc = 0; $ubc < $unbindCount; $ubc++){
+ if ($unbindConn[$ubc] eq $targetConn[$g] && $unbindOp[$ubc] eq $targetOp[$g]){
+ print " - UNBIND conn=$targetConn[$g] op=$targetOp[$g] msgid=$msgid[$g] client=$conn_hash{$targetConn[$g]}\n";
+ }
+ }
+ for ($ec = 0; $ec < $extopCount; $ec++){
+ if ($extConn[$ec] eq $targetConn[$g] && $extOp[$ec] eq $targetOp[$g]){
+ print " - EXT conn=$targetConn[$g] op=$targetOp[$g] msgid=$msgid[$g] client=$conn_hash{$targetConn[$g]}\n";
+ }
+ }
+ }
+ }
+}
+print "\n";
+
+#######################################
+# #
+# Recommendations #
+# #
+#######################################
+
+if ($usage =~ /j/i || $verb eq "yes"){
+ %conncount = getCounterHashFromFile($CONNCOUNT);
+ print "\n----- Recommendations -----\n";
+ $recCount = "1";
+ if ($unindexedSrchCount > 0){
+ print "\n $recCount. You have unindexed searches, this can be caused from a search on an unindexed attribute, or your returned results exceeded the allidsthreshold. Unindexed searches are not recommended. To refuse unindexed searches, switch \'nsslapd-require-index\' to \'on\' under your database entry (e.g. cn=UserRoot,cn=ldbm database,cn=plugins,cn=config).\n";
+ $recCount++;
+ }
+ if ($conncount{"T1"} > 0){
+ print "\n $recCount. You have some connections that are are being closed by the idletimeout setting. You may want to increase the idletimeout if it is set low.\n";
+ $recCount++;
+ }
+ if ($conncount{"T2"} > 0){
+ print "\n $recCount. You have some coonections that are being closed by the ioblocktimeout setting. You may want to increase the ioblocktimeout.\n";
+ $recCount++;
+ }
+ # compare binds to unbinds, if the difference is more than 30% of the binds, then report a issue
+ if (($bindCount - $unbindCount) > ($bindCount*.3)){
+ print "\n $recCount. You have a significant difference between binds and unbinds. You may want to investigate this difference.\n";
+ $recCount++;
+ }
+ # compare fds taken and return, if the difference is more than 30% report a issue
+ if (($fdTaken -$fdReturned) > ($fdTaken*.3)){
+ print "\n $recCount. You have a significant difference between file descriptors taken and file descriptors returned. You may want to investigate this difference.\n";
+ $recCount++;
+ }
+ if ($rootDNBindCount > ($bindCount *.2)){
+ print "\n $recCount. You have a high number of Directory Manager binds. The Directory Manager account should only be used under certain circumstances. Avoid using this account for client applications.\n";
+ $recCount++;
+ }
+ if ($errorCount > $successCount){
+ print "\n $recCount. You have more unsuccessful operations than successful operations. You should investigate this difference.\n";
+ $recCount++;
+ }
+ if ($conncount{"U1"} < ($connCodeCount - $conncount{"U1"})){
+ print "\n $recCount. You have more abnormal connection codes than cleanly closed connections. You may want to investigate this difference.\n";
+ $recCount++;
+ }
+ if ($first > 0){
+ print "\n $recCount. You have a majority of etimes that are greater than zero, you may want to investigate this performance problem.\n";
+ $recCount++;
+ }
+ if ($objectclassTopCount > ($srchCount *.25)){
+ print "\n $recCount. You have a high number of searches that query the entire search base. Although this is not necessarily bad, it could be resource intensive if the search base contains many entries.\n";
+ $recCount++;
+ }
+ if ($recCount == 1){
+ print "\nNone.\n";
+ }
+ print "\n";
+ undef %conncount;
+}
+
+#
+# We're done, clean up the data files
+#
+removeDataFiles();
+
+exit (0);
+
+#######################
+# #
+# Display Usage #
+# #
+#######################
+
+sub displayUsage {
+
+ print "Usage:\n\n";
+
+ print " ./logconv.pl [-h] [-d|--rootdn <rootDN>] [-s|--sizeLimit <size limit>] [-v|verison] [-Vi|verbose]\n";
+ print " [-S|--startTime <start time>] [-E|--endTime <end time>] \n";
+ print " [-efcibaltnxrgjuyp] [ access log ... ... ]\n\n";
+
+ print "- Commandline Switches:\n\n";
+
+ print " -h, --help help/usage\n";
+ print " -d, --rootDN <Directory Managers DN> default is \"cn=directory manager\"\n";
+ print " -D, --data <Location for temporary data files> default is \"/tmp\"\n";
+ print " -s, --sizeLimit <Number of results to return per catagory> default is 20\n";
+ print " -X, --excludeIP <IP address to exclude from connection stats> E.g. Load balancers\n";
+ print " -v, --version show version of tool\n";
+ print " -S, --startTime <time to begin analyzing logfile from>\n";
+ print " E.g. \"[28/Mar/2002:13:14:22 -0800]\"\n";
+ print " -E, --endTime <time to stop analyzing logfile>\n";
+ print " E.g. \"[28/Mar/2002:13:24:62 -0800]\"\n";
+ print " -m, --reportFileSecs <CSV output file - per second stats>\n";
+ print " -M, --reportFileMins <CSV output file - per minute stats>\n";
+ print " -B, --bind <ALL | ANONYMOUS | \"Actual Bind DN\">\n";
+ print " -V, --verbose <enable verbose output - includes all stats listed below>\n";
+ print " -[efcibaltnxrgjuyp]\n\n";
+
+ print " e Error Code stats\n";
+ print " f Failed Login Stats\n";
+ print " c Connection Code Stats\n";
+ print " i Client Stats\n";
+ print " b Bind Stats\n";
+ print " a Search Base Stats\n";
+ print " l Search Filter Stats\n";
+ print " t Etime Stats\n";
+ print " n Nentries Stats\n";
+ print " x Extended Operations\n";
+ print " r Most Requested Attribute Stats\n";
+ print " g Abandoned Operation Stats\n";
+ print " j Recommendations\n";
+ print " u Unindexed Search Stats\n";
+ print " y Connection Latency Stats\n";
+ print " p Open Connection ID Stats\n\n";
+
+ print " Examples:\n\n";
+
+ print " ./logconv.pl -s 10 -V /logs/access*\n\n";
+ print " ./logconv.pl --rootDN cn=dm /logs/access*\n\n";
+ print " ./logconv.pl --sizeLimit 50 -ibgju /logs/access*\n\n";
+ print " ./logconv.pl -S \"\[28/Mar/2002:13:14:22 -0800\]\" --endTime \"\[28/Mar/2002:13:50:05 -0800\]\" -e /logs/access*\n\n";
+ print " ./logconv.pl -m log-minute-stats-csv.out /logs/access*\n\n";
+ print " ./logconv.pl -B ANONYMOUS /logs/access*\n\n";
+ print " ./logconv.pl -B \"uid=mreynolds,dc=example,dc=com\" /logs/access*\n\n";
+
+ exit 1;
+}
+
+######################################################
+# #
+# Parsing Routines That Do The Actual Parsing Work #
+# #
+######################################################
+
+sub
+parseLine {
+ if($reportBinds eq "yes"){
+ &parseLineBind();
+ } else {
+ &parseLineNormal();
+ }
+}
+
+sub
+parseLineBind {
+ $linesProcessed++;
+ $lineBlockCount++;
+ local $_ = $logline;
+
+ if ($lineBlockCount >= $limit){
+ print STDERR sprintf" %10s Lines Processed\n",$linesProcessed;
+ $lineBlockCount="0";
+ }
+
+ # skip blank lines
+ return if $_ =~ /^\s/;
+
+ if($firstFile == 1 && $_ =~ /^\[/){
+ $start = $_;
+ if ($start =~ / *([0-9a-z:\/]+)/i){$start=$1;}
+ $firstFile = 0;
+ }
+ if ($endFlag != 1 && $_ =~ /^\[/ && $_ =~ / *([0-9a-z:\/]+)/i){
+ $end =$1;
+ }
+ if ($startTime && !$startFlag) {
+ if (index($_, $startTime) == 0) {
+ $startFlag = 1;
+ ($start) = $startTime =~ /\D*(\S*)/;
+ } else {
+ return;
+ }
+ }
+ if ($endTime && !$endFlag) {
+ if (index($_, $endTime) == 0) {
+ $endFlag = 1;
+ ($end) = $endTime =~ /\D*(\S*)/;
+ }
+ }
+ if ($_ =~ /connection from *([0-9A-Fa-f\.\:]+)/i ) {
+ for ($excl =0; $excl <= $#excludeIP; $excl++){
+ if ($excludeIP[$excl] eq $1){
+ $skip = "yes";
+ last;
+ }
+ }
+ if ($skip eq "yes"){
+ return ;
+ }
+ $ip = $1;
+ if ($_ =~ /conn= *([0-9]+)/i ){
+ $connList{$ip} = $connList{$ip} . " $1 ";
+ }
+ return;
+ }
+ if (/ BIND/ && $_ =~ /dn=\"(.*)\" method/i ){
+ if ($1 eq ""){
+ $dn = "Anonymous";
+ } else {
+ $dn = $1;
+ $dn =~ tr/A-Z/a-z/;
+ }
+ if($bindReportDN ne ""){
+ if($dn ne $bindReportDN){
+ # We are not looking for this DN, skip it
+ return;
+ }
+ }
+ $bindReport{$dn}{"binds"}++;
+ if ($bindReport{$dn}{"binds"} == 1){
+ # For hashes we need to init the counters
+ $bindReport{$dn}{"srch"} = 0;
+ $bindReport{$dn}{"add"} = 0;
+ $bindReport{$dn}{"mod"} = 0;
+ $bindReport{$dn}{"del"} = 0;
+ $bindReport{$dn}{"cmp"} = 0;
+ $bindReport{$dn}{"ext"} = 0;
+ $bindReport{$dn}{"modrdn"} = 0;
+ $bindReport{$dn}{"failedBind"} = 0;
+ }
+ if ($_ =~ /conn= *([0-9]+)/i) {
+ $bindReport{$dn}{"conn"} = $bindReport{$dn}{"conn"} . " $1 ";
+ }
+ return;
+ }
+ if (/ RESULT err=49 /){
+ processOpForBindReport("failedBind",$logline);
+ }
+ if (/ SRCH base=/){
+ processOpForBindReport("srch",$logline);
+ } elsif (/ ADD dn=/){
+ processOpForBindReport("add",$logline);
+ } elsif (/ MOD dn=/){
+ processOpForBindReport("mod",$logline);
+ } elsif (/ DEL dn=/){
+ processOpForBindReport("del",$logline);
+ } elsif (/ MODRDN dn=/){
+ processOpForBindReport("modrdn",$logline);
+ } elsif (/ CMP dn=/){
+ processOpForBindReport("cmp",$logline);
+ } elsif (/ EXT oid=/){
+ processOpForBindReport("ext",$logline);
+ }
+}
+
+sub
+processOpForBindReport
+{
+ $op = @_[0];
+ $data = @_[1];
+
+ if ($data =~ /conn= *([0-9]+)/i) {
+ foreach $dn (keys %bindReport){
+ if ($bindReport{$dn}{"conn"} =~ / $1 /){
+ $bindDN = $dn;
+ $bindReport{$bindDN}{$op}++;
+ return;
+ }
+ }
+ }
+}
+
+sub parseLineNormal
+{
+ local $_ = $logline;
+
+ # lines starting blank are restart
+ return if $_ =~ /^\s/;
+
+ $linesProcessed++;
+ $lineBlockCount++;
+ if ($lineBlockCount >= $limit){ print STDERR sprintf" %10s Lines Processed\n",$linesProcessed; $lineBlockCount="0";}
+
+ # gather/process the timestamp
+ if($firstFile == 1 && $_ =~ /^\[/){
+ # if we are using startTime & endTime, this will get overwritten, which is ok
+ $start = $_;
+ if ($start =~ / *([0-9a-z:\/]+)/i){$start=$1;}
+ $firstFile = 0;
+ }
+ if ($endFlag != 1 && $_ =~ /^\[/ && $_ =~ / *([0-9a-z:\/]+)/i){$end =$1;}
+ if ($startTime && !$startFlag) {
+ if (index($_, $startTime) == 0) {
+ $startFlag = 1;
+ ($start) = $startTime =~ /\D*(\S*)/;
+ } else {
+ return;
+ }
+ }
+ if ($endTime && !$endFlag) {
+ if (index($_, $endTime) == 0) {
+ $endFlag = 1;
+ ($end) = $endTime =~ /\D*(\S*)/;
+ }
+ }
+
+ # Additional performance stats
+ ($time, $tzone) = split (' ', $_);
+ if ($reportStat && $time ne $last_tm)
+ {
+ $last_tm = $time;
+ $time =~ s/\[//;
+ $tzone =~ s/\].*//;
+
+ if($tzone ne $lastzone)
+ {
+ # tz offset change
+ $lastzone=$tzone;
+ ($sign,$hr,$min) = $tzone =~ m/(?)(\d\d)(\d\d)/;
+ $tzoff = $hr*3600 + $min*60;
+ $tzoff *= -1
+ if $sign eq '-';
+ # to be subtracted from converted values.
+ }
+ ($date, $hr, $min, $sec) = split (':', $time);
+ ($day, $mon, $yr) = split ('/', $date);
+ $newmin = timegm(0, $min, $hours, $day, $monthname{$mon}, $yr) - $tzoff;
+ $gmtime = $newmin + $sec;
+ print_stats_block( $s_stats );
+ reset_stats_block( $s_stats, $gmtime, $time.' '.$tzone );
+ if ($newmin != $last_min)
+ {
+ print_stats_block( $m_stats );
+ $time =~ s/\d\d$/00/;
+ reset_stats_block( $m_stats, $newmin, $time.' '.$tzone );
+ $last_min = $newmin;
+ }
+ }
+
+ if (m/ RESULT err/){
+ $allResults++;
+ if($reportStat){ inc_stats('results',$s_stats,$m_stats); }
+ }
+ if (m/ SRCH/){
+ $srchCount++;
+ if($reportStat){ inc_stats('srch',$s_stats,$m_stats); }
+ if ($_ =~ / attrs=\"(.*)\"/i){
+ $anyAttrs++;
+ $attrs = $1 . " ";
+ while ($attrs =~ /(\S+)\s/g){
+ writeFile($ATTR, $1);
+ }
+ }
+ if (/ attrs=ALL/){
+ writeFile($ATTR, "All Attributes");
+ $anyAttrs++;
+ }
+ if ($verb eq "yes"){
+ if ($_ =~ /conn= *([0-9]+)/i){ writeFile($SRCH_CONN, $1);}
+ if ($_ =~ /op= *([0-9]+)/i){ writeFile($SRCH_OP, $1);}
+ }
+ }
+ if (m/ DEL/){
+ $delCount++;
+ if($reportStat){ inc_stats('del',$s_stats,$m_stats); }
+ if ($verb eq "yes"){
+ if ($_ =~ /conn= *([0-9]+)/i){ writeFile($DEL_CONN, $1);}
+ if ($_ =~ /op= *([0-9]+)/i){ writeFile($DEL_OP, $1);}
+ }
+ }
+ if (m/ MOD dn=/){
+ $modCount++;
+ if($reportStat){ inc_stats('mod',$s_stats,$m_stats); }
+ if ($verb eq "yes"){
+ if ($_ =~ /conn= *([0-9]+)/i){ writeFile($MOD_CONN, $1);}
+ if ($_ =~ /op= *([0-9]+)/i){ writeFile($MOD_OP, $1); }
+ }
+ }
+ if (m/ ADD/){
+ $addCount++;
+ if($reportStat){ inc_stats('add',$s_stats,$m_stats); }
+ if ($verb eq "yes"){
+ if ($_ =~ /conn= *([0-9]+)/i){ writeFile($ADD_CONN, $1); }
+ if ($_ =~ /op= *([0-9]+)/i){ writeFile($ADD_OP, $1); }
+ }
+ }
+ if (m/ MODRDN/){
+ $modrdnCount++;
+ if($reportStat){ inc_stats('modrdn',$s_stats,$m_stats); }
+ if ($verb eq "yes"){
+ if ($_ =~ /conn= *([0-9]+)/i){ writeFile($MODRDN_CONN, $1); }
+ if ($_ =~ /op= *([0-9]+)/i){ writeFile($MODRDN_OP, $1); }
+ }
+ }
+ if (m/ CMP dn=/){
+ $cmpCount++;
+ if($reportStat){ inc_stats('cmp',$s_stats,$m_stats); }
+ if ($verb eq "yes" || $usage =~ /g/i){
+ if ($_ =~ /conn= *([0-9]+)/i){ writeFile($CMP_CONN, $1);}
+ if ($_ =~ /op= *([0-9]+)/i){ writeFile($CMP_OP, $1);}
+ }
+ }
+ if (m/ ABANDON /){
+ $abandonCount++;
+ if($reportStat){ inc_stats('abandon',$s_stats,$m_stats); }
+ $allResults++;
+ if ($_ =~ /targetop= *([0-9a-zA-Z]+)/i ){
+ writeFile($TARGET_OP, $1);
+ if ($_ =~ /conn= *([0-9]+)/i){ writeFile($TARGET_CONN, $1); }
+ if ($_ =~ /msgid= *([0-9]+)/i){ writeFile($MSGID, $1);}
+ }
+ }
+ if (m/ VLV /){
+ if ($_ =~ /conn= *([0-9]+)/i){ $vlvconn[$vlvCount] = $1;}
+ if ($_ =~ /op= *([0-9]+)/i){ $vlvop[$vlvCount] = $1;}
+ $vlvCount++;
+ }
+ if (m/ authzid=/){
+ $proxiedAuthCount++;
+ }
+ if (m/ SORT /){$vlvSortCount++}
+ if (m/ version=2/){$v2BindCount++}
+ if (m/ version=3/){$v3BindCount++}
+ if (m/ conn=1 fd=/){$serverRestartCount++}
+ if (m/ SSL connection from/){$sslCount++;}
+ if (m/ connection from/){
+ $exc = "no";
+ if ($_ =~ /connection from *([0-9A-Fa-f\.\:]+)/i ){
+ for ($xxx =0; $xxx <= $#excludeIP; $xxx++){
+ if ($excludeIP[$xxx] eq $1){$exc = "yes";}
+ }
+ if ($exc ne "yes"){ $connectionCount++;}
+ }
+ $simConnection++;
+ if ($simConnection > $maxsimConnection) {
+ $maxsimConnection = $simConnection;
+ }
+ ($connID) = $_ =~ /conn=(\d*)\s/;
+ $openConnection[$connID]++;
+ ($time, $tzone) = split (' ', $_);
+ ($date, $hr, $min, $sec) = split (':', $time);
+ ($day, $mon, $yr) = split ('/', $date);
+ $day =~ s/\[//;
+ $start_time_of_connection[$connID] = timegm($sec, $min, $hours, $day, $monthname{$mon}, $yr);
+ }
+ if (m/ SSL client bound as /){$sslClientBindCount++;}
+ if (m/ SSL failed to map client certificate to LDAP DN/){$sslClientFailedCount++;}
+ if (m/ fd=/ && m/slot=/){$fdTaken++}
+ if (m/ fd=/ && m/closed/){
+ $fdReturned++;
+ $simConnection--;
+
+ ($connID) = $_ =~ /conn=(\d*)\s/;
+ $openConnection[$connID]--;
+ $end_time_of_connection[$connID] = $gmtime;
+ $diff = $end_time_of_connection[$connID] - $start_time_of_connection[$connID];
+ $start_time_of_connection[$connID] = $end_time_of_connection[$connID] = 0;
+ if ($diff <= 1) { $latency[0]++;}
+ if ($diff == 2) { $latency[1]++;}
+ if ($diff == 3) { $latency[2]++;}
+ if ($diff >= 4 && $diff <=5 ) { $latency[3]++;}
+ if ($diff >= 6 && $diff <=10 ) { $latency[4]++;}
+ if ($diff >= 11 && $diff <=15 ) { $latency[5]++;}
+ if ($diff >= 16) { $latency[6] ++;}
+ }
+ if (m/ BIND/ && $_ =~ /dn=\"(.*)\" method/i ){
+ if($reportStat){ inc_stats('bind',$s_stats,$m_stats); }
+ $bindCount++;
+ if ($1 ne ""){
+ $tmpp = $1;
+ $tmpp =~ tr/A-Z/a-z/;
+ writeFile($BINDLIST, $tmpp);
+ $bindVal = $tmpp;
+ if ($_ =~ /conn= *([0-9]+)/i) { $bindConn = $1; writeFile($BIND_CONN, $1);}
+ if ($_ =~ /op= *([0-9]+)/i) { $bindOp = $1; writeFile($BIND_OP, $1);}
+ if($usage =~ /f/ || $verb eq "yes"){
+ # only need this for the failed bind report
+ writeFile($BINDINFO, "$bindVal ,, $bindConn ,, $bindOp");
+ }
+ if($1 eq $rootDN){
+ $rootDNBindCount++;
+ }
+ } else {
+ $anonymousBindCount++;
+ writeFile($BINDLIST, "Anonymous Binds");
+ inc_stats('anonbind',$s_stats,$m_stats);
+ }
+ }
+ if (m/ UNBIND/){
+ $unbindCount++;
+ if ($verb eq "yes"){
+ if ($_ =~ /conn= *([0-9]+)/i){ writeFile($UNBIND_CONN, $1); }
+ if ($_ =~ /op= *([0-9]+)/i){ writeFile($UNBIND_OP, $1); }
+ }
+ }
+ if (m/ RESULT err=/ && m/ notes=P/){
+ $pagedSearchCount++;
+ }
+ if (m/ notes=U/){
+ if ($_ =~ /conn= *([0-9]+)/i){
+ $con = $1;
+ if ($_ =~ /op= *([0-9]+)/i){ $op = $1;}
+ }
+ for ($i=0; $i <= $vlvCount;$i++){
+ if ($vlvconn[$i] eq $con && $vlvop[$i] eq $op){ $vlvNotesCount++; $isVlvNotes="1";}
+ }
+ if($isVlvNotes == 0){
+ # We don't want to record vlv unindexed searches for our regular "bad"
+ # unindexed search stat, as VLV unindexed searches aren't that bad
+ $unindexedSrchCount++;
+ if($reportStat){ inc_stats('notesu',$s_stats,$m_stats); }
+ }
+ if ($usage =~ /u/ || $verb eq "yes"){
+ if ($isVlvNnotes == 0 ){
+ if ($_ =~ /etime= *([0-9.]+)/i ){
+ writeFile($NOTES_ETIME, $1);
+ }
+ if ($_ =~ /conn= *([0-9]+)/i){
+ writeFile($NOTES_CONN, $1);
+ }
+ if ($_ =~ /op= *([0-9]+)/i){
+ writeFile($NOTES_OP, $1);
+ }
+ if ($_ =~ / *([0-9a-z:\/]+)/i){
+ writeFile($NOTES_TIME, $1);
+ }
+ if ($_ =~ /nentries= *([0-9]+)/i ){
+ writeFile($NOTES_NENTRIES, $1);
+ }
+ }
+ }
+ $isVlvNotes = 0;
+ }
+ if (m/ closed error 32/){
+ $brokenPipeCount++;
+ if (m/- T1/){ writeFile($RC,"T1"); }
+ elsif (m/- T2/){ writeFile($RC,"T2"); }
+ elsif (m/- A1/){ writeFile($RC,"A1"); }
+ elsif (m/- B1/){ writeFile($RC,"B1"); }
+ elsif (m/- B4/){ writeFile($RC,"B4"); }
+ elsif (m/- B2/){ writeFile($RC,"B2"); }
+ elsif (m/- B3/){ writeFile($RC,"B3"); }
+ elsif (m/- R1/){ writeFile($RC,"R1"); }
+ elsif (m/- P1/){ writeFile($RC,"P1"); }
+ elsif (m/- P1/){ writeFile($RC,"P2"); }
+ elsif (m/- U1/){ writeFile($RC,"U1"); }
+ else { writeFile($RC,"other"); }
+ }
+ if (m/ closed error 131/ || m/ closed error -5961/){
+ $connResetByPeerCount++;
+ if (m/- T1/){ writeFile($SRC,"T1"); }
+ elsif (m/- T2/){ writeFile($SRC,"T2"); }
+ elsif (m/- A1/){ writeFile($SRC,"A1"); }
+ elsif (m/- B1/){ writeFile($SRC,"B1"); }
+ elsif (m/- B4/){ writeFile($SRC,"B4"); }
+ elsif (m/- B2/){ writeFile($SRC,"B2"); }
+ elsif (m/- B3/){ writeFile($SRC,"B3"); }
+ elsif (m/- R1/){ writeFile($SRC,"R1"); }
+ elsif (m/- P1/){ writeFile($SRC,"P1"); }
+ elsif (m/- P1/){ writeFile($SRC,"P2"); }
+ elsif (m/- U1/){ writeFile($SRC,"U1"); }
+ else { writeFile($SRC,"other"); }
+ }
+ if (m/ closed error 11/){
+ $resourceUnavailCount++;
+ if (m/- T1/){ writeFile($RSRC,"T1"); }
+ elsif (m/- T2/){ writeFile($RSRC,"T2"); }
+ elsif (m/- A1/){ writeFile($RSRC,"A1"); }
+ elsif (m/- B1/){ writeFile($RSRC,"B1"); }
+ elsif (m/- B4/){ writeFile($RSRC,"B4"); }
+ elsif (m/- B2/){ writeFile($RSRC,"B2"); }
+ elsif (m/- B3/){ writeFile($RSRC,"B3"); }
+ elsif (m/- R1/){ writeFile($RSRC,"R1"); }
+ elsif (m/- P1/){ writeFile($RSRC,"P1"); }
+ elsif (m/- P1/){ writeFile($RSRC,"P2"); }
+ elsif (m/- U1/){ writeFile($RSRC,"U1"); }
+ else { writeFile($RSRC,"other"); }
+ }
+ if ($usage =~ /g/ || $usage =~ /c/ || $usage =~ /i/ || $verb eq "yes"){
+ $exc = "no";
+ if ($_ =~ /connection from *([0-9A-fa-f\.\:]+)/i ) {
+ for ($xxx = 0; $xxx <= $#excludeIP; $xxx++){
+ if ($1 eq $excludeIP[$xxx]){
+ $exc = "yes";
+ writeFile($EXCOUNT,$1);
+ }
+ }
+ $ip = $1;
+ writeFile($IP_HASH, "$ip count");
+ if ($_ =~ /conn= *([0-9]+)/i ){
+ if ($exc ne "yes"){
+ writeFile($CONN_HASH, "$1 $ip");
+ }
+ }
+ }
+ if (m/- A1/){
+ if ($_ =~ /conn= *([0-9]+)/i) {
+ $exc = "no";
+ $ip = getIPfromConn($1);
+ if ($ip eq ""){$ip = "Unknown_Host";}
+ for ($xxx = 0; $xxx <= $#excludeIP; $xxx++){
+ if ($ip eq $excludeIP[$xxx]){$exc = "yes";}
+ }
+ if ($exc ne "yes"){
+ writeFile($IP_HASH, "$ip A1");
+ writeFile($CONNCOUNT, "A1");
+ $connCodeCount++;
+ }
+ }
+ }
+ if (m/- B1/){
+ if ($_ =~ /conn= *([0-9]+)/i) {
+ $exc = "no";
+ $ip = getIPfromConn($1);
+ if ($ip eq ""){$ip = "Unknown_Host";}
+ for ($xxx = 0; $xxx <= $#excludeIP; $xxx++){
+ if ($ip eq $excludeIP[$xxx]){$exc = "yes";}
+ }
+ if ($exc ne "yes"){
+ writeFile($IP_HASH, "$ip B1");
+ writeFile($CONNCOUNT, "B1");
+ $connCodeCount++;
+ }
+ }
+ }
+ if (m/- B4/){
+ if ($_ =~ /conn= *([0-9]+)/i) {
+ $exc = "no";
+ $ip = getIPfromConn($1);
+ if ($ip eq ""){$ip = "Unknown_Host";}
+ for ($xxx = 0; $xxx <= $#excludeIP; $xxx++){
+ if ($ip eq $excludeIP[$xxx]){$exc = "yes";}
+ }
+ if ($exc ne "yes"){
+ writeFile($IP_HASH, "$ip B4");
+ writeFile($CONNCOUNT, "B4");
+ $connCodeCount++;
+ }
+ }
+ }
+ if (m/- T1/){
+ if ($_ =~ /conn= *([0-9]+)/i) {
+ $exc = "no";
+ $ip = getIPfromConn($1);
+ if ($ip eq ""){$ip = "Unknown_Host";}
+ for ($xxx = 0; $xxx <= $#excludeIP; $xxx++){
+ if ($ip eq $excludeIP[$xxx]){$exc = "yes";}
+ }
+ if ($exc ne "yes"){
+ writeFile($IP_HASH, "$ip T1");
+ writeFile($CONNCOUNT, "T1");
+ $connCodeCount++;
+ }
+ }
+ }
+ if (m/- T2/){
+ if ($_ =~ /conn= *([0-9]+)/i) {
+ $exc = "no";
+ $ip = getIPfromConn($1);
+ if ($ip eq ""){$ip = "Unknown_Host";}
+ for ($xxx = 0; $xxx <= $#excludeIP; $xxx++){
+ if ($ip eq $excludeIP[$xxx]){$exc = "yes";}
+ }
+ if ($exc ne "yes"){
+ writeFile($IP_HASH, "$ip T2");
+ writeFile($CONNCOUNT, "T2");
+ $connCodeCount++;
+ }
+ }
+ }
+ if (m/- B2/){
+ if ($_ =~ /conn= *([0-9]+)/i) {
+ $exc = "no";
+ $ip = getIPfromConn($1);
+ $maxBerSizeCount++;
+ if ($ip eq ""){$ip = "Unknown_Host";}
+ for ($xxx = 0; $xxx <= $#excludeIP; $xxx++){
+ if ($ip eq $excludeIP[$xxx]){$exc = "yes";}
+ }
+ if ($exc ne "yes"){
+ writeFile($IP_HASH, "$ip B2");
+ writeFile($CONNCOUNT, "B2");
+ $connCodeCount++;
+ }
+ }
+ }
+ if (m/- B3/){
+ if ($_ =~ /conn= *([0-9]+)/i) {
+ $exc = "no";
+ $ip = getIPfromConn($1);
+ if ($ip eq ""){$ip = "Unknown_Host";}
+ for ($xxx = 0; $xxx <= $#excludeIP; $xxx++){
+ if ($ip eq $excludeIP[$xxx]){$exc = "yes";}
+ }
+ if ($exc ne "yes"){
+ writeFile($IP_HASH, "$ip B3");
+ writeFile($CONNCOUNT, "B3");
+ $connCodeCount++;
+ }
+ }
+ }
+ if (m/- R1/){
+ if ($_ =~ /conn= *([0-9]+)/i) {
+ $exc = "no";
+ $ip = getIPfromConn($1);
+ if ($ip eq ""){$ip = "Unknown_Host";}
+ for ($xxx = 0; $xxx <= $#excludeIP; $xxx++){
+ if ($ip eq $excludeIP[$xxx]){$exc = "yes";}
+ }
+ if ($exc ne "yes"){
+ writeFile($IP_HASH, "$ip R1");
+ writeFile($CONNCOUNT, "R1");
+ $connCodeCount++;
+ }
+ }
+ }
+ if (m/- P1/){
+ if ($_ =~ /conn= *([0-9]+)/i) {
+ $exc = "no";
+ $ip = getIPfromConn($1);
+ if ($ip eq ""){$ip = "Unknown_Host";}
+ for ($xxx = 0; $xxx <= $#excludeIP; $xxx++){
+ if ($ip eq $excludeIP[$xxx]){$exc = "yes";}
+ }
+ if ($exc ne "yes"){
+ writeFile($IP_HASH, "$ip P1");
+ writeFile($CONNCOUNT, "P1");
+ $connCodeCount++;
+ }
+ }
+ }
+ if (m/- P2/){
+ if ($_ =~ /conn= *([0-9]+)/i) {
+ $exc = "no";
+ $ip = getIPfromConn($1);
+ if ($ip eq ""){$ip = "Unknown_Host";}
+ for ($xxx = 0; $xxx <= $#excludeIP; $xxx++){
+ if ($ip eq $excludeIP[$xxx]){$exc = "yes";}
+ }
+ if ($exc ne "yes"){
+ writeFile($IP_HASH, "$ip P2");
+ writeFile($CONNCOUNT, "P2");
+ $connCodeCount++;
+ }
+ }
+ }
+ if (m/- U1/){
+ if ($_ =~ /conn= *([0-9]+)/i) {
+ $exc = "no";
+ $ip = getIPfromConn($1);
+ if ($ip eq ""){$ip = "Unknown_Host";}
+ for ($xxx = 0; $xxx <= $#excludeIP; $xxx++){
+ if ($ip eq $excludeIP[$xxx]){$exc = "yes";}
+ }
+ if ($exc ne "yes"){
+ writeFile($IP_HASH, "$ip U1");
+ writeFile($CONNCOUNT, "U1");
+ $connCodeCount++;
+ }
+ }
+ }
+ }
+ if ($_ =~ /err= *([0-9]+)/i){
+ $errorCode[$1]++;
+ if ($1 ne "0"){ $errorCount++;}
+ else { $successCount++;}
+ }
+ if ($_ =~ /etime= *([0-9.]+)/ ) { writeFile($ETIME, $1);}
+ if ($_ =~ / tag=101 / || $_ =~ / tag=111 / || $_ =~ / tag=100 / || $_ =~ / tag=115 /){
+ if ($_ =~ / nentries= *([0-9]+)/i ){ writeFile($NENTRIES, $1); }
+ }
+ if (m/objectclass=\*/i || m/objectclass=top/i ){
+ if (m/ scope=2 /){ $objectclassTopCount++;}
+ }
+ if (m/ EXT oid=/){
+ $extopCount++;
+ if ($_ =~ /oid=\" *([0-9\.]+)/i ){ writeFile($OID,$1); }
+ if ($verb eq "yes"){
+ if ($_ =~ /conn= *([0-9]+)/i){ writeFile($EXT_CONN, $1); }
+ if ($_ =~ /op= *([0-9]+)/i){ writeFile($EXT_OP, $1); }
+ }
+ }
+ if ($usage =~ /l/ || $verb eq "yes"){
+ if (/ SRCH / && / attrs=/ && $_ =~ /filter=\"(.*)\" /i ){
+ $tmpp = $1;
+ $tmpp =~ tr/A-Z/a-z/;
+ $tmpp =~ s/\\22/\"/g;
+ writeFile($FILTER, $tmpp);
+ $filterVal = $tmpp;
+ if ($_ =~ /conn= *([0-9]+)/i) { $filterConn = $1; }
+ if ($_ =~ /op= *([0-9]+)/i) { $filterOp = $1; }
+ } elsif (/ SRCH / && $_ =~ /filter=\"(.*)\"/i){
+ $tmpp = $1;
+ $tmpp =~ tr/A-Z/a-z/;
+ $tmpp =~ s/\\22/\"/g;
+ writeFile($FILTER, $tmpp);
+ $filterVal = $tmpp;
+ if ($_ =~ /conn= *([0-9]+)/i) { $filterConn = $1; }
+ if ($_ =~ /op= *([0-9]+)/i) { $filterOp = $1; }
+ }
+ $filterCount++;
+ if($usage =~ /u/ || $verb eq "yes"){
+ # we noly need this for the unindexed search report
+ writeFile($FILTERINFO, "$filterVal ,, $filterConn ,, $filterOp");
+ }
+ }
+ if ($usage =~ /a/ || $verb eq "yes"){
+ if (/ SRCH / && $_ =~ /base=\"(.*)\" scope/i ){
+ if ($1 eq ""){
+ $tmpp = "Root DSE";
+ } else {
+ $tmpp = $1;
+ }
+ $tmpp =~ tr/A-Z/a-z/;
+ writeFile($BASE, $tmpp);
+ #
+ # grab the search bases & scope for potential unindexed searches
+ #
+ $baseVal = $tmpp;
+ if ($_ =~ /scope= *([0-9]+)/i) {
+ $scopeVal = $1;
+ }
+ if ($_ =~ /conn= *([0-9]+)/i) {
+ $baseConn = $1;
+ $scopeConn = $1;
+ }
+ if ($_ =~ /op= *([0-9]+)/i) {
+ $baseOp = $1;
+ $scopeOp = $1;
+ }
+ if($usage =~ /u/ || $verb eq "yes"){
+ # we noly need this for the unindexed search report
+ writeFile($BASEINFO, "$baseVal ,, $baseConn ,, $baseOp");
+ writeFile($SCOPEINFO, "$scopeVal ,, $scopeConn ,, $scopeOp");
+ }
+ $baseCount++;
+ $scopeCount++;
+ }
+ }
+ if ($_ =~ /fd= *([0-9]+)/i ) {
+ $fds[$fdds] = $1;
+ if ($fds[$fdds] > $highestFdTaken) {$highestFdTaken = $fds[$fdds];}
+ $fdds++;
+ }
+ if ($usage =~ /f/ || $verb eq "yes"){
+ if (/ err=49 tag=/ && / dn=\"/){
+ if ($_ =~ /dn=\"(.*)\"/i ){
+ writeFile($DS6XBADPWD, $1);
+ }
+ $ds6x = "true";
+ $badPwdCount++;
+ } elsif (/ err=49 tag=/ ){
+ if ($_ =~ /conn= *([0-9]+)/i ){
+ writeFile($BADPWDCONN, $1);
+ $ip = getIPfromConn($1);
+ $badPwdCount++;
+ }
+ if ($_ =~ /op= *([0-9]+)/i ){
+ writeFile($BADPWDOP, $1);
+ }
+ writeFile($BADPWDIP, $ip);
+ }
+ }
+ if (/ BIND / && /method=sasl/i){
+ $saslBindCount++;
+ if ($_ =~ /mech=(.*)/i ){
+ writeFile($SASLMECH, $1);
+ }
+ }
+ if (/ conn=Internal op=-1 / && !/ RESULT err=/){ $internalOpCount++; }
+ if (/ ENTRY dn=/ ){ $entryOpCount++; }
+ if (/ conn=/ && /op=/ && / REFERRAL/){ $referralCount++; }
+ if (/ options=persistent/){$persistentSrchCount++;}
+}
+
+#######################################
+# #
+# CSV Helper Routines #
+# #
+#######################################
+# #
+# To convert the CSV to chart in OO #
+# #
+# * Select active rows and columns #
+# * Insert -> Chart #
+# * Chart type "XY (Scatter)" #
+# * sub-type "Lines Only" #
+# * select "Sort by X values" #
+# * "Next" #
+# * select "Data series in columns" #
+# * select "First row as label" #
+# * select "First column as label" #
+# * "Next" #
+# * "Next" #
+# * "Finish" #
+# #
+#######################################
+
+sub
+reset_stats_block
+{
+ my $stats = shift;
+
+ $stats->{'last'} = shift || 0;
+ $stats->{'last_str'} = shift || '';
+
+ $stats->{'results'}=0;
+ $stats->{'srch'}=0;
+ $stats->{'add'}=0;
+ $stats->{'mod'}=0;
+ $stats->{'modrdn'}=0;
+ $stats->{'moddn'}=0;
+ $stats->{'cmp'}=0;
+ $stats->{'del'}=0;
+ $stats->{'abandon'}=0;
+ $stats->{'conns'}=0;
+ $stats->{'sslconns'}=0;
+ $stats->{'bind'}=0;
+ $stats->{'anonbind'}=0;
+ $stats->{'unbind'}=0;
+ $stats->{'notesu'}=0;
+ return;
+}
+
+sub
+new_stats_block
+{
+ my $name = shift || '';
+ my $stats = {
+ 'active' => 0,
+ };
+ if ($name){
+ $stats->{'filename'} = $name;
+ $stats->{'fh'} = new IO::File;
+ $stats->{'active'} = open($stats->{'fh'},">$name");
+ }
+ reset_stats_block( $stats );
+
+ return $stats;
+}
+
+sub
+print_stats_block
+{
+ foreach my $stats( @_ ){
+ if ($stats->{'active'}){
+ if ($stats->{'last'}){
+ $stats->{'fh'}->print(
+ join(',',
+ $stats->{'last_str'},
+ $stats->{'last'},
+ $stats->{'results'},
+ $stats->{'srch'},
+ $stats->{'add'},
+ $stats->{'mod'},
+ $stats->{'modrdn'},
+ $stats->{'moddn'},
+ $stats->{'cmp'},
+ $stats->{'del'},
+ $stats->{'abandon'},
+ $stats->{'conns'},
+ $stats->{'sslconns'},
+ $stats->{'bind'},
+ $stats->{'anonbind'},
+ $stats->{'unbind'},
+ $stats->{'notesu'} ),
+ "\n" );
+ } else {
+ $stats->{'fh'}->print(
+ "Time,time_t,Results,Search,Add,Mod,Modrdn,Delete,Abandon,".
+ "Connections,SSL Conns,Bind,Anon Bind,Unbind,Unindexed\n"
+ );
+ }
+ }
+ }
+ return;
+}
+
+sub
+inc_stats
+{
+ my $n = shift;
+ foreach(@_){
+ $_->{$n}++
+ if exists $_->{$n};
+ }
+ return;
+}
+
+sub
+displayBindReport
+{
+ #
+ # Loop for each DN - sort alphabetically
+ #
+ # Display all the IP addresses, then counts of all the operations it did
+ #
+
+ print "\nBind Report\n";
+ print "====================================================================\n\n";
+ foreach $bindDN (sort { $bindReport{$a} <=> $bindReport{$b} } keys %bindReport) {
+ print("Bind DN: $bindDN\n");
+ print("--------------------------------------------------------------------\n");
+ print(" Client Addresses:\n\n");
+ &printClients($bindReport{$bindDN}{"conn"});
+ print("\n Operations Performed:\n\n");
+ &printOpStats($bindDN);
+ print("\n");
+ }
+ print "Done.\n";
+ exit (0);
+}
+
+sub
+printClients
+{
+ @bindConns = &cleanConns(split(' ', @_[0]));
+ $IPcount = "1";
+
+ foreach $ip ( keys %connList ){ # Loop over all the IP addresses
+ foreach $bc (@bindConns){ # Loop over each bind conn number and compare it
+ if($connList{$ip} =~ / $bc /){
+ print(" [$IPcount] $ip\n");
+ $IPcount++;
+ last;
+ }
+ }
+ }
+}
+
+sub
+cleanConns
+{
+ @dirtyConns = @_;
+ $#cleanConns = -1;
+ $c = 0;
+
+ for ($i = 0; $i <=$#dirtyConns; $i++){
+ if($dirtyConns[$i] ne ""){
+ $cleanConns[$c++] = $dirtyConns[$i];
+ }
+ }
+ return @cleanConns;
+}
+
+sub
+printOpStats
+{
+ $dn = @_[0];
+
+ if( $bindReport{$dn}{"failedBind"} == 0 ){
+ print(" Binds: " . $bindReport{$dn}{"binds"} . "\n");
+ } else {
+ print(" Binds: " . $bindReport{$dn}{"binds"} . " (Invalid Credentials: " . $bindReport{$dn}{"failedBind"} . ")\n");
+ }
+ print(" Searches: " . $bindReport{$dn}{"srch"} . "\n");
+ print(" Modifies: " . $bindReport{$dn}{"mod"} . "\n");
+ print(" Adds: " . $bindReport{$dn}{"add"} . "\n");
+ print(" Deletes: " . $bindReport{$dn}{"del"} . "\n");
+ print(" Compares: " . $bindReport{$dn}{"cmp"} . "\n");
+ print(" ModRDNs: " . $bindReport{$dn}{"modrdn"} . "\n");
+ print(" Ext Ops: " . $bindReport{$dn}{"ext"} . "\n\n");
+}
+
+#######################
+# #
+# Hash File Functions #
+# #
+#######################
+
+sub
+openFailed
+{
+ $open_error = @_[0];
+ $file_name = @_[1];
+ closeDataFiles();
+ removeDataFiles();
+ die ("Can not open $file_name error ($open_error)");
+}
+
+sub
+openDataFiles
+{
+ # hash files
+ open ($ATTR, ">$ATTR") or do { openFailed($!, $ATTR) };
+ open ($RC, ">$RC") or do { openFailed($!, $RC) };
+ open ($SRC, ">$SRC") or do { openFailed($!, $SRC) };
+ open ($RSRC, ">$RSRC") or do { openFailed($!, $RSRC) };
+ open ($EXCOUNT, ">$EXCOUNT") or do { openFailed($!, $EXCOUNT) };
+ open ($CONN_HASH, ">$CONN_HASH") or do { openFailed($!, $CONN_HASH) };
+ open ($IP_HASH, ">$IP_HASH") or do { openFailed($!, $IP_HASH) };
+ open ($CONNCOUNT, ">$CONNCOUNT") or do { openFailed($!, $CONNCOUNT) };
+ open ($NENTRIES, ">$NENTRIES") or do { openFailed($!, $NENTRIES) };
+ open ($FILTER, ">$FILTER") or do { openFailed($!, $FILTER) };
+ open ($BASE, ">$BASE") or do { openFailed($!, $BASE) };
+ open ($DS6XBADPWD, ">$DS6XBADPWD") or do { openFailed($!, $DS6XBADPWD) };
+ open ($SASLMECH, ">$SASLMECH") or do { openFailed($!, $SASLMECH) };
+ open ($BINDLIST, ">$BINDLIST") or do { openFailed($!, $BINDLIST) };
+ open ($ETIME, ">$ETIME") or do { openFailed($!, $ETIME) };
+ open ($OID, ">$OID") or do { openFailed($!, $OID) };
+
+ # array files
+ open($SRCH_CONN,">$SRCH_CONN") or do { openFailed($!, $SRCH_CONN) };
+ open($SRCH_OP, ">$SRCH_OP") or do { openFailed($!, $SRCH_OP) };
+ open($DEL_CONN, ">$DEL_CONN") or do { openFailed($!, $DEL_CONN) };
+ open($DEL_OP, ">$DEL_OP") or do { openFailed($!, $DEL_OP) };
+ open($MOD_CONN, ">$MOD_CONN") or do { openFailed($!, $MOD_CONN) };
+ open($MOD_OP, ">$MOD_OP") or do { openFailed($!, $MOD_OP) };
+ open($ADD_CONN, ">$ADD_CONN") or do { openFailed($!, $ADD_CONN) };
+ open($ADD_OP, ">$ADD_OP") or do { openFailed($!, $ADD_OP) };
+ open($MODRDN_CONN, ">$MODRDN_CONN") or do { openFailed($!, $MODRDN_CONN) };
+ open($MODRDN_OP, ">$MODRDN_OP") or do { openFailed($!, $MODRDN_OP) };
+ open($CMP_CONN, ">$CMP_CONN") or do { openFailed($!, $CMP_CONN) };
+ open($CMP_OP,">$CMP_OP") or do { openFailed($!, $CMP_OP) };
+ open($TARGET_CONN, ">$TARGET_CONN") or do { openFailed($!, $TARGET_CONN) };
+ open($TARGET_OP, ">$TARGET_OP") or do { openFailed($!, $TARGET_OP) };
+ open($MSGID, ">$MSGID") or do { openFailed($!, $MSGID) };
+ open($BIND_CONN, ">$BIND_CONN") or do { openFailed($!, $BIND_CONN) };
+ open($BIND_OP, ">$BIND_OP") or do { openFailed($!, $BIND_OP) };
+ open($UNBIND_CONN, ">$UNBIND_CONN") or do { openFailed($!, $UNBIND_CONN) };
+ open($UNBIND_OP, ">$UNBIND_OP") or do { openFailed($!, $UNBIND_OP) };
+ open($EXT_CONN, ">$EXT_CONN") or do { openFailed($!, $EXT_CONN) };
+ open($EXT_OP, ">$EXT_OP") or do { openFailed($!, $EXT_OP) };
+ open($NOTES_ETIME, ">$NOTES_ETIME") or do { openFailed($!, $NOTES_ETIME) };
+ open($NOTES_CONN, ">$NOTES_CONN") or do { openFailed($!, $NOTES_CONN) };
+ open($NOTES_OP, ">$NOTES_OP") or do { openFailed($!, $NOTES_OP) };
+ open($NOTES_TIME, ">$NOTES_TIME") or do { openFailed($!, $NOTES_TIME) };
+ open($NOTES_NENTRIES, ">$NOTES_NENTRIES") or do { openFailed($!, $NOTES_NENTRIES) };
+ open($BADPWDCONN, ">$BADPWDCONN") or do { openFailed($!, $BADPWDCONN) };
+ open($BADPWDOP, ">$BADPWDOP") or do { openFailed($!, $BADPWDOP) };
+ open($BADPWDIP, ">$BADPWDIP") or do { openFailed($!, $NADPWDIP) };
+
+ # info files
+ open($BINDINFO, ">$BINDINFO") or do { openFailed($!, $BINDINFO) };
+ open($BASEINFO, ">$BASEINFO") or do { openFailed($!, $BASEINFO) };
+ open($SCOPEINFO, ">$SCOPEINFO") or do { openFailed($!, $SCOPEINFO) };
+ open($FILTERINFO, ">$FILTERINFO") or do { openFailed($!, $FILTERINFO) };
+}
+
+sub
+closeDataFiles
+{
+ close $ATTR;
+ close $RC;
+ close $SRC;
+ close $RSRC;
+ close $EXCOUNT;
+ close $CONN_HASH;
+ close $IP_HASH;
+ close $CONNCOUNT;
+ close $NENTRIES;
+ close $FILTER;
+ close $BASE;
+ close $DS6XBADPWD;
+ close $SASLMECH;
+ close $BINDLIST;
+ close $ETIME;
+ close $OID;
+
+ # array files
+ close $SRCH_CONN;
+ close $SRCH_OP;
+ close $DEL_CONN;
+ close $DEL_OP;
+ close $MOD_CONN;
+ close $MOD_OP;
+ close $ADD_CONN;
+ close $ADD_OP;
+ close $MODRDN_CONN;
+ close $MODRDN_OP;
+ close $CMP_CONN;
+ close $CMP_OP;
+ close $TARGET_CONN;
+ close $TARGET_OP;
+ close $MSGID;
+ close $BIND_CONN;
+ close $BIND_OP;
+ close $UNBIND_CONN;
+ close $UNBIND_OP;
+ close $EXT_CONN;
+ close $EXT_OP;
+ close $NOTES_ETIME;
+ close $NOTES_CONN;
+ close $NOTES_OP;
+ close $NOTES_TIME;
+ close $NOTES_NENTRIES;
+ close $BADPWDCONN;
+ close $BADPWDOP;
+ close $BADPWDIP;
+
+ # info files
+ close $BINDINFO;
+ close $BASEINFO;
+ close $SCOPEINFO;
+ close $FILTERINFO;
+}
+
+sub
+removeDataFiles
+{
+ unlink $ATTR;
+ unlink $RC;
+ unlink $SRC;
+ unlink $RSRC;
+ unlink $EXCOUNT;
+ unlink $CONN_HASH;
+ unlink $IP_HASH;
+ unlink $CONNCOUNT;
+ unlink $NENTRIES;
+ unlink $FILTER;
+ unlink $BASE;
+ unlink $DS6XBADPWD;
+ unlink $SASLMECH;
+ unlink $BINDLIST;
+ unlink $ETIME;
+ unlink $OID;
+
+ # array files
+ unlink $SRCH_CONN;
+ unlink $SRCH_OP;
+ unlink $DEL_CONN;
+ unlink $DEL_OP;
+ unlink $MOD_CONN;
+ unlink $MOD_OP;
+ unlink $ADD_CONN;
+ unlink $ADD_OP;
+ unlink $MODRDN_CONN;
+ unlink $MODRDN_OP;
+ unlink $CMP_CONN;
+ unlink $CMP_OP;
+ unlink $TARGET_CONN;
+ unlink $TARGET_OP;
+ unlink $MSGID;
+ unlink $BIND_CONN;
+ unlink $BIND_OP;
+ unlink $UNBIND_CONN;
+ unlink $UNBIND_OP;
+ unlink $EXT_CONN;
+ unlink $EXT_OP;
+ unlink $NOTES_ETIME;
+ unlink $NOTES_CONN;
+ unlink $NOTES_OP;
+ unlink $NOTES_TIME;
+ unlink $NOTES_NENTRIES;
+ unlink $BADPWDCONN;
+ unlink $BADPWDOP;
+ unlink $BADPWDIP;
+
+ # info files
+ unlink $BINDINFO;
+ unlink $BASEINFO;
+ unlink $SCOPEINFO;
+ unlink $FILTERINFO;
+}
+
+sub
+getIPfromConn
+{
+ $connip = @_[0];
+ $retval = "";
+
+ close $CONN_HASH; # we can not read the file is its already open
+ open(CONN,"$CONN_HASH") or do { openFailed($!, $CONN_HASH) };
+ while (<CONN>){
+ if($_ =~ /$connip (.*)/){
+ $retval = $1;
+ last;
+ }
+ }
+ close CONN;
+ #reopen file for writing(append)
+ open($CONN_HASH,">>$CONN_HASH") or do { openFailed($!, $CONN_HASH) };
+
+ return $retval;
+}
+
+sub
+writeFile
+{
+ $file = @_[0];
+ $text = @_[1] . "\n";
+
+ print $file $text;
+}
+
+# This hash file stores one value per line
+sub
+getCounterHashFromFile
+{
+ $file = @_[0];
+ my %hash = ();
+
+ open(FILE,"$file") or do { openFailed($!, $file) };
+ while(<FILE>){
+ chomp;
+ $hash{$_}++;
+ }
+ close FILE;
+
+ return %hash;
+}
+
+# this hash file stores two values per line (2 dimension hash)
+sub
+getTwoDimHashFromFile
+{
+ $file = @_[0];
+ my %hash = ();
+
+ open(FILE,"$file") or do { openFailed($!, $file) };
+ while(<FILE>){
+ @parts = split (' ', $_);
+ chomp(@parts);
+ $hash{$parts[0]}{$parts[1]}++;
+ }
+ close FILE;
+
+ return %hash;
+}
+
+# this hash file stores two values per line (1 dimension hash)
+sub
+getHashFromFile
+{
+ $file = @_[0];
+ my %hash = ();
+ @parts = ();
+
+ open(FILE,"$file") or do { openFailed($!, $file ) };
+ while(<FILE>){
+ @parts = split (' ',$_);
+ chomp(@parts);
+ $hash{$parts[0]} = $parts[1];
+ }
+ close FILE;
+
+ return %hash;
+}
+
+# Return array of values from the file
+sub
+getArrayFromFile
+{
+ my @arry;
+ $file = @_[0];
+ $array_count = 0;
+
+ open(FILE,"$file") or do { openFailed($!, $file) };
+ while(<FILE>){
+ chomp;
+ $arry[$array_count] = $_;
+ $array_count++;
+ }
+ close FILE;
+
+ return @arry;
+}
+
+# build the three array
+sub
+getInfoArraysFromFile
+{
+ $file = @_[0];
+ $array_count = 0;
+ @parts = ();
+
+ open(FILE,"<$file") or do { openFailed($!, $file) };
+ while(<FILE>){
+ @parts = split (' ,, ',$_);
+ chomp(@parts);
+ if($#parts > 0){
+ $fileArray1[$array_count] = $parts[0];
+ $fileArray2[$array_count] = $parts[1];
+ $fileArray3[$array_count] = $parts[2];
+ $array_count++;
+ }
+ }
+ close FILE;
+}
+
+
+
+#######################################
+# #
+# The End #
+# #
+#######################################
+
11 years, 2 months
ldap/admin
by Mark Reynolds
ldap/admin/src/logconv.pl | 2271 ----------------------------------------------
1 file changed, 2271 deletions(-)
New commits:
commit 472373506eeca676dbbf9b9f56c2248761068752
Author: Mark Reynolds <mreynolds(a)redhat.com>
Date: Tue Jan 15 12:41:23 2013 -0500
TIcket 419 - logconv.pl - improve memory management
Remove old logconv.pl script - to make room for the new rewrite of logconv.pl
https://fedorahosted.org/389/ticket/419
diff --git a/ldap/admin/src/logconv.pl b/ldap/admin/src/logconv.pl
deleted file mode 100755
index 0ec596a..0000000
--- a/ldap/admin/src/logconv.pl
+++ /dev/null
@@ -1,2271 +0,0 @@
-#!/usr/bin/env perl
-
-#
-# BEGIN COPYRIGHT BLOCK
-# This Program is free software; you can redistribute it and/or modify it under
-# the terms of the GNU General Public License as published by the Free Software
-# Foundation; version 2 of the License.
-#
-# 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-1307 USA.
-#
-# In addition, as a special exception, Red Hat, Inc. gives You the additional
-# right to link the code of this Program with code not covered under the GNU
-# General Public License ("Non-GPL Code") and to distribute linked combinations
-# including the two, subject to the limitations in this paragraph. Non-GPL Code
-# permitted under this exception must only link to the code of this Program
-# through those well defined interfaces identified in the file named EXCEPTION
-# found in the source code files (the "Approved Interfaces"). The files of
-# Non-GPL Code may instantiate templates or use macros or inline functions from
-# the Approved Interfaces without causing the resulting work to be covered by
-# the GNU General Public License. Only Red Hat, Inc. may make changes or
-# additions to the list of Approved Interfaces. You must obey the GNU General
-# Public License in all respects for all of the Program code and other code used
-# in conjunction with the Program except the Non-GPL Code covered by this
-# exception. If you modify this file, you may extend this exception to your
-# version of the file, but you are not obligated to do so. If you do not wish to
-# provide this exception without modification, you must delete this exception
-# statement from your version and license this file solely under the GPL without
-# exception.
-#
-#
-# Copyright (C) 2001 Sun Microsystems, Inc. Used by permission.
-# Copyright (C) 2005 Red Hat, Inc.
-# All rights reserved.
-# END COPYRIGHT BLOCK
-#
-
-#
-# Check for usage
-#
-use Time::Local;
-use IO::File;
-use Getopt::Long;
-
-Getopt::Long::Configure ("bundling");
-Getopt::Long::Configure ("permute");
-
-if ($#ARGV < 0){;
-&displayUsage;
-}
-
-#######################################
-# #
-# parse commandline switches #
-# #
-#######################################
-
-$x = "0";
-$fc = 0;
-$sn = 0;
-$logversion = "6.11";
-$sizeCount = "20";
-$startFlag = 0;
-$startTime = 0;
-$endFlag = 0;
-$endTime = 0;
-$s_stats = new_stats_block( );
-$m_stats = new_stats_block( );
-$report_opt = "";
-
-GetOptions(
- 'd|rootDN=s' => \$manager,
- 'v|version' => sub { print "Access Log Analyzer v$logversion\n"; exit (0); },
- 'V|verbose' => sub { $verb = "yes"; },
- 'X|excludeIP=s' => \$exclude[$xi++],
- 's|sizeLimit=s' => \$sizeCount,
- 'S|startTime=s' => \$startTime,
- 'E|endTime=s' => \$endTime,
- 'B|bind=s' => sub { $reportBinds = "yes"; $bindReportDN=($_[1]) },
- 'm|reportFileSecs=s' => sub { my ($opt,$value) = @_; $s_stats = new_stats_block($value); $report_opt = "-m"; },
- 'M|reportFileMins=s' => sub { my ($opt,$value) = @_; $m_stats = new_stats_block($value); $report_opt = "-M"; },
- 'h|help' => sub { displayUsage() },
- # usage options '-efcibaltnxgjuiryp'
- 'e' => sub { $usage = $usage . "e"; },
- 'f' => sub { $usage = $usage . "f"; },
- 'c' => sub { $usage = $usage . "c"; },
- 'i' => sub { $usage = $usage . "i"; },
- 'b' => sub { $usage = $usage . "b"; },
- 'a' => sub { $usage = $usage . "a"; },
- 'l' => sub { $usage = $usage . "l"; },
- 't' => sub { $usage = $usage . "t"; },
- 'n' => sub { $usage = $usage . "n"; },
- 'x' => sub { $usage = $usage . "x"; },
- 'g' => sub { $usage = $usage . "g"; },
- 'j' => sub { $usage = $usage . "j"; },
- 'u' => sub { $usage = $usage . "u"; },
- 'r' => sub { $usage = $usage . "r"; },
- 'y' => sub { $usage = $usage . "y"; },
- 'p' => sub { $usage = $usage . "p"; }
-);
-
-#
-# setup the report Bind DN if any
-#
-if($reportBinds eq "yes"){
- $bindReportDN =~ tr/A-Z/a-z/;
- if($bindReportDN eq "all"){
- $bindReportDN = "";
- }
- if($bindReportDN eq "anonymous"){
- $bindReportDN = "Anonymous";
- }
-}
-
-#
-# set the default root DN
-#
-if($manager eq ""){
- $manager = "cn=directory manager";
-}
-
-#
-# get the logs
-#
-while($sn <= $#ARGV){
- $files[$fc] = $ARGV[$sn];
- $fc++;
- $sn++;
-}
-
-if($fc == 0){
- if($report_opt ne ""){
- print "Usage error for option $report_opt, either the output file or access log is missing!\n\n";
- } else {
- print "There are no access logs specified!\n\n";
- }
- exit 1;
-}
-
-if ($sizeCount eq "all"){$sizeCount = "100000";}
-
-#######################################
-# #
-# Initialize Arrays and variables #
-# #
-#######################################
-
-print "\nAccess Log Analyzer $logversion\n";
-print "\nCommand : logconv.pl @ARGV\n\n";
-
-$dirmgr = "0";
-$notes = "0";
-$vlvnotes= "0";
-$search = "0";
-$fdtake = "0";
-$fdreturn = "0";
-$highfd = "0";
-$bind = "0";
-$unbind = "0";
-$anony = "0";
-$mod = "0";
-$delete = "0";
-$add = "0";
-$modrdn = "0";
-$moddn = "0";
-$compare = "0";
-$proxiedAuth = "0";
-$restarts = "0";
-$resource = "0";
-$broken = "0";
-$vlv = "0";
-$version2 = "0";
-$version3 = "0";
-$sortvlv = "0";
-$reset = "0";
-$vet = "0";
-$v = "0";
-$errorck = "0";
-$errorsucc = "0";
-$sslconn = "0";
-$sslClientBind = "0";
-$sslClientFailed = "0";
-$objectclass= "0";
-$nc = "0";
-$no = "0";
-$nt = "0";
-$nb = "0";
-$bc = "0";
-$fcc = "0";
-$bcc = "0";
-$scc = "0";
-$nent = "0";
-$allOps = "0";
-$allResults = "0";
-$bpc = "0";
-$bpo = "0";
-$bpi = 0;
-$abandon = "0";
-$mmasterop = "0";
-$extendedop = "0";
-$sasl = "0";
-$internal = "0";
-$entryOp = "0";
-$referral = "0";
-$anyAttrs = "0";
-$persistent = "0";
-$sconn = "0";
-$dconn = "0";
-$aconn = "0";
-$mconn = "0";
-$mdconn = "0";
-$mddconn = "0";
-$bconn = "0";
-$ubconn = "0";
-$econn = "0";
-$cconn = "0";
-$connectionCount = "0";
-$timerange = 0;
-$simConnection = 0;
-$maxsimConnection = 0;
-$firstFile = "1";
-$elapsedDays = "0";
-$logCount = "0";
-$limit = "25000"; # number of lines processed to trigger output
-
-$err[0] = "Successful Operations\n";
-$err[1] = "Operations Error(s)\n";
-$err[2] = "Protocal Errors\n";
-$err[3] = "Time Limit Exceeded\n";
-$err[4] = "Size Limit Exceeded\n";
-$err[5] = "Compare False\n";
-$err[6] = "Compare True\n";
-$err[7] = "Strong Authentication Not Supported\n";
-$err[8] = "Strong Authentication Required\n";
-$err[9] = "Partial Results\n";
-$err[10] = "Referral Received\n";
-$err[11] = "Administrative Limit Exceeded (Look Through Limit)\n";
-$err[12] = "Unavailable Critical Extension\n";
-$err[13] = "Confidentiality Required\n";
-$err[14] = "SASL Bind in Progress\n";
-$err[16] = "No Such Attribute\n";
-$err[17] = "Undefined Type\n";
-$err[18] = "Inappropriate Matching\n";
-$err[19] = "Constraint Violation\n";
-$err[20] = "Type or Value Exists\n";
-$err[21] = "Invalid Syntax\n";
-$err[32] = "No Such Object\n";
-$err[33] = "Alias Problem\n";
-$err[34] = "Invalid DN Syntax\n";
-$err[35] = "Is Leaf\n";
-$err[36] = "Alias Deref Problem\n";
-$err[48] = "Inappropriate Authentication (No password presented, etc)\n";
-$err[49] = "Invalid Credentials (Bad Password)\n";
-$err[50] = "Insufficent (write) Privledges\n";
-$err[51] = "Busy\n";
-$err[52] = "Unavailable\n";
-$err[53] = "Unwilling To Perform\n";
-$err[54] = "Loop Detected\n";
-$err[60] = "Sort Control Missing\n";
-$err[61] = "Index Range Error\n";
-$err[64] = "Naming Violation\n";
-$err[65] = "Objectclass Violation\n";
-$err[66] = "Not Allowed on Non Leaf\n";
-$err[67] = "Not Allowed on RDN\n";
-$err[68] = "Already Exists\n";
-$err[69] = "No Objectclass Mods\n";
-$err[70] = "Results Too Large\n";
-$err[71] = "Effect Multiple DSA's\n";
-$err[80] = "Other\n";
-$err[81] = "Server Down\n";
-$err[82] = "Local Error\n";
-$err[83] = "Encoding Error\n";
-$err[84] = "Decoding Error\n";
-$err[85] = "Timeout\n";
-$err[86] = "Authentication Unknown\n";
-$err[87] = "Filter Error\n";
-$err[88] = "User Canceled\n";
-$err[89] = "Parameter Error\n";
-$err[90] = "No Memory\n";
-$err[91] = "Connect Error\n";
-$err[92] = "Not Supported\n";
-$err[93] = "Control Not Found\n";
-$err[94] = "No Results Returned\n";
-$err[95] = "More Results To Return\n";
-$err[96] = "Client Loop\n";
-$err[97] = "Referral Limit Exceeded\n";
-
-
-$conn{"A1"} = "A1";
-$conn{"B1"} = "B1";
-$conn{"B4"} = "B4";
-$conn{"T1"} = "T1";
-$conn{"T2"} = "T2";
-$conn{"B2"} = "B2";
-$conn{"B3"} = "B3";
-$conn{"R1"} = "R1";
-$conn{"P1"} = "P1";
-$conn{"P2"} = "P2";
-$conn{"U1"} = "U1";
-
-$connmsg{"A1"} = "Client Aborted Connections";
-$connmsg{"B1"} = "Bad Ber Tag Encountered";
-$connmsg{"B4"} = "Server failed to flush data (response) back to Client";
-$connmsg{"T1"} = "Idle Timeout Exceeded";
-$connmsg{"T2"} = "IO Block Timeout Exceeded or NTSSL Timeout";
-$connmsg{"B2"} = "Ber Too Big";
-$connmsg{"B3"} = "Ber Peek";
-$connmsg{"R1"} = "Revents";
-$connmsg{"P1"} = "Plugin";
-$connmsg{"P2"} = "Poll";
-$connmsg{"U1"} = "Cleanly Closed Connections";
-
-%monthname = (
- "Jan" => 0,
- "Feb" => 1,
- "Mar" => 2,
- "Apr" => 3,
- "May" => 4,
- "Jun" => 5,
- "Jul" => 6,
- "Aug" => 7,
- "Sep" => 8,
- "Oct" => 9,
- "Nov" => 10,
- "Dec" => 11,
-
-);
-
-##########################################
-# #
-# Parse Access Logs #
-# #
-##########################################
-
-if ($files[$#files] =~ m/access.rotationinfo/) { $fc--; }
-
-print "Processing $fc Access Log(s)...\n\n";
-
-print "Filename\t\t\t Total Lines\n";
-print "--------------------------------------------------\n";
-
-$ofc = $fc;
-
-if ($fc > 1 && $files[0] =~ /\/access$/){
- $files[$fc] = $files[0];
- $fc++;
- $skipFirstFile = "1";
-}
-
-for ($count=0; $count < $fc; $count++){
- # we moved access to the end of the list, so if its the first file skip it
- if($fc > 1 && $count == 0 && $skipFirstFile eq "1"){
- next;
- }
- $logCount++;
- $logsize = `wc -l $files[$count]`;
- $logsize =~ /([0-9]+)/;
- $ff="";$iff="";
- if($logCount < 10 ){
- # add a zero for formatting purposes
- $lc = "0" . $logCount;
- } else {
- $lc = $logCount;
- }
- print sprintf "[%s] %-30s %7s\n",$lc, $files[$count], $1;
-
- open(LOG,"$files[$count]") || die "Error: Can't open file $infile: $!";
-
- $firstline = "yes";
- while (<LOG>) {
- unless ($endFlag) {
- if ($firstline eq "yes"){
- if (/^\[/) {
- $tline = $_;
- $firstline = "no";
- }
- $ff++;$iff++;
- } elsif (/^\[/ && $firstline eq "no"){
- &parseLine($tline);
- $tline = $_;
- } else {
- $tline = $tline . $_;
- $tline =~ s/\n//;
- }
- }
- }
- &parseLine($tline);
- close (LOG);
- print_stats_block( $s_stats );
- print_stats_block( $m_stats );
- $tlc = $tlc + $ff;
- if($ff => $limit){print sprintf " %10s Lines Processed\n\n",--$ff;}
-}
-
-print "\n\nTotal Log Lines Analysed: " . ($tlc - 1) . "\n";
-
-$allOps = $search + $mod + $add + $delete + $modrdn + $bind + $extendedop;
-
-##################################################################
-# #
-# Calculate the total elapsed time of the processed access logs #
-# #
-##################################################################
-
-# if we are using startTime & endTime then we need to clean it up for our processing
-
-if($startTime){
- if ($start =~ / *([0-9a-z:\/]+)/i){$start=$1;}
-}
-if($endTime){
- if ($end =~ / *([0-9a-z:\/]+)/i){$end =$1;}
-}
-
-#
-# Get the start time in seconds
-#
-
-$logStart = $start;
-
-if ($logStart =~ / *([0-9A-Z\/]+)/i ){
- $logDate = $1;
- @dateComps = split /\//, $logDate;
-
- $timeMonth = 1 +$monthname{$dateComps[1]};
- $timeMonth = $timeMonth * 3600 *24 * 30;
- $timeDay= $dateComps[0] * 3600 *24;
- $timeYear = $dateComps[2] *365 * 3600 * 24;
- $dateTotal = $timeMonth + $timeDay + $timeYear;
-}
-
-if ($logStart =~ / *(:[0-9:]+)/i ){
- $logTime = $1;
- @timeComps = split /:/, $logTime;
-
- $timeHour = $timeComps[1] * 3600;
- $timeMinute = $timeComps[2] *60;
- $timeSecond = $timeComps[3];
- $timeTotal = $timeHour + $timeMinute + $timeSecond;
-}
-
-$startTotal = $timeTotal + $dateTotal;
-
-#
-# Get the end time in seconds
-#
-
-$logEnd = $end;
-
-if ($logEnd =~ / *([0-9A-Z\/]+)/i ){
- $logDate = $1;
- @dateComps = split /\//, $logDate;
-
- $endDay = $dateComps[0] *3600 * 24;
- $endMonth = 1 + $monthname{$dateComps[1]};
- $endMonth = $endMonth * 3600 * 24 * 30;
- $endYear = $endTotal + $dateComps[2] *365 * 3600 * 24 ;
- $dateTotal = $endDay + $endMonth + $endYear;
-}
-
-if ($logEnd =~ / *(:[0-9:]+)/i ){
- $logTime = $1;
- @timeComps = split /:/, $logTime;
-
- $endHour = $timeComps[1] * 3600;
- $endMinute = $timeComps[2] *60;
- $endSecond = $timeComps[3];
- $timeTotal = $endHour + $endMinute + $endSecond;
-}
-
-$endTotal = $timeTotal + $dateTotal;
-
-#
-# Tally the numbers
-#
-$totalTimeInSecs = $endTotal - $startTotal;
-$remainingTimeInSecs = $totalTimeInSecs;
-
-#
-# Calculate the elapsed time
-#
-
-# days
-while(($remainingTimeInSecs - 86400) > 0){
- $elapsedDays++;
- $remainingTimeInSecs = $remainingTimeInSecs - 86400;
-
-}
-
-# hours
-while(($remainingTimeInSecs - 3600) > 0){
- $elapsedHours++;
- $remainingTimeInSecs = $remainingTimeInSecs - 3600;
-}
-
-# minutes
-while($remainingTimeInSecs - 60 > 0){
- $elapsedMinutes++;
- $remainingTimeInSecs = $remainingTimeInSecs - 60;
-}
-
-#seconds
-$elapsedSeconds = $remainingTimeInSecs;
-
-#####################################
-# #
-# Display Basic Results #
-# #
-#####################################
-
-
-print "\n\n----------- Access Log Output ------------\n";
-print "\nStart of Logs: $start\n";
-print "End of Logs: $end\n\n";
-if($elapsedDays eq "0"){
- print "Processed Log Time: $elapsedHours Hours, $elapsedMinutes Minutes, $elapsedSeconds Seconds\n\n";
-} else {
- print "Processed Log Time: $elapsedDays Days, $elapsedHours Hours, $elapsedMinutes Minutes, $elapsedSeconds Seconds\n\n";
-}
-
-#
-# Check here if we are producing any unqiue reports
-#
-
-if($reportBinds eq "yes"){
- &displayBindReport();
-}
-
-#
-# Continue with standard report
-#
-
-print "Restarts: $restarts\n";
-print "Total Connections: $connectionCount\n";
-print "SSL Connections: $sslconn\n";
-print "Peak Concurrent Connections: $maxsimConnection\n";
-print "Total Operations: $allOps\n";
-print "Total Results: $allResults\n";
-if ($allOps ne "0"){
- print sprintf "Overall Performance: %.1f%\n\n" , ($perf = ($tmp = ($allResults / $allOps)*100) > 100 ? 100.0 : $tmp) ;
- }
-else {
- print "Overall Performance: No Operations to evaluate\n\n";
-}
-
-$searchStat = sprintf "(%.2f/sec) (%.2f/min)\n",($search / $totalTimeInSecs), $search / ($totalTimeInSecs/60);
-$modStat = sprintf "(%.2f/sec) (%.2f/min)\n",$mod / $totalTimeInSecs, $mod/($totalTimeInSecs/60);
-$addStat = sprintf "(%.2f/sec) (%.2f/min)\n",$add/$totalTimeInSecs, $add/($totalTimeInSecs/60);
-$deleteStat = sprintf "(%.2f/sec) (%.2f/min)\n",$delete/$totalTimeInSecs, $delete/($totalTimeInSecs/60);
-$modrdnStat = sprintf "(%.2f/sec) (%.2f/min)\n",$modrdn/$totalTimeInSecs, $modrdn/($totalTimeInSecs/60);
-$compareStat = sprintf "(%.2f/sec) (%.2f/min)\n",$compare/$totalTimeInSecs, $compare/($totalTimeInSecs/60);
-$bindStat = sprintf "(%.2f/sec) (%.2f/min)\n",$bind/$totalTimeInSecs, $bind/($totalTimeInSecs/60);
-
-format STDOUT =
-Searches: @<<<<<<<<< @<<<<<<<<<<<<<<<<<<<<<<<<
- $search, $searchStat
-Modifications: @<<<<<<<<< @<<<<<<<<<<<<<<<<<<<<<<<<
- $mod, $modStat
-Adds: @<<<<<<<<< @<<<<<<<<<<<<<<<<<<<<<<<<
- $add, $addStat
-Deletes: @<<<<<<<<< @<<<<<<<<<<<<<<<<<<<<<<<<
- $delete, $deleteStat
-Mod RDNs: @<<<<<<<<< @<<<<<<<<<<<<<<<<<<<<<<<<
- $modrdn, $modrdnStat
-Compares: @<<<<<<<<< @<<<<<<<<<<<<<<<<<<<<<<<<
- $compare, $compareStat
-Binds: @<<<<<<<<< @<<<<<<<<<<<<<<<<<<<<<<<<
- $bind $bindStat
-.
-write STDOUT;
-
-print "\n";
-print "Proxied Auth Operations: $proxiedAuth\n";
-print "Persistent Searches: $persistent\n";
-print "Internal Operations: $internal\n";
-print "Entry Operations: $entryOp\n";
-print "Extended Operations: $extendedop\n";
-print "Abandoned Requests: $abandon\n";
-print "Smart Referrals Received: $referral\n";
-print "\n";
-print "VLV Operations: $vlv\n";
-print "VLV Unindexed Searches: $vlvnotes\n";
-print "SORT Operations: $sortvlv\n";
-print "\n";
-print "Entire Search Base Queries: $objectclass\n";
-print "Unindexed Searches: $notes\n";
-if ($verb eq "yes" || $usage =~ /u/){
-if ($notes > 0){
- $ns = "1";
- for ($n = 0; $n <= $#notesEtime; $n++){
- @alreadyseenDN = ();
- print "\n Unindexed Search #".$ns."\n";
- $ns++;
- print " - Date/Time: $notesTime[$n]\n";
- print " - Connection Number: $notesConn[$n]\n";
- print " - Operation Number: $notesOp[$n]\n";
- print " - Etime: $notesEtime[$n]\n";
- print " - Nentries: $notesNentries[$n]\n";
- print " - IP Address: $conn_hash{$notesConn[$n]}\n";
- for ($nn = 0; $nn <= $bc; $nn++){
- if ($notesConn[$n] eq $bindInfo[$nn][1]) {
-
- ## Here, we check if the bindDN is already printed.
- ## If not, we print it and push it to @alreadyseenDN.
- ## So, in the beginning, we iterate thru @alreadyseenDN
-
- for ($j=0, $DNisThere=0; $j <=$#alreadyseenDN; $j++) {
- if ($alreadyseenDN[$j] eq $bindInfo[$nn][0]) {
- $DNisThere = 1;
- }
- }
- unless ($DNisThere) {
- print " - Bind DN: $bindInfo[$nn][0]\n";
- push @alreadyseenDN, $bindInfo[$nn][0];
- }
- }
- }
- for ($nnn = 0; $nnn <= $bcc; $nnn++){
- if ($notesConn[$n] eq $baseInfo[$nnn][1] && $notesOp[$n] eq $baseInfo[$nnn][2]){
- print " - Search Base: $baseInfo[$nnn][0]\n";
- }
- }
- for ($nnn = 0; $nnn <= $scc; $nnn++){
- if ($notesConn[$n] eq $scopeInfo[$nnn][1] && $notesOp[$n] eq $scopeInfo[$nnn][2]){
- print " - Search Scope: $scopeInfo[$nnn][0]\n";
- }
- }
- for ($nnn = 0; $nnn <= $fcc; $nnn++){
- if ($notesConn[$n] eq $filterInfo[$nnn][1] && $notesOp[$n] eq $filterInfo[$nnn][2]){
- print " - Search Filter: $filterInfo[$nnn][0]\n";
- }
- }
- }
-}
-
-}
-
-print "\n";
-print "FDs Taken: $fdtake\n";
-print "FDs Returned: $fdreturn\n";
-print "Highest FD Taken: $highfd\n\n";
-print "Broken Pipes: $broken\n";
-if ($broken > 0){
- foreach $key (sort { $rc{$b} <=> $rc{$a} } keys %rc) {
- if ($rc{$key} > 0){
- if ($conn{$key} eq ""){$conn{$key} = "** Unknown **";}
- push @etext, sprintf " - %-4s (%2s) %-40s\n",$rc{$key},$conn{$key},$connmsg{$key
-};
- }
- }
- print @etext;
- print "\n";
-}
-
-print "Connections Reset By Peer: $reset\n";
-if ($reset > 0){
- foreach $key (sort { $src{$b} <=> $src{$a} } keys %src) {
- if ($src{$key} > 0){
- if ($conn{$key} eq ""){$conn{$key} = "** Unknown **";}
- push @retext, sprintf " - %-4s (%2s) %-40s\n",$src{$key},$conn{$key},$connmsg{$key
-};
- }
- }
- print @retext;
- print "\n";
-}
-
-print "Resource Unavailable: $resource\n";
-if ($resource > 0){
- foreach $key (sort { $rsrc{$b} <=> $rsrc{$a} } keys %rsrc) {
- if ($rsrc{$key} > 0){
- if ($conn{$key} eq ""){$conn{$key} = "** Resource Issue **";}
- push @rtext, sprintf " - %-4s (%2s) %-40s\n",$rsrc{$key},$conn{$key},$connmsg{$key};
- }
- }
- print @rtext;
-}
-print "\n";
-print "Binds: $bind\n";
-print "Unbinds: $unbind\n";
-print "\n LDAP v2 Binds: $version2\n";
-print " LDAP v3 Binds: $version3\n";
-print " SSL Client Binds: $sslClientBind\n";
-print " Failed SSL Client Binds: $sslClientFailed\n";
-print " SASL Binds: $sasl\n";
-if ($sasl > 0){
- foreach $saslb ( sort {$saslmech{$b} <=> $saslmech{$a} } (keys %saslmech) ){
- printf " %-4s %-12s\n",$saslmech{$saslb}, $saslb;
- }
-}
-
-print "\n Directory Manager Binds: $dirmgr\n";
-print " Anonymous Binds: $anony\n";
-$other = $bind -($dirmgr + $anony);
-print " Other Binds: $other";
-
-if ($verb eq "yes" || $usage =~ /y/){
-print "\n\n----- Connection Latency Details -----\n\n";
-print " (in seconds)\t\t<=1\t2\t3\t4-5\t6-10\t11-15\t>15\n";
-print " --------------------------------------------------------------------------\n";
-print " (# of connections)\t";
-for ($i=0; $i <=$#latency; $i++) {
- print "$latency[$i]\t";
-}
-}
-
-if ($verb eq "yes" || $usage =~ /p/){
-print "\n\n----- Current Open Connection IDs ----- \n\n";
-for ($i=0; $i <= $#openConnection ; $i++) {
- if ($openConnection[$i]) {
- print "\t$i\n";
- }
-}
-}
-
-###################################
-# #
-# Display Error Codes #
-# #
-###################################
-
-if ($usage =~ /e/i || $verb eq "yes"){
-print "\n\n----- Errors -----\n";
-
-%er = sort( {$b <=> $a} %er);
-for ($i = 0; $i<98; $i++){
- if ($err[$i] ne "" && $er[$i] >0) {
- push @errtext, sprintf "%-8s %12s %-25s","err=$i",$er[$i],$err[$i];
- }
-}
-
-for ($i = 0; $i < $#errtext; $i++){
-
- for ($ii = 0; $ii < $#errtext; $ii++){
- $yy="0";
- $zz="0";
- while ($errtext[$ii] =~ /(\w+)\s/g){
- $errornum[$yy]="$1";
- $yy++;
- }
- while ($errtext[$ii+1] =~ /(\w+)\s/g){
- $errornum2[$zz]="$1";
- $zz++;
- }
-
- if ($errornum2[1] > $errornum[1]){
- $tmp = $errtext[$ii];
- $errtext[$ii] = $errtext[$ii+1];
- $errtext[$ii+1] = $tmp;
- }
- }
-}
-
-for ($i = 0; $i <= $#errtext; $i++){
- $errtext[$i] =~ s/\n//g;
- print "\n" . $errtext[$i];
-}
-
-}
-
-####################################
-# #
-# Print Failed Logins #
-# #
-####################################
-
-if ($verb eq "yes" || $usage =~ /f/i ){
-if ($bpc > 0){
-print "\n\n----- Top $sizeCount Failed Logins ------\n\n";
-
-if ($ds6x eq "true"){
- $eloop = "0";
- foreach $dsbp (sort { $ds6xbadpwd{$b} <=> $ds6xbadpwd{$a} } keys %ds6xbadpwd) {
- if ($eloop > $sizeCount){ last; }
- printf "%-4s %-40s\n", $ds6xbadpwd{$dsbp}, $dsbp;
- }
-
-} else {
-for ($ii =0 ; $ii < $bpc; $ii++){
- for ($i = 0; $i < $bc; $i++){
- if ($badPasswordConn[$ii] eq $bindInfo[$i][1] && $badPasswordOp[$ii] eq $bindInfo[$i][2] ){
- $badPassword{ "$bindInfo[$i][0]" } = $badPassword{ "$bindInfo[$i][0]" } + 1;
- }
- }
-}
-
-# sort the new list of $badPassword{}
-
-$bpTotal = "0";
-$bpCount = "0";
-foreach $badpw (sort {$badPassword{$b} <=> $badPassword{$a} } keys %badPassword){
- if ($bpCount > $sizeCount){ last;}
- $bpCount++;
- $bpTotal = $bpTotal + $badPassword{"$badpw"};
- printf "%-4s %-40s\n", $badPassword{"$badpw"}, $badpw;
-}
-
-print "\nFrom the IP address(s) :\n\n";
-for ($i=0; $i<$bpi; $i++) {
- print "\t\t$badPasswordIp[$i]\n";
-}
-
-if ($bpTotal > $bpc){
- print "\n** Warning : Wrongly reported failed login attempts : ". ($bpTotal - $bpc) . "\n";
-}
-} # this ends the if $ds6x = true
-
-}
-
-}
-
-
-####################################
-# #
-# Print Connection Codes #
-# #
-####################################
-
-
-if ($concount > 0){
-if ($usage =~ /c/i || $verb eq "yes"){
- print "\n\n----- Total Connection Codes -----\n\n";
-
- foreach $key (sort { $conncount{$b} <=> $conncount{$a} } keys %conncount) {
- if ($conncount{$key} > 0){
- push @conntext, sprintf "%-4s %6s %-40s\n",$conn{ $key },$conncount{$key},$connmsg{ $key };
- }
- }
-print @conntext;
-}
-
-}
-
-########################################
-# #
-# Gather and Process all unique IPs #
-# #
-########################################
-
-if ($usage =~ /i/i || $verb eq "yes"){
-@ipkeys = keys %ip_hash;
-@exxCount = keys %exCount;
-$ip_count = ($#ipkeys + 1)-($#exxCount + 1);
-if ($ip_count > 0){
- print "\n\n----- Top $sizeCount Clients -----\n\n";
- print "Number of Clients: $ip_count\n\n";
-
- foreach $key (sort { $ip_hash{$b}{"count"} <=> $ip_hash{$a}{"count"} } keys %ip_hash) {
- $exc = "no";
- if ($ccount > $sizeCount){ last;}
- $ccount++;
- for ($xxx =0; $xxx <= $#exclude; $xxx++){
- if ($exclude[$xxx] eq $key){$exc = "yes";}
- }
- if ($exc ne "yes"){
- if ($ip_hash{ $key }{"count"} eq ""){$ip_hash{ $key }{"count"} = "*";}
- printf "%-6s %-17s\n", $ip_hash{ $key }{"count"}, $key;
- }
-
- if ($exc ne "yes"){
- foreach $code (sort { $ip_hash{ $key }{$b} <=> $ip_hash{ $key }{$a} } keys %{$ip_hash{ $key }}) {
- if ($code eq 'count' ) { next; }
- printf "\t\t %6s - %3s %s\n", $ip_hash{ $key }{ $code }, $code, $connmsg{ $code };
- }
- }
-
- if ($exc ne "yes"){ print "\n";}
- }
-}
-}
-
-
-
-###################################
-# #
-# Gather All unique Bind DN's #
-# #
-###################################
-
-if ($usage =~ /b/i || $verb eq "yes"){
-@bindkeys = keys %bindlist;
-$bind_count = $#bindkeys + 1;
-if ($bind_count > 0){
- print "\n----- Top $sizeCount Bind DN's -----\n\n";
- print "Number of Unique Bind DN's: $bind_count\n\n";
-
- $bindcount = 0;
-
- foreach $dn (sort { $bindlist{$b} <=> $bindlist{$a} } keys %bindlist) {
- if ($bindcount < $sizeCount){
- printf "%-8s %-40s\n", $bindlist{ $dn },$dn;
- }
- $bindcount++;
- }
-}
-
-}
-
-
-#########################################
-# #
-# Gather and process search bases #
-# #
-#########################################
-
-if ($usage =~ /a/i || $verb eq "yes"){
-@basekeys = keys %base;
-$base_count = $#basekeys + 1;
-if ($base_count > 0){
- print "\n\n----- Top $sizeCount Search Bases -----\n\n";
- print "Number of Unique Search Bases: $base_count\n\n";
-
- $basecount = 0;
-
- foreach $bas (sort { $base{$b} <=> $base{$a} } keys %base) {
- if ($basecount < $sizeCount){
- printf "%-8s %-40s\n", $base{ $bas },$bas;
- }
- $basecount++;
- }
-}
-
-}
-
-#########################################
-# #
-# Gather and process search filters #
-# #
-#########################################
-
-if ($usage =~ /l/ || $verb eq "yes"){
-
-@filterkeys = keys %filter;
-$filter_count = $#filterkeys + 1;
-if ($filter_count > 0){
- print "\n\n----- Top $sizeCount Search Filters -----\n";
- print "\nNumber of Unique Search Filters: $filter_count\n\n";
-
- $filtercount = 0;
-
- foreach $filt (sort { $filter{$b} <=> $filter{$a} } keys %filter){
- if ($filtercount < $sizeCount){
- printf "%-8s %-40s\n", $filter{$filt}, $filt;
- }
- $filtercount++;
- }
-}
-
-}
-
-#########################################
-# #
-# Gather and Process the unique etimes #
-# #
-#########################################
-
-if ($usage =~ /t/i || $verb eq "yes"){
- #
- # print most often etimes
- #
- print "\n\n----- Top $sizeCount Most Frequent etimes -----\n\n";
- $eloop = 0;
- foreach $et (sort { $etime{$b} <=> $etime{$a} } keys %etime) {
- if ($eloop == $sizeCount) { last; }
- if ($retime ne "2"){
- $first = $et;
- $retime = "2";
- }
- printf "%-8s %-12s\n", $etime{ $et }, "etime=$et";
- $eloop++;
- }
- #
- # print longest etimes
- #
- print "\n\n----- Top $sizeCount Longest etimes -----\n\n";
- $eloop = 0;
- foreach $et (sort { $b <=> $a } (keys %etime)) {
- if ($eloop == $sizeCount) { last; }
- printf "%-12s %-10s\n","etime=$et",$etime{ $et };
- $eloop++;
- }
-}
-
-#######################################
-# #
-# Gather and Process unique nentries #
-# #
-#######################################
-
-
-if ($usage =~ /n/i || $verb eq "yes"){
-print "\n\n----- Top $sizeCount Largest nentries -----\n\n";
-$eloop = 0;
-foreach $nentry (sort { $b <=> $a } (keys %nentries)){
- if ($eloop == $sizeCount) { last; }
- printf "%-18s %12s\n","nentries=$nentry", $nentries{ $nentry };
- $eloop++;
-}
-
-print "\n\n----- Top $sizeCount Most returned nentries -----\n\n";
-$eloop = 0;
-foreach $nentry (sort { $nentries{$b} <=> $nentries{$a} } (keys %nentries)){
- if ($eloop == $sizeCount) { last; }
- printf "%-12s %-14s\n", $nentries{ $nentry }, "nentries=$nentry";
- $eloop++;
-}
-
-print "\n";
-}
-
-
-##########################################
-# #
-# Gather and process extended operations #
-# #
-##########################################
-
-if ($usage =~ /x/i || $verb eq "yes"){
-
-if ($extendedop > 0){
-print "\n\n----- Extended Operations -----\n\n";
-foreach $oids (sort { $oid{$b} <=> $oid{$a} } (keys %oid) ){
-
- if ($oids eq "2.16.840.1.113730.3.5.1"){ $oidmessage = "Transaction Request"}
- elsif ($oids eq "2.16.840.1.113730.3.5.2"){ $oidmessage = "Transaction Response"}
- elsif ($oids eq "2.16.840.1.113730.3.5.3"){ $oidmessage = "Start Replication Request (incremental update)"}
- elsif ($oids eq "2.16.840.1.113730.3.5.4"){ $oidmessage = "Replication Response"}
- elsif ($oids eq "2.16.840.1.113730.3.5.5"){ $oidmessage = "End Replication Request (incremental update)"}
- elsif ($oids eq "2.16.840.1.113730.3.5.6"){ $oidmessage = "Replication Entry Request"}
- elsif ($oids eq "2.16.840.1.113730.3.5.7"){ $oidmessage = "Start Bulk Import"}
- elsif ($oids eq "2.16.840.1.113730.3.5.8"){ $oidmessage = "Finished Bulk Import"}
- elsif ($oids eq "2.16.840.1.113730.3.6.1"){ $oidmessage = "Incremental Update Replication Protocol"}
- elsif ($oids eq "2.16.840.1.113730.3.6.2"){ $oidmessage = "Total Update Replication Protocol (Initialization)"}
- elsif ($oids eq "2.16.840.1.113730.3.5.9"){ $oidmessage = "Digest Authentication"}
- else {$oidmessage = "Other"}
-
- printf "%-6s %-23s %-60s\n", $oid{ $oids }, $oids, $oidmessage;
-}
-}
-
-}
-
-############################################
-#
-# Print most commonly requested attributes
-#
-############################################
-
-if ($usage =~ /r/i || $verb eq "yes"){
-if ($anyAttrs > 0){
-print "\n\n----- Top $sizeCount Most Requested Attributes -----\n\n";
-$eloop = "0";
-foreach $mostAttr (sort { $attr{$b} <=> $attr{$a} } (keys %attr) ){
- if ($eloop eq $sizeCount){ last; }
- printf "%-10s %-19s\n", $attr{$mostAttr}, $mostAttr;
- $eloop++;
-}
-}
-
-}
-
-#################################
-#
-# abandoned operation stats
-#
-#################################
-
-if ($usage =~ /g/i || $verb eq "yes"){
-$acTotal = $sconn + $dconn + $mconn + $aconn + $mdconn + $bconn + $ubconn + $econn + $mddconn + $cconn;
-if ($verb eq "yes" && $ac > 0 && $acTotal > 0){
-
-print "\n\n----- Abandon Request Stats -----\n\n";
-
- for ($g = 0; $g < $ac; $g++){
- for ($sc = 0; $sc < $sconn; $sc++){
- if ($srchConn[$sc] eq $targetConn[$g] && $srchOp[$sc] eq $targetOp[$g] ){
- print " - SRCH conn=$targetConn[$g] op=$targetOp[$g] msgid=$msgid[$g] client=$conn_hash{$targetConn[$g]}\n";
- }
- }
- for ($dc = 0; $dc < $dconn; $dc++){
- if ($delConn[$dc] eq $targetConn[$g] && $delOp[$dc] eq $targetOp[$g]){
- print " - DEL conn=$targetConn[$g] op=$targetOp[$g] msgid=$msgid[$g] client=$conn_hash{$targetConn[$g]}\n";
- }
- }
- for ($adc = 0; $adc < $aconn; $adc++){
- if ($addConn[$adc] eq $targetConn[$g] && $addOp[$adc] eq $targetOp[$g]){
- print " - ADD conn=$targetConn[$g] op=$targetOp[$g] msgid=$msgid[$g] client=$conn_hash{$targetConn[$g]}\n";
- }
- }
- for ($mc = 0; $mc < $mconn; $mc++){
- if ($modConn[$mc] eq $targetConn[$g] && $modOp[$mc] eq $targetOp[$g]){
- print " - MOD conn=$targetConn[$g] op=$targetOp[$g] msgid=$msgid[$g] client=$conn_hash{$targetConn[$g]}\n";
- }
- }
- for ($mddc = 0; $mddc < $mddconn; $mddc++){
- if ($moddnConn[$mdc] eq $targetConn[$g] && $moddnOp[$mdc] eq $targetOp[$g]){
- print " - MODDN conn=$targetConn[$g] op=$targetOp[$g] msgid=$msgid[$g] client=$conn_hash{$targetConn[$g]}\n";
- }
- }
- for ($cc = 0; $cc < $cconn; $cc++){
- if ($compConn[$mdc] eq $targetConn[$g] && $compOp[$mdc] eq $targetOp[$g]){
- print " - CMP conn=$targetConn[$g] op=$targetOp[$g] msgid=$msgid[$g] client=$conn_hash{$targetConn[$g]}\n";
- }
- }
- for ($mdc = 0; $mdc < $mdconn; $mdc++){
- if ($modrdnConn[$mdc] eq $targetConn[$g] && $modrdnOp[$mdc] eq $targetOp[$g]){
- print " - MODRDN conn=$targetConn[$g] op=$targetOp[$g] msgid=$msgid[$g] client=$conn_hash{$targetConn[$g]}\n";
- }
- }
- for ($bcb = 0; $bcb < $bconn; $bcb++){
- if ($bindConn[$bcb] eq $targetConn[$g] && $bindOp[$bcb] eq $targetOp[$g]){
- print " - BIND conn=$targetConn[$g] op=$targetOp[$g] msgid=$msgid[$g] client=$conn_hash{$targetConn[$g]}\n";
- }
- }
- for ($ubc = 0; $ubc < $ubconn; $ubc++){
- if ($unbindConn[$ubc] eq $targetConn[$g] && $unbindOp[$ubc] eq $targetOp[$g]){
- print " - UNBIND conn=$targetConn[$g] op=$targetOp[$g] msgid=$msgid[$g] client=$conn_hash{$targetConn[$g]}\n";
- }
- }
- for ($ec = 0; $ec < $econn; $ec++){
- if ($extConn[$ec] eq $targetConn[$g] && $extOp[$ec] eq $targetOp[$g]){
- print " - EXT conn=$targetConn[$g] op=$targetOp[$g] msgid=$msgid[$g] client=$conn_hash{$targetConn[$g]}\n";
- }
- }
-
-
- }
-}
-
-}
-
-
-
-print "\n";
-
-#######################################
-# #
-# Recommendations #
-# #
-#######################################
-
-if ($usage =~ /j/i || $verb eq "yes"){
-print "\n----- Recommendations -----\n";
-$recCount = "1";
-if ($notes > 0){
- print "\n $recCount. You have unindexed searches, this can be caused from a search on an unindexed attribute, or your returned results exceeded the allidsthreshold. Unindexed searches are not recommended. To refuse unindexed searches, switch \'nsslapd-require-index\' to \'on\' under your database entry (e.g. cn=UserRoot,cn=ldbm database,cn=plugins,cn=config).\n";
- $recCount++;
- }
-
-if ($conncount{"T1"} > 0){
- print "\n $recCount. You have some connections that are are being closed by the idletimeout setting. You may want to increase the idletimeout if it is set low.\n";
- $recCount++;
- }
-
-if ($conncount{"T2"} > 0){
- print "\n $recCount. You have some coonections that are being closed by the ioblocktimeout setting. You may want to increase the ioblocktimeout.\n";
- $recCount++;
- }
-
-# compare binds to unbinds, if the difference is more than 30% of the binds, then report a issue
-
-if (($bind - $unbind) > ($bind*.3)){
- print "\n $recCount. You have a significant difference between binds and unbinds. You may want to investigate this difference.\n";
- $recCount++;
- }
-
-# compare fds taken and return, if the difference is more than 30% report a issue
-
-if (($fdtaken -$fdreturn) > ($fdtaken*.3)){
- print "\n $recCount. You have a significant difference between file descriptors taken and file descriptors returned. You may want to investigate this difference.\n";
- $recCount++;
- }
-
-if ($dirmgr > ($bind *.2)){
- print "\n $recCount. You have a high number of Directory Manager binds. The Directory Manager account should only be used under certain circumstances. Avoid using this account for client applications.\n";
- $recCount++;
- }
-
-if ($errorck > $errorsucc){
- print "\n $recCount. You have more unsuccessful operations than successful operations. You should investigate this difference.\n";
- $recCount++;
- }
-
-if ($conncount{"U1"} < ($concount - $conncount{"U1"})){
- print "\n $recCount. You have more abnormal connection codes than cleanly closed connections. You may want to investigate this difference.\n";
- $recCount++;
- }
-
-if ($first > 0){
- print "\n $recCount. You have a majority of etimes that are greater than zero, you may want to investigate this performance problem.\n";
- $recCount++;
- }
-
-if ($objectclass > ($search *.25)){
- print "\n $recCount. You have a high number of searches that query the entire search base. Although this is not necessarily bad, it could be resource intensive if the search base contains many entries.\n";
- $recCount++;
- }
-
-if ($recCount == 1){
- print "\nNone.\n";
- }
-}
-
-print "\n";
-
-# dispaly usage
-
-sub displayUsage {
-
- print "Usage:\n\n";
-
- print " ./logconv.pl [-h] [-d|--rootdn <rootDN>] [-s|--sizeLimit <size limit>] [-v|verison] [-Vi|verbose]\n";
- print " [-S|--startTime <start time>] [-E|--endTime <end time>] \n";
- print " [-efcibaltnxrgjuyp] [ access log ... ... ]\n\n";
-
- print "- Commandline Switches:\n\n";
-
- print " -h, --help help/usage\n";
- print " -d, --rootDN <Directory Managers DN> DEFAULT -> cn=directory manager\n";
- print " -s, --sizeLimit <Number of results to return per catagory> DEFAULT -> 20\n";
- print " -X, --excludeIP <IP address to exclude from connection stats> E.g. Load balancers\n";
- print " -v, --version show version of tool\n";
- print " -S, --startTime <time to begin analyzing logfile from>\n";
- print " E.g. \"[28/Mar/2002:13:14:22 -0800]\"\n";
- print " -E, --endTime <time to stop analyzing logfile>\n";
- print " E.g. \"[28/Mar/2002:13:24:62 -0800]\"\n";
- print " -m, --reportFileSecs <CSV output file - per second stats>\n";
- print " -M, --reportFileMins <CSV output file - per minute stats>\n";
- print " -B, --bind <ALL | ANONYMOUS | \"Actual Bind DN\">\n";
- print " -V, --verbose <enable verbose output - includes all stats listed below>\n";
- print " -[efcibaltnxrgjuyp]\n\n";
-
- print " e Error Code stats\n";
- print " f Failed Login Stats\n";
- print " c Connection Code Stats\n";
- print " i Client Stats\n";
- print " b Bind Stats\n";
- print " a Search Base Stats\n";
- print " l Search Filter Stats\n";
- print " t Etime Stats\n";
- print " n Nentries Stats\n";
- print " x Extended Operations\n";
- print " r Most Requested Attribute Stats\n";
- print " g Abandoned Operation Stats\n";
- print " j Recommendations\n";
- print " u Unindexed Search Stats\n";
- print " y Connection Latency Stats\n";
- print " p Open Connection ID Stats\n\n";
-
- print " Examples:\n\n";
-
- print " ./logconv.pl -s 10 -V /logs/access*\n\n";
- print " ./logconv.pl --rootDN cn=dm /logs/access*\n\n";
- print " ./logconv.pl --sizeLimit 50 -ibgju /logs/access*\n\n";
- print " ./logconv.pl -S \"\[28/Mar/2002:13:14:22 -0800\]\" --endTime \"\[28/Mar/2002:13:50:05 -0800\]\" -e /logs/access*\n\n";
- print " ./logconv.pl -m log-minute-stats-csv.out /logs/access*\n\n";
- print " ./logconv.pl -B ANONYMOUS /logs/access*\n\n";
- print " ./logconv.pl -B \"uid=mreynolds,dc=example,dc=com\" /logs/access*\n\n";
-
- exit 1;
-}
-
-######################################################
-#
-# Parsing Routines That Do The Actual Parsing Work
-#
-######################################################
-
-sub
-parseLine {
- if($reportBinds eq "yes"){
- &parseLineBind();
- } else {
- &parseLineNormal();
- }
-}
-
-sub
-parseLineBind {
- $ff++;
- $iff++;
- local $_ = $tline;
-
- if ($iff >= $limit){
- print STDERR sprintf" %10s Lines Processed\n",$ff;
- $iff="0";
- }
-
- # skip blank lines
- return if $_ =~ /^\s/;
-
- if($firstFile eq "1" && $_ =~ /^\[/){
- $start = $_;
- if ($start =~ / *([0-9a-z:\/]+)/i){$start=$1;}
- $firstFile = "0";
- }
-
- if ($endFlag != 1 && $_ =~ /^\[/ && $_ =~ / *([0-9a-z:\/]+)/i){
- $end =$1;
- }
-
- if ($startTime && !$startFlag) {
- if (index($_, $startTime) == 0) {
- $startFlag = 1;
- ($start) = $startTime =~ /\D*(\S*)/;
- } else {
- return;
- }
- }
-
- if ($endTime && !$endFlag) {
- if (index($_, $endTime) == 0) {
- $endFlag = 1;
- ($end) = $endTime =~ /\D*(\S*)/;
- }
- }
-
- if ($_ =~ /connection from *([0-9A-Fa-f\.\:]+)/i ) {
- for ($excl =0; $excl <= $#exclude; $excl++){
- if ($exclude[$excl] eq $1){
- $skip = "yes";
- last;
- }
- }
- if ($skip eq "yes"){
- return ;
- }
- $ip = $1;
- if ($_ =~ /conn= *([0-9]+)/i ){
- $connList{$ip} = $connList{$ip} . " $1 ";
- }
- return;
- }
-
- if (/ BIND/ && $_ =~ /dn=\"(.*)\" method/i ){
- if ($1 eq ""){
- $dn = "Anonymous";
- } else {
- $dn = $1;
- $dn =~ tr/A-Z/a-z/;
- }
-
- if($bindReportDN ne ""){
- if($dn ne $bindReportDN){
- # We are not looking for this DN, skip it
- return;
- }
- }
-
- $bindReport{$dn}{"binds"}++;
- if ($bindReport{$dn}{"binds"} eq 1){
- # For hashes we need to init the counters
- $bindReport{$dn}{"srch"} = 0;
- $bindReport{$dn}{"add"} = 0;
- $bindReport{$dn}{"mod"} = 0;
- $bindReport{$dn}{"del"} = 0;
- $bindReport{$dn}{"cmp"} = 0;
- $bindReport{$dn}{"ext"} = 0;
- $bindReport{$dn}{"modrdn"} = 0;
- $bindReport{$dn}{"failedBind"} = 0;
- }
-
- if ($_ =~ /conn= *([0-9]+)/i) {
- $bindReport{$dn}{"conn"} = $bindReport{$dn}{"conn"} . " $1 ";
- }
- return;
- }
-
- if (/ RESULT err=49 /){
- processOpForBindReport("failedBind",$tline);
- }
-
- if (/ SRCH base=/){
- processOpForBindReport("srch",$tline);
- } elsif (/ ADD dn=/){
- processOpForBindReport("add",$tline);
- } elsif (/ MOD dn=/){
- processOpForBindReport("mod",$tline);
- } elsif (/ DEL dn=/){
- processOpForBindReport("del",$tline);
- } elsif (/ MODRDN dn=/){
- processOpForBindReport("modrdn",$tline);
- } elsif (/ CMP dn=/){
- processOpForBindReport("cmp",$tline);
- } elsif (/ EXT oid=/){
- processOpForBindReport("ext",$tline);
- }
-
-}
-
-sub
-processOpForBindReport
-{
- $op = @_[0];
- $data = @_[1];
-
- if ($data =~ /conn= *([0-9]+)/i) {
- foreach $dn (keys %bindReport){
- if ($bindReport{$dn}{"conn"} =~ / $1 /){
- $bindDN = $dn;
- $bindReport{$bindDN}{$op}++;
- return;
- }
- }
- }
-}
-
-sub parseLineNormal {
-local $_ = $tline;
-
-# lines starting blank are restart
-return if $_ =~ /^\s/;
-
-if($firstFile eq "1" && $_ =~ /^\[/){
- # if we are using startTime & endTime, this will get overwritten, which is ok
- $start = $_;
- if ($start =~ / *([0-9a-z:\/]+)/i){$start=$1;}
- $firstFile = "0";
-}
-
-if ($endFlag != 1 && $_ =~ /^\[/ && $_ =~ / *([0-9a-z:\/]+)/i){$end =$1;}
-
-if ($startTime && !$startFlag) {
- if (index($_, $startTime) == 0) {
- $startFlag = 1;
- ($start) = $startTime =~ /\D*(\S*)/;
- } else {
- return;
- }
-}
-
-if ($endTime && !$endFlag) {
- if (index($_, $endTime) == 0) {
- $endFlag = 1;
- ($end) = $endTime =~ /\D*(\S*)/;
- }
-}
-
-$ff++;
-$iff++;
-if ($iff >= $limit){ print STDERR sprintf" %10s Lines Processed\n",$ff; $iff="0";}
-
-# Additional performance stats
-($time, $tzone) = split (' ', $_);
-if ($time ne $last_tm)
-{
- $last_tm = $time;
-
- $time =~ s/\[//;
- $tzone =~ s/\].*//;
-
- if($tzone ne $lastzone)
- {
- # tz offset change
- $lastzone=$tzone;
- ($sign,$hr,$min) = $tzone =~ m/(?)(\d\d)(\d\d)/;
- $tzoff = $hr*3600 + $min*60;
- $tzoff *= -1
- if $sign eq '-';
- # to be subtracted from converted values.
- }
-
- ($date, $hr, $min, $sec) = split (':', $time);
- ($day, $mon, $yr) = split ('/', $date);
- $newmin = timegm(0, $min, $hours, $day, $monthname{$mon}, $yr) - $tzoff;
- $gmtime = $newmin + $sec;
- print_stats_block( $s_stats );
- reset_stats_block( $s_stats, $gmtime, $time.' '.$tzone );
- if ($newmin != $last_min)
- {
- print_stats_block( $m_stats );
- $time =~ s/\d\d$/00/;
- reset_stats_block( $m_stats, $newmin, $time.' '.$tzone );
- $last_min = $newmin;
- }
-}
-
-if (m/ RESULT err/){$allResults++;inc_stats('results',$s_stats,$m_stats);}
-if (m/ SRCH/){
- $search++;
- inc_stats('srch',$s_stats,$m_stats);
- if ($_ =~ / attrs=\"(.*)\"/i){
- $anyAttrs++;
- $attrs = $1 . " ";
- while ($attrs =~ /(\S+)\s/g){
- $attr{$1}++;
- }
- }
- if (/ attrs=ALL/){
- $attr{"All Attributes"}++;
- $anyAttrs++;
- }
-
- if ($verb eq "yes"){
- if ($_ =~ /conn= *([0-9]+)/i){ $srchConn[$sconn] = $1;}
- if ($_ =~ /op= *([0-9]+)/i){ $srchOp[$sconn] = $1;}
- $sconn++;
- }
-}
-if (m/ DEL/){
- $delete++;
- inc_stats('del',$s_stats,$m_stats);
- if ($verb eq "yes"){
- if ($_ =~ /conn= *([0-9]+)/i){ $delConn[$dconn] = $1;}
- if ($_ =~ /op= *([0-9]+)/i){ $delOp[$dconn] = $1;}
- $dconn++;
- }
-}
-if (m/ MOD dn=/){
- $mod++;
- inc_stats('mod',$s_stats,$m_stats);
- if ($verb eq "yes"){
- if ($_ =~ /conn= *([0-9]+)/i){ $modConn[$mconn] = $1;}
- if ($_ =~ /op= *([0-9]+)/i){ $modOp[$mconn] = $1; }
- $mconn++;
- }
-}
-if (m/ MODDN dn=/){
- $moddn++;
- inc_stats('moddn',$s_stats,$m_stats);
- if ($verb eq "yes"){
- if ($_ =~ /conn= *([0-9]+)/i){ $moddnConn[$mconn] = $1;}
- if ($_ =~ /op= *([0-9]+)/i){ $moddnOp[$mconn] = $1; }
- $mddconn++;
- }
-}
-if (m/ ADD/){
- $add++;
- inc_stats('add',$s_stats,$m_stats);
- if ($verb eq "yes"){
- if ($_ =~ /conn= *([0-9]+)/i){ $addConn[$aconn] = $1; }
- if ($_ =~ /op= *([0-9]+)/i){ $addOp[$aconn] = $1; }
- $aconn++;
- }
-}
-if (m/ MODRDN/){
- $modrdn++;
- inc_stats('modrdn',$s_stats,$m_stats);
- if ($verb eq "yes"){
- if ($_ =~ /conn= *([0-9]+)/i){ $modrdnConn[$mdconn] = $1; }
- if ($_ =~ /op= *([0-9]+)/i){ $modrdnOp[$mdconn] = $1; }
- $mdconn++;
- }
-}
-if (m/ CMP dn=/){
- $compare++;
- inc_stats('cmp',$s_stats,$m_stats);
- if ($verb eq "yes" || $usage =~ /g/i){
- if ($_ =~ /conn= *([0-9]+)/i){ $compConn[$dconn] = $1;}
- if ($_ =~ /op= *([0-9]+)/i){ $compOp[$dconn] = $1;}
- $cconn++;
- }
-}
-if (m/ ABANDON /){
- $abandon++;
- inc_stats('abandon',$s_stats,$m_stats);
- $allResults++;
- if ($_ =~ /targetop= *([0-9a-zA-Z]+)/i ){
- $targetOp[$ac] = $1;
- if ($_ =~ /conn= *([0-9]+)/i){ $targetConn[$ac] = $1; }
- if ($_ =~ /msgid= *([0-9]+)/i){ $msgid[$ac] = $1;}
- $ac++;
- }
-}
-if (m/ VLV /){
- if ($_ =~ /conn= *([0-9]+)/i){ $vlvconn[$vlv] = $1;}
- if ($_ =~ /op= *([0-9]+)/i){ $vlvop[$vlv] = $1;}
- $vlv++;
-}
-if (m/ authzid=/){
- $proxiedAuth++;
-}
-if (m/ SORT /){$sortvlv++}
-if (m/ version=2/){$version2++}
-if (m/ version=3/){$version3++}
-if (m/ conn=1 fd=/){$restarts++}
-if (m/ SSL connection from/){$sslconn++;}
-if (m/ connection from/){
- $exc = "no";
- if ($_ =~ /connection from *([0-9A-Fa-f\.\:]+)/i ){
- for ($xxx =0; $xxx <= $#exclude; $xxx++){
- if ($exclude[$xxx] eq $1){$exc = "yes";}
- }
- if ($exc ne "yes"){ $connectionCount++;}
- }
- $simConnection++;
- if ($simConnection > $maxsimConnection) {
- $maxsimConnection = $simConnection;
- }
-
- ($connID) = $_ =~ /conn=(\d*)\s/;
- $openConnection[$connID]++;
- ($time, $tzone) = split (' ', $_);
- ($date, $hr, $min, $sec) = split (':', $time);
- ($day, $mon, $yr) = split ('/', $date);
- $day =~ s/\[//;
- $start_time_of_connection[$connID] = timegm($sec, $min, $hours, $day, $monthname{$mon}, $yr);
-}
-
-if (m/ SSL client bound as /){$sslClientBind++;}
-if (m/ SSL failed to map client certificate to LDAP DN/){$sslClientFailed++;}
-if (m/ fd=/ && m/slot=/){$fdtake++}
-if (m/ fd=/ && m/closed/){
- $fdreturn++;
- $simConnection--;
-
- ($connID) = $_ =~ /conn=(\d*)\s/;
- $openConnection[$connID]--;
- $end_time_of_connection[$connID] = $gmtime;
- $diff = $end_time_of_connection[$connID] - $start_time_of_connection[$connID];
- $start_time_of_connection[$connID] = $end_time_of_connection[$connID] = 0;
- if ($diff <= 1) { $latency[0]++;}
- if ($diff == 2) { $latency[1]++;}
- if ($diff == 3) { $latency[2]++;}
- if ($diff >= 4 && $diff <=5 ) { $latency[3]++;}
- if ($diff >= 6 && $diff <=10 ) { $latency[4]++;}
- if ($diff >= 11 && $diff <=15 ) { $latency[5]++;}
- if ($diff >= 16) { $latency[6] ++;}
-}
-if (m/ BIND/){
- $bind++;
- inc_stats('bind',$s_stats,$m_stats);
- if ($verb eq "yes"){
- if ($_ =~ /conn= *([0-9]+)/i){ $bindConn[$bconn] = $1; }
- if ($_ =~ /op= *([0-9]+)/i){ $bindOp[$bconn] = $1; }
- $bconn++;
- }
-}
-if (m/ BIND/ && m/$manager/i){$dirmgr++}
-if (m/ BIND/ && m/dn=""/){$anony++; $bindlist{"Anonymous Binds"}++;inc_stats('anonbind',$s_stats,$m_stats);}
-if (m/ UNBIND/){
- $unbind++;
- if ($verb eq "yes"){
- if ($_ =~ /conn= *([0-9]+)/i){ $unbindConn[$ubconn] = $1; }
- if ($_ =~ /op= *([0-9]+)/i){ $unbindOp[$ubconn] = $1; }
- $ubconn++;
- }
-}
-if (m/ notes=U/){
- if ($_ =~ /conn= *([0-9]+)/i){
- $con = $1;
- if ($_ =~ /op= *([0-9]+)/i){ $op = $1;}
- }
- for ($i=0; $i <= $vlv;$i++){
- if ($vlvconn[$i] eq $con && $vlvop[$i] eq $op){ $vlvnotes++; $v="1";}
- }
- if($v ne "1"){
- # We don't want to record vlv unindexed searches for our regular "bad"
- # unindexed search stat, as VLV unindexed searches aren't that bad
- $notes++;
- inc_stats('notesu',$s_stats,$m_stats);
- }
- if ($usage =~ /u/ || $verb eq "yes"){
- if ($v eq "0" ){
- if ($_ =~ /etime= *([0-9.]+)/i ) {
- $notesEtime[$vet]=$1;
- $vet++;
- }
- if ($_ =~ /conn= *([0-9]+)/i){
- $notesConn[$nc]=$1;
- $nc++;
- }
- if ($_ =~ /op= *([0-9]+)/i){
- $notesOp[$no]=$1;
- $no++;
- }
- if ($_ =~ / *([0-9a-z:\/]+)/i){
- $notesTime[$nt] = $1;
- $nt++;
- }
- }
- if ($_ =~ /nentries= *([0-9]+)/i ){
- $notesNentries[$nent] = $1;
- $nent++;
- }
- }
- $v = "0";
-}
-
-if (m/ closed error 32/){
- $broken++;
- if (m/- T1/){ $rc{"T1"}++ }
- elsif (m/- T2/){ $rc{"T2"}++ }
- elsif (m/- A1/){ $rc{"A1"}++ }
- elsif (m/- B1/){ $rc{"B1"}++ }
- elsif (m/- B4/){ $rc{"B4"}++ }
- elsif (m/- B2/){ $rc{"B2"}++ }
- elsif (m/- B3/){ $rc{"B3"}++ }
- elsif (m/- R1/){ $rc{"R1"}++ }
- elsif (m/- P1/){ $rc{"P1"}++ }
- elsif (m/- P1/){ $rc{"P2"}++ }
- elsif (m/- U1/){ $rc{"U1"}++ }
- else { $rc{"other"}++; }
-}
-if (m/ closed error 131/ || m/ closed error -5961/){
- $reset++;
- if (m/- T1/){ $src{"T1"}++ }
- elsif (m/- T2/){ $src{"T2"}++ }
- elsif (m/- A1/){ $src{"A1"}++ }
- elsif (m/- B1/){ $src{"B1"}++ }
- elsif (m/- B4/){ $src{"B4"}++ }
- elsif (m/- B2/){ $src{"B2"}++ }
- elsif (m/- B3/){ $src{"B3"}++ }
- elsif (m/- R1/){ $src{"R1"}++ }
- elsif (m/- P1/){ $src{"P1"}++ }
- elsif (m/- P1/){ $src{"P2"}++ }
- elsif (m/- U1/){ $src{"U1"}++ }
- else { $src{"other"}++ }
-}
-
-if (m/ closed error 11/){
- $resource++;
- if (m/- T1/){ $rsrc{"T1"}++ }
- elsif (m/- T2/){ $rsrc{"T2"}++ }
- elsif (m/- A1/){ $rsrc{"A1"}++ }
- elsif (m/- B1/){ $rsrc{"B1"}++ }
- elsif (m/- B4/){ $rsrc{"B4"}++ }
- elsif (m/- B2/){ $rsrc{"B2"}++ }
- elsif (m/- B3/){ $rsrc{"B3"}++ }
- elsif (m/- R1/){ $rsrc{"R1"}++ }
- elsif (m/- P1/){ $rsrc{"P1"}++ }
- elsif (m/- P1/){ $rsrc{"P2"}++ }
- elsif (m/- U1/){ $rsrc{"U1"}++ }
- else { $rsrc{"other"}++ }
-}
-
-if ($usage =~ /g/ || $usage =~ /c/ || $usage =~ /i/ || $verb eq "yes"){
-
-$exc = "no";
-
-if ($_ =~ /connection from *([0-9A-fa-f\.\:]+)/i ) {
- for ($xxx = 0; $xxx <= $#exclude; $xxx++){
- if ($1 eq $exclude[$xxx]){
- $exc = "yes";
- $exCount{$1}++;
- }
- }
- $ip = $1;
- $ip_hash{$ip}{"count"}++;
- if ($_ =~ /conn= *([0-9]+)/i ){
- if ($exc ne "yes"){ $ip_hash2{$ip} = sprintf "%-12s %18s\n",$1,$ip;}
- $conn_hash{$1} = $ip;
-
- }
-
-}
-if (m/- A1/){
- if ($_ =~ /conn= *([0-9]+)/i) {
- $exc = "no";
- $ip = $conn_hash{$1};
- if ($ip eq ""){$ip = "Unknown Host";}
- for ($xxx = 0; $xxx <= $#exclude; $xxx++){
- if ($ip eq $exclude[$xxx]){$exc = "yes";}
- }
- if ($exc ne "yes"){
- $ip_hash{$ip}{"A1"}++;
- $conncount{"A1"}++;
- $concount++;
- }
- }
-}
-if (m/- B1/){
- if ($_ =~ /conn= *([0-9]+)/i) {
- $exc = "no";
- $ip = $conn_hash{$1};
- if ($ip eq ""){$ip = "Unknown Host";}
- for ($xxx = 0; $xxx <= $#exclude; $xxx++){
- if ($ip eq $exclude[$xxx]){$exc = "yes";}
- }
- if ($exc ne "yes"){
- $ip_hash{$ip}{"B1"}++;
- $conncount{"B1"}++;
- $concount++;
- }
- }
-}
-if (m/- B4/){
- if ($_ =~ /conn= *([0-9]+)/i) {
- $exc = "no";
- $ip = $conn_hash{$1};
- if ($ip eq ""){$ip = "Unknown Host";}
- for ($xxx = 0; $xxx <= $#exclude; $xxx++){
- if ($ip eq $exclude[$xxx]){$exc = "yes";}
- }
- if ($exc ne "yes"){
- $ip_hash{$ip}{"B4"}++;
- $conncount{"B4"}++;
- $concount++;
- }
- }
-}
-if (m/- T1/){
- if ($_ =~ /conn= *([0-9]+)/i) {
- $exc = "no";
- $ip = $conn_hash{$1};
- if ($ip eq ""){$ip = "Unknown Host";}
- for ($xxx = 0; $xxx <= $#exclude; $xxx++){
- if ($ip eq $exclude[$xxx]){$exc = "yes";}
- }
- if ($exc ne "yes"){
- $ip_hash{$ip}{"T1"}++;
- $conncount{"T1"}++;
- $concount++;
- }
- }
-}
-if (m/- T2/){
- if ($_ =~ /conn= *([0-9]+)/i) {
- $exc = "no";
- $ip = $conn_hash{$1};
- if ($ip eq ""){$ip = "Unknown Host";}
- for ($xxx = 0; $xxx <= $#exclude; $xxx++){
- if ($ip eq $exclude[$xxx]){$exc = "yes";}
- }
- if ($exc ne "yes"){
- $ip_hash{$ip}{"T2"}++;
- $conncount{"T2"}++;
- $concount++;
- }
- }
-}
-if (m/- B2/){
- if ($_ =~ /conn= *([0-9]+)/i) {
- $exc = "no";
- $ip = $conn_hash{$1};
- if ($ip eq ""){$ip = "Unknown Host";}
- for ($xxx = 0; $xxx <= $#exclude; $xxx++){
- if ($ip eq $exclude[$xxx]){$exc = "yes";}
- }
- if ($exc ne "yes"){
- $ip_hash{$ip}{"B2"}++;
- $conncount{"B2"}++;
- $concount++;
- }
- }
-}
-if (m/- B2/){
- if ($_ =~ /conn= *([0-9]+)/i) {
- $exc = "no";
- $ip = $conn_hash{$1};
- if ($ip eq ""){$ip = "Unknown Host";}
- for ($xxx = 0; $xxx <= $#exclude; $xxx++){
- if ($ip eq $exclude[$xxx]){$exc = "yes";}
- }
- if ($exc ne "yes"){
- $ip_hash{$ip}{"B2"}++;
- $conncount{"B2"}++;
- $concount++;
- }
- }
-}
-if (m/- B3/){
- if ($_ =~ /conn= *([0-9]+)/i) {
- $exc = "no";
- $ip = $conn_hash{$1};
- if ($ip eq ""){$ip = "Unknown Host";}
- for ($xxx = 0; $xxx <= $#exclude; $xxx++){
- if ($ip eq $exclude[$xxx]){$exc = "yes";}
- }
- if ($exc ne "yes"){
- $ip_hash{$ip}{"B3"}++;
- $conncount{"B3"}++;
- $concount++;
- }
- }
-}
-if (m/- R1/){
- if ($_ =~ /conn= *([0-9]+)/i) {
- $exc = "no";
- $ip = $conn_hash{$1};
- if ($ip eq ""){$ip = "Unknown Host";}
- for ($xxx = 0; $xxx <= $#exclude; $xxx++){
- if ($ip eq $exclude[$xxx]){$exc = "yes";}
- }
- if ($exc ne "yes"){
- $ip_hash{$ip}{"R1"}++;
- $conncount{"R1"}++;
- $concount++;
- }
- }
-}
-if (m/- P1/){
- if ($_ =~ /conn= *([0-9]+)/i) {
- $exc = "no";
- $ip = $conn_hash{$1};
- if ($ip eq ""){$ip = "Unknown Host";}
- for ($xxx = 0; $xxx <= $#exclude; $xxx++){
- if ($ip eq $exclude[$xxx]){$exc = "yes";}
- }
- if ($exc ne "yes"){
- $ip_hash{$ip}{"P1"}++;
- $conncount{"P1"}++;
- $concount++;
- }
- }
-}
-if (m/- P2/){
- if ($_ =~ /conn= *([0-9]+)/i) {
- $exc = "no";
- $ip = $conn_hash{$1};
- if ($ip eq ""){$ip = "Unknown Host";}
- for ($xxx = 0; $xxx <= $#exclude; $xxx++){
- if ($ip eq $exclude[$xxx]){$exc = "yes";}
- }
- if ($exc ne "yes"){
- $ip_hash{$ip}{"P2"}++;
- $conncount{"P2"}++;
- $concount++;
- }
- }
-}
-if (m/- U1/){
- if ($_ =~ /conn= *([0-9]+)/i) {
- $exc = "no";
- $ip = $conn_hash{$1};
- if ($ip eq ""){$ip = "Unknown Host";}
- for ($xxx = 0; $xxx <= $#exclude; $xxx++){
- if ($ip eq $exclude[$xxx]){$exc = "yes";}
- }
- if ($exc ne "yes"){
- $ip_hash{$ip}{"U1"}++;
- $conncount{"U1"}++;
- $concount++;
- }
- }
-
-}
-
-}
-if ($_ =~ /err= *([0-9]+)/i){
- $er[$1]++;
- if ($1 ne "0"){ $errorck++;}
- else { $errorsucc++;}
-}
-if ($_ =~ /etime= *([0-9.]+)/ ) { $etime{$1}++;}
-if ($_ =~ / tag=101 nentries= *([0-9]+)/i ) {$nentries{$1}++}
-if ($_ =~ / tag=111 nentries= *([0-9]+)/i ) {$nentries{$1}++}
-if ($_ =~ / tag=100 nentries= *([0-9]+)/i ) {$nentries{$1}++}
-if ($_ =~ / tag=115 nentries= *([0-9]+)/i ) {$nentries{$1}++}
-if (m/objectclass=\*/i || m/objectclass=top/i ){
- if (m/ scope=2 /){ $objectclass++;}
-}
-
-if (m/ EXT oid=/){
- $extendedop++;
- if ($_ =~ /oid=\" *([0-9\.]+)/i ){ $oid{$1}++; }
- if ($verb eq "yes"){
- if ($_ =~ /conn= *([0-9]+)/i){ $extConn[$econn] = $1; }
- if ($_ =~ /op= *([0-9]+)/i){ $extOp[$econn] = $1; }
- $econn++;
- }
-}
-
-if (m/ BIND/ && $_ =~ /dn=\"(.*)\" method/i ){
- if ($1 ne ""){
- $tmpp = $1;
- $tmpp =~ tr/A-Z/a-z/;
- $bindlist{$tmpp} = $bindlist{$tmpp} + 1;
-
- $bindInfo[$bc][0] = $tmpp;
- if ($_ =~ /conn= *([0-9]+)/i) { $bindInfo[$bc][1] = $1; }
- if ($_ =~ /op= *([0-9]+)/i) { $bindInfo[$bc][2] = $1; }
- $bc++;
- }
-}
-
-if ($usage =~ /l/ || $verb eq "yes"){
- if (/ SRCH / && / attrs=/ && $_ =~ /filter=\"(.*)\" /i ){
- $tmpp = $1;
- $tmpp =~ tr/A-Z/a-z/;
- $tmpp =~ s/\\22/\"/g;
- $filter{$tmpp} = $filter{$tmpp} + 1;
- $filterInfo[$fcc][0] = $tmpp;
- if ($_ =~ /conn= *([0-9]+)/i) { $filterInfo[$fcc][1] = $1; }
- if ($_ =~ /op= *([0-9]+)/i) { $filterInfo[$fcc][2] = $1; }
- $fcc++;
- } elsif (/ SRCH / && $_ =~ /filter=\"(.*)\"/i){
- $tmpp = $1;
- $tmpp =~ tr/A-Z/a-z/;
- $tmpp =~ s/\\22/\"/g;
- $filter{$tmpp} = $filter{$tmpp} + 1;
- $filterInfo[$fcc][0] = $tmpp;
- if ($_ =~ /conn= *([0-9]+)/i) { $filterInfo[$fcc][1] = $1; }
- if ($_ =~ /op= *([0-9]+)/i) { $filterInfo[$fcc][2] = $1; }
- $fcc++;
- }
-}
-
-if ($usage =~ /a/ || $verb eq "yes"){
- if (/ SRCH / && $_ =~ /base=\"(.*)\" scope/i ){
- if ($1 eq ""){
- $tmpp = "Root DSE";
- } else {
- $tmpp = $1;
- }
- $tmpp =~ tr/A-Z/a-z/;
- $base{$tmpp} = $base{$tmpp} + 1;
-
- #
- # grab the search bases & scope for potential unindexed searches
- #
- $baseInfo[$bcc][0] = $tmpp;
- if ($_ =~ /scope= *([0-9]+)/i) {
- $scopeInfo[$scc][0] = $1;
- }
- if ($_ =~ /conn= *([0-9]+)/i) {
- $baseInfo[$bcc][1] = $1;
- $scopeInfo[$scc][1] = $1;
- }
- if ($_ =~ /op= *([0-9]+)/i) {
- $baseInfo[$bcc][2] = $1;
- $scopeInfo[$scc][2] = $1;
- }
- $bcc++;
- $scc++;
-
- }
-}
-
-if ($_ =~ /fd= *([0-9]+)/i ) {
- $fds[$fdds] = $1;
- if ($fds[$fdds] > $highfd) {$highfd = $fds[$fdds];}
- $fdds++;
-}
-
-
-if ($usage =~ /f/ || $verb eq "yes"){
- if (/ err=49 tag=/ && / dn=\"/){
- if ($_ =~ /dn=\"(.*)\"/i ){
- $ds6xbadpwd{$1}++;
- }
- $ds6x = "true";
- $bpc++;
-
- } elsif (/ err=49 tag=/ ){
- if ($_ =~ /conn= *([0-9]+)/i ){
- $badPasswordConn[$bpc] = $1;
- $bpc++;
- }
- if ($_ =~ /op= *([0-9]+)/i ){
- $badPasswordOp[$bpo] = $1;
- $bpo++;
- }
- $badPasswordIp[$bpi] = $ip;
- $bpi++;
- }
-}
-
-if (/ BIND / && /method=sasl/i){
- $sasl++;
- if ($_ =~ /mech=(.*)/i ){
- $saslmech{$1}++;
- }
-}
-
-if (/ conn=Internal op=-1 / && !/ RESULT err=/){ $internal++; }
-
-if (/ ENTRY dn=/ ){ $entryOp++; }
-
-if (/ conn=/ && /op=/ && / REFERRAL/){ $referral++; }
-
-if (/ options=persistent/){$persistent++;}
-
-}
-
- #######################################
- # # #
- # +# CSV Helper Routines #
- # +# #
-#######################################
-# #
-# To convert the CSV to chart in OO #
-# #
-# * Select active rows and columns #
-# * Insert -> Chart #
-# * Chart type "XY (Scatter)" #
-# * sub-type "Lines Only" #
-# * select "Sort by X values" #
-# * "Next" #
-# * select "Data series in columns" #
-# * select "First row as label" #
-# * select "First column as label" #
-# * "Next" #
-# * "Next" #
-# * "Finish" #
-# #
-#######################################
-
-sub
-reset_stats_block
-{
- my $stats = shift;
-
- $stats->{'last'} = shift || 0;
- $stats->{'last_str'} = shift || '';
-
- $stats->{'results'}=0;
- $stats->{'srch'}=0;
- $stats->{'add'}=0;
- $stats->{'mod'}=0;
- $stats->{'modrdn'}=0;
- $stats->{'moddn'}=0;
- $stats->{'cmp'}=0;
- $stats->{'del'}=0;
- $stats->{'abandon'}=0;
- $stats->{'conns'}=0;
- $stats->{'sslconns'}=0;
- $stats->{'bind'}=0;
- $stats->{'anonbind'}=0;
- $stats->{'unbind'}=0;
- $stats->{'notesu'}=0;
- return;
-}
-
-sub
-new_stats_block
-{
- my $name = shift || '';
- my $stats = {
- 'active' => 0,
- };
-
- if ($name)
- {
- $stats->{'filename'} = $name;
- $stats->{'fh'} = new IO::File;
- $stats->{'active'} = open($stats->{'fh'},">$name");
- }
-
- reset_stats_block( $stats );
- return $stats;
-}
-
-sub
-print_stats_block
-{
- foreach my $stats( @_ )
- {
- if ($stats->{'active'})
- {
- if ($stats->{'last'})
- {
- $stats->{'fh'}->print(
- join(',',
- $stats->{'last_str'},
- $stats->{'last'},
- $stats->{'results'},
- $stats->{'srch'},
- $stats->{'add'},
- $stats->{'mod'},
- $stats->{'modrdn'},
- $stats->{'moddn'},
- $stats->{'cmp'},
- $stats->{'del'},
- $stats->{'abandon'},
- $stats->{'conns'},
- $stats->{'sslconns'},
- $stats->{'bind'},
- $stats->{'anonbind'},
- $stats->{'unbind'},
- $stats->{'notesu'} ),
- "\n" );
- }else
- {
- $stats->{'fh'}->print(
- "Time,time_t,Results,Search,Add,Mod,Modrdn,Delete,Abandon,".
- "Connections,SSL Conns,Bind,Anon Bind,Unbind,Unindexed\n"
- );
- }
- }
- }
- return;
-}
-
-sub
-inc_stats
-{
- my $n = shift;
- foreach(@_)
- {
- $_->{$n}++
- if exists $_->{$n};
- }
- return;
-}
-
-sub
-displayBindReport
-{
- #
- # Loop for each DN - sort alphabetically
- #
- # Display all the IP addresses, then counts of all the operations it did
- #
-
- print "\nBind Report\n";
- print "====================================================================\n\n";
- foreach $bindDN (sort { $bindReport{$a} <=> $bindReport{$b} } keys %bindReport) {
- print("Bind DN: $bindDN\n");
- print("--------------------------------------------------------------------\n");
- print(" Client Addresses:\n\n");
- &printClients($bindReport{$bindDN}{"conn"});
- print("\n Operations Performed:\n\n");
- &printOpStats($bindDN);
- print("\n");
- }
- print "Done.\n";
- exit (0);
-}
-
-sub
-printClients
-{
- @bindConns = &cleanConns(split(' ', @_[0]));
- $IPcount = "1";
-
- foreach $ip ( keys %connList ){ # Loop over all the IP addresses
- foreach $bc (@bindConns){ # Loop over each bind conn number and compare it
- if($connList{$ip} =~ / $bc /){
- print(" [$IPcount] $ip\n");
- $IPcount++;
- last;
- }
- }
- }
-}
-
-sub
-cleanConns
-{
- @dirtyConns = @_;
- $#cleanConns = -1;
- $c = 0;
-
- for ($i = 0; $i <=$#dirtyConns; $i++){
- if($dirtyConns[$i] ne ""){
- $cleanConns[$c++] = $dirtyConns[$i];
- }
- }
- return @cleanConns;
-}
-
-sub
-printOpStats
-{
- $dn = @_[0];
-
- if( $bindReport{$dn}{"failedBind"} eq "0" ){
- print(" Binds: " . $bindReport{$dn}{"binds"} . "\n");
- } else {
- print(" Binds: " . $bindReport{$dn}{"binds"} . " (Invalid Credentials: " . $bindReport{$dn}{"failedBind"} . ")\n");
- }
- print(" Searches: " . $bindReport{$dn}{"srch"} . "\n");
- print(" Modifies: " . $bindReport{$dn}{"mod"} . "\n");
- print(" Adds: " . $bindReport{$dn}{"add"} . "\n");
- print(" Deletes: " . $bindReport{$dn}{"del"} . "\n");
- print(" Compares: " . $bindReport{$dn}{"cmp"} . "\n");
- print(" ModRDNs: " . $bindReport{$dn}{"modrdn"} . "\n");
- print(" Ext Ops: " . $bindReport{$dn}{"ext"} . "\n\n");
-}
-
-#######################################
-# #
-# The End #
-# #
-#######################################
-
11 years, 2 months
Branch '389-ds-base-1.2.10' - ldap/servers
by Richard Allen Megginson
ldap/servers/slapd/back-ldbm/ldbm_modrdn.c | 11 ++++++-----
1 file changed, 6 insertions(+), 5 deletions(-)
New commits:
commit 51a1c48f9c3c49efb40e36d9ebee38951ff25f47
Author: Noriko Hosoi <nhosoi(a)totoro.usersys.redhat.com>
Date: Wed Nov 14 12:23:06 2012 -0800
Trac Ticket #520 - RedHat Directory Server crashes (segfaults) when moving ldap entry
https://fedorahosted.org/389/ticket/520
Fix description: The code to check if the new superior entry exists
or not was returning the "No such object" error only when the op
was requested by the directory manager. This patch is removing
the condition so that whoever the requester is, it returns the error.
(cherry picked from commit 40e68b18dae23a21654719a742419f172aa54806)
(cherry picked from commit d4dbb3d01a7f3f39c5370a10a02109d90c5140e0)
diff --git a/ldap/servers/slapd/back-ldbm/ldbm_modrdn.c b/ldap/servers/slapd/back-ldbm/ldbm_modrdn.c
index 6b0fa34..f7d9f16 100644
--- a/ldap/servers/slapd/back-ldbm/ldbm_modrdn.c
+++ b/ldap/servers/slapd/back-ldbm/ldbm_modrdn.c
@@ -400,10 +400,11 @@ ldbm_back_modrdn( Slapi_PBlock *pb )
if ( newparententry == NULL )
{
/* There may not be a new parent because we don't intend there to be one. */
- if(slapi_sdn_get_ndn(dn_newsuperiordn)!=NULL)
+ if (slapi_sdn_get_ndn(dn_newsuperiordn))
{
- /* If the new entry is to be a suffix, and we're root, then it's OK that the new parent doesn't exist */
- if (!(slapi_be_issuffix(pb->pb_backend, &dn_newdn)) && isroot)
+ /* If the new entry is not to be a suffix,
+ * return an error no matter who requested this modrdn */
+ if (!slapi_be_issuffix(pb->pb_backend, &dn_newdn))
{
/* Here means that we didn't find the parent */
int err = 0;
@@ -421,7 +422,7 @@ ldbm_back_modrdn( Slapi_PBlock *pb )
slapi_sdn_get_ndn(dn_newsuperiordn), 0 );
slapi_sdn_done(&ancestorsdn);
goto error_return;
- }
+ }
}
}
else
@@ -439,7 +440,7 @@ ldbm_back_modrdn( Slapi_PBlock *pb )
if ( parententry == NULL )
{
/* If the entry a suffix, and we're root, then it's OK that the parent doesn't exist */
- if (!(slapi_be_issuffix(pb->pb_backend, sdn)) && isroot)
+ if (!(slapi_be_issuffix(pb->pb_backend, sdn)) && !isroot)
{
/* Here means that we didn't find the parent */
ldap_result_matcheddn = "NULL";
11 years, 2 months
ldap/servers
by Noriko Hosoi
ldap/servers/slapd/back-ldbm/back-ldbm.h | 8
ldap/servers/slapd/back-ldbm/filterindex.c | 2
ldap/servers/slapd/back-ldbm/idl_new.c | 387 +++++++++++++++++++++++--
ldap/servers/slapd/back-ldbm/index.c | 320 ++++++++++----------
ldap/servers/slapd/back-ldbm/proto-back-ldbm.h | 5
5 files changed, 534 insertions(+), 188 deletions(-)
New commits:
commit 0228e570b6c30a52b365a7a8ef67e027908e78db
Author: Noriko Hosoi <nhosoi(a)totoro.usersys.redhat.com>
Date: Thu Jan 10 17:39:47 2013 -0800
Ticket #537 - Improvement of range search
Fix description: The index range search function index_range
_read_ext was written to call idl_fetch_ext to get an idlist
belonging to one key. Then add it to the main idlist as long
as the key satisfiles the range search filter condition.
This patch introduces a new range search function idl_new_
range_fetch to the new idl code, which generates an idlist
in one idl function that eliminates the redundancy such as
generating idlist and cursor per key.
This patch only implements the new idl version. If idl_new
is not set, the existing code is executed.
Additionally, idl_new_fetch did not abort the read transaction
even if any error occurred in the transaction. Now, it switches
between commit and abort based upon the result.
https://fedorahosted.org/389/ticket/537
Reviewed by Rich (Thank you!!)
diff --git a/ldap/servers/slapd/back-ldbm/back-ldbm.h b/ldap/servers/slapd/back-ldbm/back-ldbm.h
index 6536664..726ac40 100644
--- a/ldap/servers/slapd/back-ldbm/back-ldbm.h
+++ b/ldap/servers/slapd/back-ldbm/back-ldbm.h
@@ -885,4 +885,12 @@ typedef struct _back_search_result_set
#define TOMBSTONE_INCLUDED 0x1 /* used by find_entry2modify_only_ext and
entryrdn_index_read */
+#define DBT_FREE_PAYLOAD(d) slapi_ch_free(&((d).data))
+/*
+ * This only works with normalized keys, which should be ok because
+ * at this point both L and R should have already been normalized.
+ */
+#define DBT_EQ(L,R) \
+ ((L)->dsize == (R)->dsize && !memcmp ((L)->dptr, (R)->dptr, (L)->dsize))
+
#endif /* _back_ldbm_h_ */
diff --git a/ldap/servers/slapd/back-ldbm/filterindex.c b/ldap/servers/slapd/back-ldbm/filterindex.c
index 27b20ec..9dc9cbf 100644
--- a/ldap/servers/slapd/back-ldbm/filterindex.c
+++ b/ldap/servers/slapd/back-ldbm/filterindex.c
@@ -616,7 +616,7 @@ range_candidates(
low, NULL, 0, &txn, err, allidslimit);
} else {
idl = index_range_read_ext(pb, be, type, (char*)indextype_EQUALITY,
- SLAPI_OP_GREATER_OR_EQUAL,
+ SLAPI_OP_LESS_OR_EQUAL,
low, high, 1, &txn, err, allidslimit);
}
diff --git a/ldap/servers/slapd/back-ldbm/idl_new.c b/ldap/servers/slapd/back-ldbm/idl_new.c
index 64ffc9d..5bc8485 100644
--- a/ldap/servers/slapd/back-ldbm/idl_new.c
+++ b/ldap/servers/slapd/back-ldbm/idl_new.c
@@ -155,7 +155,8 @@ int idl_new_release_private(struct attrinfo *a)
return 0;
}
-IDList * idl_new_fetch(
+IDList *
+idl_new_fetch(
backend *be,
DB* db,
DBT *inkey,
@@ -292,7 +293,7 @@ IDList * idl_new_fetch(
}
LDAPDebug(LDAP_DEBUG_TRACE, "bulk fetch buffer nids=%d\n", count, 0, 0);
-#if defined(DB_ALLIDS_ON_READ)
+#if defined(DB_ALLIDS_ON_READ)
/* enforce the allids read limit */
if ((NEW_IDL_NO_ALLID != *flag_err) && (NULL != a) &&
(idl != NULL) && idl_new_exceeds_allidslimit(count, a, allidslimit)) {
@@ -317,13 +318,14 @@ IDList * idl_new_fetch(
/* we got another ID, add it to our IDL */
idl_rc = idl_append_extend(&idl, id);
if (idl_rc) {
- LDAPDebug(LDAP_DEBUG_ANY, "unable to extend id list (err=%d)\n", idl_rc);
+ LDAPDebug1Arg(LDAP_DEBUG_ANY,
+ "unable to extend id list (err=%d)\n", idl_rc);
idl_free(idl); idl = NULL;
goto error;
}
#if defined(DB_ALLIDS_ON_READ)
/* enforce the allids read limit */
- if ((idl != NULL) && idl_new_exceeds_allidslimit(count, a, allidslimit)) {
+ if (idl && idl_new_exceeds_allidslimit(count, a, allidslimit)) {
idl->b_nids = 1;
idl->b_ids[0] = ALLID;
ret = DB_NOTFOUND; /* fool the code below into thinking that we finished the dups */
@@ -365,11 +367,352 @@ error:
}
}
}
- dblayer_read_txn_commit(be, &s_txn);
+ if (ret) {
+ dblayer_read_txn_abort(be, &s_txn);
+ } else {
+ dblayer_read_txn_commit(be, &s_txn);
+ }
*flag_err = ret;
return idl;
}
+/*
+ * Perform the range search in the idl layer instead of the index layer
+ * to improve the performance.
+ */
+IDList *
+idl_new_range_fetch(
+ backend *be,
+ DB* db,
+ DBT *lowerkey,
+ DBT *upperkey,
+ DB_TXN *txn,
+ struct attrinfo *ai,
+ int *flag_err,
+ int allidslimit,
+ int sizelimit,
+ time_t stoptime,
+ int lookthrough_limit,
+ int operator
+)
+{
+ int ret = 0;
+ int idl_rc = 0;
+ DBC *cursor = NULL;
+ IDList *idl = NULL;
+ DBT cur_key;
+ DBT data;
+ ID id = 0;
+ size_t count = 0;
+#ifdef DB_USE_BULK_FETCH
+ /* beware that a large buffer on the stack might cause a stack overflow on some platforms */
+ char buffer[BULK_FETCH_BUFFER_SIZE];
+ void *ptr;
+ DBT dataret;
+#endif
+ back_txn s_txn;
+ struct ldbminfo *li = (struct ldbminfo *)be->be_database->plg_private;
+ time_t curtime;
+ void *saved_key = NULL;
+
+ if (NEW_IDL_NOOP == *flag_err)
+ {
+ *flag_err = 0;
+ return NULL;
+ }
+
+ dblayer_txn_init(li, &s_txn);
+ if (txn) {
+ dblayer_read_txn_begin(be, txn, &s_txn);
+ }
+
+ /* Make a cursor */
+ ret = db->cursor(db, txn, &cursor, 0);
+ if (0 != ret) {
+ ldbm_nasty(filename,1,ret);
+ cursor = NULL;
+ goto error;
+ }
+ memset(&data, 0, sizeof(data));
+#ifdef DB_USE_BULK_FETCH
+ data.ulen = sizeof(buffer);
+ data.size = sizeof(buffer);
+ data.data = buffer;
+ data.flags = DB_DBT_USERMEM;
+ memset(&dataret, 0, sizeof(dataret));
+#else
+ data.ulen = sizeof(id);
+ data.size = sizeof(id);
+ data.data = &id;
+ data.flags = DB_DBT_USERMEM;
+#endif
+
+ /*
+ * We're not expecting the key to change in value
+ * so we can just use the input key as a buffer.
+ * This avoids memory management of the key.
+ */
+ memset(&cur_key, 0, sizeof(cur_key));
+ cur_key.ulen = lowerkey->size;
+ cur_key.size = lowerkey->size;
+ saved_key = cur_key.data = slapi_ch_malloc(lowerkey->size);
+ memcpy(cur_key.data, lowerkey->data, lowerkey->size);
+ cur_key.flags = DB_DBT_MALLOC;
+
+ /* Position cursor at the first matching key */
+#ifdef DB_USE_BULK_FETCH
+ ret = cursor->c_get(cursor, &cur_key, &data, DB_SET|DB_MULTIPLE);
+#else
+ ret = cursor->c_get(cursor, &cur_key, &data, DB_SET);
+#endif
+ if (0 != ret) {
+ if (DB_NOTFOUND != ret) {
+#ifdef DB_USE_BULK_FETCH
+ if (ret == DB_BUFFER_SMALL) {
+ LDAPDebug(LDAP_DEBUG_ANY, "database index is corrupt; "
+ "data item for key %s is too large for our buffer "
+ "(need=%d actual=%d)\n",
+ cur_key.data, data.size, data.ulen);
+ }
+#endif
+ ldbm_nasty(filename,2,ret);
+ }
+ goto error; /* Not found is OK, return NULL IDL */
+ }
+
+ /* Iterate over the duplicates, amassing them into an IDL */
+#ifdef DB_USE_BULK_FETCH
+ while (cur_key.data &&
+ (upperkey->data ?
+ ((operator == SLAPI_OP_LESS) ?
+ DBTcmp(&cur_key, upperkey, ai->ai_key_cmp_fn) < 0 :
+ DBTcmp(&cur_key, upperkey, ai->ai_key_cmp_fn) <= 0) :
+ PR_TRUE /* e.g., (x > a) */)) {
+ ID lastid = 0;
+
+ DB_MULTIPLE_INIT(ptr, &data);
+
+ /* lookthrough limit & sizelimit check */
+ if (idl) {
+ if ((lookthrough_limit != -1) &&
+ (idl->b_nids > (ID)lookthrough_limit)) {
+ idl_free(idl);
+ idl = idl_allids( be );
+ LDAPDebug0Args(LDAP_DEBUG_TRACE,
+ "idl_new_range_fetch - lookthrough_limit exceeded\n");
+ *flag_err = LDAP_ADMINLIMIT_EXCEEDED;
+ goto error;
+ }
+ if ((sizelimit > 0) && (idl->b_nids > (ID)sizelimit)) {
+ LDAPDebug0Args(LDAP_DEBUG_TRACE,
+ "idl_new_range_fetch - sizelimit exceeded\n");
+ *flag_err = LDAP_SIZELIMIT_EXCEEDED;
+ goto error;
+ }
+ }
+ /* timelimit check */
+ if (stoptime > 0) { /* timelimit is set */
+ curtime = current_time();
+ if (curtime >= stoptime) {
+ LDAPDebug0Args(LDAP_DEBUG_TRACE,
+ "idl_new_range_fetch - timelimit exceeded\n");
+ *flag_err = LDAP_TIMELIMIT_EXCEEDED;
+ goto error;
+ }
+ }
+ while (PR_TRUE) {
+ DB_MULTIPLE_NEXT(ptr, &data, dataret.data, dataret.size);
+ if (dataret.data == NULL) break;
+ if (ptr == NULL) break;
+
+ if (*(int32_t *)ptr < -1) {
+ LDAPDebug1Arg(LDAP_DEBUG_TRACE, "DB_MULTIPLE buffer is corrupt; "
+ "next offset [%d] is less than zero\n",
+ *(int32_t *)ptr);
+ /* retry the read */
+ break;
+ }
+ if (dataret.size != sizeof(ID)) {
+ LDAPDebug(LDAP_DEBUG_ANY, "database index is corrupt; "
+ "key %s has a data item with the wrong size (%d)\n",
+ cur_key.data, dataret.size, 0);
+ goto error;
+ }
+ memcpy(&id, dataret.data, sizeof(ID));
+ if (id == lastid) { /* dup */
+ LDAPDebug1Arg(LDAP_DEBUG_TRACE, "Detedted duplicate id "
+ "%d due to DB_MULTIPLE error - skipping\n",
+ id);
+ continue; /* get next one */
+ }
+ /* note the last id read to check for dups */
+ lastid = id;
+ /* we got another ID, add it to our IDL */
+ idl_rc = idl_append_extend(&idl, id);
+ if (idl_rc) {
+ LDAPDebug1Arg(LDAP_DEBUG_ANY,
+ "unable to extend id list (err=%d)\n", idl_rc);
+ idl_free(idl); idl = NULL;
+ goto error;
+ }
+
+ count++;
+ }
+
+ LDAPDebug(LDAP_DEBUG_TRACE, "bulk fetch buffer nids=%d\n", count, 0, 0);
+#if defined(DB_ALLIDS_ON_READ)
+ /* enforce the allids read limit */
+ if ((NEW_IDL_NO_ALLID != *flag_err) && ai && (idl != NULL) &&
+ idl_new_exceeds_allidslimit(count, ai, allidslimit)) {
+ idl->b_nids = 1;
+ idl->b_ids[0] = ALLID;
+ ret = DB_NOTFOUND; /* fool the code below into thinking that we finished the dups */
+ break;
+ }
+#endif
+ ret = cursor->c_get(cursor, &cur_key, &data, DB_NEXT_DUP|DB_MULTIPLE);
+ if (ret) {
+ if (DBT_EQ(&cur_key, upperkey)) { /* this is the last key */
+ break;
+ }
+ /* First set the cursor (DB_NEXT_NODUP does not take DB_MULTIPLE) */
+ ret = cursor->c_get(cursor, &cur_key, &data, DB_NEXT_NODUP);
+ if (ret) {
+ break;
+ }
+ /* Read the dup data */
+ ret = cursor->c_get(cursor, &cur_key, &data, DB_SET|DB_MULTIPLE);
+ if (saved_key != cur_key.data) {
+ /* key was allocated in c_get */
+ slapi_ch_free(&saved_key);
+ saved_key = cur_key.data;
+ }
+ if (ret) {
+ break;
+ }
+ }
+ }
+#else
+ while (upperkey->data ?
+ ((operator == SLAPI_OP_LESS) ?
+ DBTcmp(&cur_key, upperkey, ai->ai_key_cmp_fn) < 0 :
+ DBTcmp(&cur_key, upperkey, ai->ai_key_cmp_fn) <= 0) :
+ PR_TRUE /* e.g., (x > a) */) {
+ /* lookthrough limit & sizelimit check */
+ if (idl) {
+ if ((lookthrough_limit != -1) &&
+ (idl->b_nids > (ID)lookthrough_limit)) {
+ idl_free(idl);
+ idl = idl_allids( be );
+ LDAPDebug0Args(LDAP_DEBUG_TRACE,
+ "idl_new_range_fetch - lookthrough_limit exceeded\n");
+ *flag_err = LDAP_ADMINLIMIT_EXCEEDED;
+ goto error;
+ }
+ if ((sizelimit > 0) && (idl->b_nids > (ID)sizelimit)) {
+ LDAPDebug0Args(LDAP_DEBUG_TRACE,
+ "idl_new_range_fetch - sizelimit exceeded\n");
+ *flag_err = LDAP_SIZELIMIT_EXCEEDED;
+ goto error;
+ }
+ }
+ /* timelimit check */
+ if (stoptime > 0) { /* timelimit is set */
+ curtime = current_time();
+ if (curtime >= stoptime) {
+ LDAPDebug0Args(LDAP_DEBUG_TRACE,
+ "idl_new_range_fetch - timelimit exceeded\n");
+ *flag_err = LDAP_TIMELIMIT_EXCEEDED;
+ goto error;
+ }
+ }
+ ret = cursor->c_get(cursor,&cur_key,&data,DB_NEXT_DUP);
+ count++;
+ if (ret) {
+ if (DBT_EQ(&cur_key, upperkey)) { /* this is the last key */
+ break;
+ }
+ DBT_FREE_PAYLOAD(cur_key);
+ ret = cursor->c_get(cursor, &cur_key, &data, DB_NEXT_NODUP);
+ if (saved_key != cur_key.data) {
+ /* key was allocated in c_get */
+ slapi_ch_free(&saved_key);
+ saved_key = cur_key.data;
+ }
+ if (ret) {
+ break;
+ }
+ }
+ /* we got another ID, add it to our IDL */
+ idl_rc = idl_append_extend(&idl, id);
+ if (idl_rc) {
+ LDAPDebug1Arg(LDAP_DEBUG_ANY,
+ "unable to extend id list (err=%d)\n", idl_rc);
+ idl_free(idl); idl = NULL;
+ goto error;
+ }
+#if defined(DB_ALLIDS_ON_READ)
+ /* enforce the allids read limit */
+ if (idl && idl_new_exceeds_allidslimit(count, ai, allidslimit)) {
+ idl->b_nids = 1;
+ idl->b_ids[0] = ALLID;
+ ret = DB_NOTFOUND; /* fool the code below into thinking that we finished the dups */
+ break;
+ }
+#endif
+ }
+#endif
+
+ if (ret) {
+ if (ret == DB_NOTFOUND) {
+ ret = 0; /* normal case */
+ } else {
+ idl_free(idl); idl = NULL;
+ ldbm_nasty(filename,59,ret);
+ goto error;
+ }
+ }
+
+ /* check for allids value */
+ if (idl && (idl->b_nids == 1) && (idl->b_ids[0] == ALLID)) {
+ idl_free(idl);
+ idl = idl_allids(be);
+ LDAPDebug1Arg(LDAP_DEBUG_TRACE, "idl_new_fetch %s returns allids\n",
+ cur_key.data);
+ } else {
+ LDAPDebug2Args(LDAP_DEBUG_TRACE, "idl_new_fetch %s returns nids=%lu\n",
+ cur_key.data, (u_long)IDL_NIDS(idl));
+ }
+
+error:
+ DBT_FREE_PAYLOAD(cur_key);
+ /* Close the cursor */
+ if (NULL != cursor) {
+ int ret2 = cursor->c_close(cursor);
+ if (ret2) {
+ ldbm_nasty(filename,3,ret2);
+ if (!ret) {
+ /* if cursor close returns DEADLOCK, we must bubble that up
+ to the higher layers for retries */
+ ret = ret2;
+ }
+ }
+ }
+ if (ret) {
+ dblayer_read_txn_abort(be, &s_txn);
+ } else {
+ dblayer_read_txn_commit(be, &s_txn);
+ }
+ *flag_err = ret;
+
+ /* sort idl */
+ if (idl && !ALLIDS(idl)) {
+ qsort((void *)&idl->b_ids[0], idl->b_nids,
+ (size_t)sizeof(ID), idl_sort_cmp);
+ }
+ return idl;
+}
+
int idl_new_insert_key(
backend *be,
DB* db,
@@ -405,7 +748,7 @@ int idl_new_insert_key(
if (NULL != disposition) {
*disposition = IDL_INSERT_ALLIDS;
}
- goto error; /* allid: don't bother inserting any more */
+ goto error; /* allid: don't bother inserting any more */
}
} else if (DB_NOTFOUND != ret) {
ldbm_nasty(filename,12,ret);
@@ -506,7 +849,7 @@ int idl_new_delete_key(
ret = cursor->c_get(cursor,key,&data,DB_GET_BOTH);
if (0 == ret) {
if (id == ALLID) {
- goto error; /* allid: never delete it */
+ goto error; /* allid: never delete it */
}
} else {
if (DB_NOTFOUND == ret) {
@@ -557,19 +900,19 @@ static int idl_new_store_allids(backend *be, DB *db, DBT *key, DB_TXN *txn)
/* Position cursor at the key */
ret = cursor->c_get(cursor,key,&data,DB_SET);
if (ret == 0) {
- /* We found it, so delete all duplicates */
- ret = cursor->c_del(cursor,0);
- while (0 == ret) {
- ret = cursor->c_get(cursor,key,&data,DB_NEXT_DUP);
- if (0 != ret) {
- break;
- }
- ret = cursor->c_del(cursor,0);
- }
- if (0 != ret && DB_NOTFOUND != ret) {
+ /* We found it, so delete all duplicates */
+ ret = cursor->c_del(cursor,0);
+ while (0 == ret) {
+ ret = cursor->c_get(cursor,key,&data,DB_NEXT_DUP);
+ if (0 != ret) {
+ break;
+ }
+ ret = cursor->c_del(cursor,0);
+ }
+ if (0 != ret && DB_NOTFOUND != ret) {
ldbm_nasty(filename,54,ret);
goto error;
- } else {
+ } else {
ret = 0;
}
} else {
@@ -602,9 +945,9 @@ error:
}
return ret;
#ifdef KRAZY_K0DE
- /* If this function is called in "no-allids" mode, then it's a bug */
- ldbm_nasty(filename,63,0);
- return -1;
+ /* If this function is called in "no-allids" mode, then it's a bug */
+ ldbm_nasty(filename,63,0);
+ return -1;
#endif
}
#endif
@@ -674,7 +1017,7 @@ int idl_new_store_block(
ret = cursor->c_put(cursor, key, &data, DB_NODUPDATA);
if (0 != ret) {
if (DB_KEYEXIST == ret) {
- ret = 0; /* exist is okay */
+ ret = 0; /* exist is okay */
} else {
ldbm_nasty(filename,48,ret);
goto error;
diff --git a/ldap/servers/slapd/back-ldbm/index.c b/ldap/servers/slapd/back-ldbm/index.c
index 5948717..a10c67a 100644
--- a/ldap/servers/slapd/back-ldbm/index.c
+++ b/ldap/servers/slapd/back-ldbm/index.c
@@ -1086,7 +1086,7 @@ index_read_ext(
see also dblayer_bt_compare
*/
-static int
+int
DBTcmp (DBT* L, DBT* R, value_compare_fn_type cmp_fn)
{
struct berval Lv;
@@ -1107,16 +1107,6 @@ DBTcmp (DBT* L, DBT* R, value_compare_fn_type cmp_fn)
return cmp_fn(&Lv, &Rv);
}
-/* This only works with normalized keys, which
- should be ok because at this point both L and R
- should have already been normalized
-*/
-#define DBT_EQ(L,R) ((L)->dsize == (R)->dsize &&\
- ! memcmp ((L)->dptr, (R)->dptr, (L)->dsize))
-
-
-#define DBT_FREE_PAYLOAD(d) if ((d).data) {free((d).data);(d).data=NULL;}
-
/* Steps to the next key without keeping a cursor open */
/* Returns the new key value in the DBT */
static int index_range_next_key(DB *db,DBT *key,DB_TXN *db_txn)
@@ -1222,7 +1212,7 @@ index_range_read_ext(
DBT upperkey = {0};
DBT cur_key = {0};
DBT data = {0} ;
- IDList *idl= NULL;
+ IDList *idl = NULL;
char *prefix = NULL;
char *realbuf, *nextrealbuf;
size_t reallen, nextreallen;
@@ -1230,10 +1220,9 @@ index_range_read_ext(
ID i;
struct attrinfo *ai = NULL;
int lookthrough_limit = -1; /* default no limit */
- int retry_count = 0;
int is_and = 0;
int sizelimit = 0;
- time_t curtime, stoptime, optime;
+ time_t curtime, stoptime = 0;
int timelimit = -1;
back_search_result_set *sr = NULL;
int isroot = 0;
@@ -1254,19 +1243,20 @@ index_range_read_ext(
plen = strlen(prefix);
slapi_pblock_get(pb, SLAPI_SEARCH_IS_AND, &is_and);
- if (!is_and)
- {
+ if (!is_and) {
slapi_pblock_get(pb, SLAPI_SEARCH_SIZELIMIT, &sizelimit);
}
- slapi_pblock_get( pb, SLAPI_OPINITIATED_TIME, &optime );
slapi_pblock_get(pb, SLAPI_SEARCH_TIMELIMIT, &timelimit);
- stoptime = optime + timelimit;
+ if (timelimit != -1) {
+ time_t optime;
+ slapi_pblock_get(pb, SLAPI_OPINITIATED_TIME, &optime);
+ stoptime = optime + timelimit;
+ }
/*
* Determine the lookthrough_limit from the PBlock.
* No limit if there is no search result set and the requestor is root.
*/
-
slapi_pblock_get( pb, SLAPI_SEARCH_RESULT_SET, &sr );
if (sr != NULL) {
/* the normal case */
@@ -1279,8 +1269,8 @@ index_range_read_ext(
}
}
- LDAPDebug(LDAP_DEBUG_TRACE, "index_range_read lookthrough_limit=%d\n",
- lookthrough_limit, 0, 0);
+ LDAPDebug1Arg(LDAP_DEBUG_TRACE, "index_range_read lookthrough_limit=%d\n",
+ lookthrough_limit);
switch( operator ) {
case SLAPI_OP_LESS:
@@ -1323,7 +1313,7 @@ index_range_read_ext(
/* get a cursor so we can walk over the table */
*err = db->cursor(db,db_txn,&dbc,0);
if (0 != *err ) {
- ldbm_nasty(errmsg, 1060, *err);
+ ldbm_nasty(errmsg, 1060, *err);
LDAPDebug( LDAP_DEBUG_ANY,
"<= index_range_read(%s,%s) NULL: db->cursor() == %i\n",
type, prefix, *err );
@@ -1344,7 +1334,7 @@ index_range_read_ext(
reallen = plen + 1; /* include 0 terminator */
realbuf = slapi_ch_strdup(prefix);
}
- if (range != 1) {
+ if (range != 1) { /* open range search */
char *tmpbuf = NULL;
/* this is a search with only one boundary value */
switch( operator ) {
@@ -1390,12 +1380,12 @@ index_range_read_ext(
tmpbuf = slapi_ch_realloc (tmpbuf, cur_key.dsize);
memcpy (tmpbuf, cur_key.dptr, cur_key.dsize);
DBT_FREE_PAYLOAD(upperkey);
- upperkey.dptr = tmpbuf;
- upperkey.dsize = cur_key.dsize;
+ upperkey.dptr = NULL; /* x >= a :no need to check upper bound */
+ upperkey.dsize = 0;
}
break;
}
- } else {
+ } else { /* closed range search: e.g., (&(x >= a)(x <= b)) */
/* this is a search with two boundary values (starting and ending) */
if ( nextval != NULL ) { /* compute a key from nextval */
const size_t vlen = nextval->bv_len;
@@ -1409,22 +1399,10 @@ index_range_read_ext(
nextrealbuf = slapi_ch_strdup(prefix);
}
/* set up the starting and ending keys for search */
- switch( operator ) {
- case SLAPI_OP_LESS:
- case SLAPI_OP_LESS_OR_EQUAL:
- lowerkey.dptr = nextrealbuf;
- lowerkey.dsize = nextreallen;
- upperkey.dptr = realbuf;
- upperkey.dsize = reallen;
- break;
- case SLAPI_OP_GREATER_OR_EQUAL:
- case SLAPI_OP_GREATER:
- lowerkey.dptr = realbuf;
- lowerkey.dsize = reallen;
- upperkey.dptr = nextrealbuf;
- upperkey.dsize = nextreallen;
- break;
- }
+ lowerkey.dptr = realbuf;
+ lowerkey.dsize = reallen;
+ upperkey.dptr = nextrealbuf;
+ upperkey.dsize = nextreallen;
}
/* if (LDAP_DEBUG_FILTER) {
char encbuf [BUFSIZ];
@@ -1472,140 +1450,159 @@ index_range_read_ext(
if (operator == SLAPI_OP_GREATER) {
*err = index_range_next_key(db,&cur_key,db_txn);
}
- while (*err == 0 &&
- (operator == SLAPI_OP_LESS) ?
- DBTcmp(&cur_key, &upperkey, ai->ai_key_cmp_fn) < 0 :
- DBTcmp(&cur_key, &upperkey, ai->ai_key_cmp_fn) <= 0) {
- /* exit the loop when we either run off the end of the table,
- * fail to read a key, or read a key that's out of range.
- */
- IDList *tmp;
- /*
- char encbuf [BUFSIZ];
- LDAPDebug( LDAP_DEBUG_FILTER, " cur_key=%s(%li bytes)\n",
- encoded (&cur_key, encbuf), (long)cur_key.dsize, 0 );
- */
- /* Check to see if we've already looked too hard */
- if (idl != NULL && lookthrough_limit != -1 && idl->b_nids > (ID)lookthrough_limit) {
- if (NULL != idl) {
- idl_free(idl);
+ if (idl_get_idl_new()) { /* new idl */
+ idl = idl_new_range_fetch(be, db, &cur_key, &upperkey, db_txn,
+ ai, err, allidslimit, sizelimit, stoptime,
+ lookthrough_limit, operator);
+ } else { /* old idl */
+ int retry_count = 0;
+ while (*err == 0 &&
+ (upperkey.data &&
+ (operator == SLAPI_OP_LESS) ?
+ DBTcmp(&cur_key, &upperkey, ai->ai_key_cmp_fn) < 0 :
+ DBTcmp(&cur_key, &upperkey, ai->ai_key_cmp_fn) <= 0)) {
+ /* exit the loop when we either run off the end of the table,
+ * fail to read a key, or read a key that's out of range.
+ */
+ IDList *tmp;
+ /*
+ char encbuf [BUFSIZ];
+ LDAPDebug( LDAP_DEBUG_FILTER, " cur_key=%s(%li bytes)\n",
+ encoded (&cur_key, encbuf), (long)cur_key.dsize, 0 );
+ */
+ /* lookthrough limit and size limit check */
+ if (idl) {
+ if ((lookthrough_limit != -1) &&
+ (idl->b_nids > (ID)lookthrough_limit)) {
+ idl_free(idl);
+ idl = idl_allids( be );
+ LDAPDebug0Args(LDAP_DEBUG_TRACE,
+ "index_range_read lookthrough_limit exceeded\n");
+ *err = LDAP_ADMINLIMIT_EXCEEDED;
+ break;
+ }
+ if ((sizelimit > 0) && (idl->b_nids > (ID)sizelimit)) {
+ LDAPDebug0Args(LDAP_DEBUG_TRACE,
+ "index_range_read sizelimit exceeded\n");
+ *err = LDAP_SIZELIMIT_EXCEEDED;
+ break;
+ }
}
- idl = idl_allids( be );
- LDAPDebug(LDAP_DEBUG_TRACE, "index_range_read lookthrough_limit exceeded\n",
- 0, 0, 0);
- break;
- }
- if (idl != NULL && sizelimit > 0 && idl->b_nids > (ID)sizelimit)
- {
- LDAPDebug(LDAP_DEBUG_TRACE, "index_range_read sizelimit exceeded\n",
- 0, 0, 0);
- break;
- }
- /* check time limit */
- curtime = current_time();
- if ( timelimit != -1 && curtime >= stoptime )
- {
- LDAPDebug(LDAP_DEBUG_TRACE, "index_range_read timelimit exceeded\n",
- 0, 0, 0);
- break;
- }
-
- /* Check to see if the operation has been abandoned (also happens
- * when the connection is closed by the client).
- */
- if ( slapi_op_abandoned( pb )) {
- if (NULL != idl) {
- idl_free(idl);
- idl = NULL;
+ /* check time limit */
+ if (timelimit != -1) {
+ curtime = current_time();
+ if (curtime >= stoptime) {
+ LDAPDebug0Args(LDAP_DEBUG_TRACE,
+ "index_range_read timelimit exceeded\n");
+ *err = LDAP_TIMELIMIT_EXCEEDED;
+ break;
+ }
}
- LDAPDebug(LDAP_DEBUG_TRACE,
- "index_range_read - operation abandoned\n", 0, 0, 0);
- break; /* clean up happens outside the while() loop */
- }
-
- /* the cur_key DBT already has the first entry in it when we enter the loop */
- /* so we process the entry then step to the next one */
- cur_key.flags = 0;
- for (retry_count = 0; retry_count < IDL_FETCH_RETRY_COUNT; retry_count++) {
- *err = NEW_IDL_DEFAULT;
- tmp = idl_fetch_ext( be, db, &cur_key, NULL, ai, err, allidslimit );
- if(*err == DB_LOCK_DEADLOCK) {
- ldbm_nasty("index_range_read retrying transaction", 1090, *err);
+ /* Check to see if the operation has been abandoned (also happens
+ * when the connection is closed by the client).
+ */
+ if ( slapi_op_abandoned( pb )) {
+ if (NULL != idl) {
+ idl_free(idl);
+ idl = NULL;
+ }
+ LDAPDebug0Args(LDAP_DEBUG_TRACE,
+ "index_range_read - operation abandoned\n");
+ break; /* clean up happens outside the while() loop */
+ }
+
+ /* the cur_key DBT already has the first entry in it when we enter
+ * the loop, so we process the entry then step to the next one */
+ cur_key.flags = 0;
+ for (retry_count = 0;
+ retry_count < IDL_FETCH_RETRY_COUNT;
+ retry_count++) {
+ *err = NEW_IDL_DEFAULT;
+ tmp = idl_fetch_ext(be, db, &cur_key, NULL, ai, err, allidslimit);
+ if(*err == DB_LOCK_DEADLOCK) {
+ ldbm_nasty("index_range_read retrying transaction", 1090, *err);
#ifdef FIX_TXN_DEADLOCKS
#error if txn != NULL, have to abort and retry the transaction, not just the fetch
#endif
- continue;
- } else {
- break;
- }
- }
- if(retry_count == IDL_FETCH_RETRY_COUNT) {
- ldbm_nasty("index_range_read retry count exceeded",1095,*err);
- }
- if (!tmp) {
- if (slapi_is_loglevel_set(LDAP_DEBUG_TRACE)) {
- char encbuf[BUFSIZ];
- LDAPDebug2Args(LDAP_DEBUG_TRACE,
- "index_range_read_ext: cur_key=%s(%li bytes) was deleted - skipping\n",
- encoded(&cur_key, encbuf), (long)cur_key.dsize);
+ continue;
+ } else {
+ break;
+ }
}
- } else {
- /* idl tmp only contains one id */
- /* append it at the end here; sort idlist at the end */
- if (ALLIDS(tmp)) {
- idl_free(idl);
- idl = tmp;
+ if(retry_count == IDL_FETCH_RETRY_COUNT) {
+ ldbm_nasty("index_range_read retry count exceeded",1095,*err);
+ }
+ if (!tmp) {
+ if (slapi_is_loglevel_set(LDAP_DEBUG_TRACE)) {
+ char encbuf[BUFSIZ];
+ LDAPDebug2Args(LDAP_DEBUG_TRACE,
+ "index_range_read_ext: cur_key=%s(%li bytes) was deleted - skipping\n",
+ encoded(&cur_key, encbuf), (long)cur_key.dsize);
+ }
} else {
- ID id;
- for (id = idl_firstid(tmp); id != NOID; id = idl_nextid(tmp, id)) {
- *err = idl_append_extend(&idl, id);
- if (*err) {
- ldbm_nasty("index_range_read - failed to generate idlist",
- 1097, *err);
+ /* idl tmp only contains one id */
+ /* append it at the end here; sort idlist at the end */
+ if (ALLIDS(tmp)) {
+ idl_free(idl);
+ idl = tmp;
+ } else {
+ ID id;
+ for (id = idl_firstid(tmp);
+ id != NOID; id = idl_nextid(tmp, id)) {
+ *err = idl_append_extend(&idl, id);
+ if (*err) {
+ ldbm_nasty("index_range_read - failed to generate idlist",
+ 1097, *err);
+ }
}
+ idl_free(tmp);
+ }
+ if (ALLIDS(idl)) {
+ LDAPDebug0Args(LDAP_DEBUG_TRACE,
+ "index_range_read hit an allids value\n");
+ break;
}
- idl_free(tmp);
}
- if (ALLIDS(idl)) {
- LDAPDebug(LDAP_DEBUG_TRACE, "index_range_read hit an allids value\n",
- 0, 0, 0);
+ if (DBT_EQ (&cur_key, &upperkey)) { /* this is the last key */
+ break;
+ /* Another c_get would return the same key, with no error. */
+ }
+ data.flags = DB_DBT_MALLOC;
+ cur_key.flags = DB_DBT_MALLOC;
+ *err = index_range_next_key(db,&cur_key,db_txn);
+ /* *err = dbc->c_get(dbc,&cur_key,&data,DB_NEXT); */
+ if (*err == DB_NOTFOUND) {
+ *err = 0;
break;
}
}
- if (DBT_EQ (&cur_key, &upperkey)) { /* this is the last key */
- break;
- /* Another c_get would return the same key, with no error. */
- }
- data.flags = DB_DBT_MALLOC;
- cur_key.flags = DB_DBT_MALLOC;
- *err = index_range_next_key(db,&cur_key,db_txn);
- /* *err = dbc->c_get(dbc,&cur_key,&data,DB_NEXT); */
- if (*err == DB_NOTFOUND) {
- *err = 0;
- break;
+ /* sort idl */
+ if (idl && !ALLIDS(idl)) {
+ qsort((void *)&idl->b_ids[0], idl->b_nids,
+ (size_t)sizeof(ID), idl_sort_cmp);
}
}
- if (*err) LDAPDebug( LDAP_DEBUG_FILTER, " dbc->c_get(...DB_NEXT) == %i\n", *err, 0, 0);
+ if (*err) {
+ LDAPDebug1Arg(LDAP_DEBUG_FILTER,
+ " dbc->c_get(...DB_NEXT) == %i\n", *err);
+ }
#ifdef LDAP_DEBUG
- /* this is for debugging only */
- if (idl != NULL)
- {
- if (ALLIDS(idl)) {
- LDAPDebug( LDAP_DEBUG_FILTER,
- " idl=ALLIDS\n", 0, 0, 0 );
- } else {
- LDAPDebug( LDAP_DEBUG_FILTER,
- " idl->b_nids=%d\n", idl->b_nids, 0, 0 );
- LDAPDebug( LDAP_DEBUG_FILTER,
- " idl->b_nmax=%d\n", idl->b_nmax, 0, 0 );
-
- for ( i= 0; i< idl->b_nids; i++)
- {
- LDAPDebug( LDAP_DEBUG_FILTER,
- " idl->b_ids[%d]=%d\n", i, idl->b_ids[i], 0);
- }
+ /* this is for debugging only */
+ if (idl != NULL) {
+ if (ALLIDS(idl)) {
+ LDAPDebug0Args(LDAP_DEBUG_FILTER, " idl=ALLIDS\n");
+ } else {
+ LDAPDebug1Arg(LDAP_DEBUG_FILTER,
+ " idl->b_nids=%d\n", idl->b_nids);
+ LDAPDebug1Arg(LDAP_DEBUG_FILTER,
+ " idl->b_nmax=%d\n", idl->b_nmax);
+
+ for (i = 0; i < idl->b_nids; i++) {
+ LDAPDebug2Args(LDAP_DEBUG_FILTER,
+ " idl->b_ids[%d]=%d\n", i, idl->b_ids[i]);
}
}
+ }
#endif
error:
index_free_prefix(prefix);
@@ -1613,13 +1610,6 @@ error:
DBT_FREE_PAYLOAD(upperkey);
dblayer_release_index_file( be, ai, db );
-
- /* sort idl */
- if (idl && !ALLIDS(idl)) {
- qsort((void *)&idl->b_ids[0], idl->b_nids,
- (size_t)sizeof(ID), idl_sort_cmp);
- }
-
LDAPDebug( LDAP_DEBUG_TRACE, "<= index_range_read(%s,%s) %lu candidates\n",
type, prefix, (u_long)IDL_NIDS(idl) );
return( idl );
diff --git a/ldap/servers/slapd/back-ldbm/proto-back-ldbm.h b/ldap/servers/slapd/back-ldbm/proto-back-ldbm.h
index f9c2c05..a0c3a42 100644
--- a/ldap/servers/slapd/back-ldbm/proto-back-ldbm.h
+++ b/ldap/servers/slapd/back-ldbm/proto-back-ldbm.h
@@ -283,6 +283,10 @@ int idl_new_compare_dups(
const DBT *a,
const DBT *b
);
+IDList *idl_new_range_fetch(backend *be, DB* db, DBT *lowerkey, DBT *upperkey,
+ DB_TXN *txn, struct attrinfo *a, int *flag_err,
+ int allidslimit, int sizelimit, time_t stoptime,
+ int lookthrough_limit, int operator);
/*
* index.c
@@ -300,6 +304,7 @@ IDList* index_read_ext_allids( backend *be, char *type, const char* indextype, c
IDList* index_range_read( Slapi_PBlock *pb, backend *be, char *type, const char* indextype, int ftype, struct berval* val, struct berval* nextval, int range, back_txn *txn, int *err );
IDList* index_range_read_ext( Slapi_PBlock *pb, backend *be, char *type, const char* indextype, int ftype, struct berval* val, struct berval* nextval, int range, back_txn *txn, int *err, int allidslimit );
const char *encode( const struct berval* data, char buf[BUFSIZ] );
+int DBTcmp(DBT* L, DBT* R, value_compare_fn_type cmp_fn);
extern const char* indextype_PRESENCE;
extern const char* indextype_EQUALITY;
11 years, 2 months
Changes to 'refs/tags/389-ds-base-1.2.10.25'
by Richard Allen Megginson
Changes since 389-ds-base-1.2.6.a1:
Charles Lopes (1):
Bug #361: Bad DNs in ACIs can segfault ns-slapd
Endi S. Dewata (168):
Bug 545620 - Password cannot start with minus sign
Bug 538525 - Ability to create instance as non-root user
Bug 570542 - Root password cannot contain matching curly braces
Bug 470684 - Pam_passthru plugin doesn't verify account activation
Bug 573375 - MODRDN operation not logged
Bug 520151 - Error when modifying userPassword with proxy user
Bug 455489 - Address compiler warnings about strict-aliasing rules
Bug 566320 - RFE: add exception to removal of attributes in cn=config for aci
Bug 566043 - startpid file is only cleaned by initscript runs
Bug 584109 - Slapd crashes while parsing DNA configuration
Bug 542570 - Directory Server port number is not validated in the beginning.
Bug 145181 - Plugin target/bind subtrees only take 1 value.
Bug 614511 - fix coverify Defect Type: Null pointer dereferences issues 11846 - 11891
Bug 614511 - fix coverify Defect Type: Null pointer dereferences issues 11846 - 11891
Bug 614511 - fix coverify Defect Type: Null pointer dereferences issues 11846 - 11891
Bug 614511 - fix coverify Defect Type: Null pointer dereferences issues 11846 - 11891
Bug 614511 - fix coverify Defect Type: Null pointer dereferences issues 11846 - 11891
Bug 614511 - fix coverify Defect Type: Null pointer dereferences issues 11846 - 11891
Bug 614511 - fix coverify Defect Type: Null pointer dereferences issues 11846 - 11891
Bug 614511 - fix coverify Defect Type: Null pointer dereferences issues 11846 - 11891
Bug 614511 - fix coverify Defect Type: Null pointer dereferences issues 11846 - 11891
Bug 614511 - fix coverify Defect Type: Null pointer dereferences issues 11846 - 11891
Bug 614511 - fix coverify Defect Type: Null pointer dereferences issues 11846 - 11891
Bug 614511 - fix coverify Defect Type: Null pointer dereferences issues 11846 - 11891
Bug 614511 - fix coverify Defect Type: Null pointer dereferences issues 11846 - 11891
Bug 614511 - fix coverify Defect Type: Null pointer dereferences issues 11846 - 11891
Bug 614511 - fix coverify Defect Type: Null pointer dereferences issues 11846 - 11891
Bug 614511 - fix coverify Defect Type: Null pointer dereferences issues 11846 - 11891
Bug 614511 - fix coverify Defect Type: Null pointer dereferences issues 11846 - 11891
Bug 614511 - fix coverify Defect Type: Null pointer dereferences issues 11846 - 11891
Bug 614511 - fix coverify Defect Type: Null pointer dereferences issues 11846 - 11891
Bug 614511 - fix coverify Defect Type: Null pointer dereferences issues 11846 - 11891
Bug 614511 - fix coverify Defect Type: Null pointer dereferences issues 11846 - 11891
Bug 614511 - fix coverify Defect Type: Null pointer dereferences issues 11846 - 11891
Bug 619122 - fix coverify Defect Type: Resource leaks issues CID 11975 - 12053
Bug 619122 - fix coverify Defect Type: Resource leaks issues CID 11975 - 12053
Bug 619122 - fix coverify Defect Type: Resource leaks issues CID 11975 - 12053
Bug 619122 - fix coverify Defect Type: Resource leaks issues CID 11975 - 12053
Bug 619122 - fix coverify Defect Type: Resource leaks issues CID 11975 - 12053
Bug 619122 - fix coverify Defect Type: Resource leaks issues CID 11975 - 12053
Bug 619122 - fix coverify Defect Type: Resource leaks issues CID 11975 - 12053
Bug 619122 - fix coverify Defect Type: Resource leaks issues CID 11975 - 12053
Bug 619122 - fix coverify Defect Type: Resource leaks issues CID 11975 - 12053
Bug 619122 - fix coverify Defect Type: Resource leaks issues CID 11975 - 12053
Bug 619122 - fix coverify Defect Type: Resource leaks issues CID 11975 - 12053
Bug 619122 - fix coverify Defect Type: Resource leaks issues CID 11975 - 12053
Bug 619122 - fix coverify Defect Type: Resource leaks issues CID 11975 - 12053
Bug 619122 - fix coverify Defect Type: Resource leaks issues CID 11975 - 12053
Bug 619122 - fix coverify Defect Type: Resource leaks issues CID 11975 - 12053
Bug 619122 - fix coverify Defect Type: Resource leaks issues CID 11975 - 12053
Bug 619122 - fix coverify Defect Type: Resource leaks issues CID 11975 - 12053
Bug 619122 - fix coverify Defect Type: Resource leaks issues CID 11975 - 12053
Bug 619122 - fix coverify Defect Type: Resource leaks issues CID 11975 - 12053
Bug 619122 - fix coverify Defect Type: Resource leaks issues CID 11975 - 12053
Bug 619122 - fix coverify Defect Type: Resource leaks issues CID 11975 - 12053
Bug 619122 - fix coverify Defect Type: Resource leaks issues CID 11975 - 12053
Bug 619122 - fix coverify Defect Type: Resource leaks issues CID 11975 - 12053
Bug 619122 - fix coverify Defect Type: Resource leaks issues CID 11975 - 12053
Bug 619122 - fix coverify Defect Type: Resource leaks issues CID 11975 - 12053
Bug 619122 - fix coverify Defect Type: Resource leaks issues CID 11975 - 12053
Bug 619122 - fix coverify Defect Type: Resource leaks issues CID 11975 - 12053
Bug 619122 - fix coverify Defect Type: Resource leaks issues CID 11975 - 12053
Bug 619122 - fix coverify Defect Type: Resource leaks issues CID 11975 - 12053
Bug 619122 - fix coverify Defect Type: Resource leaks issues CID 11975 - 12053
Bug 619122 - fix coverify Defect Type: Resource leaks issues CID 11975 - 12053
Bug 619122 - fix coverify Defect Type: Resource leaks issues CID 11975 - 12053
Bug 619122 - fix coverify Defect Type: Resource leaks issues CID 11975 - 12053
Bug 619122 - fix coverify Defect Type: Resource leaks issues CID 11975 - 12053
Bug 619122 - fix coverify Defect Type: Resource leaks issues CID 11975 - 12053
Bug 617630 - fix coverify Defect Type: Resource leaks issues CID 12052 - 12093
Bug 617630 - fix coverify Defect Type: Resource leaks issues CID 12052 - 12093
Bug 617630 - fix coverify Defect Type: Resource leaks issues CID 12052 - 12093
Bug 617630 - fix coverify Defect Type: Resource leaks issues CID 12052 - 12093
Bug 617630 - fix coverify Defect Type: Resource leaks issues CID 12052 - 12093
Bug 617630 - fix coverify Defect Type: Resource leaks issues CID 12052 - 12093
Bug 617630 - fix coverify Defect Type: Resource leaks issues CID 12052 - 12093
Bug 617630 - fix coverify Defect Type: Resource leaks issues CID 12052 - 12093
Bug 617630 - fix coverify Defect Type: Resource leaks issues CID 12052 - 12093
Bug 617630 - fix coverify Defect Type: Resource leaks issues CID 12052 - 12093
Bug 617630 - fix coverify Defect Type: Resource leaks issues CID 12052 - 12093
Bug 617630 - fix coverify Defect Type: Resource leaks issues CID 12052 - 12093
Bug 617630 - fix coverify Defect Type: Resource leaks issues CID 12052 - 12093
Bug 617630 - fix coverify Defect Type: Resource leaks issues CID 12052 - 12093
Bug 617630 - fix coverify Defect Type: Resource leaks issues CID 12052 - 12093
Bug 617630 - fix coverify Defect Type: Resource leaks issues CID 12052 - 12093
Bug 617630 - fix coverify Defect Type: Resource leaks issues CID 12052 - 12093
Bug 617630 - fix coverify Defect Type: Resource leaks issues CID 12052 - 12093
Bug 617630 - fix coverify Defect Type: Resource leaks issues CID 12052 - 12093
Bug 617630 - fix coverify Defect Type: Resource leaks issues CID 12052 - 12093
Bug 617630 - fix coverify Defect Type: Resource leaks issues CID 12052 - 12093
Bug 617630 - fix coverify Defect Type: Resource leaks issues CID 12052 - 12093
Bug 613056 - fix coverify Defect Type: Null pointer dereferences issues 11892 - 11939
Bug 613056 - fix coverify Defect Type: Null pointer dereferences issues 11892 - 11939
Bug 613056 - fix coverify Defect Type: Null pointer dereferences issues 11892 - 11939
Bug 613056 - fix coverify Defect Type: Null pointer dereferences issues 11892 - 11939
Bug 613056 - fix coverify Defect Type: Null pointer dereferences issues 11892 - 11939
Bug 613056 - fix coverify Defect Type: Null pointer dereferences issues 11892 - 11939
Bug 613056 - fix coverify Defect Type: Null pointer dereferences issues 11892 - 11939
Bug 613056 - fix coverify Defect Type: Null pointer dereferences issues 11892 - 11939
Bug 613056 - fix coverify Defect Type: Null pointer dereferences issues 11892 - 11939
Bug 613056 - fix coverify Defect Type: Null pointer dereferences issues 11892 - 11939
Bug 613056 - fix coverify Defect Type: Null pointer dereferences issues 11892 - 11939
Bug 613056 - fix coverify Defect Type: Null pointer dereferences issues 11892 - 11939
Bug 613056 - fix coverify Defect Type: Null pointer dereferences issues 11892 - 11939
Bug 613056 - fix coverify Defect Type: Null pointer dereferences issues 11892 - 11939
Bug 613056 - fix coverify Defect Type: Null pointer dereferences issues 11892 - 11939
Bug 613056 - fix coverify Defect Type: Null pointer dereferences issues 11892 - 11939
Bug 613056 - fix coverify Defect Type: Null pointer dereferences issues 11892 - 11939
Bug 613056 - fix coverify Defect Type: Null pointer dereferences issues 11892 - 11939
Bug 613056 - fix coverify Defect Type: Null pointer dereferences issues 11892 - 11939
Bug 613056 - fix coverify Defect Type: Null pointer dereferences issues 11892 - 11939
Bug 613056 - fix coverify Defect Type: Null pointer dereferences issues 11892 - 11939
Bug 613056 - fix coverify Defect Type: Null pointer dereferences issues 11892 - 11939
Bug 613056 - fix coverify Defect Type: Null pointer dereferences issues 11892 - 11939
Bug 613056 - fix coverify Defect Type: Null pointer dereferences issues 11892 - 11939
Bug 613056 - fix coverify Defect Type: Null pointer dereferences issues 11892 - 11939
Bug 613056 - fix coverify Defect Type: Null pointer dereferences issues 11892 - 11939
Bug 616500 - fix coverify Defect Type: Resource leaks issues CID 12094 - 12136
Bug 616500 - fix coverify Defect Type: Resource leaks issues CID 12094 - 12136
Bug 616500 - fix coverify Defect Type: Resource leaks issues CID 12094 - 12136
Bug 616500 - fix coverify Defect Type: Resource leaks issues CID 12094 - 12136
Bug 616500 - fix coverify Defect Type: Resource leaks issues CID 12094 - 12136
Bug 616500 - fix coverify Defect Type: Resource leaks issues CID 12094 - 12136
Bug 616500 - fix coverify Defect Type: Resource leaks issues CID 12094 - 12136
Bug 616500 - fix coverify Defect Type: Resource leaks issues CID 12094 - 12136
Bug 616500 - fix coverify Defect Type: Resource leaks issues CID 12094 - 12136
Bug 616500 - fix coverify Defect Type: Resource leaks issues CID 12094 - 12136
Bug 616500 - fix coverify Defect Type: Resource leaks issues CID 12094 - 12136
Bug 616500 - fix coverify Defect Type: Resource leaks issues CID 12094 - 12136
Bug 616500 - fix coverify Defect Type: Resource leaks issues CID 12094 - 12136
Bug 616500 - fix coverify Defect Type: Resource leaks issues CID 12094 - 12136
Bug 616500 - fix coverify Defect Type: Resource leaks issues CID 12094 - 12136
Bug 616500 - fix coverify Defect Type: Resource leaks issues CID 12094 - 12136
Bug 616500 - fix coverify Defect Type: Resource leaks issues CID 12094 - 12136
Bug 610119 - fix coverify Defect Type: Null pointer dereferences issues 12167 - 12199
Bug 610119 - fix coverify Defect Type: Null pointer dereferences issues 12167 - 12199
Bug 610119 - fix coverify Defect Type: Null pointer dereferences issues 12167 - 12199
Bug 610119 - fix coverify Defect Type: Null pointer dereferences issues 12167 - 12199
Bug 610119 - fix coverify Defect Type: Null pointer dereferences issues 12167 - 12199
Bug 610119 - fix coverify Defect Type: Null pointer dereferences issues 12167 - 12199
Bug 610119 - fix coverify Defect Type: Null pointer dereferences issues 12167 - 12199
Bug 610119 - fix coverify Defect Type: Null pointer dereferences issues 12167 - 12199
Bug 610119 - fix coverify Defect Type: Null pointer dereferences issues 12167 - 12199
Bug 610119 - fix coverify Defect Type: Null pointer dereferences issues 12167 - 12199
Bug 610119 - fix coverify Defect Type: Null pointer dereferences issues 12167 - 12199
Bug 610119 - fix coverify Defect Type: Null pointer dereferences issues 12167 - 12199
Bug 610119 - fix coverify Defect Type: Null pointer dereferences issues 12167 - 12199
Bug 610119 - fix coverify Defect Type: Null pointer dereferences issues 12167 - 12199
Bug 610119 - fix coverify Defect Type: Null pointer dereferences issues 12167 - 12199
Bug 610119 - fix coverify Defect Type: Null pointer dereferences issues 12167 - 12199
Bug 611790 - fix coverify Defect Type: Null pointer dereferences issues 11940 - 12166
Bug 611790 - fix coverify Defect Type: Null pointer dereferences issues 11940 - 12166
Bug 611790 - fix coverify Defect Type: Null pointer dereferences issues 11940 - 12166
Bug 611790 - fix coverify Defect Type: Null pointer dereferences issues 11940 - 12166
Bug 611790 - fix coverify Defect Type: Null pointer dereferences issues 11940 - 12166
Bug 611790 - fix coverify Defect Type: Null pointer dereferences issues 11940 - 12166
Bug 611790 - fix coverify Defect Type: Null pointer dereferences issues 11940 - 12166
Bug 611790 - fix coverify Defect Type: Null pointer dereferences issues 11940 - 12166
Bug 611790 - fix coverify Defect Type: Null pointer dereferences issues 11940 - 12166
Bug 611790 - fix coverify Defect Type: Null pointer dereferences issues 11940 - 12166
Bug 611790 - fix coverify Defect Type: Null pointer dereferences issues 11940 - 12166
Bug 611790 - fix coverify Defect Type: Null pointer dereferences issues 11940 - 12166
Bug 611790 - fix coverify Defect Type: Null pointer dereferences issues 11940 - 12166
Bug 611790 - fix coverify Defect Type: Null pointer dereferences issues 11940 - 12166
Bug 628096 - spurious error message from /sbin/service when doing a stop on no instances
Bug 573889 - Migration does not remove deprecated schema
Bug 606545 - core schema should include numSubordinates
Bug 643979 - Strange byte sequence for attribute with no values (nsslapd-referral)
Endi Sukma Dewata (16):
Bug 630092 - Coverity #12117: Resource leaks issues
Bug 630092 - Coverity #15478: Resource leaks issues
Bug 630092 - Coverity #15479: Resource leaks issues
Bug 630092 - Coverity #15481: Resource leaks issues
Bug 630092 - Coverity #15482: Resource leaks issues
Bug 630092 - Coverity #15483: Resource leaks issues
Bug 630092 - Coverity #15484: Resource leaks issues
Bug 630092 - Coverity #15485: Resource leaks issues
Bug 630092 - Coverity #15487: Resource leaks issues
Bug 630092 - Coverity #15490: Resource leaks issues
Bug 630092 - Coverity #15497: Resource leaks issues
Bug 630092 - Coverity #11991: Resource leaks issues
Bug 630092 - Coverity #12000: Resource leaks issues
Bug 630092 - Coverity #12003: Resource leaks issues
Bug 630092 - Coverity #11985: Resource leaks issues
Bug 630092 - Coverity #11992,11993: Resource leaks issues
Mark Reynolds (35):
Ticket #71 - unable to delete managed entry config
Ticket #159 - Managed Entry Plugin runs against managed entries upon any update without validating
Ticket #177 - logconv.pl doesn't detect restarts
Merge branch 'ticket159'
Ticket #49 - better handling for server shutdown while long running tasks are active
Ticket #50 - server should not call a plugin after the plugin close function is calle
Updated for ticket#50
Ticket #55 - Limit of 1024 characters for nsMatchingRule
Ticket #140 - incorrect memset parameters
Revert "Ticket #140 - incorrect memset parameters"
Revert "Ticket #55 - Limit of 1024 characters for nsMatchingRule"
Ticket #38 - nisDomain schema is incorrect
Ticket #6 - protocol error from proxied auth operation
Ticket #55 - Limit of 1024 characters for nsMatchingRule
Ticket #39 - Account Policy Plugin does not work for simple binds when PAM Pass Through Auth plugin is enabled
Ticket 175 - logconv.pl improvements
Ticket 175 - minor fixes
Ticket #306 - void function cannot return value
Ticket #305 - Certain CMP operations hang or cause ns-slapd to crash
Ticket #337 - Improve CLEANRUV task
Ticket 368 - Make the cleanAllRUV task one step
Coverity Fix
Update the slapi-plugin documentation on new slapi functions, and added a slapi function for checking on shutdowns
Ticket 403 - CLEANALLRUV feature
Ticket 403 - cleanallruv coverity fixes
Ticket 403 - CLEANALLRUV revisions
Ticket 403 - fix CLEANALLRUV regression from last commit
CLEANALLRUV coverity fixes
Ticket 450 - CLEANALLRUV task gets stuck on winsync replication agreement
Ticket 467 - CLEANALLRUV abort task should be able to ignore down replicas
Ticket 477 - CLEANALLRUV if there are only winsync agmts task will hang
Ticket 403 - CLEANALLRUV - minor fixes and add support for replica-force-cleaning
bump version to 1.2.10.16
Ticket 332 - CLEANALLRUV 2.0 Testing
bump version to 1.2.10.24
Nathan Kinder (189):
Bug 549554 - Trim single-valued attributes before sending to AD
Improve search for pcre header file
Bug 434735 - Allow SASL ANONYMOUS mech to work
Bug 570912 - Avoid selinux context conflict with httpd
Allow instance name to be parsed from start-slapd
Add managed entries plug-in
Bug 572355 - Label instance files and ports during upgrade.
Bug 578863 - Password modify extop needs to send referrals on replicas
Bug 584156 - Remove ldapi socket file during upgrade
Fix rsearch usage of name files for random filters
Bug 584497 - Allow DNA plugin to set same value on multiple attributes
Add replication session hooks
Correct function prototype for repl session hook
Bug 592389 - Set anonymous resource limits properly
Bug 601433 - Add man pages for start-dirsrv and related commands
Bug 604263 - Fix memory leak when password change is rejected
Bug 612242 - membership change on DS does not show on AD
Bug 613833 - Allow dirsrv_t to bind to rpc ports
Bug 594745 - Get rid of dirsrv_lib_t label
Bug 620927 - Allow multiple membership attributes in memberof plugin
Bug 612264 - ACI issue with (targetattr='userPassword')
Bug 630098 - fix coverity Defect Type: Code maintainability issues
Bug 630098 - fix coverity Defect Type: Code maintainability issues
Bug 630093 - (cov#15511) Don't use unintialized search_results in refint plugin
Bug 630093 - (cov#15518) Need to intialize fd in ldbm2ldif code
Bug 630096 - (cov#11778) check return value of ldap_parse_result
Bug 630096 - (cov#15446) check return value of ber_scanf()
Bug 630096 - (cov#15449,15450) Check return value of stat()
Bug 630096 - (cov#15448) Check return value of cache_replace()
Bug 630096 - (cov#15447) - Check return value of idl_append_extend()
Bug 630090 - (cov#11974) Remove unused ACL functions
Bug 630090 - (cov#15445) Fix illegal free in archive code
Bug 630094 - (cov#11818) Fix unreachable return in snmp subagent
Bug 630094 - (cov#15451) Get rid of unreachable free statements
Bug 630094 - (cov#15452) Remove NULL checking for op_string
Bug 630094 - (cov#15453) Eliminate NULL check for local_newentry
Bug 630094 - (cov#15454) Fix deadcode issue in mapping tree code
Bug 630094 - (cov#15455) Remove deadcode in attr_index_config()
Bug 630094 - (cov#15456) Remove NULL check for srdn in import code
Bug 630094 - (cov#15457) Remove deadcode in import code
Bug 630094 - (cov#15458) Fix deadcode issue in moddn code
Bug 630094 - (cov#15459) Remove NULL check for srdn in ldif2ldbm code
Bug 630094 - (cov#15520) Fix unreachable code issue if perfctrs code
Bug 630094 - (cov#15581) Add missing breaks in agt_mopen_stats()
Bug 690090 - (cov#11974) Remove additional unused ACL functions
Bug 630091 - (cov#15512) Fix usage of uninitialized bervals
Bug 630091 - (cov#15513) Fix usage of uninitialized bervals
Bug 630091 - (cov#15514) Initialize DBT in entryrdn_get_parent()
Bug 630091 - (cov#15515) Use of uninitialized array in index config code
Bug 630091 - (cov#15516,15517) Initialize pointers before attempting to free
Bug 630091 - (cov#15519) Initialize bervals in search_easter_egg()
Bug 630091 - (cov#15582) Free of uninitialized pointer in attr_index_config()
Bug 630097 - (cov#11933) Fix NULL dereference in schema code
Bug 630097 - (cov#11938) NULL dereference in mmldif
Bug 630097 - (cov#11946) NULL dereference in ResHashCreate()
Bug 630097 - (cov#11964) Remove dead code from libaccess
Bug 630097 - (cov#12143) NULL dereference in cos cache code
Bug 630097 - (cov#12148) NULL dereference in ruvInit()
Bug 630097 - (cov#12182,12183) NULL dereference in import code
Bug 630097 - (cov#15460) NULL deference in ACL URL code
Bug 630097 - (cov#15461) Remove unnecessary NULL check in DNA
Bug 630097 - (cov#15462) NULL dereference in mep_modrdn_post_op()
Bug 630097 - (cov#15463) Remove NULL check in referint plugin
Bug 630097 - (cov#15464) NULL dereference in repl code
Bug 630097 - (cov#15465) Null dereference in USN code
Bug 630097 - (cov#15473) NULL dereference in ResHashCreate()
Bug 630097 - (cov#15505) NULL dereference in memberOf code
Bug 630097 - (cov#15506) NULL dereference in dblayer code
Bug 630097 - (cov#15507,15508) NULL dereference in entryrdn code
Bug 630097 - (cov#15509) NULL dereference in idsktune
Bug 630097 - (cov#11938) NULL dereference in mmldif
Bug 630097 - (cov#15477) NULL dereference in ACL plug-in code
Bug 630091 - (cov#12209) Use of uninitialized pointer in libaccess
Bug 630092 - (cov#12116) Resource leak in ldclt code
Bug 630092 - (cov#12105) Resource leak in pwdscheme config code
Bug 630092 - (cov#12068) Resource leak in certmap code
Bug 630091 - (cov#11973) Array overrun in libaccess
Bug 522055 - Scope check for managed attribute fails
Bug 625335 - Self-write aci has permission to invalid attribute
Bug 631993 - Log authzid when proxy auth control is used
Cov #16300 - Unused variable in account policy plugin
Bug 544321 - remove-ds.pl should not throw error unlabelling port
Bug 555955 - Allow CoS values to be merged
Bug 643937 - Initialize replication version flags
Bug 305131 - Allow empty modify operation
Bug 619633 - Make attribute uniqueness obey requiredObjectClass
Bug 619623 - attr-unique-plugin ignores requiredObjectClass on modrdn operations
Bug 189985 - Improve attribute uniqueness error message
Bug 647932 - multiple memberOf configuration adding memberOf where there is no member
Bug 521088 - DNA should check ACLs before getting a value from the range
Bug 635009 - Add one-way AD sync capability
Bump VERSION.sh to 1.2.8.a1
Bug 648949 - Move selinux policy into base OS
Bug 648949 - Update configure
Roll back VERSION.sh for 1.2.7 release
Bug 625950 - hash nsslapd-rootpw changes in audit log
Bug 656392 - Remove calls to ber_err_print()
Bug 656515 - Allow Name and Optional UID syntax for grouping attributes
Bug 197886 - Avoid overflow of UUID generator
Bug 658312 - Allow mapped attribute types to be quoted
Bug 197886 - Initialize return value for UUID generation code
Bug 658309 - Process escaped characters in managed entry mappings
Bug 659456 - Incorrect usage of ber_printf() in winsync code
Bug 641944 - Don't normalize non-DN RDN values
Bug 658312 - Invalid free in Managed Entry plug-in
Bug 661792 - Valid managed entry config rejected
Bug 588791 - Allow anonymous rootDSE access only
Bug 606439 - Creating server instance with LDAPI takes too long
Bug 632670 - Chain-on-update logs managed-entries-plugin errors
Bug 621008 - parsing purge RUV from changelog at startup fails
Bug 663191 - Don't use $USER in DSCreate.pm
Bug 663597 - Memory leaks in normalization code
Bug 659131 - Incorrect RDN values added with multi-valued RDN
Bug 661102 - Rename of managed entries not handled correctly
Bug 193297 - Call pre-bind plug-ins for all SASL bind steps
Bug 201652 - LDAPv2 bind with expired password doesn't unbind correctly
Bug 470576 - Migration could do addition checks before commiting actions
Bug 481195 - Missing op type in log when password change required
Bug 509897 - Validate dnaScope to ensure it is a legal DN
Bug 505722 - Allow ntGroup to have mail attribute present
Bug 543633 - replication problems if supplier is killed under update load
Bug 671033 - range sharing between server breaks with SASL/GSSAPI auth
Bug 527912 - setup-ds.pl appears to hang when DNS is unreachable
Bug 252249 - Add pkg-config file for plug-in developers
Bug 670616 - Allow SSF to be set for local (ldapi) connections
Bug 668862 - init scripts return wrong error code
Bug 674430 - Improve error messages for attribute uniqueness
Bug 675853 - dirsrv crash segfault in need_new_pw()
Bug 678646 - Ignore tombstone operations in managed entry plug-in
Bug 671199 - Don't allow other to write to rundir
Bug 672468 - Don't use empty path elements in LD_LIBRARY_PATH
Bug 674852 - crash in ldap-agent when using OpenLDAP
Bug 681345 - setup-ds.pl should set SuiteSpotGroup automatically
Bug 680558 - Winsync plugin fails to restrain itself to the configured subtree
Bug 504803 - Allow maxlogsize to be set if logmaxdiskspace is -1
Bug 687974 - (cov#10715) Fix Coverity uninitialized variables issues
Bug 688341 - (cov#10709) Fix Coverity code maintainability issues
Bug 688341 - (cov#10708) Fix Coverity code maintainability issues
Bug 688341 - (cov#10706,10707) Fix Coverity code maintainability issues
Bug 688341 - (cov#10704,10705) Fix Coverity code maintainability issues
Bug 688341 - (cov#10703) Fix Coverity code maintainability issues
Bug 688341 - (cov#10702) Fix Coverity code maintainability issues
Bug 688341 - (cov#10709) Fix Coverity code maintainability issues
Bug 689537 - (cov#10699) Fix Coverity NULL pointer dereferences
Bug 689537 - (cov#10610) Fix Coverity NULL pointer dereferences
Bug 689537 - (cov#10608) Fix Coverity NULL pointer dereferences
Bug 689952 - (cov#10581) Incorrect bit check in replication connection code
Bug 690526 - (cov#10734) Double free in dse_add()
Bug 690649 - (cov#10731) Use of free'd pointer in indexing code
Bug 690882 - (cov#10571) Incorrect sizeof use in uuid code
Bug 690882 - (cov#10636,10637) Useless comparison in attrcrypt
Bug 690882 - (cov#10703) Incorrect sizeof use in vattr code
Bug 690882 - (cov#10572,10710) Incorrect sizeof use in uuid code
Bug 691574 - (cov#10579) Check return value of ber_scanf() in sort code
Bug 691574 - (cov#10577) Check return types when adding RDN CSNs
Bug 691574 - (cov#10573) check return value in GER code
Bug 691574 - (cov#10575) Check return value of ldap_get_option
Bug 691574 - (cov#10573) Fix syntax error
Bug 693868 - Add managed entry config during in-place upgrade
Add Auto Membership Plug-in
Bug 698428 - Make auto membership use Slapi_DN for DN comparisons
Bug 695779 - windows sync can lose old values when a new value is added
Bug 700557 - Linked attrs callbacks access free'd pointers after close
Bug 700557 - Leak at shutdown in DNA plug-in
Bug 703304 - Auto membership alternate config area should override default area
Bug 703304 - Auto membership alternate config area should override default area
Bug 703530 - Allow Managed Entry config to be relocated
Bug 697961 - memberOf needs to be triggered by internal operations
Bug 710377 - Import with chain-on-update crashes ns-slapd
Split automember regex rules into separate entries
Bug 713209 - Update sudo schema
Bug 691313 - Need TLS/SSL error messages in repl status and errors log
Bug 723937 - Slapi_Counter API broken on 32-bit F15
Bug 725743 - Make memberOf use PRMonitor for it's operation lock
Bug 729717 - Fatal error messages when syncing deletes from AD
Bug 728510 - Run dirsync after sending updates to AD
Bug 730387 - Add slapi_rwlock API and use POSIX rwlocks
Bug 611438 - Add Account Usability Control support
Bug 728592 - Allow ns-slapd to start with an invalid server cert
Bug 732541 - Ignore error 32 when adding automember config
Bug 722292 - Entries in DS are not updated properly when using WinSync API
Bug 722292 - (cov#11030) Leak of mapped_sdn in winsync rename code
Bug 735114 - renaming a managed entry does not update mepmanagedby
Bug 739172 - Allow separate fractional attrs for incremental and total protocols
Bug 743966 - Compiler warnings in account usability plugin
Bug 744946 - (cov#11046) NULL dereference in IDL code
Bug 752155 - Use restorecon after creating init script lock file
Ticket 284 - Remove unnecessary SNMP MIB files
ticket 304 - Fix kernel version checking in dsktune
Noriko Hosoi (313):
544089 - Referential Integrity Plugin does not take into account the attribute
557224 - subtree rename breaks the referential integrity plug-in
247413 - Incorrect error on multiple identical value add
559016 - Attempting to rename suffix returns inappropriate errors
555577 - Syntax validation fails for "ou=NetscapeRoot" tree
Undo - 555577 - Syntax validation fails for "ou=NetscapeRoot" tree
560827 - Admin Server templates: DistinguishName validation fails
548535 - memory leak in attrcrypt
563365 - Error handling problems in the backend functions
565664 - Incorrect parameter for CACHE_RETURN()
565987 - redhat-ds-base fails to build due to undefined struct
527848 - make sure db upgrade to 4.7 and later works correctly
539618 - Replication bulk import reports Invalid read/write
567370 - dncache: assertion failure in id2entry_delete
548115 - memory leak in schema reload
555970 - missing read lock in the combination of cos and nsview
539618 - Replication bulk import reports Invalid read/write
570667 - MMR: simultaneous total updates on the masters cause
Merge branch '547503'
Revert "Merge branch '547503'"
Bug 554573 - ACIs use bind DN from bind req rather than cert mapped DN from sasl/external
199923 - subtree search fails to find items under a db
570107 - The import of LDIFs with base-64 encoded DNs fails,
572649 - DS8.2 crashes on RHEL 4 (corresponding to bob, ber_2 test case)
573060 - DN normalizer: ESC HEX HEX is not normalized (
573896 - initializing subtree with invalid syntax crashes ns-slapd
515805 - Stop "initialize Database" crashes the server
548533 - memory leak in Repl_5_Inc_Protocol_new
Fixing a syntax error
Update to New DN Format
585905 - ACL with targattrfilters error crashes the server
574167 - An escaped space at the end of the RDN value is not
590931 - rhds81 import - hardcoded pages_limit for nsslapd-import-cache-autosize
591336 - Implementing upgrade DN format tool
593453 - Creating password policy with ns-newpolicy.pl on Replicated
593110 - backup-restore does not ALWAYS work
593899 - adding specific ACI causes very large mem allocate request
588867 - entryusn plugin fails on solaris
593899 - adding specific ACI causes very large mem allocate request
595893 - Base DN in SASL mapping is not normalized
511112 - Password history limited to 25 values
597375 - Deleting LDBM database causes backup/restore problem
574101 - MODRDN request never returns - possible deadlock
606920 - anonymous resource limit - nstimelimit -
605827 - In-place upgrade: upgrade dn format should not run in setup-ds-admin.pl
578296 - Attribute type entrydn needs to be added when subtree
609256 - Selinux: pwdhash fails if called via Admin Server CGI
609255 - fix coverity Defect Type: Memory - illegal accesses issues
609255 - fix coverity Defect Type: Memory - illegal accesses issues
609255 - fix coverity Defect Type: Memory - illegal accesses issues
609255 - fix coverity Defect Type: Memory - illegal accesses issues
609255 - fix coverity Defect Type: Memory - illegal accesses issues
609255 - fix coverity Defect Type: Memory - illegal accesses issues
609255 - fix coverity Defect Type: Memory - illegal accesses issues
609255 - fix coverity Defect Type: Memory - illegal accesses issues
609255 - fix coverity Defect Type: Memory - illegal accesses issues
609255 - fix coverity Defect Type: Memory - illegal accesses issues
609255 - fix coverity Defect Type: Memory - illegal accesses issues
609255 - fix coverity Defect Type: Memory - illegal accesses issues
609255 - fix coverity Defect Type: Memory - illegal accesses issues
609255 - fix coverity Defect Type: Memory - illegal accesses issues
609255 - fix coverity Defect Type: Memory - illegal accesses issues
609255 - fix coverity Defect Type: Memory - illegal accesses issues
616618 - 389 v1.2.5 accepts 2 identical entries with different DN formats
610281 - fix coverity Defect Type: Control flow issues
610281 - fix coverity Defect Type: Control flow issues
610281 - fix coverity Defect Type: Control flow issues
610281 - fix coverity Defect Type: Control flow issues
610281 - fix coverity Defect Type: Control flow issues
610281 - fix coverity Defect Type: Control flow issues
610281 - fix coverity Defect Type: Control flow issues
610281 - fix coverity Defect Type: Control flow issues
610281 - fix coverity Defect Type: Control flow issues
610281 - fix coverity Defect Type: Control flow issues
610281 - fix coverity Defect Type: Control flow issues
610281 - fix coverity Defect Type: Control flow issues
610281 - fix coverity Defect Type: Control flow issues
610281 - fix coverity Defect Type: Control flow issues
610281 - fix coverity Defect Type: Control flow issues
610281 - fix coverity Defect Type: Control flow issues
610281 - fix coverity Defect Type: Control flow issues
610281 - fix coverity Defect Type: Control flow issues
610281 - fix coverity Defect Type: Control flow issues
610281 - fix coverity Defect Type: Control flow issues
610281 - fix coverity Defect Type: Control flow issues
610281 - fix coverity Defect Type: Control flow issues
610281 - fix coverity Defect Type: Control flow issues
610281 - fix coverity Defect Type: Control flow issues
610281 - fix coverity Defect Type: Control flow issues
610281 - fix coverity Defect Type: Control flow issues
610281 - fix coverity Defect Type: Control flow issues
610281 - fix coverity Defect Type: Control flow issues
610281 - fix coverity Defect Type: Control flow issues
610281 - fix coverity Defect Type: Control flow issues
610281 - fix coverity Defect Type: Control flow issues
616608 - SIGBUS in RDN index reads on platforms with strict alignments
619595 - Upgrading sub suffix under non-normalized suffix disappears
513166 - Simple Paged result doesn't provide the server's estimate
621928 - Unable to enable replica (rdn problem?) on 1.2.6 rc6
Bug 194531 - db2bak is too noisy
Bug 622628 - fix coverity Defect Type: Integer handling issues
Bug 622628 - fix coverity Defect Type: Integer handling issues
Bug 622628 - fix coverity Defect Type: Integer handling issues
Bug 622903 - fix coverity Defect Type: Code maintainability issues
Bug 622903 - fix coverity Defect Type: Code maintainability issues
Bug 622903 - fix coverity Defect Type: Code maintainability issues
Bug 622903 - fix coverity Defect Type: Code maintainability issues
Bug 622903 - fix coverity Defect Type: Code maintainability issues
Bug 622903 - fix coverity Defect Type: Code maintainability issues
Bug 622903 - fix coverity Defect Type: Code maintainability issues
Bug 622903 - fix coverity Defect Type: Code maintainability issues
Bug 622903 - fix coverity Defect Type: Code maintainability issues
Bug 622903 - fix coverity Defect Type: Code maintainability issues
Bug 622903 - fix coverity Defect Type: Code maintainability issues
Bug 622903 - fix coverity Defect Type: Code maintainability issues
Bug 622903 - fix coverity Defect Type: Code maintainability issues
Bug 622903 - fix coverity Defect Type: Code maintainability issues
Bug 622903 - fix coverity Defect Type: Code maintainability issues
Bug 623118 - Simplepaged results going in infinite loop
Bug 614511 - fix coverity Defect Type: Null pointer dereferences issues 11846 - 11891
Bug 619122 - fix coverity Defect Type: Resource leaks issues CID 11975 - 12051
Bug 617630 - fix coverify Defect Type: Resource leaks issues CID 12052 - 12093
Bug 617630 - fix coverify Defect Type: Resource leaks issues CID 12052 - 12093
Bug 617630 - fix coverity Defect Type: Resource leaks issues CID 12052 - 12093
Bug 613056 - fix coverify Defect Type: Null pointer dereferences issues 11892 - 11939
Bug 616500 - fix coverity Defect Type: Resource leaks issues CID 12094 - 12136
Bug 616500 - fix coverity Defect Type: Resource leaks issues CID 12094 - 12136
Bug 616500 - fix coverity Defect Type: Resource leaks issues CID 12094 - 12136
Bug 614511 - fix coverify Defect Type: Null pointer dereferences issues 11846 - 11891
Bug 613056 - fix coverify Defect Type: Null pointer dereferences issues 11892 - 11939
Bug 613056 - fix coverify Defect Type: Null pointer dereferences issues 11892
Bug 616500 - fix coverity Defect Type: Resource leaks issues
Bug 623507 - fix coverity Defect Type: Incorrect expression issues
Bug 623507 - fix coverity Defect Type: Incorrect expression issues
Bug 613056 - fix coverify Defect Type: Null pointer dereferences
Bug 610119 - fix coverify Defect Type: Null pointer dereferences issues 12167 - 12199
Bug 610119 - fix coverify Defect Type: Null pointer dereferences issues 12167 - 12199
Bug 610119 - fix coverify Defect Type: Null pointer dereferences issues 12167 - 12199
Bug 610119 - fix coverify Defect Type: Null pointer dereferences issues 12167 - 12199
Bug 611790 - fix coverify Defect Type: Null pointer dereferences issues 11940 - 12166
Bug 611790 - fix coverify Defect Type: Null pointer dereferences issues 11940 - 12166
Bug 611790 - fix coverify Defect Type: Null pointer dereferences issues 11940 - 12166
Bug 611790 - fix coverify Defect Type: Null pointer dereferences issues 11940 - 12166
Bug 611790 - fix coverify Defect Type: Null pointer dereferences issues 11940 - 12166
Removed redundant code in agmt_new_from_entry
Bug 617630 - fix coverify Defect Type: Resource leaks issues CID 12052 - 12093
Bug 628300 - DN is not normalized in dn/entry cache when an entry is added, entrydn is not present in search results
Bug 531642 - EntryUSN: RFE: a configuration option to make entryusn "global"
Bug 627738 - The cn=monitor statistics entries for the dnentry cache do not change or change very rarely
DN normalizer should check the invalid type
Bug 627738 - The cn=monitor statistics entries for the dnentry cache
Bug 629710 - escape_string does not check '\<HEX><HEX>'
agmtlist_shutdown (repl5_agmtlist.c) had an illegal access defect.
Bug 633168 - Share backend dbEnv with the replication changelog
Bug 633168 - Share backend dbEnv with the replication changelog
Bug 631862 - crash - delete entries not in cache + referint
Bug 625014 - SubTree Renames: ModRDN operation fails and the server hangs if the entry is moved to "under" the same DN.
Bug 558099 - Enhancement request: Log more information about the search result being a paged one
Bug 635987 - Incorrect sub scope search result with
Bug 606920 - anonymous resource limit- nstimelimit -
Bug 635987 - Incorrect sub scope search result with ACL containing ldap:///self
Bug 639289 - Adding a new CN entry with UpperCase UTF-8 Character
Bug 640027 - Naming attribute with a special char sequence parsing bug
Bug 640854 - changelog db: _cl5WriteOperation: failed to
Bug 637852 - sasl_io_start_packet: failed - read only 3 bytes
Bug 586966 - Sample update script has syntax errors
Bug 586973 - Sample update ldif points to non-existent directory
Bug 602456 - Allow to add any cn=config attributes;
Bug 244229 - targetattr not verified against schema when setting an aci
Bug 643532 - Incorrect DNs sometimes returned on searches
Bug 592397 - Upgrade tool dn2rdn: it does not clean up
Bug 645061 - Upgrade: 06inetorgperson.ldif and 05rfc4524.ldif
Bug 629681 - Retro Changelog trimming does not behave as expected
Bug 644608 - RHDS 8.1->8.2 upgrade fails to properly migrate ACIs
Bug 644608 - RHDS 8.1->8.2 upgrade fails to properly migrate ACIs
Bug 644608 - RHDS 8.1->8.2 upgrade fails to properly migrate ACIs
Bug 638773 - permissions too loose on pid and lock files
Bug 491733 - dbtest crashes
Bug 329751 - "nested" filtered roles searches candidates more
Bug 567282 - server can not abandon searchRequest of "simple paged results"
Bug 572018 - Upgrading from 1.2.5 to 1.2.6.a2 deletes userRoot
Bug 651571 - When attrcrypt is on, entrydn is stored in the backend db
Bug 661918 - 389-ds MMR plugin's changelogdb path logic is incorrect
Bug 182507 - clear-password mod from replica is discarded before changelogged
Bug 602456 - Allow to add any cn=config attributes;
Bug 489379 - passwordExpirationTime in entry being added
Bug 663484 - Entry usn plugin fails to properly tag entries on initialization
Bug 664563 - GER: ger for non-present entry is not correct
Bug 653007 - db2ldif export of clear text passwords lacks storage scheme
Bug 667488 - Cannot recreate numsubordinates index with db2index
Bug 663752 - Cert renewal for attrcrypt and encchangelog
Bug 615100 - log rotationinfo always recreated at startup,
Bug 624442 - MMR: duplicate replica ID
Bug 669205 - db2bak: backed up changelog should include RUVs
Bug 616850 - ldapmodify failed to reject the replace operation
Bug 627993 - Inconsistent storage of password expiry times
Bug 627993 - Inconsistent storage of password expiry times
dn2rdn should respect the DB version info
Bug 646381 - Faulty password for nsmultiplexorcredentials does not give any error message in logs
Bug 624547 - attrcrypt should query the given slot/token for
Bug 668619 - slapd stops responding
Bug 151705 - Need to update Console Cipher Preferences with new ciphers
Bug 615052 - intrinsics and 64-bit atomics code fails to compile
Bug 616213 - insufficient stack size for HP-UX on PA-RISC
Bug 675265 - preventryusn gets added to entries on a failed delete
Bug 604881 - admin server log files have incorrect permissions/ownerships
Bug 676053 - export task followed by import task causes cache assertion
Bug 676053 - export task followed by import task causes cache assertion
Bug 676053 - export task followed by import task causes cache assertion
Bug 450016 - RFE- Console display values in KB/MB/GB
Cancelling commit aef19508c4f618285116d2068655183658f564d9
Bug 625424 - repl-monitor.pl doesn't work in hub node
Bug 679978 - modifying attr value crashes the server, which is supposed to
Bug 681015 - RFE: allow fine grained password policy duration attributes in days, hours, minutes, as well
Bug 668909 - Can't modify replication agreement in some cases
Bug 684996 - Exported tombstone cannot be imported correctly
Bug 681015 - RFE: allow fine grained password policy duration attributes in days, hours, minutes, as well
Bug 689866 - ns-newpwpolicy.pl needs to use the new DN format
Bug 690955 - Mrclone fails due to the replica generation id mismatch
Bug 696407 - If an entry with a mixed case RDN is turned to be
Bug 697027 - 1 - minor memory leaks found by Valgrind + TET
Bug 697027 - 2 - minor memory leaks found by Valgrind + TET
Bug 697027 - 3 - minor memory leaks found by Valgrind + TET
Bug 697027 - 4 - minor memory leaks found by Valgrind + TET
Bug 697027 - 5 - minor memory leaks found by Valgrind + TET
Bug 697027 - 6 - minor memory leaks found by Valgrind + TET
Bug 697027 - 7 - minor memory leaks found by Valgrind + TET
Bug 697027 - 8 - minor memory leaks found by Valgrind + TET
Bug 697027 - 9 - minor memory leaks found by Valgrind + TET
Bug 697027 - 10 - minor memory leaks found by Valgrind + TET
Bug 697027 - 11 - minor memory leaks found by Valgrind + TET
Bug 697027 - 12 - minor memory leaks found by Valgrind + TET
Bug 697027 - 13 - minor memory leaks found by Valgrind + TET
Bug 697027 - 14 - minor memory leaks found by Valgrind + TET
Bug 697027 - 15 - minor memory leaks found by Valgrind + TET
Bug 697027 - 16 - minor memory leaks found by Valgrind + TET
Bug 697027 - 3 - minor memory leaks found by Valgrind + TET
Bug 697027 - 3 - minor memory leaks found by Valgrind + TET
Bug 700215 - ldclt core dumps
Bug 668619 - slapd stops responding
Bug 709826 - Memory leak: when extra referrals configured
Bug 706179 - DS can not restart after create a new objectClass has entryusn attribute
Bug 663752 - Cert renewal for attrcrypt and encchangelog
Bug 663752 - Cert renewal for attrcrypt and encchangelog
Bug 711679 - unresponsive LDAP service when deleting vlv on replica
Bug 711679 - unresponsive LDAP service when deleting vlv on replica
Bug 718303 - Intensive updates on masters could break the consumer's cache
Merge branch '718303'
Bug 719069 - clean up compiler warnings in 389-ds-base 1.2.9
Bug 712855 - Directory Server 8.2 logs "Netscape Portable
Bug 663752 - Cert renewal for attrcrypt and encchangelog
Bug 732153 - subtree and user account lockout policies implemented?
Introducing an environment variable USE_VALGRIND to clean up the entry cache and dn cache on exit.
Bug 744945 - nsslapd-counters attribute value cannot be set to "off"
Keep unhashed password psuedo-attribute in the adding entry
Reduce the number of DN normalization
Bug 745259 - Incorrect entryUSN index under high load
Bug 750622 - Fix Coverity (11104) Resource leak:
Bug 750624 - Fix Coverity (11053) Explicit null dereferenced:
Bug 750625 - Fix Coverity (11066) Unused pointer value
Bug 750625 - Fix Coverity (11065) Uninitialized pointer read
Bug 750625 - Fix Coverity (11064) Dereference before null check
Bug 750625 - Fix Coverity (11061) Resource leak
Bug 750625 - Fix Coverity (11060) Dereference null return value
Bug 750625 - Fix Coverity (11058, 11059) Dereference null return value
Bug 750625 - Fix Coverity (11057) Dereference null return value
Bug 750625 - Fix Coverity (11055) Explicit null dereferenced
Bug 750625 - Fix Coverity (11054) Dereference after null check
Bug 750625 - Fix Coverity (11117) Uninitialized pointer read
Bug 750625 - Fix Coverity (11116) Uninitialized pointer read
Bug 750625 - Fix Coverity (11114, 11115) Uninitialized value use
Bug 750625 - Fix Coverity (11113) Uninitialized pointer read
Bug 750625 - Fix Coverity (11112) Uninitialized pointer read
Bug 750625 - Fix Coverity (11109, 11110, 11111) Uninitialized pointer read
Bug 750625 - Fix Coverity (11108) Sizeof not portable
Bug 750625 - Fix Coverity (11107) Dereference before null check
Bug 750625 - Fix Coverity (11096) Explicit null dereferenced
Bug 750625 - Fix Coverity (11095) Explicit null dereferenced
Bug 750625 - Fix Coverity (11094) Dereference after null check
Bug 750625 - Fix Coverity (11091) Unchecked return value
Bug 750625 - Fix Coverity (11055-2) Explicit null dereferenced
Bug 750625 - Fix Coverity (11062) Resource leak
Bug 750625 - Fix Coverity (11066-2) Unused pointer value
Bug 750625 - Fix Coverity (12195) Dereference after null check
Bug 750625 - Fix Coverity (12196) Dereference before null check
Bug 750625 - Fix Coverity (11066-3) Unused pointer value
Bug 745259 - Incorrect entryUSN index under high load in
Trac Ticket 2 - If node entries are tombstone'd,
Trac Ticket 2 - If node entries are tombstone'd,
Trac Ticket 26 - Please support setting
Trac Ticket 75 - Unconfigure plugin opperations are being called.
Trac Ticket 168 - minssf should not apply to rootdse
Trac Ticket #18 - Data inconsitency during replication
Trac Ticket #52 - FQDN set to nsslapd-listenhost
Trac Ticket 139 - eliminate the use of char *dn in favor of Slapi_DN *dn
Trac Ticket 35 - Log not clear enough on schema errors
Trac Ticket #274 - Reindexing entryrdn fails if
Trac Ticket #275 - Invalid read reported by valgrind
Trac Ticket 51 - memory leaks in 389-ds-base-1.2.8.2-1.el5?
Trac Ticket #26 - Please support setting defaultNamingContext in the rootdse.
Trac Ticket #298 - crash when replicating orphaned tombstone entry
Trac Ticket #290 - server hangs during shutdown if betxn pre/post op fails
Trac Ticket #359 - Database RUV could mismatch the one
Trac Ticket #338 - letters in object's cn get converted to
Trac Ticket #359 - Database RUV could mismatch the one
Ticket #390 - [abrt] 389-ds-base-1.2.10.6-1.fc16: slapi_attr_value_cmp: Process /usr/sbin/ns-slapd was killed by signal 11 (SIGSEGV)
Bug 829213 - unhashed#user#password visible after changing password
Ticket 365 - passwords in clear text in the audit log
Bug 829213 - unhashed#user#password visible after changing password
Bug 829213 - unhashed#user#password visible after changing password
Trac Ticket 396 - Account Usability Control Not Working [Bug 835238]
Trac Ticket #340 - Change on SLAPI_MODRDN_NEWSUPERIOR is not
Bug 866623 - RHDS crash when attempting to free an invalid pointer
Rich Megginson (339):
Net::LDAP password modify extop breaks; msgid in response is 0xFF
Clean up assert for entrydn
Bug 543080 - Bitwise plugin fails to return the exact matched entries for Bitwise search filter
Bug 537466 - nsslapd-distribution-plugin should not require plugin name to begin with "lib"
bump version to 1.2.6.a2
Do not use syntax plugins directly for filters, indexing
wrap new style matching rule plugins for use in old style indexing code
change extensible filter code to use new syntax function style mr funcs
change syntax plugins to register required matching rule plugins
crash looking up compat syntax; numeric string syntax using integer; make octet string ordering work correctly
fix memory leak in attr replace when replacement fails
fix dso linking issues found by fedora 13 linking
problems linking with -z defs
389 DS segfaults on libsyntax-plugin.so - part 1
389 DS segfaults on libsyntax-plugin.so - part 2
389 DS segfaults on libsyntax-plugin.so - part 3
Bug 460162 - FedoraDS "with-FHS" installs init.d StartupScript in wrong location on non-RHEL/Fedora OS
Bug 568196 - Install DS8.2 on Solaris fails
Bug 568196 - Install DS8.2 on Solaris fails - part 2
Bug 551198 - LDAPI: incorrect logging to access log
bump version to 1.2.6.a3
fix various memory leaks
Bug 551198 - LDAPI: incorrect logging to access log - part 2
Bug 554573 - ACIs use bind DN from bind req rather than cert mapped DN from sasl/external
cleanup build warnings
Bug 571514 - upgrade to 1.2.6 should upgrade 05rfc4523.ldif (cert schema)
Bug 570905 - postalAddress syntax should allow empty lines (should allow $$)
Add support for additional schema/matching rules included with 389
Bug 572677 - Memory leak in searches including GER control
Bug 571677 - Busy replica on consumers when directly deleting a replication conflict
Bug 576074 - search filters with parentheses fail
Bug 567429 - slapd didn't close connection and get into CLOSE_WAIT state
Bug 578167 - repl. of mod/replace deletes multi-valued attrs
Bug 561575 - setup-ds-admin fails to supply nsds5ReplicaName when configuring via ConfigFile
Bug 572162 - the string "|*" within a search filter on a non-indexed attribute returns all elements.
Bug 576644 - segfault while multimaster replication (paired node won't find deleted entries)
start of 1.2.6.a4
Bug 572018 - Upgrading from 1.2.5 to 1.2.6.a2 deletes userRoot
Fix too few args for format warning in acllas
Bug 586571 - DS Console shows escaped DNs
Bug 591685 - Server instances Fail to Start on Solaris due to Library Path and pcre
bump console version to 1.2.3
Repl Session API needs to check for NULL api before init
Bug 593392 - setup-ds-admin.pl -k creates world readable file
Bug 595874 - 99user.ldif getting overpopulated
bump version to 1.2.6.a5
bump version to 1.2.6.rc1
bump version to 1.2.6.rc2
bump version to 1.2.6.rc3
Bug 604453 - SASL Stress and Server crash: Program quits with the assertion failure in PR_Poll
Bug 604453 - SASL Stress and Server crash: Program quits with the assertion failure in PR_Poll
Bug 603942 - null deref in _ger_parse_control() for subjectdn
bump version to 1.2.6.rc4
Bug 609590 - fix coverity Defect Type: Memory - corruptions issues
Bug 609590 - fix coverity Defect Type: Memory - corruptions issues
Bug 609590 - fix coverity Defect Type: Memory - corruptions issues
Bug 609590 - fix coverity Defect Type: Memory - corruptions issues
Bug 609590 - fix coverity Defect Type: Memory - corruptions issues
Bug 609590 - fix coverity Defect Type: Memory - corruptions issues
Bug 609590 - fix coverity Defect Type: Memory - corruptions issues
Bug 609590 - fix coverity Defect Type: Memory - corruptions issues
Bug 609590 - fix coverity Defect Type: Memory - corruptions issues
Bug 602530 - coverity: op_shared_modify: compare pre, post and original entries before freeing them
Bug 602531 - coverity: op_shared_delete: compare preop entry and GLUE_PARENT_ENTRY before freeing them
Bug 609590 - fix coverity Defect Type: Memory - corruptions issues
Bug 610177 - fix coverity Defect Type: Uninitialized variables issues
Bug 610276 - fix coverity Defect Type: API usage errors issues
Bug 611850 - fix coverity Defect Type: Error handling issues
Bug 614242 - C99/ANSI C++ related compile errors on HP-UX
Bug 547503 - replication broken again, with 389 MMR replication and TCP errors
Bug 617013 - repl-monitor.pl use cpu upto 90%
fix build failures due to libtool problems
Bug 617629 - Missing aliases in new schema files
Bug 617862 - Replication: Unable to delete tombstone errors
bump version to 1.2.7.a1
Bug 610281 - fix coverity Defect Type: Control flow issues - daemon.c:write_function()
Bug 610281 - fix coverity Defect Type: Control flow issues - last repl init status
postalAddress syntax does not accept empty values
ger should support both "dn" and "distinguishedName"
openldap - ldap_url_parse_ext is not part of the public api
fix memleak in ldbm_config_read_instance_entries
Add -x option to ldap tools when using openldap
openldap - add support for missing controls, add ldif api, fix NSS usage
port client tools to use openldap API
use the mozldap versions of the proxy auth control create function
document slapi wrappers for openldap/mozldap functions that differ
fix some compiler warnings
use strcasecmp with ptype and type->bv_val
ber_printf 'o' cannot handle NULL bv_val
fix the url_parse logic when looking for a missing suffix DN
openldap ldapsearch uses -LLL to suppress # version: N
add ldaptool_opts for the non BUNDLE case in Makefile.am
openldap ldapsearch returns empty line at end of LDIF output
have to use LDAP_OPT_X_TLS_NEVER to defeat cert hostname checking
openldap_read_function needs to set EWOULDBLOCK if the buffer is empty
do not terminate unwrapped LDIF line with another newline
slapi_ldap_url_parse must handle multiple host:port in url
convert mozldap host list to openldap uri list
move the out pointer back if continuation lines were removed
check src < *out only; only check for \nspace if src < *out - 2
use slapi_ldap_url_parse in the acl code
do not un-null-terminate normalized DN until new url is constructed
implement slapi_ldap_explode_dn and slapi_ldap_explode_rdn
use slapi_pblock_set to set the ldap result code for the be postop plugins
pass the string copy to slapi_dn_normalize_original
bug 614511 - fix coverity null reference - revert macro aci $dn logic
fix compiler warnings - unused vars/funcs, invalid casts
use slapi_mods_init_passin/get_ldapmods_passout if modifying the smods
Have to explicitly set protocol version to 3
Only check modrdn ops for backend/suffix correctness if not the default backend
Bug 634561 - Server crushes when using Windows Sync Agreement
openldap ber_init will assert if the bv->bv_val is NULL
add the account policy plugin and related server code, schema, and config
fix pblock memory leak
do not register pre/post op plugins if disabled
add support for global inactivity limit
fix typos in Makefile.am, acctpolicy schema
bump version to 1.2.7.a2
remove extra format argument; use %lu for size_t printf format
Bug 644013 - uniqueness plugin segfault bug
bump version to 1.2.7.a3
bump to 1.2.7.a4
bump version to 1.2.7.a5
put replication config entries in separate file
bump version to 1.2.7.a6
bump version to 1.2.7.1
bump version to 1.2.7.2
bump version to 1.2.7.3
bump version to 1.2.7.4
Bug 515329 - Multiple mods in one operation can result in an inconsistent replica
bump version to 1.2.8.a1
Bug 642046 - Segfault when using SASL/GSSAPI multimaster replication, possible krb5_creds doublefree
Bug 624485 - setup dsktune check step should default to "yes" if no problems found
Bug 622907 - support piped passwords to perl-based maintenance commands
Bug 624485 - setup dsktune check step should default to "yes" if no problems found
Bug 576534 - Password displayed on console when entered in command-line utilities
Bug 667935 - DS pipe log script's logregex.py plugin is not redirecting the log output to the text file
bump version to 1.2.8.a2
Bug 668385 - DS pipe log script is executed as many times as the dirsrv service is restarted
Bug 676689 - crash while adding a new user to be synced to windows
Bug 675113 - ns-slapd core dump in windows_tot_run if oneway sync is used
Bug 677440 - clean up compiler warnings in 389-ds-base 1.2.8
Bug 677774 - DS fails to start after reboot
Bug 666076 - dirsrv crash (1.2.7.5) with multiple simple paged result searches
Bug 675320 - empty modify operation with repl on or lastmod off will crash server
bump version to 1.2.9.a1 - console version to 1.2.4
Bug 677705 - ds-logpipe.py script is failing to validate "-s" and "--serverpid" options with "-t".
Bug 676655 - winsync stops working after server restart
Bug 680555 - ns-slapd segfaults if I have more than 100 DBs
Bug 514190 - setup-ds-admin.pl --debug does not log to file
Bug 518890 - setup-ds-admin.pl - improve hostname validation
Bug 644784 - Memory leak in "testbind.c" plugin
Bug 683250 - slapd crashing when traffic replayed
Bug 690584 - #10691 ldbm_back_init() - fix coverity resource leak issues
Bug 690584 - #10690 #10689 attrcrypt_get_ssl_cert_name() - fix coverity resource leak issues
Bug 690584 - #10688 - dblayer_make_env - fix coverity resource leak issues
Bug 690584 - #10669 #10668 cl5ImportLDIF - fix coverity resource leak issues
Bug 690584 - #10658 linked_attrs_pre_op - fix coverity resource leak issues
Bug 690584 - #10655 acllas__handle_group_entry - fix coverity resource leak issues
Bug 690584 - #10654 #10653 str2entry_dupcheck - fix coverity resource leak issues
Bug 690584 - #10652 #10651 #10650 #10649 #10648 #10647 send_specific_attrs send_all_attrs - fix coverity resource leak issues
Bug 690584 - #10643 hash_rootpw - fix coverity resource leak issues
Bug 690584 - #10641 reslimit_bv2int - fix coverity resource leak issues
Bug 691422 - sdt_destroy - fix coverity control flow issues
Bug 691422 - ldbm_back_upgradedb - fix coverity control flow issues
Bug 691422 - csnplFree - fix coverity control flow issues
Bug 691422 - SetUnicodeStringFromUTF_8 - fix coverity control flow issues
Bug 691422 - cl5DeleteRUV - fix coverity control flow issues
Bug 691422 - acl_read_access_allowed_on_entry - fix coverity control flow issues
Bug 691422 - search_internal_callback_pb - fix coverity control flow issues
Bug 691422 - cl5WriteRUV - fix coverity control flow issues
Bug 691422 - windows_replay_update - fix coverity control flow issues
Bug 690584 - #10691 ldbm_back_init() - fix coverity resource leak issues
Bug 690584 - #10652 #10651 #10650 #10649 #10648 #10647 send_specific_attrs send_all_attrs - fix coverity resource leak issues
Bug 668385 - DS pipe log script is executed as many times as the dirsrv service is restarted
Bug 692937 - Replica install fails after step for "enable GSSAPI for replication"
Bug 692331 - Segfault on index update during full replication push on 1.2.7.5
Bug 693451 - cannot use localized matching rules
Bug 693455 - nsMatchingRule does not work with multiple values
Bug 693503 - matching rules do not inherit from superior attribute type
Bug 693466 - Unable to change schema online
Bug 692991 - rhds82 - windows_tot_run: failed to obtain data to send to the consumer; LDAP error - -1
Bug 693473 - rhds82 rfe - windows_tot_run to log Sizelimit exceeded instead of LDAP error - -1
Bug 693962 - Full replica push loses some entries with multi-valued RDNs
Bug 694336 - Group sync hangs Windows initial Sync
Bug 700145 - userpasswd not replicating
Bug 703990 - Support upgrade from Red Hat Directory Server
bump console version to 1.2.5
Bug 703990 - Support upgrade from Red Hat Directory Server
Bug 703990 - Support upgrade from Red Hat Directory Server
Bug 707015 - Cannot disable SSLv3 and use TLS only
bump version to 1.2.9.a2
Bug 707384 - only allow FIPS approved cipher suites in FIPS mode
Bug 711906 - ns-slapd segfaults using suffix referrals
Bug 706209 - LEGAL: RHEL6.1 License issue for 389-ds-base package
Bug 703703 - setup-ds-admin.pl asks for legal agreement to a non-existant file
Bug 711679 - unresponsive LDAP service when deleting vlv on replica
bump console version to 1.2.6
Bug 697694 - rhds82 - incr update state stop_fatal_error "requires administrator action", with extop_result: 9
Bug 716980 - winsync uses old AD entry if new one not found
add support for ldif files with changetype: add
writing Inf file shows SchemaFile = ARRAY(0xhexnum)
look for separate openldap ldif library
bump version to 1.2.9.a3
Bug 709468 - RSA Authentication Server timeouts when using simple paged results on RHDS 8.2.
Bug 720059 - RDN with % can cause crashes or missing entries
bump version to 1.2.9.0
Bug 725542 - Instance upgrade fails when upgrading 389-ds-base package
Bug 725953 - Winsync: DS entries fail to sync to AD, if the User's CN entry contains a comma
Bug 723937 - replication failing on RUV errors
bump version to 1.2.9.1
Bug 727511 - ldclt SSL search requests are failing with "illegal error number -1" error
bump version to 1.2.9.2
Bug 727511 - ldclt SSL search requests are failing with "illegal error numbe
bump version to 1.2.9.3
Bug 727511 - ldclt SSL search requests are failing with "illegal error number -1" error
bump version to 1.2.9.4
Bug 727511 - ldclt SSL search requests are failing with "illegal error number -1" error
bump version to 1.2.9.5
Bug 729378 - delete user subtree container in AD + modify password in DS == DS crash
Bug 723937 - replication failing on RUV errors
Bug 729369 - upgrade DB to upgrade from entrydn to entryrdn format is not working.
make sure the DBVERSION file ends in a newline
bump version to 1.2.10.a1
Bug 633803 - passwordisglobalpolicy attribute brakes TLS chaining
Bug 733103 - large targetattr list with syntax errors cause server to crash or hang
Bug 703990 - cross-platform - Support upgrade from Red Hat Directory Server
Bug 735121 - simple paged search + ip/dns based ACI hangs server
Bug 695736 - Providing native systemd file for upcoming F15 Feature Systemd
Bug 590826 - Reloading database from ldif causes changelog to emit "data no longer matches" errors
Bug 736712 - Modifying ruv entry deadlocks server
Add support for pre/post db transaction plugins
Make all backend operations transaction aware
Bug 741744 - MOD operations with chained delete/add get back error 53 on backend config
Bug 742324 - allow nsslapd-idlistscanlimit to be set dynamically and per-user
Bug 741744 - part2 - MOD operations with chained delete/add get back error 53 on backend config
Bug 740942 - allow resource limits to be set for paged searches independently of limits for other searches/operations
bump version to 1.2.10.a2
bump version to 1.2.10.a3
fix transaction support in ldbm_delete
bump version to 1.2.10.a4
set the ENTRY_POST_OP for modrdn betxnpostoperation plugins
pass the plugin config entry to the plugin init function
make memberof transaction aware and able to be a betxnpostoperation plugin
Bug 741744 - part3 - MOD operations with chained delete/add get back error 53
bump version to 1.2.10.a5
Change referential integrity to be a betxnpostoperation plugin
Use new PLUGIN_CONFIG_ENTRY feature to allow switching between txn and regular
Bug 748575 - rhds81 modrn operation and 100% cpu use in replication
Bug 748575 - part 2 - rhds81 modrdn operation and 100% cpu use in replication
Bug 751495 - 'setup-ds.pl -u' fails with undefined routine 'updateSystemD'
bump version to 1.2.10.a6
Bug 751645 - crash when simple paged fails to send entry to client
csn_as_string - use slapi_uN_to_hex instead of sprintf
uniqueid formatting - use slapi_u8_to_hex instead of sprintf
fix member variable name error in slapi_uniqueIDFormat
reduce calls to csn_as_string and slapi_log_error
csn_init_as_string should not use sscanf
use slapi_hexchar2int and slapi_str_to_u8 everywhere
Bug 755754 - Unable to start dirsrv service using systemd
Bug 755725 - 389 programs linked against openldap crash during shutdown
Ticket 1 - pre-normalize filter and pre-compile substring regex - and other optimizations
Ticket #162 - Infinite loop / spin inside strcmpi_fast, acl_read_access_allowed_on_attr, server DoS
bak2db gets stuck in infinite loop
Ticket #256 - debug build assertion in ACL_EvalDestroy()
bump version to 1.2.10.a7
Ticket #167 - Mixing transaction and non-transaction plugins can cause deadlock
fix mep sdn compiler warnings
add a hack to disable sasl hostname canonicalization - helps with testing when you don't want to set up correct host name resolution and/or cannot set the default system hostname
Ticket #12 - 389 DS DNA Plugin / Replication failing on GSSAPI
Ticket #257 - repl-monitor doesn't work if leftmost hostnames are the same
fix recent compiler warnings
Ticket #15 - Get rid of rwlock.h/rwlock.c and just use slapi_rwlock instead
fix compiler warnings
Remove redundant code - make a global into a static
Ticket #262 - pid file not removed with systemd
fix mozldap build issues
Ticket #264 - upgrade needs better check for "server is running"
Ticket #263 - add systemd include directive
bump version to 1.2.10.rc1
change version to 1.2.10.a8
Ticket #272 - add tombstonenumsubordinates to schema
bump version to 1.2.10.rc1
Ticket #161 - Review and address latest Coverity issues
Ticket #22 - RFE: Support sendmail LDAP routing schema
Ticket #29 - Samba3-schema is missing sambaTrustedDomainPassword
Ticket #273 - ruv tombstone searches don't work after reindex entryrdn
Ticket #273 - ruv tombstone searches don't work after reindex entryrdn
fix a couple of minor coverity issues
Ticket #87 - Manpages fixes
Ticket #13 - slapd process exits when put the database on read only mode while updates are coming to the server
Ticket #55 - Limit of 1024 characters for nsMatchingRule
Ticket #277 - cannot set repl referrals or state
Ticket #278 - Schema replication update failed: Invalid syntax
Ticket #277 - cannot set repl referrals or state
Ticket #279 - filter normalization does not use matching rules
Ticket #280 - extensible binary filters do not work
Ticket #281 - TLS not working with latest openldap
coverity 12488 Resource leak In attr_index_config(): Leak of memory or pointers to system resources
bump version to 1.2.10.rc2
bump version to 1.2.10.0
Ticket #294 - 389 DS Segfaults during replica install in FreeIPA
Ticket #281 - TLS not working with latest openldap
Trac Ticket #298 - crash when replicating orphaned tombstone entry
bump version to 1.2.10.2
handle null smods
memleak in mep_parse_config_entry
memleak in normalize_mods2bvals
bump version to 1.2.10.3
Ticket #305 - Certain CMP operations hang or cause ns-slapd to crash
bump version to 1.2.10.4
Bug 808770 - [abrt] 389-ds-base-1.2.10.4-2.fc16: index_range_read_ext: Process /usr/sbin/ns-slapd was killed by signal 11 (SIGSEGV)
Ticket #336 - [abrt] 389-ds-base-1.2.10.4-2.fc16: index_range_read_ext: Process /usr/sbin/ns-slapd was killed by signal 11 (SIGSEGV)
bump version to 1.2.10.5
Ticket #336 - [abrt] 389-ds-base-1.2.10.4-2.fc16: index_range_read_ext: Process /usr/sbin/ns-slapd was killed by signal 11 (SIGSEGV)
bump version to 1.2.10.6
Ticket #347 - IPA dirsvr seg-fault during system longevity test
Ticket #348 - crash in ldap_initialize with multiple threads
bump version to 1.2.10.7
Ticket #348 - crash in ldap_initialize with multiple threads
bump version to 1.2.10.8
Trac Ticket #359 - Database RUV could mismatch the one in changelog under the stress
Ticket #382 - DS Shuts down intermittently
bump version to 1.2.10.10
bump version to 1.2.10.11
Ticket 378 - unhashed#user#password visible after changing password
bump version to 1.2.10.12
Ticket #405 - referint modrdn not working if case is different
Ticket #406 - Impossible to rename entry (modrdn) with Attribute Uniqueness plugin enabled
bump version to 1.2.10.13
Ticket #410 - Referential integrity plug-in does not work when update interval is not zero
bump version to 1.2.10.14
Ticket #353 - coverity 12625-12629 - leaks, dead code, unchecked return
CLEANALLRUV - remove calls to agmt_get_enabled because this feature is not in 1.2.10
COVERITY FIXES in replica_execute_cleanall_ruv_task
Ticket #491 - multimaster_extop_cleanruv returns wrong error codes
bump version to 1.2.10.15
Ticket #331 - transaction errors with db 4.3 and db 4.2
bump version to 1.2.10.25
nturpin (1):
Ticket #3: acl cache overflown problem
root (2):
Bug 480787 - Autoconf parameter --with and --without
Ticket #337 - RFE - Improve CLEANRUV functionality
---
.gitignore | 1
Makefile.am | 262
Makefile.in | 5216 -
README | 11
VERSION.sh | 7
aclocal.m4 | 6996 --
compile | 21
config.guess | 302
config.h.in | 22
config.sub | 232
configure |41932 +++++-------
configure.ac | 176
depcomp | 172
dirsrv.pc.in | 7
include/base/dbtbase.h | 2
include/base/file.h | 3
include/base/lexer.h | 126
include/base/rwlock.h | 91
include/i18n.h | 115
include/ldaputil/ldaputil.h | 10
include/libaccess/aclerror.h | 1
include/libaccess/aclproto.h | 15
include/libaccess/aclstruct.h | 2
include/libaccess/dbtlibaccess.h | 3
include/public/nsacl/aclapi.h | 7
install-sh | 517
ldap/admin/src/base-initconfig.in | 44
ldap/admin/src/initconfig.in | 37
ldap/admin/src/logconv.pl | 639
ldap/admin/src/scripts/10cleanupldapi.pl | 23
ldap/admin/src/scripts/10fixrundir.pl | 11
ldap/admin/src/scripts/50acctusabilityplugin.ldif | 21
ldap/admin/src/scripts/50automemberplugin.ldif | 15
ldap/admin/src/scripts/50fixNsState.pl | 240
ldap/admin/src/scripts/50managedentriesplugin.ldif | 16
ldap/admin/src/scripts/50refintprecedence.ldif | 4
ldap/admin/src/scripts/50smd5pwdstorageplugin.ldif | 5
ldap/admin/src/scripts/60upgradeschemafiles.pl | 2
ldap/admin/src/scripts/70upgradefromldif.pl | 108
ldap/admin/src/scripts/80upgradednformat.pl | 206
ldap/admin/src/scripts/81changelog.pl | 34
ldap/admin/src/scripts/90subtreerename.pl | 21
ldap/admin/src/scripts/91subtreereindex.pl | 148
ldap/admin/src/scripts/DSCreate.pm.in | 323
ldap/admin/src/scripts/DSDialogs.pm | 4
ldap/admin/src/scripts/DSMigration.pm.in | 47
ldap/admin/src/scripts/DSUpdate.pm.in | 50
ldap/admin/src/scripts/DSUtil.pm.in | 247
ldap/admin/src/scripts/DialogManager.pm | 241
ldap/admin/src/scripts/DialogManager.pm.in | 241
ldap/admin/src/scripts/Inf.pm | 67
ldap/admin/src/scripts/Migration.pm.in | 20
ldap/admin/src/scripts/Setup.pm.in | 20
ldap/admin/src/scripts/SetupDialogs.pm.in | 31
ldap/admin/src/scripts/SetupLog.pm | 8
ldap/admin/src/scripts/ds-logpipe.py | 221
ldap/admin/src/scripts/exampleupdate.ldif | 2
ldap/admin/src/scripts/exampleupdate.sh | 10
ldap/admin/src/scripts/logregex.py | 16
ldap/admin/src/scripts/migrate-ds.pl.in | 13
ldap/admin/src/scripts/remove-ds.pl.in | 28
ldap/admin/src/scripts/repl-monitor.pl.in | 86
ldap/admin/src/scripts/restart-dirsrv.in | 25
ldap/admin/src/scripts/setup-ds.pl.in | 7
ldap/admin/src/scripts/setup-ds.res.in | 35
ldap/admin/src/scripts/start-dirsrv.in | 43
ldap/admin/src/scripts/stop-dirsrv.in | 27
ldap/admin/src/scripts/template-bak2db.in | 49
ldap/admin/src/scripts/template-bak2db.pl.in | 29
ldap/admin/src/scripts/template-cleanallruv.pl.in | 186
ldap/admin/src/scripts/template-db2bak.in | 53
ldap/admin/src/scripts/template-db2bak.pl.in | 29
ldap/admin/src/scripts/template-db2index.in | 14
ldap/admin/src/scripts/template-db2index.pl.in | 33
ldap/admin/src/scripts/template-db2ldif.in | 15
ldap/admin/src/scripts/template-db2ldif.pl.in | 29
ldap/admin/src/scripts/template-dbverify.in | 15
ldap/admin/src/scripts/template-dn2rdn.in | 25
ldap/admin/src/scripts/template-fixup-linkedattrs.pl.in | 29
ldap/admin/src/scripts/template-fixup-memberof.pl.in | 29
ldap/admin/src/scripts/template-ldif2db.in | 15
ldap/admin/src/scripts/template-ldif2db.pl.in | 29
ldap/admin/src/scripts/template-ldif2ldap.in | 19
ldap/admin/src/scripts/template-monitor.in | 19
ldap/admin/src/scripts/template-ns-accountstatus.pl.in | 33
ldap/admin/src/scripts/template-ns-activate.pl.in | 33
ldap/admin/src/scripts/template-ns-inactivate.pl.in | 33
ldap/admin/src/scripts/template-ns-newpwpolicy.pl.in | 47
ldap/admin/src/scripts/template-restart-slapd.in | 2
ldap/admin/src/scripts/template-restoreconfig.in | 15
ldap/admin/src/scripts/template-saveconfig.in | 15
ldap/admin/src/scripts/template-schema-reload.pl.in | 29
ldap/admin/src/scripts/template-start-slapd.in | 3
ldap/admin/src/scripts/template-stop-slapd.in | 2
ldap/admin/src/scripts/template-suffix2instance.in | 15
ldap/admin/src/scripts/template-syntax-validate.pl.in | 29
ldap/admin/src/scripts/template-upgradedb.in | 15
ldap/admin/src/scripts/template-upgradednformat.in | 63
ldap/admin/src/scripts/template-usn-tombstone-cleanup.pl.in | 29
ldap/admin/src/scripts/template-verify-db.pl.in | 19
ldap/admin/src/scripts/template-vlvindex.in | 15
ldap/admin/src/slapd.inf.in | 2
ldap/admin/src/template-initconfig.in | 18
ldap/docs/LICENSE.txt | 132
ldap/docs/README.txt | 11
ldap/include/ldaplog.h | 32
ldap/ldif/50replication-plugins.ldif | 26
ldap/ldif/template-baseacis.ldif.in | 2
ldap/ldif/template-bitwise.ldif.in | 6
ldap/ldif/template-dse.ldif.in | 96
ldap/ldif/template-suffix-db.ldif.in | 1
ldap/schema/00core.ldif | 72
ldap/schema/01core389.ldif | 24
ldap/schema/02common.ldif | 12
ldap/schema/05rfc4523.ldif | 14
ldap/schema/05rfc4524.ldif | 30
ldap/schema/06inetorgperson.ldif | 5
ldap/schema/10automember-plugin.ldif | 123
ldap/schema/10mep-plugin.ldif | 104
ldap/schema/30ns-common.ldif | 4
ldap/schema/50ns-directory.ldif | 4
ldap/schema/60acctpolicy.ldif | 47
ldap/schema/60nis.ldif | 2
ldap/schema/60qmail.ldif | 4
ldap/schema/60samba3.ldif | 34
ldap/schema/60sendmail.ldif | 54
ldap/schema/60sudo.ldif | 58
ldap/servers/plugins/acct_usability/acct_usability.c | 464
ldap/servers/plugins/acct_usability/acct_usability.h | 63
ldap/servers/plugins/acctpolicy/acct_config.c | 143
ldap/servers/plugins/acctpolicy/acct_init.c | 191
ldap/servers/plugins/acctpolicy/acct_plugin.c | 316
ldap/servers/plugins/acctpolicy/acct_util.c | 257
ldap/servers/plugins/acctpolicy/acctpolicy.h | 81
ldap/servers/plugins/acctpolicy/sampleconfig.ldif | 40
ldap/servers/plugins/acctpolicy/samplepolicy.ldif | 27
ldap/servers/plugins/acl/acl.c | 280
ldap/servers/plugins/acl/acl.h | 48
ldap/servers/plugins/acl/acl_ext.c | 152
ldap/servers/plugins/acl/aclanom.c | 13
ldap/servers/plugins/acl/acleffectiverights.c | 116
ldap/servers/plugins/acl/aclgroup.c | 21
ldap/servers/plugins/acl/aclinit.c | 2
ldap/servers/plugins/acl/acllas.c | 400
ldap/servers/plugins/acl/acllist.c | 123
ldap/servers/plugins/acl/aclparse.c | 615
ldap/servers/plugins/acl/aclplugin.c | 37
ldap/servers/plugins/acl/aclproxy.c | 232
ldap/servers/plugins/acl/aclutil.c | 110
ldap/servers/plugins/automember/automember.c | 1930
ldap/servers/plugins/automember/automember.h | 134
ldap/servers/plugins/bitwise/bitwise.c | 23
ldap/servers/plugins/chainingdb/cb.h | 8
ldap/servers/plugins/chainingdb/cb_add.c | 105
ldap/servers/plugins/chainingdb/cb_bind.c | 196
ldap/servers/plugins/chainingdb/cb_compare.c | 101
ldap/servers/plugins/chainingdb/cb_config.c | 37
ldap/servers/plugins/chainingdb/cb_conn_stateless.c | 102
ldap/servers/plugins/chainingdb/cb_controls.c | 36
ldap/servers/plugins/chainingdb/cb_delete.c | 125
ldap/servers/plugins/chainingdb/cb_init.c | 6
ldap/servers/plugins/chainingdb/cb_instance.c | 325
ldap/servers/plugins/chainingdb/cb_modify.c | 133
ldap/servers/plugins/chainingdb/cb_modrdn.c | 176
ldap/servers/plugins/chainingdb/cb_monitor.c | 6
ldap/servers/plugins/chainingdb/cb_schema.c | 4
ldap/servers/plugins/chainingdb/cb_search.c | 223
ldap/servers/plugins/chainingdb/cb_utils.c | 15
ldap/servers/plugins/collation/collate.c | 24
ldap/servers/plugins/collation/orfilter.c | 19
ldap/servers/plugins/cos/cos_cache.c | 769
ldap/servers/plugins/deref/deref.c | 20
ldap/servers/plugins/dna/dna.c | 908
ldap/servers/plugins/http/http_impl.c | 81
ldap/servers/plugins/linkedattrs/fixup_task.c | 154
ldap/servers/plugins/linkedattrs/linked_attrs.c | 284
ldap/servers/plugins/linkedattrs/linked_attrs.h | 6
ldap/servers/plugins/memberof/memberof.c | 841
ldap/servers/plugins/memberof/memberof.h | 8
ldap/servers/plugins/memberof/memberof_config.c | 242
ldap/servers/plugins/mep/mep.c | 2862
ldap/servers/plugins/mep/mep.h | 130
ldap/servers/plugins/pam_passthru/pam_passthru.h | 2
ldap/servers/plugins/pam_passthru/pam_ptconfig.c | 2
ldap/servers/plugins/pam_passthru/pam_ptimpl.c | 32
ldap/servers/plugins/pam_passthru/pam_ptpreop.c | 9
ldap/servers/plugins/passthru/passthru.h | 4
ldap/servers/plugins/passthru/ptbind.c | 6
ldap/servers/plugins/passthru/ptconfig.c | 43
ldap/servers/plugins/passthru/ptconn.c | 8
ldap/servers/plugins/passthru/ptpreop.c | 17
ldap/servers/plugins/pwdstorage/smd5_pwd.c | 9
ldap/servers/plugins/referint/referint.c | 765
ldap/servers/plugins/replication/cl4_api.c | 2
ldap/servers/plugins/replication/cl5.h | 1
ldap/servers/plugins/replication/cl5_api.c | 2714
ldap/servers/plugins/replication/cl5_api.h | 122
ldap/servers/plugins/replication/cl5_clcache.c | 55
ldap/servers/plugins/replication/cl5_clcache.h | 2
ldap/servers/plugins/replication/cl5_config.c | 247
ldap/servers/plugins/replication/cl5_init.c | 2
ldap/servers/plugins/replication/cl5_test.c | 2
ldap/servers/plugins/replication/cl_crypt.c | 203
ldap/servers/plugins/replication/cl_crypt.h | 53
ldap/servers/plugins/replication/csnpl.c | 74
ldap/servers/plugins/replication/legacy_consumer.c | 31
ldap/servers/plugins/replication/llist.c | 8
ldap/servers/plugins/replication/repl-session-plugin.h | 119
ldap/servers/plugins/replication/repl.h | 2
ldap/servers/plugins/replication/repl5.h | 134
ldap/servers/plugins/replication/repl5_agmt.c | 326
ldap/servers/plugins/replication/repl5_agmtlist.c | 114
ldap/servers/plugins/replication/repl5_connection.c | 201
ldap/servers/plugins/replication/repl5_inc_protocol.c | 113
ldap/servers/plugins/replication/repl5_init.c | 204
ldap/servers/plugins/replication/repl5_mtnode_ext.c | 13
ldap/servers/plugins/replication/repl5_plugins.c | 201
ldap/servers/plugins/replication/repl5_prot_private.h | 4
ldap/servers/plugins/replication/repl5_protocol.c | 107
ldap/servers/plugins/replication/repl5_protocol_util.c | 509
ldap/servers/plugins/replication/repl5_replica.c | 668
ldap/servers/plugins/replication/repl5_replica_config.c | 2596
ldap/servers/plugins/replication/repl5_replica_dnhash.c | 26
ldap/servers/plugins/replication/repl5_replica_hash.c | 30
ldap/servers/plugins/replication/repl5_ruv.c | 521
ldap/servers/plugins/replication/repl5_ruv.h | 20
ldap/servers/plugins/replication/repl5_tot_protocol.c | 32
ldap/servers/plugins/replication/repl5_total.c | 22
ldap/servers/plugins/replication/repl5_updatedn_list.c | 2
ldap/servers/plugins/replication/repl_bind.c | 6
ldap/servers/plugins/replication/repl_compare.c | 18
ldap/servers/plugins/replication/repl_connext.c | 2
ldap/servers/plugins/replication/repl_controls.c | 2
ldap/servers/plugins/replication/repl_extop.c | 875
ldap/servers/plugins/replication/repl_globals.c | 7
ldap/servers/plugins/replication/repl_init.c | 1
ldap/servers/plugins/replication/repl_objset.c | 9
ldap/servers/plugins/replication/repl_session_plugin.c | 188
ldap/servers/plugins/replication/repl_shared.h | 17
ldap/servers/plugins/replication/replutil.c | 109
ldap/servers/plugins/replication/test_repl_session_plugin.c | 335
ldap/servers/plugins/replication/urp.c | 222
ldap/servers/plugins/replication/urp.h | 11
ldap/servers/plugins/replication/urp_glue.c | 14
ldap/servers/plugins/replication/urp_tombstone.c | 21
ldap/servers/plugins/replication/windows_connection.c | 166
ldap/servers/plugins/replication/windows_inc_protocol.c | 55
ldap/servers/plugins/replication/windows_private.c | 128
ldap/servers/plugins/replication/windows_protocol_util.c | 677
ldap/servers/plugins/replication/windows_tot_protocol.c | 125
ldap/servers/plugins/replication/windowsrepl.h | 14
ldap/servers/plugins/replication/winsync-plugin.h | 2
ldap/servers/plugins/retrocl/retrocl.c | 3
ldap/servers/plugins/retrocl/retrocl.h | 2
ldap/servers/plugins/retrocl/retrocl_create.c | 13
ldap/servers/plugins/retrocl/retrocl_po.c | 23
ldap/servers/plugins/retrocl/retrocl_trim.c | 20
ldap/servers/plugins/rever/des.c | 72
ldap/servers/plugins/rever/rever.c | 8
ldap/servers/plugins/roles/roles_cache.c | 128
ldap/servers/plugins/schema_reload/schema_reload.c | 5
ldap/servers/plugins/shared/plugin-utils.h | 112
ldap/servers/plugins/shared/utils.c | 508
ldap/servers/plugins/statechange/statechange.c | 26
ldap/servers/plugins/syntaxes/bin.c | 142
ldap/servers/plugins/syntaxes/bitstring.c | 68
ldap/servers/plugins/syntaxes/ces.c | 172
ldap/servers/plugins/syntaxes/cis.c | 321
ldap/servers/plugins/syntaxes/deliverymethod.c | 32
ldap/servers/plugins/syntaxes/dn.c | 72
ldap/servers/plugins/syntaxes/facsimile.c | 32
ldap/servers/plugins/syntaxes/guide.c | 32
ldap/servers/plugins/syntaxes/int.c | 96
ldap/servers/plugins/syntaxes/nameoptuid.c | 72
ldap/servers/plugins/syntaxes/numericstring.c | 148
ldap/servers/plugins/syntaxes/sicis.c | 32
ldap/servers/plugins/syntaxes/string.c | 402
ldap/servers/plugins/syntaxes/syntax.h | 61
ldap/servers/plugins/syntaxes/syntax_common.c | 118
ldap/servers/plugins/syntaxes/tel.c | 94
ldap/servers/plugins/syntaxes/teletex.c | 32
ldap/servers/plugins/syntaxes/telex.c | 31
ldap/servers/plugins/syntaxes/validate.c | 17
ldap/servers/plugins/syntaxes/value.c | 120
ldap/servers/plugins/uiduniq/7bit.c | 52
ldap/servers/plugins/uiduniq/plugin-utils.h | 96
ldap/servers/plugins/uiduniq/uid.c | 353
ldap/servers/plugins/uiduniq/utils.c | 256
ldap/servers/plugins/usn/usn.c | 176
ldap/servers/plugins/usn/usn.h | 3
ldap/servers/plugins/usn/usn_cleanup.c | 31
ldap/servers/plugins/views/views.c | 27
ldap/servers/slapd/abandon.c | 8
ldap/servers/slapd/add.c | 186
ldap/servers/slapd/agtmmap.c | 56
ldap/servers/slapd/attr.c | 93
ldap/servers/slapd/attrlist.c | 7
ldap/servers/slapd/attrsyntax.c | 143
ldap/servers/slapd/auditlog.c | 86
ldap/servers/slapd/auth.c | 59
ldap/servers/slapd/ava.c | 2
ldap/servers/slapd/back-ldbm/ancestorid.c | 104
ldap/servers/slapd/back-ldbm/archive.c | 91
ldap/servers/slapd/back-ldbm/back-ldbm.h | 96
ldap/servers/slapd/back-ldbm/backentry.c | 2
ldap/servers/slapd/back-ldbm/cache.c | 83
ldap/servers/slapd/back-ldbm/dbhelp.c | 12
ldap/servers/slapd/back-ldbm/dblayer.c | 1614
ldap/servers/slapd/back-ldbm/dblayer.h | 14
ldap/servers/slapd/back-ldbm/dbtest.c | 349
ldap/servers/slapd/back-ldbm/dbversion.c | 52
ldap/servers/slapd/back-ldbm/dn2entry.c | 63
ldap/servers/slapd/back-ldbm/filterindex.c | 244
ldap/servers/slapd/back-ldbm/findentry.c | 147
ldap/servers/slapd/back-ldbm/id2entry.c | 175
ldap/servers/slapd/back-ldbm/idl.c | 35
ldap/servers/slapd/back-ldbm/idl_common.c | 7
ldap/servers/slapd/back-ldbm/idl_new.c | 111
ldap/servers/slapd/back-ldbm/idl_shim.c | 17
ldap/servers/slapd/back-ldbm/import-merge.c | 28
ldap/servers/slapd/back-ldbm/import-threads.c | 1366
ldap/servers/slapd/back-ldbm/import.c | 403
ldap/servers/slapd/back-ldbm/import.h | 32
ldap/servers/slapd/back-ldbm/index.c | 283
ldap/servers/slapd/back-ldbm/init.c | 89
ldap/servers/slapd/back-ldbm/instance.c | 174
ldap/servers/slapd/back-ldbm/ldbm_add.c | 245
ldap/servers/slapd/back-ldbm/ldbm_attr.c | 392
ldap/servers/slapd/back-ldbm/ldbm_attrcrypt.c | 986
ldap/servers/slapd/back-ldbm/ldbm_attrcrypt_config.c | 2
ldap/servers/slapd/back-ldbm/ldbm_bind.c | 4
ldap/servers/slapd/back-ldbm/ldbm_compare.c | 4
ldap/servers/slapd/back-ldbm/ldbm_config.c | 309
ldap/servers/slapd/back-ldbm/ldbm_config.h | 9
ldap/servers/slapd/back-ldbm/ldbm_delete.c | 364
ldap/servers/slapd/back-ldbm/ldbm_entryrdn.c | 896
ldap/servers/slapd/back-ldbm/ldbm_index_config.c | 668
ldap/servers/slapd/back-ldbm/ldbm_instance_config.c | 262
ldap/servers/slapd/back-ldbm/ldbm_modify.c | 153
ldap/servers/slapd/back-ldbm/ldbm_modrdn.c | 361
ldap/servers/slapd/back-ldbm/ldbm_search.c | 407
ldap/servers/slapd/back-ldbm/ldbm_usn.c | 74
ldap/servers/slapd/back-ldbm/ldif2ldbm.c | 792
ldap/servers/slapd/back-ldbm/matchrule.c | 50
ldap/servers/slapd/back-ldbm/misc.c | 298
ldap/servers/slapd/back-ldbm/monitor.c | 14
ldap/servers/slapd/back-ldbm/nextid.c | 17
ldap/servers/slapd/back-ldbm/parents.c | 141
ldap/servers/slapd/back-ldbm/perfctrs.c | 24
ldap/servers/slapd/back-ldbm/proto-back-ldbm.h | 53
ldap/servers/slapd/back-ldbm/sort.c | 38
ldap/servers/slapd/back-ldbm/start.c | 61
ldap/servers/slapd/back-ldbm/vlv.c | 383
ldap/servers/slapd/back-ldbm/vlv_srch.c | 17
ldap/servers/slapd/back-ldbm/vlv_srch.h | 3
ldap/servers/slapd/back-ldif/back-ldif.h | 2
ldap/servers/slapd/back-ldif/modrdn.c | 12
ldap/servers/slapd/backend.c | 72
ldap/servers/slapd/backend_manager.c | 18
ldap/servers/slapd/bind.c | 320
ldap/servers/slapd/bulk_import.c | 39
ldap/servers/slapd/charray.c | 27
ldap/servers/slapd/compare.c | 41
ldap/servers/slapd/computed.c | 36
ldap/servers/slapd/config.c | 2
ldap/servers/slapd/configdse.c | 63
ldap/servers/slapd/connection.c | 196
ldap/servers/slapd/conntable.c | 3
ldap/servers/slapd/control.c | 26
ldap/servers/slapd/csn.c | 77
ldap/servers/slapd/csngen.c | 54
ldap/servers/slapd/csnset.c | 4
ldap/servers/slapd/daemon.c | 173
ldap/servers/slapd/delete.c | 127
ldap/servers/slapd/dn.c | 1561
ldap/servers/slapd/dse.c | 222
ldap/servers/slapd/dynalib.c | 29
ldap/servers/slapd/entry.c | 974
ldap/servers/slapd/entrywsi.c | 137
ldap/servers/slapd/eventq.c | 4
ldap/servers/slapd/extendop.c | 35
ldap/servers/slapd/factory.c | 1
ldap/servers/slapd/fe.h | 5
ldap/servers/slapd/fedse.c | 40
ldap/servers/slapd/filter.c | 141
ldap/servers/slapd/filter.h | 1
ldap/servers/slapd/filtercmp.c | 26
ldap/servers/slapd/filterentry.c | 36
ldap/servers/slapd/generation.c | 1
ldap/servers/slapd/index_subsystem.c | 28
ldap/servers/slapd/intrinsics.h | 7
ldap/servers/slapd/ldaputil.c | 812
ldap/servers/slapd/lenstr.c | 6
ldap/servers/slapd/libglobs.c | 666
ldap/servers/slapd/libslapd.def | 1
ldap/servers/slapd/log.c | 104
ldap/servers/slapd/log.h | 20
ldap/servers/slapd/main.c | 288
ldap/servers/slapd/mapping_tree.c | 478
ldap/servers/slapd/match.c | 96
ldap/servers/slapd/modify.c | 491
ldap/servers/slapd/modrdn.c | 362
ldap/servers/slapd/modutil.c | 14
ldap/servers/slapd/operation.c | 27
ldap/servers/slapd/opshared.c | 304
ldap/servers/slapd/pagedresults.c | 147
ldap/servers/slapd/passwd_extop.c | 203
ldap/servers/slapd/pblock.c | 575
ldap/servers/slapd/plugin.c | 338
ldap/servers/slapd/plugin_acl.c | 50
ldap/servers/slapd/plugin_internal_op.c | 201
ldap/servers/slapd/plugin_mr.c | 474
ldap/servers/slapd/plugin_syntax.c | 442
ldap/servers/slapd/protect_db.c | 24
ldap/servers/slapd/protect_db.h | 7
ldap/servers/slapd/proto-slap.h | 74
ldap/servers/slapd/proxyauth.c | 246
ldap/servers/slapd/psearch.c | 77
ldap/servers/slapd/pw.c | 510
ldap/servers/slapd/pw.h | 5
ldap/servers/slapd/pw_mgmt.c | 164
ldap/servers/slapd/pw_retry.c | 99
ldap/servers/slapd/rdn.c | 141
ldap/servers/slapd/referral.c | 29
ldap/servers/slapd/regex.c | 3
ldap/servers/slapd/resourcelimit.c | 80
ldap/servers/slapd/result.c | 81
ldap/servers/slapd/rootdse.c | 12
ldap/servers/slapd/rwlock.c | 257
ldap/servers/slapd/rwlock.h | 65
ldap/servers/slapd/sasl_io.c | 167
ldap/servers/slapd/sasl_map.c | 57
ldap/servers/slapd/saslbind.c | 160
ldap/servers/slapd/schema.c | 194
ldap/servers/slapd/schemaparse.c | 13
ldap/servers/slapd/search.c | 89
ldap/servers/slapd/security_wrappers.c | 36
ldap/servers/slapd/slap.h | 204
ldap/servers/slapd/slapi-plugin-compat4.h | 6
ldap/servers/slapd/slapi-plugin.h | 1268
ldap/servers/slapd/slapi-private.h | 59
ldap/servers/slapd/slapi2nspr.c | 79
ldap/servers/slapd/slapi_counter.c | 24
ldap/servers/slapd/snmp_collator.c | 19
ldap/servers/slapd/ssl.c | 323
ldap/servers/slapd/str2filter.c | 5
ldap/servers/slapd/task.c | 184
ldap/servers/slapd/test-plugins/testbind.c | 1
ldap/servers/slapd/test-plugins/testpostop.c | 1
ldap/servers/slapd/time.c | 91
ldap/servers/slapd/tools/dbscan.c | 76
ldap/servers/slapd/tools/ldclt/data.c | 70
ldap/servers/slapd/tools/ldclt/ldapfct.c | 1149
ldap/servers/slapd/tools/ldclt/ldclt.c | 50
ldap/servers/slapd/tools/ldclt/ldclt.h | 3
ldap/servers/slapd/tools/ldclt/ldcltU.c | 24
ldap/servers/slapd/tools/ldclt/parser.c | 19
ldap/servers/slapd/tools/ldclt/scalab01.c | 190
ldap/servers/slapd/tools/ldclt/threadMain.c | 6
ldap/servers/slapd/tools/ldif.c | 4
ldap/servers/slapd/tools/mmldif.c | 9
ldap/servers/slapd/tools/pwenc.c | 2
ldap/servers/slapd/tools/rsearch/addthread.c | 51
ldap/servers/slapd/tools/rsearch/sdattable.c | 4
ldap/servers/slapd/tools/rsearch/searchthread.c | 94
ldap/servers/slapd/uniqueid.c | 99
ldap/servers/slapd/utf8compare.c | 6
ldap/servers/slapd/util.c | 357
ldap/servers/slapd/uuid.c | 22
ldap/servers/slapd/value.c | 53
ldap/servers/slapd/valueset.c | 75
ldap/servers/slapd/vattr.c | 115
ldap/servers/snmp/NETWORK-SERVICES-MIB.txt | 650
ldap/servers/snmp/RFC-1215.txt | 38
ldap/servers/snmp/RFC1155-SMI.txt | 119
ldap/servers/snmp/SNMPv2-CONF.txt | 322
ldap/servers/snmp/SNMPv2-SMI.txt | 344
ldap/servers/snmp/SNMPv2-TC.txt | 772
ldap/servers/snmp/ldap-agent.c | 26
ldap/servers/snmp/main.c | 11
ldap/servers/snmp/netscape-ldap.mib | 759
ldap/systools/idsktune.c | 100
lib/base/crit.cpp | 6
lib/base/ereport.cpp | 2
lib/base/file.cpp | 24
lib/base/lexer.cpp | 1015
lib/base/plist.cpp | 3
lib/base/rwlock.cpp | 168
lib/base/util.cpp | 13
lib/ldaputil/cert.c | 4
lib/ldaputil/certmap.c | 409
lib/ldaputil/dbconf.c | 1
lib/ldaputil/utest/Makefile | 149
lib/ldaputil/utest/auth.cpp | 611
lib/ldaputil/utest/authtest | 138
lib/ldaputil/utest/certmap.conf | 68
lib/ldaputil/utest/dblist.conf | 47
lib/ldaputil/utest/example.c | 153
lib/ldaputil/utest/plugin.c | 152
lib/ldaputil/utest/plugin.h | 57
lib/ldaputil/utest/stubs.c | 144
lib/ldaputil/utest/stubs.cpp | 139
lib/ldaputil/utest/test.ref | 480
lib/ldaputil/vtable.c | 2
lib/libaccess/acl.tab.cpp | 25
lib/libaccess/aclcache.cpp | 105
lib/libaccess/aclflush.cpp | 1
lib/libaccess/aclpriv.h | 1
lib/libaccess/acltext.y | 4
lib/libaccess/acltools.cpp | 1896
lib/libaccess/aclutil.cpp | 13
lib/libaccess/authdb.cpp | 112
lib/libaccess/lasdns.cpp | 23
lib/libaccess/lasgroup.cpp | 10
lib/libaccess/lasip.cpp | 20
lib/libaccess/nseframe.cpp | 1
lib/libaccess/oneeval.cpp | 19
lib/libaccess/permhash.h | 11
lib/libaccess/register.cpp | 50
lib/libaccess/usrcache.cpp | 14
lib/libaccess/utest/.purify | 19
lib/libaccess/utest/Makefile | 147
lib/libaccess/utest/acl.dat | 44
lib/libaccess/utest/aclfile0 | 87
lib/libaccess/utest/aclfile1 | 43
lib/libaccess/utest/aclfile10 | 45
lib/libaccess/utest/aclfile11 | 43
lib/libaccess/utest/aclfile12 | 43
lib/libaccess/utest/aclfile13 | 43
lib/libaccess/utest/aclfile14 | 43
lib/libaccess/utest/aclfile15 | 43
lib/libaccess/utest/aclfile16 | 43
lib/libaccess/utest/aclfile17 | 43
lib/libaccess/utest/aclfile18 | 51
lib/libaccess/utest/aclfile19 | 46
lib/libaccess/utest/aclfile2 | 43
lib/libaccess/utest/aclfile3 | 43
lib/libaccess/utest/aclfile4 | 43
lib/libaccess/utest/aclfile5 | 43
lib/libaccess/utest/aclfile6 | 55
lib/libaccess/utest/aclfile7 | 43
lib/libaccess/utest/aclfile8 | 43
lib/libaccess/utest/aclfile9 | 43
lib/libaccess/utest/aclgrp0 | 42
lib/libaccess/utest/aclgrp1 | 42
lib/libaccess/utest/aclgrp2 | 42
lib/libaccess/utest/aclgrp3 | 42
lib/libaccess/utest/aclgrp4 | 42
lib/libaccess/utest/acltest.cpp | 794
lib/libaccess/utest/onetest.cpp | 77
lib/libaccess/utest/shexp.cpp | 331
lib/libaccess/utest/shexp.h | 168
lib/libaccess/utest/test.ref | 217
lib/libaccess/utest/testmain.cpp | 89
lib/libaccess/utest/twotest.cpp | 87
lib/libaccess/utest/ustubs.cpp | 331
lib/libadmin/error.c | 2
lib/libadmin/template.c | 2
lib/libadmin/util.c | 48
lib/libsi18n/coreres.c | 141
lib/libsi18n/coreres.h | 52
lib/libsi18n/getlang.c | 330
lib/libsi18n/getstrmem.c | 160
lib/libsi18n/getstrmem.h | 1
lib/libsi18n/getstrprop.c | 85
lib/libsi18n/makstrdb.c | 21
lib/libsi18n/propset.c | 442
lib/libsi18n/propset.h | 80
lib/libsi18n/reshash.c | 21
ltmain.sh |13199 ++-
m4/db.m4 | 21
m4/fhs.m4 | 4
m4/icu.m4 | 25
m4/kerberos.m4 | 4
m4/mozldap.m4 | 38
m4/netsnmp.m4 | 15
m4/nspr.m4 | 17
m4/nss.m4 | 17
m4/openldap.m4 | 30
m4/pcre.m4 | 28
m4/sasl.m4 | 25
m4/selinux.m4 | 13
m4/svrcore.m4 | 41
man/man1/cl-dump.1 | 18
man/man1/dbgen.pl.1 | 4
man/man1/infadd.1 | 8
man/man1/migratecred.1 | 6
man/man1/mmldif.1 | 4
man/man1/pwdhash.1 | 4
man/man1/repl-monitor.1 | 16
man/man8/ns-slapd.8 | 10
man/man8/remove-ds.pl.8 | 6
man/man8/restart-dirsrv.8 | 50
man/man8/setup-ds.pl.8 | 4
man/man8/start-dirsrv.8 | 50
man/man8/stop-dirsrv.8 | 50
missing | 104
selinux/dirsrv.fc.in | 2
selinux/dirsrv.if | 41
selinux/dirsrv.te | 11
wrappers/cl-dump.in | 11
wrappers/dbscan.in | 10
wrappers/infadd.in | 12
wrappers/initscript.in | 244
wrappers/ldap-agent-initscript.in | 20
wrappers/ldap-agent.in | 12
wrappers/ldclt.in | 12
wrappers/ldif.in | 12
wrappers/migratecred.in | 14
wrappers/mmldif.in | 14
wrappers/pwdhash.in | 14
wrappers/repl-monitor.in | 11
wrappers/rsearch.in | 12
wrappers/systemd-snmp.service.in | 16
wrappers/systemd.group.in | 6
wrappers/systemd.template.service.in | 28
wrappers/systemd.template.sysconfig | 3
617 files changed, 83998 insertions(+), 68325 deletions(-)
---
11 years, 2 months
Branch '389-ds-base-1.2.10' - 2 commits - ldap/servers VERSION.sh
by Richard Allen Megginson
VERSION.sh | 2 +-
ldap/servers/plugins/replication/cl5_api.c | 22 +++++++++++++++-------
2 files changed, 16 insertions(+), 8 deletions(-)
New commits:
commit cea00f839b55349c2591b1e7ff4e50b7a536944c
Author: Rich Megginson <rmeggins(a)redhat.com>
Date: Fri Jan 11 07:58:13 2013 -0700
bump version to 1.2.10.25
diff --git a/VERSION.sh b/VERSION.sh
index 82145f0..2f2f4ab 100644
--- a/VERSION.sh
+++ b/VERSION.sh
@@ -10,7 +10,7 @@ vendor="389 Project"
# PACKAGE_VERSION is constructed from these
VERSION_MAJOR=1
VERSION_MINOR=2
-VERSION_MAINT=10.24
+VERSION_MAINT=10.25
# if this is a PRERELEASE, set VERSION_PREREL
# otherwise, comment it out
# be sure to include the dot prefix in the prerel
commit 231dbd32a6a58256039571d9eb7f84e6cc16feeb
Author: Rich Megginson <rmeggins(a)redhat.com>
Date: Wed Mar 28 16:11:20 2012 -0600
Ticket #331 - transaction errors with db 4.3 and db 4.2
https://fedorahosted.org/389/ticket/331
Resolves: Ticket #331
Bug Description: transaction errors with db 4.3 and db 4.2
Reviewed by: nhosoi (Thanks!)
Branch: 389-ds-base-1.2.10
Fix Description:
we are enabling transactions everywhere - since we are opening databases
with DB_AUTO_COMMIT we must either open and pass a valid txn handle to
all operations that modify the database (put, del) or we must pass the
DB_AUTO_COMMIT flag to those operations.
Platforms tested: RHEL6 x86_64, RHEL5 i386
Flag Day: no
Doc impact: no
(cherry picked from commit 9c7e9d51309cb8daa900a3e37c56267477aa666d)
diff --git a/ldap/servers/plugins/replication/cl5_api.c b/ldap/servers/plugins/replication/cl5_api.c
index 6d65680..8147bc0 100644
--- a/ldap/servers/plugins/replication/cl5_api.c
+++ b/ldap/servers/plugins/replication/cl5_api.c
@@ -95,7 +95,15 @@
#if 1000*DB_VERSION_MAJOR + 100*DB_VERSION_MINOR >= 4100
#define USE_DB_TXN 1 /* use transactions */
#define DEFAULT_DB_ENV_OP_FLAGS DB_AUTO_COMMIT
-#define DEFAULT_DB_OP_FLAGS 0
+#if 1000*DB_VERSION_MAJOR + 100*DB_VERSION_MINOR <= 4300
+/* we are enabling transactions everywhere - since we are opening databases
+ with DB_AUTO_COMMIT we must either open and pass a valid txn handle to
+ all operations that modify the database (put, del) or we must pass the
+ DB_AUTO_COMMIT flag to those operations */
+#define DEFAULT_DB_OP_FLAGS(txn) (txn ? 0 : DB_AUTO_COMMIT)
+#else
+#define DEFAULT_DB_OP_FLAGS(txn) 0
+#endif
#define DB_OPEN(oflags, db, txnid, file, database, type, flags, mode, rval) \
{ \
if (((oflags) & DB_INIT_TXN) && ((oflags) & DB_INIT_LOG)) \
@@ -108,7 +116,7 @@
} \
}
#else /* older then db 41 */
-#define DEFAULT_DB_OP_FLAGS 0
+#define DEFAULT_DB_OP_FLAGS(txn) 0
#define DB_OPEN(oflags, db, txnid, file, database, type, flags, mode, rval) \
(rval) = (db)->open((db), (file), (database), (type), (flags), (mode))
#endif
@@ -3683,7 +3691,7 @@ static int _cl5ReadRUV (const char *replGen, Object *obj, PRBool purge)
/* delete the entry; it is re-added when file
is successfully closed */
- file->db->del (file->db, NULL, &key, DEFAULT_DB_OP_FLAGS);
+ file->db->del (file->db, NULL, &key, DEFAULT_DB_OP_FLAGS(NULL));
rc = CL5_SUCCESS;
goto done;
@@ -3754,7 +3762,7 @@ static int _cl5WriteRUV (CL5DBFile *file, PRBool purge)
return CL5_DB_ERROR;
}
#endif
- rc = file->db->put(file->db, txnid, &key, &data, DEFAULT_DB_OP_FLAGS);
+ rc = file->db->put(file->db, txnid, &key, &data, DEFAULT_DB_OP_FLAGS(txnid));
slapi_ch_free (&(data.data));
if ( rc == 0 )
@@ -4058,7 +4066,7 @@ static int _cl5GetEntryCount (CL5DBFile *file)
/* delete the entry. the entry is re-added when file
is successfully closed */
- file->db->del (file->db, NULL, &key, DEFAULT_DB_OP_FLAGS);
+ file->db->del (file->db, NULL, &key, DEFAULT_DB_OP_FLAGS(NULL));
slapi_log_error(SLAPI_LOG_REPL, repl_plugin_name_cl,
"_cl5GetEntryCount: %d changes for replica %s\n",
file->entryCount, file->replName);
@@ -4122,7 +4130,7 @@ static int _cl5WriteEntryCount (CL5DBFile *file)
return CL5_DB_ERROR;
}
#endif
- rc = file->db->put(file->db, txnid, &key, &data, DEFAULT_DB_OP_FLAGS);
+ rc = file->db->put(file->db, txnid, &key, &data, DEFAULT_DB_OP_FLAGS(txnid));
if (rc == 0)
{
#if 1000*DB_VERSION_MAJOR + 100*DB_VERSION_MINOR < 4100
@@ -4618,7 +4626,7 @@ static int _cl5WriteOperationTxn(const char *replName, const char *replGen,
{
PR_WaitSemaphore(file->sema);
}
- rc = file->db->put(file->db, txnid, &key, data, DEFAULT_DB_OP_FLAGS);
+ rc = file->db->put(file->db, txnid, &key, data, DEFAULT_DB_OP_FLAGS(txnid));
if ( file->sema )
{
PR_PostSemaphore(file->sema);
11 years, 2 months