[Fedora-directory-commits] adminserver configure.ac, 1.24.2.1, 1.24.2.2 aclocal.m4, 1.38.2.1, 1.38.2.2 configure, 1.42.2.1, 1.42.2.2 missing, 1.28.2.1, 1.28.2.2 install-sh, 1.28.2.1, 1.28.2.2 depcomp, 1.28.2.1, 1.28.2.2 config.sub, 1.28.2.1, 1.28.2.2 config.guess, 1.28.2.1, 1.28.2.2 compile, 1.27.2.1, 1.27.2.2 Makefile.in, 1.45.2.1, 1.45.2.2
by Doctor Conrad
Author: rmeggins
Update of /cvs/dirsec/adminserver
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv8064
Modified Files:
Tag: Directory_Server_8_0_Branch
configure.ac aclocal.m4 configure missing install-sh depcomp
config.sub config.guess compile Makefile.in
Log Message:
bump rev to 1.1.4
Index: configure.ac
===================================================================
RCS file: /cvs/dirsec/adminserver/configure.ac,v
retrieving revision 1.24.2.1
retrieving revision 1.24.2.2
diff -u -r1.24.2.1 -r1.24.2.2
--- configure.ac 15 Apr 2008 16:44:34 -0000 1.24.2.1
+++ configure.ac 15 Apr 2008 16:47:30 -0000 1.24.2.2
@@ -2,7 +2,7 @@
# Process this file with autoconf to produce a configure script.
AC_PREREQ(2.59)
-AC_INIT([dirsrv-admin], [1.1.3], [http://bugzilla.redhat.com/])
+AC_INIT([dirsrv-admin], [1.1.4], [http://bugzilla.redhat.com/])
AC_CONFIG_SRCDIR([admserv/cgi-src40/viewlog.c])
AM_INIT_AUTOMAKE([1.9 foreign subdir-objects])
AM_MAINTAINER_MODE
Index: configure
===================================================================
RCS file: /cvs/dirsec/adminserver/configure,v
retrieving revision 1.42.2.1
retrieving revision 1.42.2.2
diff -u -r1.42.2.1 -r1.42.2.2
--- configure 15 Apr 2008 16:44:34 -0000 1.42.2.1
+++ configure 15 Apr 2008 16:47:30 -0000 1.42.2.2
@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.59 for dirsrv-admin 1.1.3.
+# Generated by GNU Autoconf 2.59 for dirsrv-admin 1.1.4.
#
# Report bugs to <http://bugzilla.redhat.com/>.
#
@@ -423,8 +423,8 @@
# Identity of this package.
PACKAGE_NAME='dirsrv-admin'
PACKAGE_TARNAME='dirsrv-admin'
-PACKAGE_VERSION='1.1.3'
-PACKAGE_STRING='dirsrv-admin 1.1.3'
+PACKAGE_VERSION='1.1.4'
+PACKAGE_STRING='dirsrv-admin 1.1.4'
PACKAGE_BUGREPORT='http://bugzilla.redhat.com/'
ac_unique_file="admserv/cgi-src40/viewlog.c"
@@ -957,7 +957,7 @@
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
-\`configure' configures dirsrv-admin 1.1.3 to adapt to many kinds of systems.
+\`configure' configures dirsrv-admin 1.1.4 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1023,7 +1023,7 @@
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of dirsrv-admin 1.1.3:";;
+ short | recursive ) echo "Configuration of dirsrv-admin 1.1.4:";;
esac
cat <<\_ACEOF
@@ -1202,7 +1202,7 @@
test -n "$ac_init_help" && exit 0
if $ac_init_version; then
cat <<\_ACEOF
-dirsrv-admin configure 1.1.3
+dirsrv-admin configure 1.1.4
generated by GNU Autoconf 2.59
Copyright (C) 2003 Free Software Foundation, Inc.
@@ -1216,7 +1216,7 @@
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by dirsrv-admin $as_me 1.1.3, which was
+It was created by dirsrv-admin $as_me 1.1.4, which was
generated by GNU Autoconf 2.59. Invocation command line was
$ $0 $@
@@ -1860,7 +1860,7 @@
# Define the identity of the package.
PACKAGE='dirsrv-admin'
- VERSION='1.1.3'
+ VERSION='1.1.4'
cat >>confdefs.h <<_ACEOF
@@ -25613,7 +25613,7 @@
} >&5
cat >&5 <<_CSEOF
-This file was extended by dirsrv-admin $as_me 1.1.3, which was
+This file was extended by dirsrv-admin $as_me 1.1.4, which was
generated by GNU Autoconf 2.59. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -25676,7 +25676,7 @@
cat >>$CONFIG_STATUS <<_ACEOF
ac_cs_version="\\
-dirsrv-admin config.status 1.1.3
+dirsrv-admin config.status 1.1.4
configured by $0, generated by GNU Autoconf 2.59,
with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\"
16 years
[Fedora-directory-commits] adminserver/admserv/cgi-src40 repl-monitor-cgi.pl.in, 1.1, 1.1.2.1
by Doctor Conrad
Author: rmeggins
Update of /cvs/dirsec/adminserver/admserv/cgi-src40
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv7894/adminserver/admserv/cgi-src40
Modified Files:
Tag: Directory_Server_8_0_Branch
repl-monitor-cgi.pl.in
Log Message:
Resolves: bugs 437301 and 437320
Description: Directory Server: shell command injection in CGI replication monitor
Directory Server: unrestricted access to CGI scripts
Fix Description: remove ScriptAlias for bin/admin/admin/bin - do not use that directory for CGI URIs - use only protected URIs for CGIs requiring authentication
Remove most CGI parameters from repl-monitor-cgi.pl - user must supply replmon.conf in the admin server config directory instead of passing in this pathname - repl-monitor-cgi.pl does not use system to call repl-monitor.pl, it "includes" that script (using perl import).
Platforms tested: all supported platforms
Flag Day: no
Doc impact: release notes are available
Index: repl-monitor-cgi.pl.in
===================================================================
RCS file: /cvs/dirsec/adminserver/admserv/cgi-src40/repl-monitor-cgi.pl.in,v
retrieving revision 1.1
retrieving revision 1.1.2.1
diff -u -r1.1 -r1.1.2.1
--- repl-monitor-cgi.pl.in 5 Sep 2007 16:45:59 -0000 1.1
+++ repl-monitor-cgi.pl.in 15 Apr 2008 16:44:35 -0000 1.1.2.1
@@ -42,22 +42,25 @@
my $query = CGI->new;
-$params = "";
-$params .= " -h " . $query->url_param('servhost') if $query->url_param('servhost');
-$params .= " -p " . $query->url_param('servport') if $query->url_param('servport');
-$params .= " -f " . $query->url_param('configfile') if $query->url_param('configfile');
-$params .= " -t " . $query->url_param('refreshinterval') if $query->url_param('refreshinterval');
-if ($query->url_param('admurl')) {
- $admurl = $query->url_param('admurl');
- if ( $ENV{'QUERY_STRING'} ) {
- $admurl .= "?$ENV{'QUERY_STRING'}";
- }
- elsif ( $ENV{'CONTENT_LENGTH'} ) {
- $admurl .= "?$CGI::CONTENT";
- }
- $params .= " -u \"$admurl\"";
+@ARGV = (); # clear it out
+my $configfile;
+if ($ENV{DS_CONFIG_DIR} and -d $ENV{DS_CONFIG_DIR}) {
+ $configfile = "$ENV{DS_CONFIG_DIR}/@instancename(a)/replmon.conf";
+} elsif ("@instconfigdir@" and -d "@instconfigdir@") {
+ $configfile = "@instconfigdir(a)/replmon.conf";
}
+push @ARGV, '-f', $configfile;
+
+my $refreshinterval = $query->url_param('refreshinterval') ? int($query->url_param('refreshinterval')) : "300";
+push @ARGV, '-t', $refreshinterval;
+
+my $admurl = "http://";
+if ($ENV{HTTPS} and (lc($ENV{HTTPS}) eq "on")) {
+ $admurl = "https://";
+}
+$admurl .= $ENV{HTTP_HOST} . $ENV{SCRIPT_NAME} . "?refreshinterval=$refreshinterval";
+push @ARGV, '-u', $admurl;
+
# Now the real work
-$replmon = "@bindir(a)/repl-monitor.pl";
-system("$replmon $params");
+require "@bindir(a)/repl-monitor.pl";
16 years
[Fedora-directory-commits] adminserver/admserv/cfgstuff admserv.conf.in, 1.10, 1.10.2.1
by Doctor Conrad
Author: rmeggins
Update of /cvs/dirsec/adminserver/admserv/cfgstuff
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv7894/adminserver/admserv/cfgstuff
Modified Files:
Tag: Directory_Server_8_0_Branch
admserv.conf.in
Log Message:
Resolves: bugs 437301 and 437320
Description: Directory Server: shell command injection in CGI replication monitor
Directory Server: unrestricted access to CGI scripts
Fix Description: remove ScriptAlias for bin/admin/admin/bin - do not use that directory for CGI URIs - use only protected URIs for CGIs requiring authentication
Remove most CGI parameters from repl-monitor-cgi.pl - user must supply replmon.conf in the admin server config directory instead of passing in this pathname - repl-monitor-cgi.pl does not use system to call repl-monitor.pl, it "includes" that script (using perl import).
Platforms tested: all supported platforms
Flag Day: no
Doc impact: release notes are available
Index: admserv.conf.in
===================================================================
RCS file: /cvs/dirsec/adminserver/admserv/cfgstuff/admserv.conf.in,v
retrieving revision 1.10
retrieving revision 1.10.2.1
diff -u -r1.10 -r1.10.2.1
--- admserv.conf.in 7 Dec 2007 17:43:50 -0000 1.10
+++ admserv.conf.in 15 Apr 2008 16:44:35 -0000 1.10.2.1
@@ -25,7 +25,6 @@
ADMServerVersionString "@capbrand@-Administrator/@PACKAGE_VERSION@"
ADMConfigDir "@configdir@"
-ScriptAlias /bin/admin/admin/bin/ "@cgibindir@/"
ScriptAlias /dist/ "@cgibindir@/"
ScriptAlias /manual/help/ "@cgibindir@/"
@@ -63,7 +62,7 @@
# remap / requests to the download CGI
RewriteEngine on
-RewriteRule ^/$ /bin/admin/admin/bin/download [R,L,QSA]
+RewriteRule ^/$ /dist/download [R,L,QSA]
# remap admin server icons
Alias /admin-serv/tasks/icons/ @icondir@/
16 years
[Fedora-directory-commits] adminserver configure, 1.42, 1.42.2.1 configure.ac, 1.24, 1.24.2.1 aclocal.m4, 1.38, 1.38.2.1 missing, 1.28, 1.28.2.1 install-sh, 1.28, 1.28.2.1 depcomp, 1.28, 1.28.2.1 compile, 1.27, 1.27.2.1 Makefile.in, 1.45, 1.45.2.1 config.sub, 1.28, 1.28.2.1 config.guess, 1.28, 1.28.2.1
by Doctor Conrad
Author: rmeggins
Update of /cvs/dirsec/adminserver
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv7894/adminserver
Modified Files:
Tag: Directory_Server_8_0_Branch
configure configure.ac aclocal.m4 missing install-sh depcomp
compile Makefile.in config.sub config.guess
Log Message:
Resolves: bugs 437301 and 437320
Description: Directory Server: shell command injection in CGI replication monitor
Directory Server: unrestricted access to CGI scripts
Fix Description: remove ScriptAlias for bin/admin/admin/bin - do not use that directory for CGI URIs - use only protected URIs for CGIs requiring authentication
Remove most CGI parameters from repl-monitor-cgi.pl - user must supply replmon.conf in the admin server config directory instead of passing in this pathname - repl-monitor-cgi.pl does not use system to call repl-monitor.pl, it "includes" that script (using perl import).
Platforms tested: all supported platforms
Flag Day: no
Doc impact: release notes are available
Index: configure
===================================================================
RCS file: /cvs/dirsec/adminserver/configure,v
retrieving revision 1.42
retrieving revision 1.42.2.1
diff -u -r1.42 -r1.42.2.1
--- configure 18 Dec 2007 19:55:22 -0000 1.42
+++ configure 15 Apr 2008 16:44:34 -0000 1.42.2.1
@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.59 for dirsrv-admin 1.1.1.
+# Generated by GNU Autoconf 2.59 for dirsrv-admin 1.1.3.
#
# Report bugs to <http://bugzilla.redhat.com/>.
#
@@ -423,8 +423,8 @@
# Identity of this package.
PACKAGE_NAME='dirsrv-admin'
PACKAGE_TARNAME='dirsrv-admin'
-PACKAGE_VERSION='1.1.1'
-PACKAGE_STRING='dirsrv-admin 1.1.1'
+PACKAGE_VERSION='1.1.3'
+PACKAGE_STRING='dirsrv-admin 1.1.3'
PACKAGE_BUGREPORT='http://bugzilla.redhat.com/'
ac_unique_file="admserv/cgi-src40/viewlog.c"
@@ -957,7 +957,7 @@
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
-\`configure' configures dirsrv-admin 1.1.1 to adapt to many kinds of systems.
+\`configure' configures dirsrv-admin 1.1.3 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1023,7 +1023,7 @@
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of dirsrv-admin 1.1.1:";;
+ short | recursive ) echo "Configuration of dirsrv-admin 1.1.3:";;
esac
cat <<\_ACEOF
@@ -1202,7 +1202,7 @@
test -n "$ac_init_help" && exit 0
if $ac_init_version; then
cat <<\_ACEOF
-dirsrv-admin configure 1.1.1
+dirsrv-admin configure 1.1.3
generated by GNU Autoconf 2.59
Copyright (C) 2003 Free Software Foundation, Inc.
@@ -1216,7 +1216,7 @@
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by dirsrv-admin $as_me 1.1.1, which was
+It was created by dirsrv-admin $as_me 1.1.3, which was
generated by GNU Autoconf 2.59. Invocation command line was
$ $0 $@
@@ -1860,7 +1860,7 @@
# Define the identity of the package.
PACKAGE='dirsrv-admin'
- VERSION='1.1.1'
+ VERSION='1.1.3'
cat >>confdefs.h <<_ACEOF
@@ -25613,7 +25613,7 @@
} >&5
cat >&5 <<_CSEOF
-This file was extended by dirsrv-admin $as_me 1.1.1, which was
+This file was extended by dirsrv-admin $as_me 1.1.3, which was
generated by GNU Autoconf 2.59. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -25676,7 +25676,7 @@
cat >>$CONFIG_STATUS <<_ACEOF
ac_cs_version="\\
-dirsrv-admin config.status 1.1.1
+dirsrv-admin config.status 1.1.3
configured by $0, generated by GNU Autoconf 2.59,
with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\"
Index: configure.ac
===================================================================
RCS file: /cvs/dirsec/adminserver/configure.ac,v
retrieving revision 1.24
retrieving revision 1.24.2.1
diff -u -r1.24 -r1.24.2.1
--- configure.ac 18 Dec 2007 19:55:22 -0000 1.24
+++ configure.ac 15 Apr 2008 16:44:34 -0000 1.24.2.1
@@ -2,7 +2,7 @@
# Process this file with autoconf to produce a configure script.
AC_PREREQ(2.59)
-AC_INIT([dirsrv-admin], [1.1.1], [http://bugzilla.redhat.com/])
+AC_INIT([dirsrv-admin], [1.1.3], [http://bugzilla.redhat.com/])
AC_CONFIG_SRCDIR([admserv/cgi-src40/viewlog.c])
AM_INIT_AUTOMAKE([1.9 foreign subdir-objects])
AM_MAINTAINER_MODE
16 years
[Fedora-directory-commits] ldapserver/ldap/servers/plugins/memberof memberof.c, 1.5, 1.6
by Doctor Conrad
Author: nkinder
Update of /cvs/dirsec/ldapserver/ldap/servers/plugins/memberof
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv24511
Modified Files:
memberof.c
Log Message:
Resolves: 440474
Summary: Fixed memory leaks in memberOf plug-in.
Index: memberof.c
===================================================================
RCS file: /cvs/dirsec/ldapserver/ldap/servers/plugins/memberof/memberof.c,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- memberof.c 3 Apr 2008 16:52:46 -0000 1.5
+++ memberof.c 3 Apr 2008 23:04:11 -0000 1.6
@@ -585,7 +585,7 @@
/* get the mod set */
slapi_pblock_get(pb, SLAPI_MODIFY_MODS, &mods);
smods = slapi_mods_new();
- slapi_mods_init_passin(smods, mods);
+ slapi_mods_init_byref(smods, mods);
next_mod = slapi_mod_new();
smod = slapi_mods_get_first_smod(smods, next_mod);
@@ -653,6 +653,7 @@
}
slapi_mod_free(&next_mod);
+ slapi_mods_free(&smods);
}
slapi_log_error( SLAPI_LOG_TRACE, MEMBEROF_PLUGIN_SUBSYSTEM,
@@ -923,7 +924,7 @@
slapi_log_error( SLAPI_LOG_PLUGIN,
MEMBEROF_PLUGIN_SUBSYSTEM,
"memberof_modop_one_r: not processing memberOf "
- "operations on self entry: %s\n", this_dn_val);
+ "operations on self entry: %s\n", this_dn_val);
slapi_value_free(&to_dn_val);
slapi_value_free(&this_dn_val);
goto bail;
@@ -1009,6 +1010,7 @@
}
bail:
+ slapi_entry_free(e);
return rc;
}
@@ -1307,6 +1309,7 @@
rc = 0 == slapi_attr_value_find(
attr, slapi_value_get_berval(memberdn));
}
+ slapi_entry_free(group_e);
}
slapi_sdn_free(&sdn);
@@ -1612,6 +1615,8 @@
}
}
}
+ slapi_ch_free((void **)&pre_array);
+ slapi_ch_free((void **)&post_array);
}
return 0;
@@ -1825,6 +1830,8 @@
}
bail:
+ slapi_entry_free(group_e);
+ slapi_entry_free(opto_e);
slapi_ch_free_string(&filter_str);
slapi_log_error( SLAPI_LOG_TRACE, MEMBEROF_PLUGIN_SUBSYSTEM,
16 years
[Fedora-directory-commits] ldapserver/ldap/servers/slapd detach.c, 1.6, 1.7 main.c, 1.23, 1.24 proto-slap.h, 1.31, 1.32
by Doctor Conrad
Author: rmeggins
Update of /cvs/dirsec/ldapserver/ldap/servers/slapd
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv2319/ldap/servers/slapd
Modified Files:
detach.c main.c proto-slap.h
Log Message:
Resolves: bug 439829
Bug Description: simple password auth fails using NSS 3.11.99 or later
Reviewed by: nkinder (Thanks!)
Fix Description: The new softokn in NSS 3.11.99 and later requires that
the server calls NSS_Init() after forking, but before detaching from the
controlling terminal. In fact, this was always a requirement, but the
softokn in older NSS allow it. However, it's possible that some
hardware crypto devices do not allow this and may not work with older
directory servers. The fix is to move the nss/ssl initialization so
that it can be called at the right point, or from other points in cases
where the server does not fork (e.g. db2ldif).
Platforms tested: Fedora 9 i386, RHEL5 x86_64
Flag Day: no
Doc impact: no
Index: detach.c
===================================================================
RCS file: /cvs/dirsec/ldapserver/ldap/servers/slapd/detach.c,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- detach.c 10 Nov 2006 23:45:40 -0000 1.6
+++ detach.c 3 Apr 2008 21:07:55 -0000 1.7
@@ -76,7 +76,8 @@
#endif /* USE_SYSCONF */
void
-detach()
+detach( int slapd_exemode, int importexport_encrypt,
+ int s_port, daemon_ports_t *ports_info )
{
#ifndef _WIN32
int i, sd;
@@ -108,6 +109,12 @@
break;
}
+ /* call this right after the fork, but before closing stdin */
+ if (slapd_do_all_nss_ssl_init(slapd_exemode, importexport_encrypt,
+ s_port, ports_info)) {
+ exit(1);
+ }
+
workingdir = config_get_workingdir();
if ( NULL == workingdir ) {
errorlog = config_get_errorlog();
@@ -150,7 +157,12 @@
#endif /* USE_SETSID */
g_set_detached(1);
- }
+ } else { /* not detaching - call nss/ssl init */
+ if (slapd_do_all_nss_ssl_init(slapd_exemode, importexport_encrypt,
+ s_port, ports_info)) {
+ exit(1);
+ }
+ }
(void) SIGNAL( SIGPIPE, SIG_IGN );
#endif /* _WIN32 */
Index: main.c
===================================================================
RCS file: /cvs/dirsec/ldapserver/ldap/servers/slapd/main.c,v
retrieving revision 1.23
retrieving revision 1.24
diff -u -r1.23 -r1.24
--- main.c 3 Apr 2008 16:52:46 -0000 1.23
+++ main.c 3 Apr 2008 21:07:55 -0000 1.24
@@ -901,48 +901,14 @@
}
#endif
- /*
- * Initialise NSS once for the whole slapd process, whether SSL
- * is enabled or not. We use NSS for random number generation and
- * other things even if we are not going to accept SSL connections.
- * We also need NSS for attribute encryption/decryption on import and export.
- */
- init_ssl = ( (slapd_exemode == SLAPD_EXEMODE_SLAPD) || importexport_encrypt)
- && config_get_security()
- && (0 != s_port) && (s_port <= LDAP_PORT_MAX);
- /* As of DS 6.1, always do a full initialization so that other
- * modules can assume NSS is available
- */
- if ( slapd_nss_init((slapd_exemode == SLAPD_EXEMODE_SLAPD),
- (slapd_exemode != SLAPD_EXEMODE_REFERRAL) /* have config? */ )) {
- LDAPDebug(LDAP_DEBUG_ANY,
- "ERROR: NSS Initialization Failed.\n", 0, 0, 0);
- exit (1);
- }
-
- if (slapd_exemode == SLAPD_EXEMODE_SLAPD) {
- client_auth_init();
- }
-
- if ( init_ssl && ( 0 != slapd_ssl_init())) {
- LDAPDebug(LDAP_DEBUG_ANY,
- "ERROR: SSL Initialization Failed.\n", 0, 0, 0 );
- exit( 1 );
- }
-
- if ((slapd_exemode == SLAPD_EXEMODE_SLAPD) ||
- (slapd_exemode == SLAPD_EXEMODE_REFERRAL)) {
- if ( init_ssl ) {
- PRFileDesc **sock;
- for (sock = ports_info.s_socket; sock && *sock; sock++) {
- if ( 0 != slapd_ssl_init2(sock, 0) ) {
- LDAPDebug(LDAP_DEBUG_ANY,
- "ERROR: SSL Initialization phase 2 Failed.\n", 0, 0, 0 );
- exit( 1 );
- }
- }
- }
- }
+ /* Do NSS and/or SSL init for those modes other than listening modes */
+ if ((slapd_exemode != SLAPD_EXEMODE_REFERRAL) &&
+ (slapd_exemode != SLAPD_EXEMODE_SLAPD)) {
+ if (slapd_do_all_nss_ssl_init(slapd_exemode, importexport_encrypt,
+ s_port, &ports_info)) {
+ return 1;
+ }
+ }
/*
* if we were called upon to do special database stuff, do it and be
@@ -1002,7 +968,8 @@
* Have to detach after ssl_init - the user may be prompted for the PIN
* on the terminal, so it must be open.
*/
- detach();
+ detach(slapd_exemode, importexport_encrypt,
+ s_port, &ports_info);
/*
* Now write our PID to the startup PID file.
@@ -2885,3 +2852,67 @@
}
#endif /* LDAP_DEBUG */
+/*
+ This function does all NSS and SSL related initialization
+ required during startup. We use this function rather
+ than just call this code from main because we must perform
+ all of this initialization after the fork() but before
+ we detach from the controlling terminal. This is because
+ the NSS softokn requires that NSS_Init is called after the
+ fork - this was always the case, but it is a hard error in
+ NSS 3.11.99 and later. We also have to call NSS_Init before
+ doing the detach because NSS may prompt the user for the
+ token (h/w or softokn) password on stdin. So we use this
+ function that we can call from detach() if running in
+ regular slapd exemode or from main() if running in other
+ modes (or just not detaching).
+*/
+int
+slapd_do_all_nss_ssl_init(int slapd_exemode, int importexport_encrypt,
+ int s_port, daemon_ports_t *ports_info)
+{
+ /*
+ * Initialise NSS once for the whole slapd process, whether SSL
+ * is enabled or not. We use NSS for random number generation and
+ * other things even if we are not going to accept SSL connections.
+ * We also need NSS for attribute encryption/decryption on import and export.
+ */
+ int init_ssl = ( (slapd_exemode == SLAPD_EXEMODE_SLAPD) || importexport_encrypt)
+ && config_get_security()
+ && (0 != s_port) && (s_port <= LDAP_PORT_MAX);
+ /* As of DS 6.1, always do a full initialization so that other
+ * modules can assume NSS is available
+ */
+ if ( slapd_nss_init((slapd_exemode == SLAPD_EXEMODE_SLAPD),
+ (slapd_exemode != SLAPD_EXEMODE_REFERRAL) /* have config? */ )) {
+ LDAPDebug(LDAP_DEBUG_ANY,
+ "ERROR: NSS Initialization Failed.\n", 0, 0, 0);
+ exit (1);
+ }
+
+ if (slapd_exemode == SLAPD_EXEMODE_SLAPD) {
+ client_auth_init();
+ }
+
+ if ( init_ssl && ( 0 != slapd_ssl_init())) {
+ LDAPDebug(LDAP_DEBUG_ANY,
+ "ERROR: SSL Initialization Failed.\n", 0, 0, 0 );
+ exit( 1 );
+ }
+
+ if ((slapd_exemode == SLAPD_EXEMODE_SLAPD) ||
+ (slapd_exemode == SLAPD_EXEMODE_REFERRAL)) {
+ if ( init_ssl ) {
+ PRFileDesc **sock;
+ for (sock = ports_info->s_socket; sock && *sock; sock++) {
+ if ( 0 != slapd_ssl_init2(sock, 0) ) {
+ LDAPDebug(LDAP_DEBUG_ANY,
+ "ERROR: SSL Initialization phase 2 Failed.\n", 0, 0, 0 );
+ exit( 1 );
+ }
+ }
+ }
+ }
+
+ return 0;
+}
Index: proto-slap.h
===================================================================
RCS file: /cvs/dirsec/ldapserver/ldap/servers/slapd/proto-slap.h,v
retrieving revision 1.31
retrieving revision 1.32
diff -u -r1.31 -r1.32
--- proto-slap.h 18 Oct 2007 01:22:29 -0000 1.31
+++ proto-slap.h 3 Apr 2008 21:07:55 -0000 1.32
@@ -483,7 +483,8 @@
/*
* detach.c
*/
-void detach( void );
+void detach( int slapd_exemode, int importexport_encrypt,
+ int s_port, daemon_ports_t *ports_info );
#ifndef _WIN32
void close_all_files( void );
#endif
@@ -879,7 +880,6 @@
int slapd_ssl_listener_is_initialized();
int sasl_io_cleanup(Connection *c);
-
/*
* security_wrappers.c
*/
@@ -1277,4 +1277,7 @@
#if ( defined( hpux ) || defined( irix ))
void signal2sigaction( int s, void *a );
#endif
+int slapd_do_all_nss_ssl_init(int slapd_exemode, int importexport_encrypt,
+ int s_port, daemon_ports_t *ports_info);
+
#endif /* _PROTO_SLAP */
16 years
[Fedora-directory-commits] ldapserver/ldap/servers/slapd log.c, 1.21, 1.22
by Doctor Conrad
Author: nkinder
Update of /cvs/dirsec/ldapserver/ldap/servers/slapd
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv25728/slapd
Modified Files:
log.c
Log Message:
Resolves: 440333
Summary: Fixed valrgind errors about use of unitialized values.
Index: log.c
===================================================================
RCS file: /cvs/dirsec/ldapserver/ldap/servers/slapd/log.c,v
retrieving revision 1.21
retrieving revision 1.22
diff -u -r1.21 -r1.22
--- log.c 3 Dec 2007 18:16:32 -0000 1.21
+++ log.c 3 Apr 2008 17:18:11 -0000 1.22
@@ -4007,7 +4007,7 @@
static time_t
log_reverse_convert_time(char *tbuf)
{
- struct tm tm;
+ struct tm tm = {0};
if (strchr(tbuf, '-')) { /* short format */
strptime(tbuf, "%Y%m%d-%H%M%S", &tm);
16 years
[Fedora-directory-commits] ldapserver/ldap/servers/plugins/acl acl_ext.c, 1.7, 1.8
by Doctor Conrad
Author: nkinder
Update of /cvs/dirsec/ldapserver/ldap/servers/plugins/acl
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv25728/plugins/acl
Modified Files:
acl_ext.c
Log Message:
Resolves: 440333
Summary: Fixed valrgind errors about use of unitialized values.
Index: acl_ext.c
===================================================================
RCS file: /cvs/dirsec/ldapserver/ldap/servers/plugins/acl/acl_ext.c,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- acl_ext.c 18 Oct 2007 00:08:27 -0000 1.7
+++ acl_ext.c 3 Apr 2008 17:18:10 -0000 1.8
@@ -647,7 +647,7 @@
struct acl_cblock *aclcb = NULL;
char *authType;
void *conn;
- unsigned long op_type;
+ int op_type;
if ( NULL == aclpb ) {
16 years
[Fedora-directory-commits] ldapserver/ldap/servers/slapd/back-ldbm archive.c, 1.15, 1.16 back-ldbm.h, 1.12, 1.13 dblayer.c, 1.26, 1.27 import.c, 1.10, 1.11 ldif2ldbm.c, 1.15, 1.16
by Doctor Conrad
Author: nkinder
Update of /cvs/dirsec/ldapserver/ldap/servers/slapd/back-ldbm
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv18174/ldap/servers/slapd/back-ldbm
Modified Files:
archive.c back-ldbm.h dblayer.c import.c ldif2ldbm.c
Log Message:
Resolves: 439907
Summary: Enhanced SLAPI task API and ported existing tasks to use new API.
Index: archive.c
===================================================================
RCS file: /cvs/dirsec/ldapserver/ldap/servers/slapd/back-ldbm/archive.c,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -r1.15 -r1.16
--- archive.c 4 Dec 2007 17:52:56 -0000 1.15
+++ archive.c 3 Apr 2008 16:52:47 -0000 1.16
@@ -61,7 +61,7 @@
slapi_pblock_get( pb, SLAPI_BACKEND_INSTANCE_NAME, &backendname);
slapi_pblock_get( pb, SLAPI_BACKEND_TASK, &task );
slapi_pblock_get( pb, SLAPI_TASK_FLAGS, &task_flags );
- li->li_flags = run_from_cmdline = (task_flags & TASK_RUNNING_FROM_COMMANDLINE);
+ li->li_flags = run_from_cmdline = (task_flags & SLAPI_TASK_RUNNING_FROM_COMMANDLINE);
if ( !rawdirectory || !*rawdirectory ) {
LDAPDebug( LDAP_DEBUG_ANY, "archive2db: no archive name\n",
@@ -273,7 +273,7 @@
slapi_pblock_get( pb, SLAPI_PLUGIN_PRIVATE, &li );
slapi_pblock_get( pb, SLAPI_SEQ_VAL, &rawdirectory );
slapi_pblock_get( pb, SLAPI_TASK_FLAGS, &task_flags );
- li->li_flags = run_from_cmdline = (task_flags & TASK_RUNNING_FROM_COMMANDLINE);
+ li->li_flags = run_from_cmdline = (task_flags & SLAPI_TASK_RUNNING_FROM_COMMANDLINE);
slapi_pblock_get( pb, SLAPI_BACKEND_TASK, &task );
Index: back-ldbm.h
===================================================================
RCS file: /cvs/dirsec/ldapserver/ldap/servers/slapd/back-ldbm/back-ldbm.h,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -r1.12 -r1.13
--- back-ldbm.h 19 Oct 2007 02:09:24 -0000 1.12
+++ back-ldbm.h 3 Apr 2008 16:52:47 -0000 1.13
@@ -513,10 +513,10 @@
int li_legacy_errcode; /* 615428 -- in case legacy err code is expected */
};
-/* li_flags could store these bits defined in ../slap.h
+/* li_flags could store these bits defined in ../slapi-plugin.h
* task flag (pb_task_flags) *
- * #define TASK_RUNNING_AS_TASK 0x0
- * #define TASK_RUNNING_FROM_COMMANDLINE 0x1
+ * SLAPI_TASK_RUNNING_AS_TASK
+ * SLAPI_TASK_RUNNING_FROM_COMMANDLINE
*/
/* allow conf w/o CONFIG_FLAG_ALLOW_RUNNING_CHANGE to be updated */
#define LI_FORCE_MOD_CONFIG 0x10
Index: dblayer.c
===================================================================
RCS file: /cvs/dirsec/ldapserver/ldap/servers/slapd/back-ldbm/dblayer.c,v
retrieving revision 1.26
retrieving revision 1.27
diff -u -r1.26 -r1.27
--- dblayer.c 4 Dec 2007 00:50:19 -0000 1.26
+++ dblayer.c 3 Apr 2008 16:52:47 -0000 1.27
@@ -1954,7 +1954,7 @@
oflags |= DB_PRIVATE;
}
PR_Lock(li->li_config_mutex);
- if ((li->li_flags & TASK_RUNNING_FROM_COMMANDLINE) &&
+ if ((li->li_flags & SLAPI_TASK_RUNNING_FROM_COMMANDLINE) &&
(li->li_import_cache_autosize)) /* Autosizing importCache
* Need to re-eval every time
* to guarantee the memory is
@@ -5678,7 +5678,7 @@
* dse_conf_verify may need to have db started, as well. */
/* If no logfiles were stored, then fatal recovery isn't required */
- if (li->li_flags & TASK_RUNNING_FROM_COMMANDLINE)
+ if (li->li_flags & SLAPI_TASK_RUNNING_FROM_COMMANDLINE)
{
/* command line mode; no need to run db threads */
dbmode |= DBLAYER_NO_DBTHREADS_MODE;
@@ -5707,7 +5707,7 @@
"Warning: Unable to verify the index configuration\n", 0, 0, 0);
}
- if (li->li_flags & TASK_RUNNING_FROM_COMMANDLINE) {
+ if (li->li_flags & SLAPI_TASK_RUNNING_FROM_COMMANDLINE) {
/* command line: close the database down again */
tmp_rval = dblayer_close(li, dbmode);
if (0 != tmp_rval) {
Index: import.c
===================================================================
RCS file: /cvs/dirsec/ldapserver/ldap/servers/slapd/back-ldbm/import.c,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -r1.10 -r1.11
--- import.c 18 Oct 2007 00:08:34 -0000 1.10
+++ import.c 3 Apr 2008 16:52:47 -0000 1.11
@@ -197,29 +197,19 @@
buffer, 0);
}
-static int import_task_destroy(Slapi_Task *task)
+static void import_task_destroy(Slapi_Task *task)
{
- ImportJob *job = (ImportJob *)task->task_private;
-
- if (task->task_log) {
- slapi_ch_free((void **)&task->task_log);
- }
-
- if (task->task_status) {
- slapi_ch_free((void **)&task->task_status);
- }
-
+ ImportJob *job = (ImportJob *)slapi_task_get_data(task);
if (job && job->task_status) {
slapi_ch_free((void **)&job->task_status);
job->task_status = NULL;
}
FREE(job);
- task->task_private = NULL;
- return 0;
+ slapi_task_set_data(task, NULL);
}
-static int import_task_abort(Slapi_Task *task)
+static void import_task_abort(Slapi_Task *task)
{
ImportJob *job;
@@ -227,9 +217,8 @@
* DSE lock for modify...
*/
- if (task->task_state == SLAPI_TASK_FINISHED) {
+ if (slapi_task_get_state(task) == SLAPI_TASK_FINISHED) {
/* too late */
- return 0;
}
/*
@@ -238,14 +227,12 @@
* because it will free the job.
*/
- job = (ImportJob *)task->task_private;
+ job = (ImportJob *)slapi_task_get_data(task);
import_abort_all(job, 0);
- while (task->task_state != SLAPI_TASK_FINISHED)
+ while (slapi_task_get_state(task) != SLAPI_TASK_FINISHED)
DS_Sleep(PR_MillisecondsToInterval(100));
-
- return 0;
}
@@ -1042,13 +1029,8 @@
slapi_ch_free_string(&inst_dirp);
}
- if (job->task != NULL && 0 == job->task->task_refcount) {
- /* exit code */
- job->task->task_exitcode = ret;
- job->task->task_state = SLAPI_TASK_FINISHED;
- job->task->task_progress = job->task->task_work;
- job->task->task_private = NULL;
- slapi_task_status_changed(job->task);
+ if ((job->task != NULL) && (0 == slapi_task_get_refcount(job->task))) {
+ slapi_task_finish(job->task, ret);
}
if (job->flags & FLAG_ONLINE) {
@@ -1093,7 +1075,7 @@
ImportWorkerInfo *producer = NULL;
if (job->task)
- job->task->task_refcount++;
+ slapi_task_inc_refcount(job->task);
PR_ASSERT(inst != NULL);
time(&beginning);
@@ -1364,13 +1346,11 @@
if (0 != ret) {
import_log_notice(job, "Import failed.");
if (job->task != NULL) {
- job->task->task_state = SLAPI_TASK_FINISHED;
- job->task->task_exitcode = ret;
- slapi_task_status_changed(job->task);
+ slapi_task_finish(job->task, ret);
}
} else {
if (job->task)
- job->task->task_refcount--;
+ slapi_task_dec_refcount(job->task);
import_all_done(job, ret);
}
@@ -1471,15 +1451,17 @@
/* add 1 to account for post-import cleanup (which can take a
* significant amount of time)
*/
+ /* NGK - This should eventually be cleaned up to use the public
+ * task API. */
if (0 == total_files) /* reindexing */
job->task->task_work = 2;
else
job->task->task_work = total_files + 1;
job->task->task_progress = 0;
job->task->task_state = SLAPI_TASK_RUNNING;
- job->task->task_private = job;
- job->task->destructor = import_task_destroy;
- job->task->cancel = import_task_abort;
+ slapi_task_set_data(job->task, job);
+ slapi_task_set_destructor_fn(job->task, import_task_destroy);
+ slapi_task_set_cancel_fn(job->task, import_task_abort);
job->flags |= FLAG_ONLINE;
/* create thread for import_main, so we can return */
Index: ldif2ldbm.c
===================================================================
RCS file: /cvs/dirsec/ldapserver/ldap/servers/slapd/back-ldbm/ldif2ldbm.c,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -r1.15 -r1.16
--- ldif2ldbm.c 13 Oct 2007 01:49:32 -0000 1.15
+++ ldif2ldbm.c 3 Apr 2008 16:52:47 -0000 1.16
@@ -568,7 +568,7 @@
/* hopefully this will go away once import is not run standalone... */
slapi_pblock_get(pb, SLAPI_TASK_FLAGS, &task_flags);
- if (task_flags & TASK_RUNNING_FROM_COMMANDLINE) {
+ if (task_flags & SLAPI_TASK_RUNNING_FROM_COMMANDLINE) {
/* initialize UniqueID generator - must be done once backends are started
and event queue is initialized but before plugins are started */
Slapi_DN *sdn = slapi_sdn_new_dn_byval ("cn=uniqueid generator,cn=config");
@@ -581,7 +581,7 @@
return -1;
}
- li->li_flags |= TASK_RUNNING_FROM_COMMANDLINE;
+ li->li_flags |= SLAPI_TASK_RUNNING_FROM_COMMANDLINE;
ldbm_config_load_dse_info(li);
autosize_import_cache(li);
}
@@ -604,7 +604,7 @@
/***** prepare & init libdb and dblayer *****/
- if (! (task_flags & TASK_RUNNING_FROM_COMMANDLINE)) {
+ if (! (task_flags & SLAPI_TASK_RUNNING_FROM_COMMANDLINE)) {
/* shutdown this instance of the db */
LDAPDebug(LDAP_DEBUG_ANY, "Bringing %s offline...\n",
instance_name, 0, 0);
@@ -778,11 +778,11 @@
slapi_pblock_get( pb, SLAPI_TASK_FLAGS, &task_flags );
slapi_pblock_get( pb, SLAPI_DB2LDIF_DECRYPT, &decrypt );
slapi_pblock_get( pb, SLAPI_DB2LDIF_SERVER_RUNNING, &server_running );
- run_from_cmdline = (task_flags & TASK_RUNNING_FROM_COMMANDLINE);
+ run_from_cmdline = (task_flags & SLAPI_TASK_RUNNING_FROM_COMMANDLINE);
dump_replica = pb->pb_ldif_dump_replica;
if (run_from_cmdline) {
- li->li_flags |= TASK_RUNNING_FROM_COMMANDLINE;
+ li->li_flags |= SLAPI_TASK_RUNNING_FROM_COMMANDLINE;
if (!dump_replica) {
we_start_the_backends = 1;
}
@@ -1298,12 +1298,12 @@
slapi_pblock_get(pb, SLAPI_BACKEND_INSTANCE_NAME, &instance_name);
slapi_pblock_get(pb, SLAPI_PLUGIN_PRIVATE, &li);
slapi_pblock_get(pb, SLAPI_TASK_FLAGS, &task_flags);
- run_from_cmdline = (task_flags & TASK_RUNNING_FROM_COMMANDLINE);
+ run_from_cmdline = (task_flags & SLAPI_TASK_RUNNING_FROM_COMMANDLINE);
slapi_pblock_get(pb, SLAPI_BACKEND_TASK, &task);
if (run_from_cmdline) {
/* No ldbm backend exists until we process the config info. */
- li->li_flags |= TASK_RUNNING_FROM_COMMANDLINE;
+ li->li_flags |= SLAPI_TASK_RUNNING_FROM_COMMANDLINE;
ldbm_config_load_dse_info(li);
txn.back_txn_txn = NULL; /* no transaction */
}
@@ -1764,6 +1764,8 @@
percent = (ep->ep_id*100 / (lastid ? lastid : 1));
}
if (task) {
+ /* NGK - This should eventually be cleaned up to use the
+ * public task API */
task->task_progress = (idl ? idindex : ep->ep_id);
task->task_work = (idl ? idl->b_nids : lastid);
slapi_task_status_changed(task);
@@ -1970,7 +1972,7 @@
slapi_pblock_get(pb, SLAPI_BACKEND_TASK, &task);
slapi_pblock_get(pb, SLAPI_DB2LDIF_SERVER_RUNNING, &server_running);
- run_from_cmdline = (task_flags & TASK_RUNNING_FROM_COMMANDLINE);
+ run_from_cmdline = (task_flags & SLAPI_TASK_RUNNING_FROM_COMMANDLINE);
slapi_pblock_get(pb, SLAPI_PLUGIN_PRIVATE, &li);
if (run_from_cmdline)
{
@@ -2435,7 +2437,7 @@
int run_from_cmdline = 0;
slapi_pblock_get(pb, SLAPI_TASK_FLAGS, &task_flags);
- run_from_cmdline = (task_flags & TASK_RUNNING_FROM_COMMANDLINE);
+ run_from_cmdline = (task_flags & SLAPI_TASK_RUNNING_FROM_COMMANDLINE);
be = inst->inst_be;
slapi_log_error(SLAPI_LOG_FATAL, "upgrade DB",
16 years
[Fedora-directory-commits] ldapserver/ldap/servers/slapd/test-plugins sampletask.c, 1.2, 1.3
by Doctor Conrad
Author: nkinder
Update of /cvs/dirsec/ldapserver/ldap/servers/slapd/test-plugins
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv18174/ldap/servers/slapd/test-plugins
Modified Files:
sampletask.c
Log Message:
Resolves: 439907
Summary: Enhanced SLAPI task API and ported existing tasks to use new API.
Index: sampletask.c
===================================================================
RCS file: /cvs/dirsec/ldapserver/ldap/servers/slapd/test-plugins/sampletask.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- sampletask.c 13 Aug 2007 15:35:35 -0000 1.2
+++ sampletask.c 3 Apr 2008 16:52:47 -0000 1.3
@@ -47,7 +47,7 @@
* objectClass: nsSlapdPlugin
* objectClass: extensibleObject
* cn: sampletask
- * nsslapd-pluginPath: <prefix>/usr/lib/<PACKAGE_NAME>/plugins/libsampletask-plugin.so
+ * nsslapd-pluginPath: libsampletask-plugin
* nsslapd-pluginInitfunc: sampletask_init
* nsslapd-pluginType: object
* nsslapd-pluginEnabled: on
@@ -58,26 +58,26 @@
*
* 4. create a config task entry in dse.ldif
* Task entry:
- * dn: cn=sample task, cn=tasks, cn=config
+ * dn: cn=sampletask, cn=tasks, cn=config
* objectClass: top
* objectClass: extensibleObject
- * cn: sample task
+ * cn: sampletask
*
* 5. to invoke the sample task, run the command line:
* $ ./ldapmodify -h <host> -p <port> -D "cn=Directory Manager" -w <pw> -a
- * dn: cn=sample task 0, cn=sample task, cn=tasks, cn=config
+ * dn: cn=sampletask 0, cn=sample task, cn=tasks, cn=config
* objectClass: top
* objectClass: extensibleObject
* cn: sample task 0
- * arg0: sample task arg0
+ * myarg: sample task myarg
*
* Result is in the errors log
- * [...] - Sample task starts (arg: sample task arg0) ...
+ * [...] - Sample task starts (arg: sample task myarg) ...
* [...] - Sample task finished.
*/
-#include "slap.h"
-#include "slapi-private.h"
+#include "slapi-plugin.h"
+#include "nspr.h"
static int task_sampletask_add(Slapi_PBlock *pb, Slapi_Entry *e,
Slapi_Entry *eAfter, int *returncode, char *returntext,
@@ -118,33 +118,32 @@
static void
task_sampletask_thread(void *arg)
{
- Slapi_PBlock *pb = (Slapi_PBlock *)arg;
- Slapi_Task *task = pb->pb_task;
- int rv;
-
- task->task_work = 1;
- task->task_progress = 0;
- task->task_state = SLAPI_TASK_RUNNING;
- slapi_task_status_changed(task);
-
- slapi_task_log_notice(task, "Sample task starts (arg: %s) ...\n",
- pb->pb_seq_val);
- LDAPDebug(LDAP_DEBUG_ANY, "Sample task starts (arg: %s) ...\n",
- pb->pb_seq_val, 0, 0);
- /* do real work */
- rv = 0;
+ Slapi_Task *task = (Slapi_Task *)arg;
+ char *myarg = NULL;
+ int i, rv = 0;
+ int total_work = 3;
+
+ /* fetch our argument from the task */
+ myarg = (char *)slapi_task_get_data(task);
+
+ /* update task state to show it's running */
+ slapi_task_begin(task, total_work);
+ slapi_task_log_notice(task, "Sample task starts (arg: %s) ...\n", myarg);
+ slapi_log_error(SLAPI_LOG_FATAL, "sampletask", "Sample task starts (arg: %s) ...\n", myarg);
+
+ /* real work would be done here */
+ for (i = 0; i < total_work; i++) {
+ PR_Sleep(10000);
+ slapi_task_inc_progress(task);
+ }
+ /* update task state to say we're finished */
slapi_task_log_notice(task, "Sample task finished.");
slapi_task_log_status(task, "Sample task finished.");
- LDAPDebug(LDAP_DEBUG_ANY, "Sample task finished.\n", 0, 0, 0);
-
- task->task_progress = 1;
- task->task_exitcode = rv;
- task->task_state = SLAPI_TASK_FINISHED;
- slapi_task_status_changed(task);
+ slapi_log_error(SLAPI_LOG_FATAL, "sampletask", "Sample task finished.\n");
- slapi_ch_free((void **)&pb->pb_seq_val);
- slapi_pblock_destroy(pb);
+ /* this will queue the destruction of the task */
+ slapi_task_finish(task, rv);
}
/* extract a single value from the entry (as a string) -- if it's not in the
@@ -163,6 +162,17 @@
return slapi_value_get_string(val);
}
+static void
+task_sampletask_destructor(Slapi_Task *task)
+{
+ if (task) {
+ char *myarg = (char *)slapi_task_get_data(task);
+ if (myarg) {
+ slapi_ch_free_string(&myarg);
+ }
+ }
+}
+
/*
* Invoked when the task instance is added by the client (step 5 of the comment)
* Get the necessary attributes from the task entry, and spawns a thread to do
@@ -178,7 +188,7 @@
int rv = SLAPI_DSE_CALLBACK_OK;
Slapi_PBlock *mypb = NULL;
Slapi_Task *task = NULL;
- const char *arg0;
+ const char *myarg;
*returncode = LDAP_SUCCESS;
if ((cn = fetch_attr(e, "cn", NULL)) == NULL) {
@@ -188,7 +198,7 @@
}
/* get arg(s) */
- if ((arg0 = fetch_attr(e, "arg0", NULL)) == NULL) {
+ if ((myarg = fetch_attr(e, "myarg", NULL)) == NULL) {
*returncode = LDAP_OBJECT_CLASS_VIOLATION;
rv = SLAPI_DSE_CALLBACK_ERROR;
goto out;
@@ -197,46 +207,33 @@
/* allocate new task now */
task = slapi_new_task(slapi_entry_get_ndn(e));
if (task == NULL) {
- LDAPDebug(LDAP_DEBUG_ANY, "unable to allocate new task!\n", 0, 0, 0);
- *returncode = LDAP_OPERATIONS_ERROR;
- rv = SLAPI_DSE_CALLBACK_ERROR;
- goto out;
- }
- task->task_state = SLAPI_TASK_SETUP;
- task->task_work = 1;
- task->task_progress = 0;
-
- /* create a pblock to pass the necessary info to the task thread */
- mypb = slapi_pblock_new();
- if (mypb == NULL) {
+ slapi_log_error(SLAPI_LOG_FATAL, "sampletask", "unable to allocate new task!\n");
*returncode = LDAP_OPERATIONS_ERROR;
rv = SLAPI_DSE_CALLBACK_ERROR;
goto out;
}
- mypb->pb_seq_val = slapi_ch_strdup(arg0);
- mypb->pb_task = task;
- mypb->pb_task_flags = TASK_RUNNING_AS_TASK;
+
+ /* set a destructor that will clean up myarg for us when the task is complete */
+ slapi_task_set_destructor_fn(task, task_sampletask_destructor);
+
+ /* Stash our argument in the task for use by the task thread */
+ slapi_task_set_data(task, slapi_ch_strdup(myarg));
/* start the sample task as a separate thread */
thread = PR_CreateThread(PR_USER_THREAD, task_sampletask_thread,
- (void *)mypb, PR_PRIORITY_NORMAL, PR_GLOBAL_THREAD,
+ (void *)task, PR_PRIORITY_NORMAL, PR_GLOBAL_THREAD,
PR_UNJOINABLE_THREAD, SLAPD_DEFAULT_THREAD_STACKSIZE);
if (thread == NULL) {
- LDAPDebug(LDAP_DEBUG_ANY,
- "unable to create sample task thread!\n", 0, 0, 0);
+ slapi_log_error(SLAPI_LOG_FATAL, "sampletask",
+ "unable to create sample task thread!\n");
*returncode = LDAP_OPERATIONS_ERROR;
rv = SLAPI_DSE_CALLBACK_ERROR;
- slapi_ch_free((void **)&mypb->pb_seq_val);
- slapi_pblock_destroy(mypb);
- goto out;
+ slapi_task_finish(task, *returncode);
+ } else {
+ /* thread successful */
+ rv = SLAPI_DSE_CALLBACK_OK;
}
- /* thread successful -- don't free the pb, let the thread do that. */
- return SLAPI_DSE_CALLBACK_OK;
-
out:
- if (task) {
- slapi_destroy_task(task);
- }
return rv;
}
16 years