]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/cats/sql_list.c
Split messages line by line before sending it to syslog() fix #3325
[bacula/bacula] / bacula / src / cats / sql_list.c
index 05fb1c5cbca136ab2cafc9e4102ac06d95b01554..a78e6153565f8eb3eb35c1df68fd1994132552e2 100644 (file)
@@ -34,7 +34,6 @@
  */
 
 #include "bacula.h"
-#include "cats.h"
 
 #if HAVE_SQLITE3 || HAVE_MYSQL || HAVE_POSTGRESQL || HAVE_INGRES || HAVE_DBI
 
 int db_list_sql_query(JCR *jcr, B_DB *mdb, const char *query, DB_LIST_HANDLER *sendit,
                       void *ctx, int verbose, e_list_type type)
 {
-   LIST_CTX lctx(jcr, mdb, sendit, ctx, type);
-
    db_lock(mdb);
-
-   if (!db_big_sql_query(mdb, query, list_result, &lctx)) {
+   if (!sql_query(mdb, query, QF_STORE_RESULT)) {
       Mmsg(mdb->errmsg, _("Query failed: %s\n"), sql_strerror(mdb));
       if (verbose) {
          sendit(ctx, mdb->errmsg);
@@ -68,8 +64,7 @@ int db_list_sql_query(JCR *jcr, B_DB *mdb, const char *query, DB_LIST_HANDLER *s
       return 0;
    }
 
-   lctx.send_dashes();
-
+   list_result(jcr, mdb, sendit, ctx, type);
    sql_free_result(mdb);
    db_unlock(mdb);
    return 1;
@@ -79,16 +74,18 @@ void
 db_list_pool_records(JCR *jcr, B_DB *mdb, POOL_DBR *pdbr,
                      DB_LIST_HANDLER *sendit, void *ctx, e_list_type type)
 {
-   LIST_CTX lctx(jcr, mdb, sendit, ctx, type);
+   char esc[MAX_ESCAPE_NAME_LENGTH];
 
    db_lock(mdb);
+   mdb->db_escape_string(jcr, esc, pdbr->Name, strlen(pdbr->Name));
+
    if (type == VERT_LIST) {
       if (pdbr->Name[0] != 0) {
          Mmsg(mdb->cmd, "SELECT PoolId,Name,NumVols,MaxVols,UseOnce,UseCatalog,"
             "AcceptAnyVolume,VolRetention,VolUseDuration,MaxVolJobs,MaxVolBytes,"
             "AutoPrune,Recycle,PoolType,LabelFormat,Enabled,ScratchPoolId,"
             "RecyclePoolId,LabelType "
-            " FROM Pool WHERE Name='%s'", pdbr->Name);
+            " FROM Pool WHERE Name='%s'", esc);
       } else {
          Mmsg(mdb->cmd, "SELECT PoolId,Name,NumVols,MaxVols,UseOnce,UseCatalog,"
             "AcceptAnyVolume,VolRetention,VolUseDuration,MaxVolJobs,MaxVolBytes,"
@@ -99,19 +96,19 @@ db_list_pool_records(JCR *jcr, B_DB *mdb, POOL_DBR *pdbr,
    } else {
       if (pdbr->Name[0] != 0) {
          Mmsg(mdb->cmd, "SELECT PoolId,Name,NumVols,MaxVols,PoolType,LabelFormat "
-           "FROM Pool WHERE Name='%s'", pdbr->Name);
+           "FROM Pool WHERE Name='%s'", esc);
       } else {
          Mmsg(mdb->cmd, "SELECT PoolId,Name,NumVols,MaxVols,PoolType,LabelFormat "
            "FROM Pool ORDER BY PoolId");
       }
    }
 
-   if (!db_big_sql_query(mdb, mdb->cmd, list_result, &lctx)) {
+   if (!QUERY_DB(jcr, mdb, mdb->cmd)) {
       db_unlock(mdb);
       return;
    }
 
-   lctx.send_dashes();
+   list_result(jcr, mdb, sendit, ctx, type);
 
    sql_free_result(mdb);
    db_unlock(mdb);
@@ -120,8 +117,6 @@ db_list_pool_records(JCR *jcr, B_DB *mdb, POOL_DBR *pdbr,
 void
 db_list_client_records(JCR *jcr, B_DB *mdb, DB_LIST_HANDLER *sendit, void *ctx, e_list_type type)
 {
-   LIST_CTX lctx(jcr, mdb, sendit, ctx, type);
-
    db_lock(mdb);
    if (type == VERT_LIST) {
       Mmsg(mdb->cmd, "SELECT ClientId,Name,Uname,AutoPrune,FileRetention,"
@@ -132,11 +127,12 @@ db_list_client_records(JCR *jcr, B_DB *mdb, DB_LIST_HANDLER *sendit, void *ctx,
          "FROM Client ORDER BY ClientId");
    }
 
-   if (!db_big_sql_query(mdb, mdb->cmd, list_result, &lctx)) {
+   if (!QUERY_DB(jcr, mdb, mdb->cmd)) {
       db_unlock(mdb);
       return;
    }
-   lctx.send_dashes();
+
+   list_result(jcr, mdb, sendit, ctx, type);
 
    sql_free_result(mdb);
    db_unlock(mdb);
@@ -152,9 +148,11 @@ db_list_media_records(JCR *jcr, B_DB *mdb, MEDIA_DBR *mdbr,
                       DB_LIST_HANDLER *sendit, void *ctx, e_list_type type)
 {
    char ed1[50];
-   LIST_CTX lctx(jcr, mdb, sendit, ctx, type);
+   char esc[MAX_ESCAPE_NAME_LENGTH];
 
    db_lock(mdb);
+   mdb->db_escape_string(jcr, esc, mdbr->VolumeName, strlen(mdbr->VolumeName));
+
    if (type == VERT_LIST) {
       if (mdbr->VolumeName[0] != 0) {
          Mmsg(mdb->cmd, "SELECT MediaId,VolumeName,Slot,PoolId,"
@@ -165,7 +163,7 @@ db_list_media_records(JCR *jcr, B_DB *mdb, MEDIA_DBR *mdbr,
             "EndFile,EndBlock,VolParts,LabelType,StorageId,DeviceId,"
             "LocationId,RecycleCount,InitialWrite,ScratchPoolId,RecyclePoolId, "
             "Comment"
-            " FROM Media WHERE Media.VolumeName='%s'", mdbr->VolumeName);
+            " FROM Media WHERE Media.VolumeName='%s'", esc);
       } else {
          Mmsg(mdb->cmd, "SELECT MediaId,VolumeName,Slot,PoolId,"
             "MediaType,FirstWritten,LastWritten,LabelDate,VolJobs,"
@@ -182,7 +180,7 @@ db_list_media_records(JCR *jcr, B_DB *mdb, MEDIA_DBR *mdbr,
       if (mdbr->VolumeName[0] != 0) {
          Mmsg(mdb->cmd, "SELECT MediaId,VolumeName,VolStatus,Enabled,"
             "VolBytes,VolFiles,VolRetention,Recycle,Slot,InChanger,MediaType,LastWritten "
-            "FROM Media WHERE Media.VolumeName='%s'", mdbr->VolumeName);
+            "FROM Media WHERE Media.VolumeName='%s'", esc);
       } else {
          Mmsg(mdb->cmd, "SELECT MediaId,VolumeName,VolStatus,Enabled,"
             "VolBytes,VolFiles,VolRetention,Recycle,Slot,InChanger,MediaType,LastWritten "
@@ -191,12 +189,12 @@ db_list_media_records(JCR *jcr, B_DB *mdb, MEDIA_DBR *mdbr,
       }
    }
 
-   if (!db_big_sql_query(mdb, mdb->cmd, list_result, &lctx)) {
+   if (!QUERY_DB(jcr, mdb, mdb->cmd)) {
       db_unlock(mdb);
       return;
    }
 
-   lctx.send_dashes();
+   list_result(jcr, mdb, sendit, ctx, type);
 
    sql_free_result(mdb);
    db_unlock(mdb);
@@ -206,8 +204,6 @@ void db_list_jobmedia_records(JCR *jcr, B_DB *mdb, uint32_t JobId,
                               DB_LIST_HANDLER *sendit, void *ctx, e_list_type type)
 {
    char ed1[50];
-   LIST_CTX lctx(jcr, mdb, sendit, ctx, type);
-
    db_lock(mdb);
    if (type == VERT_LIST) {
       if (JobId > 0) {                   /* do by JobId */
@@ -233,13 +229,12 @@ void db_list_jobmedia_records(JCR *jcr, B_DB *mdb, uint32_t JobId,
             "FROM JobMedia,Media WHERE Media.MediaId=JobMedia.MediaId");
       }
    }
-
-   if (!db_big_sql_query(mdb, mdb->cmd, list_result, &lctx)) {
+   if (!QUERY_DB(jcr, mdb, mdb->cmd)) {
       db_unlock(mdb);
       return;
    }
 
-   lctx.send_dashes();
+   list_result(jcr, mdb, sendit, ctx, type);
 
    sql_free_result(mdb);
    db_unlock(mdb);
@@ -249,7 +244,6 @@ void db_list_jobmedia_records(JCR *jcr, B_DB *mdb, uint32_t JobId,
 void db_list_copies_records(JCR *jcr, B_DB *mdb, uint32_t limit, char *JobIds,
                             DB_LIST_HANDLER *sendit, void *ctx, e_list_type type)
 {
-   LIST_CTX lctx(jcr, mdb, sendit, ctx, type);
    POOL_MEM str_limit(PM_MESSAGE);
    POOL_MEM str_jobids(PM_MESSAGE);
 
@@ -272,17 +266,19 @@ void db_list_copies_records(JCR *jcr, B_DB *mdb, uint32_t limit, char *JobIds,
     "WHERE Job.Type = '%c' %s ORDER BY Job.PriorJobId DESC %s",
         (char) JT_JOB_COPY, str_jobids.c_str(), str_limit.c_str());
 
-   if (JobIds && JobIds[0]) {
-      sendit(ctx, _("These JobIds have copies as follows:\n"));
-   } else {
-      sendit(ctx, _("The catalog contains copies as follows:\n"));
-   }
-
-   if (!db_big_sql_query(mdb, mdb->cmd, list_result, &lctx)) {
+   if (!QUERY_DB(jcr, mdb, mdb->cmd)) {
       goto bail_out;
    }
 
-   lctx.send_dashes();
+   if (sql_num_rows(mdb)) {
+      if (JobIds && JobIds[0]) {
+         sendit(ctx, _("These JobIds have copies as follows:\n"));
+      } else {
+         sendit(ctx, _("The catalog contains copies as follows:\n"));
+      }
+
+      list_result(jcr, mdb, sendit, ctx, type);
+   }
 
    sql_free_result(mdb);
 
@@ -294,7 +290,6 @@ void db_list_joblog_records(JCR *jcr, B_DB *mdb, uint32_t JobId,
                               DB_LIST_HANDLER *sendit, void *ctx, e_list_type type)
 {
    char ed1[50];
-   LIST_CTX lctx(jcr, mdb, sendit, ctx, type);
 
    if (JobId <= 0) {
       return;
@@ -307,12 +302,11 @@ void db_list_joblog_records(JCR *jcr, B_DB *mdb, uint32_t JobId,
       Mmsg(mdb->cmd, "SELECT LogText FROM Log "
            "WHERE Log.JobId=%s", edit_int64(JobId, ed1));
    }
-
-   if (!db_big_sql_query(mdb, mdb->cmd, list_result, &lctx)) {
+   if (!QUERY_DB(jcr, mdb, mdb->cmd)) {
       goto bail_out;
    }
 
-   lctx.send_dashes();
+   list_result(jcr, mdb, sendit, ctx, type);
 
    sql_free_result(mdb);
 
@@ -333,7 +327,7 @@ db_list_job_records(JCR *jcr, B_DB *mdb, JOB_DBR *jr, DB_LIST_HANDLER *sendit,
 {
    char ed1[50];
    char limit[100];
-   LIST_CTX lctx(jcr, mdb, sendit, ctx, type);
+   char esc[MAX_ESCAPE_NAME_LENGTH];
 
    db_lock(mdb);
    if (jr->limit > 0) {
@@ -368,13 +362,15 @@ db_list_job_records(JCR *jcr, B_DB *mdb, JOB_DBR *jr, DB_LIST_HANDLER *sendit,
       }
    } else {
       if (jr->Name[0] != 0) {
+         mdb->db_escape_string(jcr, esc, jr->Name, strlen(jr->Name));
          Mmsg(mdb->cmd,
-            "SELECT JobId,Name,StartTime,Type,Level,JobFiles,JobBytes,JobStatus "
-            "FROM Job WHERE Name='%s' ORDER BY StartTime,JobId ASC", jr->Name);
+           "SELECT JobId,Name,StartTime,Type,Level,JobFiles,JobBytes,JobStatus "
+             "FROM Job WHERE Name='%s' ORDER BY StartTime,JobId ASC", esc);
       } else if (jr->Job[0] != 0) {
+         mdb->db_escape_string(jcr, esc, jr->Job, strlen(jr->Job));
          Mmsg(mdb->cmd,
             "SELECT JobId,Name,StartTime,Type,Level,JobFiles,JobBytes,JobStatus "
-            "FROM Job WHERE Job='%s' ORDER BY StartTime,JobId ASC", jr->Job);
+            "FROM Job WHERE Job='%s' ORDER BY StartTime,JobId ASC", esc);
       } else if (jr->JobId != 0) {
          Mmsg(mdb->cmd,
             "SELECT JobId,Name,StartTime,Type,Level,JobFiles,JobBytes,JobStatus "
@@ -385,12 +381,11 @@ db_list_job_records(JCR *jcr, B_DB *mdb, JOB_DBR *jr, DB_LIST_HANDLER *sendit,
            "FROM Job ORDER BY StartTime,JobId ASC%s", limit);
       }
    }
-
-   if (!db_big_sql_query(mdb, mdb->cmd, list_result, &lctx)) {
+   if (!QUERY_DB(jcr, mdb, mdb->cmd)) {
       db_unlock(mdb);
       return;
    }
-   lctx.send_dashes();
+   list_result(jcr, mdb, sendit, ctx, type);
 
    sql_free_result(mdb);
    db_unlock(mdb);
@@ -403,19 +398,18 @@ db_list_job_records(JCR *jcr, B_DB *mdb, JOB_DBR *jr, DB_LIST_HANDLER *sendit,
 void
 db_list_job_totals(JCR *jcr, B_DB *mdb, JOB_DBR *jr, DB_LIST_HANDLER *sendit, void *ctx)
 {
-   LIST_CTX lctx(jcr, mdb, sendit, ctx, HORZ_LIST);
-
    db_lock(mdb);
 
    /* List by Job */
    Mmsg(mdb->cmd, "SELECT  count(*) AS Jobs,sum(JobFiles) "
       "AS Files,sum(JobBytes) AS Bytes,Name AS Job FROM Job GROUP BY Name");
 
-   if (!db_sql_query(mdb, mdb->cmd, list_result, &lctx)) {
+   if (!QUERY_DB(jcr, mdb, mdb->cmd)) {
       db_unlock(mdb);
       return;
    }
-   lctx.send_dashes();
+
+   list_result(jcr, mdb, sendit, ctx, HORZ_LIST);
 
    sql_free_result(mdb);
 
@@ -423,13 +417,12 @@ db_list_job_totals(JCR *jcr, B_DB *mdb, JOB_DBR *jr, DB_LIST_HANDLER *sendit, vo
    Mmsg(mdb->cmd, "SELECT count(*) AS Jobs,sum(JobFiles) "
         "AS Files,sum(JobBytes) As Bytes FROM Job");
 
-   lctx.empty();
-   if (!db_sql_query(mdb, mdb->cmd, list_result, &lctx)) {
+   if (!QUERY_DB(jcr, mdb, mdb->cmd)) {
       db_unlock(mdb);
       return;
    }
 
-   lctx.send_dashes();
+   list_result(jcr, mdb, sendit, ctx, HORZ_LIST);
 
    sql_free_result(mdb);
    db_unlock(mdb);
@@ -438,8 +431,8 @@ db_list_job_totals(JCR *jcr, B_DB *mdb, JOB_DBR *jr, DB_LIST_HANDLER *sendit, vo
 void
 db_list_files_for_job(JCR *jcr, B_DB *mdb, JobId_t jobid, DB_LIST_HANDLER *sendit, void *ctx)
 {
-   LIST_CTX lctx(jcr, mdb, sendit, ctx, HORZ_LIST);
    char ed1[50];
+   LIST_CTX lctx(jcr, mdb, sendit, ctx, HORZ_LIST);
 
    db_lock(mdb);
 
@@ -473,10 +466,10 @@ db_list_files_for_job(JCR *jcr, B_DB *mdb, JobId_t jobid, DB_LIST_HANDLER *sendi
    }
 
    if (!db_big_sql_query(mdb, mdb->cmd, list_result, &lctx)) {
-      db_unlock(mdb);
-      return;
+       db_unlock(mdb);
+       return;
    }
-   
+
    lctx.send_dashes();
 
    sql_free_result(mdb);
@@ -486,8 +479,8 @@ db_list_files_for_job(JCR *jcr, B_DB *mdb, JobId_t jobid, DB_LIST_HANDLER *sendi
 void
 db_list_base_files_for_job(JCR *jcr, B_DB *mdb, JobId_t jobid, DB_LIST_HANDLER *sendit, void *ctx)
 {
-   LIST_CTX lctx(jcr, mdb, sendit, ctx, HORZ_LIST);
    char ed1[50];
+   LIST_CTX lctx(jcr, mdb, sendit, ctx, HORZ_LIST);
 
    db_lock(mdb);
 
@@ -513,8 +506,8 @@ db_list_base_files_for_job(JCR *jcr, B_DB *mdb, JobId_t jobid, DB_LIST_HANDLER *
    }
 
    if (!db_big_sql_query(mdb, mdb->cmd, list_result, &lctx)) {
-      db_unlock(mdb);
-      return;
+       db_unlock(mdb);
+       return;
    }
 
    lctx.send_dashes();