]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/cats/bdb.c
- Fix ANSI labels to put EOF1 and EOF2 after each file mark.
[bacula/bacula] / bacula / src / cats / bdb.c
index d35bc53dac495c30992b49aa380480dc7aca6ccd..ae12c1c22dc3a10bc66a7ed5f10e5c5319b447d8 100644 (file)
@@ -5,8 +5,8 @@
  *  The purpose of these routines is to ensure that Bacula
  *  can limp along if no real database is loaded on the
  *  system.
- *   
- *    Kern Sibbald, January MMI 
+ *
+ *    Kern Sibbald, January MMI
  *
  *    Version $Id$
  *
@@ -14,7 +14,7 @@
 
 
 /*
-   Copyright (C) 2000-2003 Kern Sibbald and John Walker
+   Copyright (C) 2001-2003 Kern Sibbald and John Walker
 
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License as
 
 #ifdef HAVE_BACULA_DB
 
+uint32_t bacula_db_version = 0;
+
 /* Forward referenced functions */
 
-extern char *working_directory;
+extern const char *working_directory;
 
 /* List of open databases */
 static BQUEUE db_list = {&db_list, &db_list};
@@ -77,9 +79,9 @@ static POOLMEM *make_filename(B_DB *mdb, char *name)
    if (working_directory[strlen(working_directory)-1] == '/') {
       sep = 0;
    } else {
-      sep = '/'; 
+      sep = '/';
    }
-   Mmsg(&dbf, "%s%c%s-%s", working_directory, sep, mdb->db_name, name);
+   Mmsg(dbf, "%s%c%s-%s", working_directory, sep, mdb->db_name, name);
    return dbf;
 }
 
@@ -100,14 +102,16 @@ int bdb_write_control_file(B_DB *mdb)
  * never have errors, or it is really fatal.
  */
 B_DB *
