This is a first cut of a plugins implementation for Bacula. The current code is simply a test program named main, which when executed will load the plugin named plugin.so and then call it with a few calls, then exit. What is implemented: - load a plugin - get main entry points in plugin (two) - pass plugin Bacula entry points - get plugin's entry points - keep list of plugins that are loaded - The plugin currently only needs config.h and bc_types.h in the Bacula src directory to be build. Otherwise, it is totally independent of Bacula. - The main test program is intended to be integrated into Bacula (at least a number of the functions therein). - Search for all plugins in the plugin directory - Implement Bacula context for plugin instances - Implement plugin context for plugin instances - Integrate the code into Bacula - Figure out a way to deal with 3 types of plugins (Director, File daemon, Storage daemon). - Pass Version information in plugin Initialize What is not yet implemented: - Document the interface - Test Win32 plugins - Print all plugins loaded when Bacula starts - Print all plugins loaded during traceback - Implement plugin license/version checking - Some better method to pass variables - Define more functionality (Bacula entry points, ...) - Make libbac.a into a shared object and allow plugin to call functions in directly so that plugins can use the same "safe" system utilities that Bacula uses. - Document libbac.so (when implemented) - Write more plugins that really do something. - Error handling must be much improved and brought into Bacula programming style. It currently just printf()s a message then exits (partially done).