From fedora-directory-commits at redhat.com Tue Dec 12 06:39:20 2006 From: fedora-directory-commits at redhat.com (Noriko Hosoi (nhosoi)) Date: Tue, 12 Dec 2006 01:39:20 -0500 Subject: [Fedora-directory-commits] ldapserver/ldap/admin/src create_instance.c, 1.38, 1.39 Message-ID: <200612120639.kBC6dK8G020546@cvs-int.fedora.redhat.com> Author: nhosoi Update of /cvs/dirsec/ldapserver/ldap/admin/src In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv20466 Modified Files: create_instance.c Log Message: Resolves: #202843 Summary: referential integrity plugin does not stack with Class of Service appliance (Comment #14) Changes: Added the CoS plugin dependency to MMR. Index: create_instance.c =================================================================== RCS file: /cvs/dirsec/ldapserver/ldap/admin/src/create_instance.c,v retrieving revision 1.38 retrieving revision 1.39 diff -u -r1.38 -r1.39 --- create_instance.c 8 Dec 2006 18:11:09 -0000 1.38 +++ create_instance.c 12 Dec 2006 06:39:17 -0000 1.39 @@ -2991,6 +2991,7 @@ fprintf(f, "nsslapd-pluginenabled: on\n"); fprintf(f, "nsslapd-plugin-depends-on-type: database\n"); fprintf(f, "nsslapd-plugin-depends-on-named: Multimaster Replication Plugin\n"); + fprintf(f, "nsslapd-plugin-depends-on-named: Class of Service\n"); fprintf(f, "\n"); fprintf(f, "dn: cn=Multimaster Replication Plugin,cn=plugins,cn=config\n"); @@ -3004,6 +3005,7 @@ fprintf(f, "nsslapd-pluginenabled: on\n"); fprintf(f, "nsslapd-plugin-depends-on-named: ldbm database\n"); fprintf(f, "nsslapd-plugin-depends-on-named: DES\n"); + fprintf(f, "nsslapd-plugin-depends-on-named: Class of Service\n"); fprintf(f, "\n"); fprintf(f, "dn: cn=Retro Changelog Plugin,cn=plugins,cn=config\n"); @@ -3016,6 +3018,7 @@ fprintf(f, "nsslapd-plugintype: object\n"); fprintf(f, "nsslapd-pluginenabled: off\n"); fprintf(f, "nsslapd-plugin-depends-on-type: database\n"); + fprintf(f, "nsslapd-plugin-depends-on-named: Class of Service\n"); fprintf(f, "\n"); From fedora-directory-commits at redhat.com Wed Dec 13 22:21:24 2006 From: fedora-directory-commits at redhat.com (Noriko Hosoi (nhosoi)) Date: Wed, 13 Dec 2006 17:21:24 -0500 Subject: [Fedora-directory-commits] ldapserver/ldap/servers/slapd/back-ldbm ldif2ldbm.c, 1.11, 1.12 Message-ID: <200612132221.kBDMLOWB006511@cvs-int.fedora.redhat.com> Author: nhosoi Update of /cvs/dirsec/ldapserver/ldap/servers/slapd/back-ldbm In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv6487 Modified Files: ldif2ldbm.c Log Message: Resolves: #202843 Summary: referential integrity plugin does not stack with Class of Service appliance (Comment #16) Changes: Don't call dblayer_close before plugin_closeall. Index: ldif2ldbm.c =================================================================== RCS file: /cvs/dirsec/ldapserver/ldap/servers/slapd/back-ldbm/ldif2ldbm.c,v retrieving revision 1.11 retrieving revision 1.12 diff -u -r1.11 -r1.12 --- ldif2ldbm.c 10 Nov 2006 23:45:39 -0000 1.11 +++ ldif2ldbm.c 13 Dec 2006 22:21:22 -0000 1.12 @@ -783,7 +783,7 @@ * Note that we should only call this once. If we're * dumping several backends then it gets called multiple * times and we get warnings in the error log like this: - * WARNING: ldbm instance NetscapeRoot already exists + * WARNING: ldbm instance userRoot already exists */ ldbm_config_load_dse_info(li); } @@ -1205,24 +1205,6 @@ "db2ldif: Failed to close database\n", 0, 0, 0 ); } - } else if (run_from_cmdline && dump_replica) { - /* - * It should not be necessary to close the dblayer here. - * However it masks complex thread timing issues that - * prevent a correct shutdown of the plugins. Closing the - * dblayer here means we cannot dump multiple replicas - * using -r, but the server doesn't allow that either. - */ - - /* - * Use DBLAYER_NORMAL_MODE to match the value that was provided - * to dblayer_start() and ensure creation of the guardian file. - */ - if (0 != dblayer_close(li,DBLAYER_NORMAL_MODE)) { - LDAPDebug( LDAP_DEBUG_ANY, - "db2ldif: Failed to close database\n", - 0, 0, 0 ); - } } if (!run_from_cmdline) { From fedora-directory-commits at redhat.com Thu Dec 14 23:16:57 2006 From: fedora-directory-commits at redhat.com (Noriko Hosoi (nhosoi)) Date: Thu, 14 Dec 2006 18:16:57 -0500 Subject: [Fedora-directory-commits] ldapserver/ldap/servers/slapd slapi-private.h, 1.14, 1.15 main.c, 1.16, 1.17 task.c, 1.9, 1.10 slapi-plugin.h, 1.13, 1.14 mapping_tree.c, 1.7, 1.8 Message-ID: <200612142316.kBENGvAB000491@cvs-int.fedora.redhat.com> Author: nhosoi Update of /cvs/dirsec/ldapserver/ldap/servers/slapd In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv32638 Modified Files: slapi-private.h main.c task.c slapi-plugin.h mapping_tree.c Log Message: Resolves: #195305, #195307 Summary: [195305] make new_task() non-static Changes: provide slapi_new_task and slapi_destroy_task as slapi APIs Summary: [195307] task registration by plugins is wiped by task_init() Changes: clean up old tasks before plugin_startall Index: slapi-private.h =================================================================== RCS file: /cvs/dirsec/ldapserver/ldap/servers/slapd/slapi-private.h,v retrieving revision 1.14 retrieving revision 1.15 diff -u -r1.14 -r1.15 --- slapi-private.h 10 Nov 2006 23:45:40 -0000 1.14 +++ slapi-private.h 14 Dec 2006 23:16:54 -0000 1.15 @@ -744,6 +744,7 @@ /* begin and end the task subsystem */ void task_init(void); void task_shutdown(void); +void task_cleanup(void); /* for reversible encyrption */ #define SLAPI_MB_CREDENTIALS "nsmultiplexorcredentials" @@ -1033,11 +1034,6 @@ * JCMREPL - Added for the replication plugin. */ -/* Front end configuration */ - -typedef int (*dseCallbackFn)(Slapi_PBlock *, Slapi_Entry *, Slapi_Entry *, - int *, char*, void *); - /* * Note: DSE callback functions MUST return one of these three values: * @@ -1177,23 +1173,10 @@ /***** End of items added for the replication plugin. ***********************/ - /****************************************************************************** * Online tasks interface (to support import, export, etc) * After some cleanup, we could consider making these public. */ -typedef struct _slapi_task Slapi_Task; -typedef int (*TaskCallbackFn)(Slapi_Task *task); - -/* task states */ -#define SLAPI_TASK_SETUP 0 -#define SLAPI_TASK_RUNNING 1 -#define SLAPI_TASK_FINISHED 2 -#define SLAPI_TASK_CANCELLED 3 - -/* task flags (set by the task-control code) */ -#define SLAPI_TASK_DESTROYING 0x01 /* queued event for destruction */ - struct _slapi_task { struct _slapi_task *next; char *task_dn; @@ -1212,26 +1195,8 @@ TaskCallbackFn destructor; /* task entry is being destroyed */ int task_refcount; }; - -int slapi_task_register_handler(const char *name, dseCallbackFn func); -void slapi_task_status_changed(Slapi_Task *task); -void slapi_task_log_status(Slapi_Task *task, char *format, ...) -#ifdef __GNUC__ - __attribute__ ((format (printf, 2, 3))); -#else - ; -#endif - -void slapi_task_log_notice(Slapi_Task *task, char *format, ...) -#ifdef __GNUC__ - __attribute__ ((format (printf, 2, 3))); -#else - ; -#endif - /* End of interface to support online tasks **********************************/ - void DS_Sleep(PRIntervalTime ticks); /* macro to specify the behavior of upgradedb */ Index: main.c =================================================================== RCS file: /cvs/dirsec/ldapserver/ldap/servers/slapd/main.c,v retrieving revision 1.16 retrieving revision 1.17 diff -u -r1.16 -r1.17 --- main.c 10 Nov 2006 23:45:40 -0000 1.16 +++ main.c 14 Dec 2006 23:16:54 -0000 1.17 @@ -1056,6 +1056,13 @@ LDAPDebug( LDAP_DEBUG_PLUGIN, "Password Modify plugin registered.\n", 0, 0, 0 ); + /* Cleanup old tasks that may still be in the DSE from a previous + session. Call before plugin_startall since cleanup needs to be + done before plugin_startall where user defined task plugins could + be started. + */ + task_cleanup(); + plugin_startall(argc, argv, 1 /* Start Backends */, 1 /* Start Globals */); if (housekeeping_start((time_t)0, NULL) == NULL) { exit (1); Index: task.c =================================================================== RCS file: /cvs/dirsec/ldapserver/ldap/servers/slapd/task.c,v retrieving revision 1.9 retrieving revision 1.10 diff -u -r1.9 -r1.10 --- task.c 10 Nov 2006 23:45:40 -0000 1.9 +++ task.c 14 Dec 2006 23:16:54 -0000 1.10 @@ -78,8 +78,9 @@ Slapi_Entry *eAfter, int *returncode, char *returntext, void *arg); static int task_generic_destructor(Slapi_Task *task); -/* create new task, fill in DN, and setup modify callback */ -static Slapi_Task *new_task(const char *dn) +/* create a new task, fill in DN, and setup modify callback */ +static Slapi_Task * +new_task(const char *dn) { Slapi_Task *task = (Slapi_Task *)slapi_ch_calloc(1, sizeof(Slapi_Task)); @@ -109,7 +110,8 @@ } /* called by the event queue to destroy a task */ -static void destroy_task(time_t when, void *arg) +static void +destroy_task(time_t when, void *arg) { Slapi_Task *task = (Slapi_Task *)arg; Slapi_Task *t1; @@ -150,6 +152,31 @@ slapi_ch_free((void **)&task); } +/* + * slapi_new_task: create a new task, fill in DN, and setup modify callback + * argument: + * dn: task dn + * result: + * Success: Slapi_Task object + * Failure: NULL + */ +Slapi_Task * +slapi_new_task(const char *dn) +{ + return new_task(dn); +} + +/* slapi_destroy_task: destroy a task + * argument: + * task: task to destroy + * result: + * none + */ +void +slapi_destroy_task(void *arg) +{ + destroy_task(1, arg); +} /********** some useful helper functions **********/ @@ -1539,12 +1566,11 @@ } } - /* cleanup old tasks that may still be in the DSE from a previous session * (this can happen if the server crashes [no matter how unlikely we like * to think that is].) */ -static void cleanup_old_tasks(void) +void task_cleanup(void) { Slapi_PBlock *pb = slapi_pblock_new(); Slapi_Entry **entries = NULL; @@ -1691,8 +1717,6 @@ return; } - cleanup_old_tasks(); - slapi_task_register_handler("import", task_import_add); slapi_task_register_handler("export", task_export_add); slapi_task_register_handler("backup", task_backup_add); Index: slapi-plugin.h =================================================================== RCS file: /cvs/dirsec/ldapserver/ldap/servers/slapd/slapi-plugin.h,v retrieving revision 1.13 retrieving revision 1.14 diff -u -r1.13 -r1.14 --- slapi-plugin.h 10 Nov 2006 23:45:40 -0000 1.13 +++ slapi-plugin.h 14 Dec 2006 23:16:54 -0000 1.14 @@ -150,7 +150,9 @@ typedef struct slapi_mod Slapi_Mod; typedef struct slapi_mods Slapi_Mods; typedef struct slapi_componentid Slapi_ComponentId; - +/* Online tasks interface (to support import, export, etc) */ +typedef struct _slapi_task Slapi_Task; +typedef int (*TaskCallbackFn)(Slapi_Task *task); /* * The default thread stacksize for nspr21 is 64k (except on IRIX! It's 32k!). @@ -1187,7 +1189,59 @@ int slapi_role_check(Slapi_Entry *entry_to_check, Slapi_DN *role_dn, int *present); void slapi_register_role_check(roles_check_fn_type check_fn); +/* DSE */ +/* Front end configuration */ +typedef int (*dseCallbackFn)(Slapi_PBlock *, Slapi_Entry *, Slapi_Entry *, + int *, char*, void *); + +/****************************************************************************** + * Online tasks interface (to support import, export, etc) + * After some cleanup, we could consider making these public. + */ + +/* task states */ +#define SLAPI_TASK_SETUP 0 +#define SLAPI_TASK_RUNNING 1 +#define SLAPI_TASK_FINISHED 2 +#define SLAPI_TASK_CANCELLED 3 + +/* task flags (set by the task-control code) */ +#define SLAPI_TASK_DESTROYING 0x01 /* queued event for destruction */ + +int slapi_task_register_handler(const char *name, dseCallbackFn func); +void slapi_task_status_changed(Slapi_Task *task); +void slapi_task_log_status(Slapi_Task *task, char *format, ...) +#ifdef __GNUC__ + __attribute__ ((format (printf, 2, 3))); +#else + ; +#endif + +void slapi_task_log_notice(Slapi_Task *task, char *format, ...) +#ifdef __GNUC__ + __attribute__ ((format (printf, 2, 3))); +#else + ; +#endif +/* + * slapi_new_task: create new task, fill in DN, and setup modify callback + * argument: + * dn: task dn + * result: + * Success: Slapi_Task object + * Failure: NULL + */ +Slapi_Task *slapi_new_task(const char *dn); + +/* slapi_destroy_task: destroy a task + * argument: + * task: task to destroy + * result: + * none + */ +void slapi_destroy_task(void *arg); +/* End of interface to support online tasks **********************************/ /* Binder-based (connection centric) resource limits */ /* Index: mapping_tree.c =================================================================== RCS file: /cvs/dirsec/ldapserver/ldap/servers/slapd/mapping_tree.c,v retrieving revision 1.7 retrieving revision 1.8 diff -u -r1.7 -r1.8 --- mapping_tree.c 10 Nov 2006 23:45:40 -0000 1.7 +++ mapping_tree.c 14 Dec 2006 23:16:54 -0000 1.8 @@ -2445,7 +2445,8 @@ /* return next backend, increment index */ *be = target_node->mtn_be[*index]; if(*be==NULL) { - if (target_node->mtn_be_states[*index] == SLAPI_BE_STATE_DELETE) { + if (NULL != target_node->mtn_be_states && + target_node->mtn_be_states[*index] == SLAPI_BE_STATE_DELETE) { /* This MTN is being deleted */ *be = defbackend_get_backend(); } else { @@ -2816,7 +2817,7 @@ /* Some of the operations are not allowed from the plugins * but default to specialized use of those operations - * e.g rootDse search, NetscapeRoot searches + * e.g rootDse search, ConfigRoot searches * cn=config, cn=schema etc */ From fedora-directory-commits at redhat.com Fri Dec 15 00:22:56 2006 From: fedora-directory-commits at redhat.com (Noriko Hosoi (nhosoi)) Date: Thu, 14 Dec 2006 19:22:56 -0500 Subject: [Fedora-directory-commits] ldapserver/ldap/servers/slapd/test-plugins sampletask.c, NONE, 1.1 README, 1.7, 1.8 Message-ID: <200612150022.kBF0Mu5X008245@cvs-int.fedora.redhat.com> Author: nhosoi Update of /cvs/dirsec/ldapserver/ldap/servers/slapd/test-plugins In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv8161 Modified Files: README Added Files: sampletask.c Log Message: Resolves: #195305 Summary: make new_task() non-static Adding a sample task plugin code and updating the README for the plugin. --- NEW FILE sampletask.c --- /** 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) 2006 Red Hat, Inc. * All rights reserved. * END COPYRIGHT BLOCK **/ /* * sample task plugin * * [How to set up the plugin for testing] * 1. compile and package with the other plugins * 2. put the plugin libsampletask-plugin.so at /usr/lib/-ds/plugins * 3. register it as a plugin in dse.ldif * Plugin entry: * dn: cn=sampletask,cn=plugins,cn=config * objectClass: top * objectClass: nsSlapdPlugin * objectClass: extensibleObject * cn: sampletask * nsslapd-pluginPath: /usr/lib/-ds/plugins/libsampletask-plugin.so * nsslapd-pluginInitfunc: sampletask_init * nsslapd-pluginType: object * nsslapd-pluginEnabled: on * nsslapd-pluginId: sampletask * nsslapd-pluginVersion: * nsslapd-pluginVendor: * nsslapd-pluginDescription: Sample task plugin * * 4. create a config task entry in dse.ldif * Task entry: * dn: cn=sample task, cn=tasks, cn=config * objectClass: top * objectClass: extensibleObject * cn: sample task * * 5. to invoke the sample task, run the command line: * $ ./ldapmodify -h -p -D "cn=Directory Manager" -w -a * dn: cn=sample task 0, cn=sample task, cn=tasks, cn=config * objectClass: top * objectClass: extensibleObject * cn: sample task 0 * arg0: sample task arg0 * * Result is in the errors log * [...] - Sample task starts (arg: sample task arg0) ... * [...] - Sample task finished. */ #include "slap.h" #include "slapi-private.h" static int task_sampletask_add(Slapi_PBlock *pb, Slapi_Entry *e, Slapi_Entry *eAfter, int *returncode, char *returntext, void *arg); static int task_sampletask_start(Slapi_PBlock *pb); /* * Init function * Specified in the plugin entry as "nsslapd-pluginInitfunc: sampletask_init" */ int sampletask_init( Slapi_PBlock *pb ) { int rc = 0; rc = slapi_pblock_set( pb, SLAPI_PLUGIN_VERSION, (void *) SLAPI_PLUGIN_VERSION_03 ); rc |= slapi_pblock_set( pb, SLAPI_PLUGIN_START_FN, (void *) task_sampletask_start ); return rc; } /* * Task start function * Register the function task_sampletask_add, which invokes the task on demand. */ static int task_sampletask_start(Slapi_PBlock *pb) { int rc = slapi_task_register_handler("sample task", task_sampletask_add); return rc; } /* * Task thread * Not necessary be a thread, but it'd not disturb the server's other jobs. */ 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_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_ch_free((void **)&pb->pb_seq_val); slapi_pblock_destroy(pb); } /* extract a single value from the entry (as a string) -- if it's not in the * entry, the default will be returned (which can be NULL). * you do not need to free anything returned by this. */ static const char *fetch_attr(Slapi_Entry *e, const char *attrname, const char *default_val) { Slapi_Attr *attr; Slapi_Value *val = NULL; if (slapi_entry_attr_find(e, attrname, &attr) != 0) return default_val; slapi_attr_first_value(attr, &val); return slapi_value_get_string(val); } /* * 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 * the task. */ static int task_sampletask_add(Slapi_PBlock *pb, Slapi_Entry *e, Slapi_Entry *eAfter, int *returncode, char *returntext, void *arg) { PRThread *thread = NULL; const char *cn; int rv = SLAPI_DSE_CALLBACK_OK; Slapi_PBlock *mypb = NULL; Slapi_Task *task = NULL; const char *arg0; *returncode = LDAP_SUCCESS; if ((cn = fetch_attr(e, "cn", NULL)) == NULL) { *returncode = LDAP_OBJECT_CLASS_VIOLATION; rv = SLAPI_DSE_CALLBACK_ERROR; goto out; } /* get arg(s) */ if ((arg0 = fetch_attr(e, "arg0", NULL)) == NULL) { *returncode = LDAP_OBJECT_CLASS_VIOLATION; rv = SLAPI_DSE_CALLBACK_ERROR; goto out; } /* 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) { *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; /* 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, PR_UNJOINABLE_THREAD, SLAPD_DEFAULT_THREAD_STACKSIZE); if (thread == NULL) { LDAPDebug(LDAP_DEBUG_ANY, "unable to create sample task thread!\n", 0, 0, 0); *returncode = LDAP_OPERATIONS_ERROR; rv = SLAPI_DSE_CALLBACK_ERROR; slapi_ch_free((void **)&mypb->pb_seq_val); slapi_pblock_destroy(mypb); goto out; } /* 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; } Index: README =================================================================== RCS file: /cvs/dirsec/ldapserver/ldap/servers/slapd/test-plugins/README,v retrieving revision 1.7 retrieving revision 1.8 diff -u -r1.7 -r1.8 --- README 29 Oct 2005 02:28:18 -0000 1.7 +++ README 15 Dec 2006 00:22:54 -0000 1.8 @@ -87,6 +87,12 @@ This is an example of a pre-operation plug-in function that implements a SASL mechanism. +sampletask.c +------------ +This is an example of task plug-in that implements a task which is +invoked by adding the corresponding task entry. + + clients ------- This directory contains the C and Java source code for clients @@ -109,7 +115,7 @@ 1. Include the Plug-In API. For example: - #include "[serverRoot]/plugins/slapd/slapi/include/slapi-plugin.h" + #include "slapi-plugin.h" 2. Write your plug-in, including a top level initialization function used by the server to start the plug-in. For example: @@ -133,14 +139,47 @@ } /* my_plugin_init() */ - See the Parameter Block Reference in the Netscape Directory Server + See the Parameter Block Reference in the Red Hat Directory Server Plug-In Programmer's Guide for hints on plug-in types. 3. Build the plug-in as a library. - We recommend you copy and adapt the Makefile in - [serverRoot]/plugins/slapd/slapi/examples. - + We recommend to use the Directory Server's build scheme. + 3.1 Add your plugin to Makefile.am + Index: Makefile.am + =================================================================== + RCS file: /cvs/dirsec/ldapserver/Makefile.am,v + retrieving revision 1.14 + diff -t -w -U2 -r1.14 Makefile.am + --- Makefile.am 16 Nov 2006 18:56:03 -0000 1.14 + +++ Makefile.am 14 Dec 2006 23:51:30 -0000 + @@ -74,5 +74,5 @@ + + serverplugin_LTLIBRARIES = libacl-plugin.la libattr-unique-plugin.la libchainingdb-plugin.la \ + - libcos-plugin.la libdes-plugin.la libdistrib-plugin.la \ + + libsampletask-plugin.la libcos-plugin.la libdes-plugin.la libdistrib-plugin.la \ + libhttp-client-plugin.la libcollation-plugin.la libpam-passthru-plugin.la \ + libpassthru-plugin.la libpresence-plugin.la libpwdstorage-plugin.la \ + @@ -540,4 +540,11 @@ + + #------------------------ + +# libsampletask-plugin + +#------------------------ + +libsampletask_plugin_la_SOURCES = ldap/servers/slapd/test-plugins/sampletask.c + + + +libsampletask_plugin_la_CPPFLAGS = $(PLUGIN_CPPFLAGS) + + + +#------------------------ + # libdes-plugin + #----------------------- + + 3.2 run autotool commands/configure + $ cd /ldapserver + $ autogen.sh # make sure there is no errors / warnings + $ mkdir testbuild + $ cd testbuild + $ ../configure --with-fhs [ --prefix=/opt/fedora-ds ... ] + $ make install Plugging the Library Into the Server ------------------------------------ @@ -149,17 +188,17 @@ 1. Stop the server. Console: Select the server; Object > Stop Server - Command Line: cd [serverRoot]/slapd-[serverID] ; ./stop-slapd + Command Line: cd [prefix]/usr/lib/-ds/slapd-[serverID] ; ./stop-slapd 2. Add the entry for the server plug-in to - [serverRoot]/slapd-[serverID]/config/dse.ldif. For example: + [prefix]/var/lib/slapd-[serverID]/dse.ldif. For example: dn: cn=[My Server Plugin],cn=plugins,cn=config objectClass: top objectClass: nsSlapdPlugin objectClass: extensibleObject cn: [My Server Plugin] - nsslapd-pluginPath: [[serverRoot]/myPlugins/myveryown-plugin.so] + nsslapd-pluginPath: [[prefix]/usr/lib/-ds/plugins/myveryown-plugin.so] nsslapd-pluginInitfunc: [my_plugin_init] nsslapd-pluginType: [myPluginType] nsslapd-pluginEnabled: on @@ -172,10 +211,10 @@ nsslapd-pluginVendor: [Fictional Software Company Incorporated] nsslapd-pluginDescription: [Add lots of cool functionality] - See the Parameter Block Reference in the Netscape Directory Server + See the Parameter Block Reference in the Red Hat Directory Server Plug-In Programmer's Guide for hints on plug-in types. 3. Restart the server. Console: Object > Start Server - Command Line: cd [serverRoot]/slapd-[serverID] ; ./restart-slapd + Command Line: cd [prefix]/usr/lib/-ds/slapd-[serverID] ; ./restart-slapd