#include "bacula.h"
#include "jcr.h"
-#if !defined(HAVE_CONSOLE)
-#if defined(HAVE_CYGWIN) || defined(HAVE_WIN32)
-#include <windows.h>
-#endif
-#endif
+sql_query p_sql_query = NULL;
#define FULL_LOCATION 1 /* set for file:line in Debug messages */
brwlock_t con_lock; /* Console lock structure */
-#ifdef HAVE_POSTGRESQL
+#if defined(HAVE_POSTGRESQL)
char catalog_db[] = "PostgreSQL";
-#else
-#ifdef HAVE_MYSQL
+#elif defined(HAVE_MYSQL)
char catalog_db[] = "MySQL";
-#else
-#ifdef HAVE_SQLITE
+#elif defined(HAVE_SQLITE)
char catalog_db[] = "SQLite";
#else
char catalog_db[] = "Internal";
#endif
-#endif
-#endif
const char *host_os = HOST_OS;
const char *distname = DISTNAME;
const char *distver = DISTVER;
static FILE *trace_fd = NULL;
-#ifdef HAVE_WIN32
+#if defined(HAVE_WIN32)
static bool trace = true;
#else
static bool trace = false;
l++;
} else {
l = argv[0];
-#if defined(HAVE_CYGWIN) || defined(HAVE_WIN32)
+#if defined(HAVE_WIN32)
/* On Windows allow c: junk */
if (l[1] == ':') {
l += 2;
init_msg(JCR *jcr, MSGS *msg)
{
DEST *d, *dnew, *temp_chain = NULL;
- int i;
if (jcr == NULL && msg == NULL) {
init_last_jobs_list();
}
-#ifndef HAVE_WIN32
+#if !defined(HAVE_WIN32)
/*
* Make sure we have fd's 0, 1, 2 open
* If we don't do this one of our sockets may open
*
*/
int fd;
+ int i;
fd = open("/dev/null", O_RDONLY, 0644);
if (fd > 2) {
close(fd);
if (msg == NULL) {
daemon_msgs = (MSGS *)malloc(sizeof(MSGS));
memset(daemon_msgs, 0, sizeof(MSGS));
-#ifndef WIN32
+#if !defined(HAVE_WIN32)
for (i=1; i<=M_MAX; i++) {
add_msg_dest(daemon_msgs, MD_STDOUT, i, NULL, NULL);
}
console_msg_pending = 1;
}
close(fd);
- con_fd = fopen(con_fname, "a+");
+ con_fd = fopen(con_fname, "a+b");
if (!con_fd) {
berrno be;
Emsg2(M_ERROR, 0, _("Could not open console message file %s: ERR=%s\n"),
}
if (type == M_ABORT || type == M_ERROR_TERM) {
-#ifndef HAVE_WIN32
+#if !defined(HAVE_WIN32)
fputs(dt, stdout);
fputs(msg, stdout); /* print this here to INSURE that it is printed */
fflush(stdout);
for (d=msgs->dest_chain; d; d=d->next) {
if (bit_is_set(type, d->msg_types)) {
switch (d->dest_code) {
+ case MD_CATALOG:
+ char ed1[50];
+ if (!jcr || !jcr->db) {
+ break;
+ }
+ if (p_sql_query) {
+ POOL_MEM cmd(PM_MESSAGE);
+ bstrftimes(dt, sizeof(dt), mtime);
+ Mmsg(cmd, "INSERT INTO Log (JobId, Time, LogText) VALUES (%s,'%s','%s')",
+ edit_int64(jcr->JobId, ed1), dt, msg);
+ p_sql_query(jcr, cmd.c_str());
+ }
+ break;
case MD_CONSOLE:
Dmsg1(850, "CONSOLE for following msg: %s", msg);
if (!con_fd) {
- con_fd = fopen(con_fname, "a+");
+ con_fd = fopen(con_fname, "a+b");
Dmsg0(850, "Console file not open.\n");
}
if (con_fd) {
}
break;
case MD_SYSLOG:
- Dmsg1(850, "SYSLOG for collowing msg: %s\n", msg);
+ Dmsg1(850, "SYSLOG for following msg: %s\n", msg);
/*
* We really should do an openlog() here.
*/
if (!d->fd) {
POOLMEM *name = get_pool_memory(PM_MESSAGE);
make_unique_mail_filename(jcr, name, d);
- d->fd = fopen(name, "w+");
+ d->fd = fopen(name, "w+b");
if (!d->fd) {
berrno be;
d->fd = stdout;
case MD_FILE:
Dmsg1(850, "FILE for following msg: %s", msg);
if (!d->fd) {
- d->fd = fopen(d->where, "w+");
+ d->fd = fopen(d->where, "w+b");
if (!d->fd) {
berrno be;
d->fd = stdout;
case MD_APPEND:
Dmsg1(850, "APPEND for following msg: %s", msg);
if (!d->fd) {
- d->fd = fopen(d->where, "a");
+ d->fd = fopen(d->where, "ab");
if (!d->fd) {
berrno be;
d->fd = stdout;
/* visual studio passes the whole path to the file as well
* which makes for very long lines
*/
- const char *f = strrchr(file, '\\');
- if (f) file = f + 1;
- len = bsnprintf(buf, sizeof(buf), "%s: %s:%d ", my_name, file, line);
+ const char *basename;
+
+ if ((basename = strrchr(file, '\\')) == NULL) {
+ basename = file;
+ } else {
+ basename++;
+ }
+ len = bsnprintf(buf, sizeof(buf), "%s: %s:%d ", my_name, basename, line);
} else {
len = 0;
}
if (!trace_fd) {
char fn[200];
bsnprintf(fn, sizeof(fn), "%s/bacula.trace", working_directory ? working_directory : ".");
- trace_fd = fopen(fn, "a+");
+ trace_fd = fopen(fn, "a+b");
}
if (trace_fd) {
fputs(buf, trace_fd);
#ifdef FULL_LOCATION
if (level >= 0) {
- len = bsnprintf(buf, sizeof(buf), "%s: %s:%d ", my_name, file, line);
+ const char *basename;
+
+ if ((basename = strrchr(file, '\\')) == NULL) {
+ basename = file;
+ } else {
+ basename++;
+ }
+ len = bsnprintf(buf, sizeof(buf), "%s: %s:%d ", my_name, basename, line);
} else {
len = 0;
}
if (level <= debug_level) {
if (!trace_fd) {
bsnprintf(buf, sizeof(buf), "%s/bacula.trace", working_directory);
- trace_fd = fopen(buf, "a+");
+ trace_fd = fopen(buf, "a+b");
}
#ifdef FULL_LOCATION
if (details) {
- len = bsnprintf(buf, sizeof(buf), "%s: %s:%d ", my_name, file, line);
+ const char *basename;
+
+ if ((basename = strrchr(file, '\\')) == NULL) {
+ basename = file;
+ } else {
+ basename++;
+ }
+ len = bsnprintf(buf, sizeof(buf), "%s: %s:%d ", my_name, basename, line);
} else {
len = 0;
}
va_list arg_ptr;
int len;
+ const char *basename;
+
+ if ((basename = strrchr(file, '\\')) == NULL) {
+ basename = file;
+ } else {
+ basename++;
+ }
+
/*
* Check if we have a message destination defined.
* We always report M_ABORT and M_ERROR_TERM
switch (type) {
case M_ABORT:
len = bsnprintf(buf, sizeof(buf), _("%s: ABORTING due to ERROR in %s:%d\n"),
- my_name, file, line);
+ my_name, basename, line);
break;
case M_ERROR_TERM:
len = bsnprintf(buf, sizeof(buf), _("%s: ERROR TERMINATION at %s:%d\n"),
- my_name, file, line);
+ my_name, basename, line);
break;
case M_FATAL:
if (level == -1) /* skip details */
len = bsnprintf(buf, sizeof(buf), _("%s: Fatal Error because: "), my_name);
else
- len = bsnprintf(buf, sizeof(buf), _("%s: Fatal Error at %s:%d because:\n"), my_name, file, line);
+ len = bsnprintf(buf, sizeof(buf), _("%s: Fatal Error at %s:%d because:\n"), my_name, basename, line);
break;
case M_ERROR:
if (level == -1) /* skip details */
len = bsnprintf(buf, sizeof(buf), _("%s: ERROR: "), my_name);
else
- len = bsnprintf(buf, sizeof(buf), _("%s: ERROR in %s:%d "), my_name, file, line);
+ len = bsnprintf(buf, sizeof(buf), _("%s: ERROR in %s:%d "), my_name, basename, line);
break;
case M_WARNING:
len = bsnprintf(buf, sizeof(buf), _("%s: Warning: "), my_name);
va_list arg_ptr;
int i, len, maxlen;
POOLMEM *pool_buf;
+ const char *basename;
+
+ if ((basename = strrchr(file, '\\')) == NULL) {
+ basename = file;
+ } else {
+ basename++;
+ }
pool_buf = get_pool_memory(PM_EMSG);
- i = Mmsg(pool_buf, "%s:%d ", file, line);
+ i = Mmsg(pool_buf, "%s:%d ", basename, line);
for (;;) {
maxlen = sizeof_pool_memory(pool_buf) - i - 1;
va_list arg_ptr;
int i, len, maxlen;
- i = sprintf(*pool_buf, "%s:%d ", file, line);
+ const char *basename;
+
+ if ((basename = strrchr(file, '\\')) == NULL) {
+ basename = file;
+ } else {
+ basename++;
+ }
+
+ i = sprintf(*pool_buf, "%s:%d ", basename, line);
for (;;) {
maxlen = sizeof_pool_memory(*pool_buf) - i - 1;
va_list arg_ptr;
int i, len, maxlen;
- i = sprintf(pool_buf, "%s:%d ", file, line);
+ const char *basename;
+
+ if ((basename = strrchr(file, '\\')) == NULL) {
+ basename = file;
+ } else {
+ basename++;
+ }
+
+ i = sprintf(pool_buf, "%s:%d ", basename, line);
for (;;) {
maxlen = sizeof_pool_memory(pool_buf) - i - 1;