]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/findlib/attribs.c
kes When applying a storage override, release all previous storage
[bacula/bacula] / bacula / src / findlib / attribs.c
old mode 100755 (executable)
new mode 100644 (file)
index 4e1122a..9a2fa23
@@ -1,24 +1,14 @@
-/*
- *  Encode and decode standard Unix attributes and
- *   Extended attributes for Win32 and
- *   other non-Unix systems, or Unix systems with ACLs, ...
- *
- *    Kern Sibbald, October MMII
- *
- *   Version $Id$
- *
- */
 /*
    Bacula® - The Network Backup Solution
 
-   Copyright (C) 2002-2006 Free Software Foundation Europe e.V.
+   Copyright (C) 2002-2007 Free Software Foundation Europe e.V.
 
    The main author of Bacula is Kern Sibbald, with contributions from
    many others, a complete list can be found in the file AUTHORS.
    This program is Free Software; you can redistribute it and/or
    modify it under the terms of version two of the GNU General Public
-   License as published by the Free Software Foundation plus additions
-   that are listed in the file LICENSE.
+   License as published by the Free Software Foundation and included
+   in the file LICENSE.
 
    This program is distributed in the hope that it will be useful, but
    WITHOUT ANY WARRANTY; without even the implied warranty of
    (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich,
    Switzerland, email:ftf@fsfeurope.org.
 */
+/*
+ *  Encode and decode standard Unix attributes and
+ *   Extended attributes for Win32 and
+ *   other non-Unix systems, or Unix systems with ACLs, ...
+ *
+ *    Kern Sibbald, October MMII
+ *
+ *   Version $Id$
+ *
+ */
 
 #include "bacula.h"
 #include "find.h"
@@ -403,13 +403,22 @@ bool set_attributes(JCR *jcr, ATTR *attr, BFILE *ofd)
       char ec1[50], ec2[50];
       fsize = blseek(ofd, 0, SEEK_END);
       bclose(ofd);                    /* first close file */
-      if (attr->type == FT_REG && fsize > 0 && fsize != (boffset_t)attr->statp.st_size) {
+      if (attr->type == FT_REG && fsize > 0 && attr->statp.st_size > 0 && 
+                        fsize != (boffset_t)attr->statp.st_size) {
          Jmsg3(jcr, M_ERROR, 0, _("File size of restored file %s not correct. Original %s, restored %s.\n"),
             attr->ofname, edit_uint64(attr->statp.st_size, ec1),
             edit_uint64(fsize, ec2));
       }
    }
 
+   /*
+    * We do not restore sockets, so skip trying to restore their
+    *   attributes.
+    */
+   if (attr->type == FT_SPEC && S_ISSOCK(attr->statp.st_mode)) {
+      goto bail_out;
+   }
+
    ut.actime = attr->statp.st_atime;
    ut.modtime = attr->statp.st_mtime;
 
@@ -423,20 +432,20 @@ bool set_attributes(JCR *jcr, ATTR *attr, BFILE *ofd)
       if (lchown(attr->ofname, attr->statp.st_uid, attr->statp.st_gid) < 0) {
          berrno be;
          Jmsg2(jcr, M_ERROR, 0, _("Unable to set file owner %s: ERR=%s\n"),
-            attr->ofname, be.strerror());
+            attr->ofname, be.bstrerror());
          ok = false;
       }
    } else {
       if (chown(attr->ofname, attr->statp.st_uid, attr->statp.st_gid) < 0) {
          berrno be;
          Jmsg2(jcr, M_ERROR, 0, _("Unable to set file owner %s: ERR=%s\n"),
-            attr->ofname, be.strerror());
+            attr->ofname, be.bstrerror());
          ok = false;
       }
       if (chmod(attr->ofname, attr->statp.st_mode) < 0) {
          berrno be;
          Jmsg2(jcr, M_ERROR, 0, _("Unable to set file modes %s: ERR=%s\n"),
-            attr->ofname, be.strerror());
+            attr->ofname, be.bstrerror());
          ok = false;
       }
 
@@ -446,7 +455,7 @@ bool set_attributes(JCR *jcr, ATTR *attr, BFILE *ofd)
       if (utime(attr->ofname, &ut) < 0) {
          berrno be;
          Jmsg2(jcr, M_ERROR, 0, _("Unable to set file times %s: ERR=%s\n"),
-            attr->ofname, be.strerror());
+            attr->ofname, be.bstrerror());
          ok = false;
       }
 #ifdef HAVE_CHFLAGS
@@ -460,11 +469,13 @@ bool set_attributes(JCR *jcr, ATTR *attr, BFILE *ofd)
       if (chflags(attr->ofname, attr->statp.st_flags) < 0) {
          berrno be;
          Jmsg2(jcr, M_ERROR, 0, _("Unable to set file flags %s: ERR=%s\n"),
-            attr->ofname, be.strerror());
+            attr->ofname, be.bstrerror());
          ok = false;
       }
 #endif
    }
+
+bail_out:
    pm_strcpy(attr->ofname, "*none*");
    umask(old_mask);
    return ok;