]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/stored/label.c
Escape filenames in restore command
[bacula/bacula] / bacula / src / stored / label.c
index 60505c4fe01a301ad1f5e1e98ee954f4f46399b7..d1ee526a1b5350d479160c96b5be4bcf41bdeaf4 100644 (file)
@@ -65,8 +65,8 @@ int read_dev_volume_label(JCR *jcr, DEVICE *dev, DEV_BLOCK *block)
       dev_name(dev), VolName);
 
    if (dev->state & ST_LABEL) {       /* did we already read label? */
-      /* Compare Volume Names */
-      if (VolName && *VolName && strcmp(dev->VolHdr.VolName, VolName) != 0) {
+      /* Compare Volume Names allow special wild card */
+      if (VolName && *VolName && *VolName != '*' && strcmp(dev->VolHdr.VolName, VolName) != 0) {
          Mmsg(&jcr->errmsg, _("Volume name mismatch on device %s: Wanted %s got %s\n"),
            dev_name(dev), VolName, dev->VolHdr.VolName);
         /*
@@ -117,8 +117,11 @@ because:\n   %s"), dev_name(dev), strerror_dev(dev));
    }
 
    free_record(record);
-   empty_block(block);
-   rewind_dev(dev);
+   /* If we are a streaming device, we only get one chance to read */
+   if (!dev_cap(dev, CAP_STREAM)) {
+      empty_block(block);
+      rewind_dev(dev);
+   }
 
    if (dev->VolHdr.VerNum != BaculaTapeVersion && 
        dev->VolHdr.VerNum != OldCompatibleBaculaTapeVersion1 &&  
@@ -130,7 +133,7 @@ because:\n   %s"), dev_name(dev), strerror_dev(dev));
 
    /* Compare Volume Names */
    Dmsg2(30, "Compare Vol names: VolName=%s hdr=%s\n", VolName?VolName:"*", dev->VolHdr.VolName);
-   if (VolName && *VolName && strcmp(dev->VolHdr.VolName, VolName) != 0) {
+   if (VolName && *VolName && *VolName != '*' && strcmp(dev->VolHdr.VolName, VolName) != 0) {
       Mmsg(&jcr->errmsg, _("Volume name mismatch. Wanted %s got %s\n"),
         VolName, dev->VolHdr.VolName);
       /*
@@ -355,7 +358,7 @@ void create_volume_label(DEVICE *dev, char *VolName)
       dev->VolHdr.HostName[0] = 0;
    }
    bstrncpy(dev->VolHdr.LabelProg, my_name, sizeof(dev->VolHdr.LabelProg));
-   sprintf(dev->VolHdr.ProgVersion, "Ver. %s %s", VERSION, DATE);
+   sprintf(dev->VolHdr.ProgVersion, "Ver. %s %s", VERSION, BDATE);
    sprintf(dev->VolHdr.ProgDate, "Build %s %s", __DATE__, __TIME__);
    dev->state |= ST_LABEL;           /* set has Bacula label */
    if (debug_level >= 90) {