-db_init_database(void *jcr, char *db_name, char *db_user, char *db_password)
+db_init_database(JCR *jcr, char const *db_name, char const *db_user, char const *db_password,
+                char const *db_address, int db_port, char const *db_socket,
+                int mult_db_connections)
 {
    B_DB *mdb;
    P(mutex);                         /* lock DB queue */
    /* Look to see if DB already open */
    for (mdb=NULL; (mdb=(B_DB *)qnext(&db_list, &mdb->bq)); ) {
       if (strcmp(mdb->db_name, db_name) == 0) {
-         Dmsg2(200, "DB REopen %d %s\n", mdb->ref_count, db_name);
+        Dmsg2(200, "DB REopen %d %s\n", mdb->ref_count, db_name);
         mdb->ref_count++;
         V(mutex);
         return mdb;                  /* already open */
@@ -128,8 +132,9 @@ db_init_database(void *jcr, char *db_name, char *db_user, char *db_password)
    Dmsg0(200, "Done db_open_database()\n");
    mdb->cfd = -1;
    V(mutex);
-   Jmsg(jcr, M_WARNING, 0, _("WARNING!!!! The Internal Database is for TESTING ONLY!\n"));
-   Jmsg(jcr, M_WARNING, 0, _("You should use either SQLite or MySQL\n"));
+   Jmsg(jcr, M_WARNING, 0, _("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n"));
+   Jmsg(jcr, M_WARNING, 0, _("WARNING!!!! The Internal Database is NOT OPERATIONAL!\n"));
+   Jmsg(jcr, M_WARNING, 0, _("You should use SQLite, PostgreSQL, or MySQL\n"));
 
    return mdb;
 }
@@ -139,7 +144,7 @@ db_init_database(void *jcr, char *db_name, char *db_user, char *db_password)
  * which are returned in the errmsg
  */
 int
-db_open_database(void *jcr, B_DB *mdb)
+db_open_database(JCR *jcr, B_DB *mdb)
 {
    char *dbf;
    int fd, badctl;
@@ -158,10 +163,10 @@ db_open_database(void *jcr, B_DB *mdb)
 
    Dmsg0(200, "make_filename\n");
    dbf = make_filename(mdb, DB_CONTROL_FILENAME);
-   mdb->cfd = open(dbf, O_CREAT|O_RDWR, 0600); 
+   mdb->cfd = open(dbf, O_CREAT|O_RDWR, 0600);
    free_memory(dbf);
    if (mdb->cfd < 0) {
-      Mmsg2(&mdb->errmsg, _("Unable to open Catalog DB control file %s: ERR=%s\n"), 
+      Mmsg2(&mdb->errmsg, _("Unable to open Catalog DB control file %s: ERR=%s\n"),
         dbf, strerror(errno));
       V(mutex);
       return 0;
@@ -219,12 +224,13 @@ db_open_database(void *jcr, B_DB *mdb)
       Mmsg1(&mdb->errmsg, _("Error reading catalog DB control file. ERR=%s\n"), strerror(errno));
       badctl = 1;
    } else if (mdb->control.bdb_version != BDB_VERSION) {
-      Mmsg2(&mdb->errmsg, _("Error, catalog DB control file wrong version. \
-Wanted %d, got %d\n\
-Please reinitialize the working directory.\n"), 
+      Mmsg2(&mdb->errmsg, _("Error, catalog DB control file wrong version. "
+"Wanted %d, got %d\n"
+"Please reinitialize the working directory.\n"),
         BDB_VERSION, mdb->control.bdb_version);
       badctl = 1;
    }
+   bacula_db_version = mdb->control.bdb_version;
    if (badctl) {
       V(mutex);
       return 0;
@@ -233,7 +239,7 @@ Please reinitialize the working directory.\n"),
    return 1;
 }
 
-void db_close_database(void *jcr, B_DB *mdb)           
+void db_close_database(JCR *jcr, B_DB *mdb)
 {
    P(mutex);
    mdb->ref_count--;
@@ -262,8 +268,7 @@ void db_close_database(void *jcr, B_DB *mdb)
       if (mdb->filesetfd) {
         fclose(mdb->filesetfd);
       }
-/*    pthread_mutex_destroy(&mdb->mutex); */
-      rwl_destroy(&mdb->lock);      
+      rwl_destroy(&mdb->lock);
       free_pool_memory(mdb->errmsg);
       free_pool_memory(mdb->cmd);
       free_pool_memory(mdb->cached_path);
@@ -275,7 +280,8 @@ void db_close_database(void *jcr, B_DB *mdb)
 
 void db_escape_string(char *snew, char *old, int len)
 {
-   strcpy(snew, old);
+   memset(snew, 0, len);
+   bstrncpy(snew, old, len);
 }
 
 char *db_strerror(B_DB *mdb)
@@ -283,7 +289,7 @@ char *db_strerror(B_DB *mdb)
    return mdb->errmsg;
 }
 
-int db_sql_query(B_DB *mdb, char *query, DB_RESULT_HANDLER *result_handler, void *ctx)
+int db_sql_query(B_DB *mdb, char const *query, DB_RESULT_HANDLER *result_handler, void *ctx)
 {
    return 1;
 }
@@ -295,11 +301,11 @@ int bdb_open_jobs_file(B_DB *mdb)
 {
    char *dbf;
 
-   if (!mdb->jobfd) {  
+   if (!mdb->jobfd) {
       dbf = make_filename(mdb, DB_JOBS_FILENAME);
       mdb->jobfd = fopen(dbf, "r+");
       if (!mdb->jobfd) {
-         Mmsg2(&mdb->errmsg, "Error opening DB Jobs file %s: ERR=%s\n", 
+        Mmsg2(&mdb->errmsg, "Error opening DB Jobs file %s: ERR=%s\n",
            dbf, strerror(errno));
         Emsg0(M_FATAL, 0, mdb->errmsg);
         free_memory(dbf);
@@ -317,11 +323,11 @@ int bdb_open_jobmedia_file(B_DB *mdb)
 {
    char *dbf;
 
-   if (!mdb->jobmediafd) {  
+   if (!mdb->jobmediafd) {
       dbf = make_filename(mdb, DB_JOBMEDIA_FILENAME);
       mdb->jobmediafd = fopen(dbf, "r+");
       if (!mdb->jobmediafd) {
-         Mmsg2(&mdb->errmsg, "Error opening DB JobMedia file %s: ERR=%s\n", 
+        Mmsg2(&mdb->errmsg, "Error opening DB JobMedia file %s: ERR=%s\n",
            dbf, strerror(errno));
         Emsg0(M_FATAL, 0, mdb->errmsg);
         free_memory(dbf);
@@ -340,11 +346,11 @@ int bdb_open_pools_file(B_DB *mdb)
 {
    char *dbf;
 
-   if (!mdb->poolfd) { 
+   if (!mdb->poolfd) {
       dbf = make_filename(mdb, DB_POOLS_FILENAME);
       mdb->poolfd = fopen(dbf, "r+");
       if (!mdb->poolfd) {
-         Mmsg2(&mdb->errmsg, "Error opening DB Pools file %s: ERR=%s\n", 
+        Mmsg2(&mdb->errmsg, "Error opening DB Pools file %s: ERR=%s\n",
            dbf, strerror(errno));
         Emsg0(M_FATAL, 0, mdb->errmsg);
         free_memory(dbf);
@@ -363,11 +369,11 @@ int bdb_open_client_file(B_DB *mdb)
 {
    char *dbf;
 
-   if (!mdb->clientfd) {  
+   if (!mdb->clientfd) {
       dbf = make_filename(mdb, DB_CLIENT_FILENAME);
       mdb->clientfd = fopen(dbf, "r+");
       if (!mdb->clientfd) {
-         Mmsg2(&mdb->errmsg, "Error opening DB Clients file %s: ERR=%s\n", 
+        Mmsg2(&mdb->errmsg, "Error opening DB Clients file %s: ERR=%s\n",
            dbf, strerror(errno));
         Emsg0(M_FATAL, 0, mdb->errmsg);
         free_memory(dbf);
@@ -385,11 +391,11 @@ int bdb_open_fileset_file(B_DB *mdb)
 {
    char *dbf;
 
-   if (!mdb->filesetfd) {  
+   if (!mdb->filesetfd) {
       dbf = make_filename(mdb, DB_CLIENT_FILENAME);
       mdb->filesetfd = fopen(dbf, "r+");
       if (!mdb->filesetfd) {
-         Mmsg2(&mdb->errmsg, "Error opening DB FileSet file %s: ERR=%s\n", 
+        Mmsg2(&mdb->errmsg, "Error opening DB FileSet file %s: ERR=%s\n",
            dbf, strerror(errno));
         Emsg0(M_FATAL, 0, mdb->errmsg);
         free_memory(dbf);
@@ -409,11 +415,11 @@ int bdb_open_media_file(B_DB *mdb)
 {
    char *dbf;
 
-   if (!mdb->mediafd) {  
+   if (!mdb->mediafd) {
       dbf = make_filename(mdb, DB_MEDIA_FILENAME);
       mdb->mediafd = fopen(dbf, "r+");
       if (!mdb->mediafd) {
-         Mmsg2(&mdb->errmsg, "Error opening DB Media file %s: ERR=%s\n", 
+        Mmsg2(&mdb->errmsg, "Error opening DB Media file %s: ERR=%s\n",
            dbf, strerror(errno));
         free_memory(dbf);
         return 0;
@@ -424,34 +430,34 @@ int bdb_open_media_file(B_DB *mdb)
 }
 
 
-void _db_lock(char *file, int line, B_DB *mdb)
+void _db_lock(const char *file, int line, B_DB *mdb)
 {
    int errstat;
    if ((errstat=rwl_writelock(&mdb->lock)) != 0) {
       e_msg(file, line, M_ABORT, 0, "rwl_writelock failure. ERR=%s\n",
           strerror(errstat));
    }
-}    
+}
 
-void _db_unlock(char *file, int line, B_DB *mdb)
+void _db_unlock(const char *file, int line, B_DB *mdb)
 {
    int errstat;
    if ((errstat=rwl_writeunlock(&mdb->lock)) != 0) {
       e_msg(file, line, M_ABORT, 0, "rwl_writeunlock failure. ERR=%s\n",
           strerror(errstat));
    }
-}    
+}
 
 /*
  * Start a transaction. This groups inserts and makes things
- *  much more efficient. Usually started when inserting 
+ *  much more efficient. Usually started when inserting
  *  file attributes.
  */
-void db_start_transaction(void *jcr, B_DB *mdb)
+void db_start_transaction(JCR *jcr, B_DB *mdb)
 {
 }
 
-void db_end_transaction(void *jcr, B_DB *mdb)
+void db_end_transaction(JCR *jcr, B_DB *mdb)
 {
 }