1 Index: src/filed/backup.c
2 ===================================================================
3 --- src/filed/backup.c (revision 6497)
4 +++ src/filed/backup.c (working copy)
6 typedef struct CurFile {
16 * the last time. After we can compare Lstat field.
19 -/* TODO: tweak verify code to use the same function ?? */
20 bool accurate_check_file(JCR *jcr, FF_PKT *ff_pkt)
24 - struct stat statc; /* catalog stat */
31 - if (*ff_pkt->VerifyOpts) { /* use mtime + ctime checks by default */
32 - Opts_Digest = ff_pkt->VerifyOpts;
37 if (jcr->accurate == false || jcr->JobLevel == L_FULL) {
44 - decode_stat(elt->lstat, &statc, &LinkFIc); /* decode catalog stat */
45 -// *do_Digest = CRYPTO_DIGEST_NONE;
47 - for (p=Opts_Digest; *p; p++) {
48 - char ed1[30], ed2[30];
50 - case 'i': /* compare INODEs */
51 - if (statc.st_ino != ff_pkt->statp.st_ino) {
52 - Jmsg(jcr, M_SAVED, 0, _("%s st_ino differ. Cat: %s File: %s\n"), fname,
53 - edit_uint64((uint64_t)statc.st_ino, ed1),
54 - edit_uint64((uint64_t)ff_pkt->statp.st_ino, ed2));
58 - case 'p': /* permissions bits */
59 - if (statc.st_mode != ff_pkt->statp.st_mode) {
60 - Jmsg(jcr, M_SAVED, 0, _("%s st_mode differ. Cat: %x File: %x\n"), fname,
61 - (uint32_t)statc.st_mode, (uint32_t)ff_pkt->statp.st_mode);
65 -// case 'n': /* number of links */
66 -// if (statc.st_nlink != ff_pkt->statp.st_nlink) {
67 -// Jmsg(jcr, M_SAVED, 0, _("%s st_nlink differ. Cat: %d File: %d\n"), fname,
68 -// (uint32_t)statc.st_nlink, (uint32_t)ff_pkt->statp.st_nlink);
72 - case 'u': /* user id */
73 - if (statc.st_uid != ff_pkt->statp.st_uid) {
74 - Jmsg(jcr, M_SAVED, 0, _("%s st_uid differ. Cat: %u File: %u\n"), fname,
75 - (uint32_t)statc.st_uid, (uint32_t)ff_pkt->statp.st_uid);
79 - case 'g': /* group id */
80 - if (statc.st_gid != ff_pkt->statp.st_gid) {
81 - Jmsg(jcr, M_SAVED, 0, _("%s st_gid differ. Cat: %u File: %u\n"), fname,
82 - (uint32_t)statc.st_gid, (uint32_t)ff_pkt->statp.st_gid);
86 - case 's': /* size */
87 - if (statc.st_size != ff_pkt->statp.st_size) {
88 - Jmsg(jcr, M_SAVED, 0, _("%s st_size differ. Cat: %s File: %s\n"), fname,
89 - edit_uint64((uint64_t)statc.st_size, ed1),
90 - edit_uint64((uint64_t)ff_pkt->statp.st_size, ed2));
94 -// case 'a': /* access time */
95 -// if (statc.st_atime != ff_pkt->statp.st_atime) {
96 -// Jmsg(jcr, M_SAVED, 0, _("%s st_atime differs\n"), fname);
101 - if (statc.st_mtime != ff_pkt->statp.st_mtime) {
102 - Jmsg(jcr, M_SAVED, 0, _("%s st_mtime differs\n"), fname);
106 - case 'c': /* ctime */
107 - if (statc.st_ctime != ff_pkt->statp.st_ctime) {
108 - Jmsg(jcr, M_SAVED, 0, _("%s st_ctime differs\n"), fname);
112 - case 'd': /* file size decrease */
113 - if (statc.st_size > ff_pkt->statp.st_size) {
114 - Jmsg(jcr, M_SAVED, 0, _("%s st_size decrease. Cat: %s File: %s\n"), fname,
115 - edit_uint64((uint64_t)statc.st_size, ed1),
116 - edit_uint64((uint64_t)ff_pkt->statp.st_size, ed2));
120 - case '5': /* compare MD5 */
121 - Dmsg1(500, "set Do_MD5 for %s\n", ff_pkt->fname);
122 -// *do_Digest = CRYPTO_DIGEST_MD5;
124 - case '1': /* compare SHA1 */
125 -// *do_Digest = CRYPTO_DIGEST_SHA1;
132 + if (elt->mtime != ff_pkt->statp.st_mtime) {
133 + Jmsg(jcr, M_SAVED, 0, _("%s st_mtime differs\n"), fname);
135 + } else if (elt->ctime != ff_pkt->statp.st_ctime) {
136 + Jmsg(jcr, M_SAVED, 0, _("%s st_ctime differs\n"), fname);
140 accurate_mark_file_as_seen(elt);
141 Dmsg2(500, "accurate %s = %i\n", fname, stat);
145 BSOCK *dir = jcr->dir_bsock;
153 if (jcr->accurate==false || job_canceled(jcr) || jcr->JobLevel==L_FULL) {
155 @@ -246,10 +157,13 @@
156 elt->fname = (char *) elt+sizeof(CurFile);
157 memcpy(elt->fname, dir->msg, dir->msglen);
158 elt->fname[dir->msglen]='\0';
159 - elt->lstat = elt->fname + len + 1;
161 + lstat = elt->fname + len + 1;
162 + decode_stat(lstat, &statp, &LinkFIc); /* decode catalog stat */
163 + elt->ctime = statp.st_ctime;
164 + elt->mtime = statp.st_mtime;
166 jcr->file_list->insert(elt->fname, elt);
167 - Dmsg2(500, "add fname=%s lstat=%s\n", elt->fname, elt->lstat);
168 + Dmsg2(500, "add fname=%s lstat=%s\n", elt->fname, lstat);
174 foreach_htable (elt, jcr->file_list) {
175 if (!accurate_file_has_been_seen(elt)) { /* already seen */
176 - Dmsg3(500, "deleted fname=%s lstat=%s seen=%i\n", elt->fname, elt->lstat, elt->seen);
177 + Dmsg2(500, "deleted fname=%s seen=%i\n", elt->fname, elt->seen);
178 ff_pkt->fname = elt->fname;
179 - decode_stat(elt->lstat, &ff_pkt->statp, &ff_pkt->LinkFI); /* decode catalog stat */
180 + ff_pkt->statp.st_mtime = elt->mtime;
181 + ff_pkt->statp.st_ctime = elt->ctime;
182 encode_and_send_attributes(jcr, ff_pkt, stream);