]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/dird/dird_conf.c
Clean up error message generation during update attributes -- should fix bug #1823
[bacula/bacula] / bacula / src / dird / dird_conf.c
index 211f4d81cfbebdb9768ee41c25aca444fc039b6a..2f2eb000d28ff2904ba3913aa16a7e3b0815e971 100644 (file)
@@ -312,7 +312,7 @@ RES_ITEM job_items[] = {
    {"prunejobs",   store_bool, ITEM(res_job.PruneJobs), 0, ITEM_DEFAULT, false},
    {"prunefiles",  store_bool, ITEM(res_job.PruneFiles), 0, ITEM_DEFAULT, false},
    {"prunevolumes",store_bool, ITEM(res_job.PruneVolumes), 0, ITEM_DEFAULT, false},
-   {"purgemigratejob",   store_bool, ITEM(res_job.PurgeMigrateJob), 0, ITEM_DEFAULT, false},
+   {"purgemigrationjob",  store_bool, ITEM(res_job.PurgeMigrateJob), 0, ITEM_DEFAULT, false},
    {"enabled",     store_bool, ITEM(res_job.enabled), 0, ITEM_DEFAULT, true},
    {"spoolattributes",store_bool, ITEM(res_job.SpoolAttributes), 0, ITEM_DEFAULT, false},
    {"spooldata",   store_bool, ITEM(res_job.spool_data), 0, ITEM_DEFAULT, false},
@@ -554,6 +554,7 @@ void dump_resource(int type, RES *reshdr, void sendit(void *sock, const char *fm
    bool recurse = true;
    char ed1[100], ed2[100], ed3[100];
    DEVICE *dev;
+   UAContext *ua = (UAContext *)sock;
 
    if (res == NULL) {
       sendit(sock, _("No %s resource defined\n"), res_to_str(type));
@@ -599,6 +600,9 @@ void dump_resource(int type, RES *reshdr, void sendit(void *sock, const char *fm
       break;
 
    case R_CLIENT:
+      if (!acl_access_ok(ua, Client_ACL, res->res_client.hdr.name)) {
+         break;
+      }
       sendit(sock, _("Client: name=%s address=%s FDport=%d MaxJobs=%u\n"),
          res->res_client.hdr.name, res->res_client.address, res->res_client.FDport,
          res->res_client.MaxConcurrentJobs);
@@ -626,6 +630,9 @@ void dump_resource(int type, RES *reshdr, void sendit(void *sock, const char *fm
       break;
 
    case R_STORAGE:
+      if (!acl_access_ok(ua, Storage_ACL, res->res_store.hdr.name)) {
+         break;
+      }
       sendit(sock, _("Storage: name=%s address=%s SDport=%d MaxJobs=%u\n"
 "      DeviceName=%s MediaType=%s StorageId=%s\n"),
          res->res_store.hdr.name, res->res_store.address, res->res_store.SDport,
@@ -636,6 +643,9 @@ void dump_resource(int type, RES *reshdr, void sendit(void *sock, const char *fm
       break;
 
    case R_CATALOG:
+      if (!acl_access_ok(ua, Catalog_ACL, res->res_cat.hdr.name)) {
+         break;
+      }
       sendit(sock, _("Catalog: name=%s address=%s DBport=%d db_name=%s\n"
 "      db_driver=%s db_user=%s MutliDBConn=%d\n"),
          res->res_cat.hdr.name, NPRT(res->res_cat.db_address),
@@ -646,6 +656,9 @@ void dump_resource(int type, RES *reshdr, void sendit(void *sock, const char *fm
 
    case R_JOB:
    case R_JOBDEFS:
+      if (!acl_access_ok(ua, Job_ACL, res->res_job.hdr.name)) {
+         break;
+      }
       sendit(sock, _("%s: name=%s JobType=%d level=%s Priority=%d Enabled=%d\n"),
          type == R_JOB ? _("Job") : _("JobDefs"),
          res->res_job.hdr.name, res->res_job.JobType,
@@ -767,6 +780,9 @@ void dump_resource(int type, RES *reshdr, void sendit(void *sock, const char *fm
    case R_FILESET:
    {
       int i, j, k;
+      if (!acl_access_ok(ua, FileSet_ACL, res->res_fs.hdr.name)) {
+         break;
+      }
       sendit(sock, _("FileSet: name=%s\n"), res->res_fs.hdr.name);
       for (i=0; i<res->res_fs.num_includes; i++) {
          INCEXE *incexe = res->res_fs.include_items[i];
@@ -854,6 +870,9 @@ void dump_resource(int type, RES *reshdr, void sendit(void *sock, const char *fm
    }
 
    case R_SCHEDULE:
+      if (!acl_access_ok(ua, Schedule_ACL, res->res_sch.hdr.name)) {
+         break;
+      }
       if (res->res_sch.run) {
          int i;
          RUN *run = res->res_sch.run;
@@ -942,6 +961,9 @@ next_run:
       break;
 
    case R_POOL:
+      if (!acl_access_ok(ua, Pool_ACL, res->res_pool.hdr.name)) {
+         break;
+      }
       sendit(sock, _("Pool: name=%s PoolType=%s\n"), res->res_pool.hdr.name,
               res->res_pool.pool_type);
       sendit(sock, _("      use_cat=%d use_once=%d cat_files=%d\n"),
@@ -1642,14 +1664,13 @@ static void store_actiononpurge(LEX *lc, RES_ITEM *item, int index, int pass)
  */
 static void store_device(LEX *lc, RES_ITEM *item, int index, int pass)
 {
-   int token;
    URES *res;
    int rindex = R_DEVICE - r_first;
    int size = sizeof(DEVICE);
    bool found = false;
 
    if (pass == 1) {
-      token = lex_get_token(lc, T_NAME);
+      lex_get_token(lc, T_NAME);
       if (!res_head[rindex]) {
          res = (URES *)malloc(size);
          memset(res, 0, size);
@@ -1689,9 +1710,9 @@ static void store_device(LEX *lc, RES_ITEM *item, int index, int pass)
  */
 void store_migtype(LEX *lc, RES_ITEM *item, int index, int pass)
 {
-   int token, i;
+   int i;
 
-   token = lex_get_token(lc, T_NAME);
+   lex_get_token(lc, T_NAME);
    /* Store the type both pass 1 and pass 2 */
    for (i=0; migtypes[i].type_name; i++) {
       if (strcasecmp(lc->str, migtypes[i].type_name) == 0) {
@@ -1715,9 +1736,9 @@ void store_migtype(LEX *lc, RES_ITEM *item, int index, int pass)
  */
 void store_jobtype(LEX *lc, RES_ITEM *item, int index, int pass)
 {
-   int token, i;
+   int i;
 
-   token = lex_get_token(lc, T_NAME);
+   lex_get_token(lc, T_NAME);
    /* Store the type both pass 1 and pass 2 */
    for (i=0; jobtypes[i].type_name; i++) {
       if (strcasecmp(lc->str, jobtypes[i].type_name) == 0) {
@@ -1739,9 +1760,9 @@ void store_jobtype(LEX *lc, RES_ITEM *item, int index, int pass)
  */
 void store_level(LEX *lc, RES_ITEM *item, int index, int pass)
 {
-   int token, i;
+   int i;
 
-   token = lex_get_token(lc, T_NAME);
+   lex_get_token(lc, T_NAME);
    /* Store the level pass 2 so that type is defined */
    for (i=0; joblevels[i].level_name; i++) {
       if (strcasecmp(lc->str, joblevels[i].level_name) == 0) {
@@ -1760,8 +1781,8 @@ void store_level(LEX *lc, RES_ITEM *item, int index, int pass)
 
 void store_replace(LEX *lc, RES_ITEM *item, int index, int pass)
 {
-   int token, i;
-   token = lex_get_token(lc, T_NAME);
+   int i;
+   lex_get_token(lc, T_NAME);
    /* Scan Replacement options */
    for (i=0; ReplaceOptions[i].name; i++) {
       if (strcasecmp(lc->str, ReplaceOptions[i].name) == 0) {
@@ -1786,7 +1807,7 @@ void store_acl(LEX *lc, RES_ITEM *item, int index, int pass)
    int token;
 
    for (;;) {
-      token = lex_get_token(lc, T_STRING);
+      lex_get_token(lc, T_STRING);
       if (pass == 1) {
          if (((alist **)item->value)[item->code] == NULL) {
             ((alist **)item->value)[item->code] = New(alist(10, owned_by_alist));
@@ -1878,7 +1899,7 @@ static void store_short_runscript(LEX *lc, RES_ITEM *item, int index, int pass)
 
    if (pass == 2) {
       RUNSCRIPT *script = new_runscript();
-      script->set_job_code_callback(job_code_callback_filesetname);
+      script->set_job_code_callback(job_code_callback_director);
 
       script->set_command(lc->str);
 
@@ -2025,7 +2046,7 @@ static void store_runscript(LEX *lc, RES_ITEM *item, int index, int pass)
        *  - POOLMEM command string (ex: /bin/true) 
        *  - int command type (ex: SHELL_CMD)
        */
-      res_runscript.set_job_code_callback(job_code_callback_filesetname);
+      res_runscript.set_job_code_callback(job_code_callback_director);
       while ((c=(char*)res_runscript.commands->pop()) != NULL) {
          t = (intptr_t)res_runscript.commands->pop();
          RUNSCRIPT *script = new_runscript();
@@ -2051,14 +2072,39 @@ static void store_runscript(LEX *lc, RES_ITEM *item, int index, int pass)
 }
 
 /* callback function for edit_job_codes */
-extern "C" char *job_code_callback_filesetname(JCR *jcr, const char* param)
+/* See ../lib/util.c, function edit_job_codes, for more remaining codes */
+extern "C" char *job_code_callback_director(JCR *jcr, const char* param)
 {
-   if (param[0] == 'f' && jcr->fileset) {
-      return jcr->fileset->name();
-
-   } else if (param[0] == 'h' && jcr->client) {
-      return jcr->client->address;
-   } 
+   static char yes[] = "yes";
+   static char no[] = "no";
+   switch (param[0]) {
+      case 'f':
+         if (jcr->fileset) {
+            return jcr->fileset->name();
+         }
+         break;
+      case 'h':
+         if (jcr->client) {
+            return jcr->client->address;
+         }
+         break;
+      case 'p':
+         if (jcr->pool) {
+            return jcr->pool->name();
+         }
+         break;
+      case 'w':
+         if (jcr->wstore) {
+            return jcr->wstore->name();
+         }
+         break;
+      case 'x':
+         return jcr->spool_data ? yes : no;
+         break;
+      case 'D':
+         return my_name;
+         break;
+   }
    return NULL;
 }