Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301, USA.
- Bacula® is a registered trademark of John Walker.
+ Bacula® is a registered trademark of Kern Sibbald.
The licensor of Bacula is the Free Software Foundation Europe
(FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich,
Switzerland, email:ftf@fsfeurope.org.
#include "bacula.h"
#include "stored.h"
-/* Imported functions */
+/* TODO: fix problem with bls, bextract
+ * that use findlib and already declare
+ * filed plugins
+ */
+#include "sd_plugins.h"
+
+#ifdef HAVE_PYTHON
+
+#undef _POSIX_C_SOURCE
+#include <Python.h>
+
+#include "lib/pythonlib.h"
+
+/* Imported Functions */
+extern PyObject *job_getattr(PyObject *self, char *attrname);
+extern int job_setattr(PyObject *self, char *attrname, PyObject *value);
+
+#endif /* HAVE_PYTHON */
+/* Imported functions */
+extern bool parse_sd_config(CONFIG *config, const char *configfile, int exit_code);
/* Forward referenced functions */
void terminate_stored(int sig);
static bool foreground = 0;
static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
static workq_t dird_workq; /* queue for processing connections */
+static CONFIG *config;
static void usage()
pthread_t thid;
char *uid = NULL;
char *gid = NULL;
+#ifdef HAVE_PYTHON
+ init_python_interpreter_args python_args;
+#endif /* HAVE_PYTHON */
start_heap = sbrk(0);
setlocale(LC_ALL, "");
configfile = bstrdup(CONFIG_FILE);
}
- parse_config(configfile);
+ config = new_config_parser();
+ parse_sd_config(config, configfile, M_ERROR_TERM);
if (init_crypto() != 0) {
Jmsg((JCR *)NULL, M_ERROR_TERM, 0, _("Cryptography library initialization failed.\n"));
init_stack_dump(); /* pick up new pid */
}
- create_pid_file(me->pid_directory, "bacula-sd", get_first_port_host_order(me->sdaddrs));
- read_state_file(me->working_directory, "bacula-sd", get_first_port_host_order(me->sdaddrs));
+ create_pid_file(me->pid_directory, "bacula-sd",
+ get_first_port_host_order(me->sdaddrs));
+ read_state_file(me->working_directory, "bacula-sd",
+ get_first_port_host_order(me->sdaddrs));
+
+ /* Make sure on Solaris we can run concurrent, watch dog + servers + misc */
+ set_thread_concurrency(me->max_concurrent_jobs * 2 + 4);
+ lmgr_init_thread(); /* initialize the lockmanager stack */
- drop(uid, gid);
+ load_sd_plugins(me->plugin_directory);
+
+ drop(uid, gid, false);
cleanup_old_files();
Jmsg0(NULL, M_ABORT, 0, _("Volume Session Time is ZERO!\n"));
}
- init_python_interpreter(me->hdr.name, me->scripts_directory, "SDStartUp");
+#ifdef HAVE_PYTHON
+ python_args.progname = me->hdr.name;
+ python_args.scriptdir = me->scripts_directory;
+ python_args.modulename = "SDStartUp";
+ python_args.configfile = configfile;
+ python_args.workingdir = me->working_directory;
+ python_args.job_getattr = job_getattr;
+ python_args.job_setattr = job_setattr;
- /* Make sure on Solaris we can run concurrent, watch dog + servers + misc */
- set_thread_concurrency(me->max_concurrent_jobs * 2 + 4);
+ init_python_interpreter(&python_args);
+#endif /* HAVE_PYTHON */
/*
* Start the device allocation thread
*/
- create_volume_list(); /* do before device_init */
+ create_volume_lists(); /* do before device_init */
if (pthread_create(&thid, NULL, device_initialization, NULL) != 0) {
berrno be;
Emsg1(M_ABORT, 0, _("Unable to create thread. ERR=%s\n"), be.bstrerror());
pthread_detach(pthread_self());
jcr = new_jcr(sizeof(JCR), stored_free_jcr);
- jcr->JobType = JT_SYSTEM;
+ jcr->set_JobType(JT_SYSTEM);
/* Initialize FD start condition variable */
int errstat = pthread_cond_init(&jcr->job_start_wait, NULL);
if (errstat != 0) {
Dmsg1(200, "In terminate_stored() sig=%d\n", sig);
- free_volume_list();
+ unload_plugins();
+ free_volume_lists();
foreach_res(device, R_DEVICE) {
Dmsg1(10, "Term device %s\n", device->device_name);
free(configfile);
configfile = NULL;
}
- free_config_resources();
+ if (config) {
+ config->free_resources();
+ free(config);
+ config = NULL;
+ }
if (debug_level > 10) {
print_memory_pool_stats();
cleanup_crypto();
term_reservations_lock();
close_memory_pool();
+ lmgr_cleanup_main();
sm_dump(false); /* dump orphaned buffers */
exit(sig);