Print this page
NEX-9532 NDMP: readdir errors when file/directory has special characters
Reviewed by: Peer Dampmann <peer.dampmann@nexenta.com>
Reviewed by: Alexander Eremin <alexander.eremin@nexenta.com>
Reviewed by: Yuri Pankov <yuri.pankov@nexenta.com>
NEX-5801 Snapshots left over after failed backups
Reviewed by: Rick Mesta <rick.mesta@nexenta.com>
Reviewed by: Evan Layton <evan.layton@nexenta.com>
Reviewed by: Sanjay Nadkarni <sanjay.nadkarni@nexenta.com>
Reviewed by: Yuri Pankov <yuri.pankov@nexenta.com>
NEX-2990 ndmpd dumping core when used with ndmpcopy
NEX-2911 NDMP logging should use syslog and is too chatty

*** 1,8 **** /* * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. - * Copyright 2013 Nexenta Systems, Inc. All rights reserved. */ /* * BSD 3 Clause License * --- 1,7 ----
*** 34,43 **** --- 33,45 ---- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */ + /* Copyright 2017 Nexenta Systems, Inc. All rights reserved. */ + + #include <syslog.h> #include <stdlib.h> #include <ctype.h> #include <stdio.h> #include <limits.h> #include <string.h>
*** 226,236 **** for (x = 0; sels[x] != NULL; x++) { if (strcmp(sels[x], " ")) { *pos = x; (void) strlcpy(longname, sels[x], TLM_MAX_PATH_NAME); ! NDMP_LOG(LOG_DEBUG, "to replace hardlink name [%s], pos [%d]", longname, *pos); return (rs_new_name(rnp, name, *pos, longname)); } --- 228,238 ---- for (x = 0; sels[x] != NULL; x++) { if (strcmp(sels[x], " ")) { *pos = x; (void) strlcpy(longname, sels[x], TLM_MAX_PATH_NAME); ! syslog(LOG_DEBUG, "to replace hardlink name [%s], pos [%d]", longname, *pos); return (rs_new_name(rnp, name, *pos, longname)); }
*** 267,277 **** boolean_t is_long_name = FALSE; char *longlink; char *hugename; longlong_t huge_size = 0; /* size of a HUGE file */ long acl_spot; /* any ACL info on the next volume */ ! long file_size; /* size of file to restore */ long size_left = 0; /* need this after volume change */ int last_action = 0; /* what we are doing at EOT */ boolean_t multi_volume = FALSE; /* is this a multi-volume switch ? */ int chk_rv; /* scratch area */ --- 269,279 ---- boolean_t is_long_name = FALSE; char *longlink; char *hugename; longlong_t huge_size = 0; /* size of a HUGE file */ long acl_spot; /* any ACL info on the next volume */ ! long file_size = 0; /* size of file to restore */ long size_left = 0; /* need this after volume change */ int last_action = 0; /* what we are doing at EOT */ boolean_t multi_volume = FALSE; /* is this a multi-volume switch ? */ int chk_rv; /* scratch area */
*** 335,348 **** lnk_end = 0; *longlink = '\0'; (void) memset(acls, 0, sizeof (tlm_acls_t)); if (IS_SET(flags, RSFLG_OVR_ALWAYS)) { acls->acl_overwrite = TRUE; ! NDMP_LOG(LOG_DEBUG, "RSFLG_OVR_ALWAYS"); } else if (IS_SET(flags, RSFLG_OVR_UPDATE)) { acls->acl_update = TRUE; ! NDMP_LOG(LOG_DEBUG, "RSFLG_OVR_UPDATE"); } /* * work */ --- 337,350 ---- lnk_end = 0; *longlink = '\0'; (void) memset(acls, 0, sizeof (tlm_acls_t)); if (IS_SET(flags, RSFLG_OVR_ALWAYS)) { acls->acl_overwrite = TRUE; ! syslog(LOG_DEBUG, "RSFLG_OVR_ALWAYS"); } else if (IS_SET(flags, RSFLG_OVR_UPDATE)) { acls->acl_update = TRUE; ! syslog(LOG_DEBUG, "RSFLG_OVR_UPDATE"); } /* * work */
*** 381,391 **** /* used to make up hardlink_tmp_name */ static int hardlink_tmp_idx = 0; if (multi_volume) { ! NDMP_LOG(LOG_DEBUG, "multi_volume %c %d", last_action, size_left); /* * the previous volume is out of data * and is back in the rack, a new tape --- 383,393 ---- /* used to make up hardlink_tmp_name */ static int hardlink_tmp_idx = 0; if (multi_volume) { ! syslog(LOG_DEBUG, "multi_volume %c %d", last_action, size_left); /* * the previous volume is out of data * and is back in the rack, a new tape
*** 432,448 **** */ chk_rv = tlm_vfy_tar_checksum(tar_hdr); if (chk_rv == 0) { /* one of the end of tar file marks */ if (++nzerohdr >= 2) { ! NDMP_LOG(LOG_DEBUG, "nzerohdr %d, breaking", nzerohdr); /* end of tar file */ break; } ! NDMP_LOG(LOG_DEBUG, "nzerohdr %d, continuing", nzerohdr); continue; } else if (chk_rv < 0) { nzerohdr = 0; /* skip this record */ --- 434,450 ---- */ chk_rv = tlm_vfy_tar_checksum(tar_hdr); if (chk_rv == 0) { /* one of the end of tar file marks */ if (++nzerohdr >= 2) { ! syslog(LOG_DEBUG, "nzerohdr %d, breaking", nzerohdr); /* end of tar file */ break; } ! syslog(LOG_DEBUG, "nzerohdr %d, continuing", nzerohdr); continue; } else if (chk_rv < 0) { nzerohdr = 0; /* skip this record */
*** 482,497 **** acl_spot = 0; last_action = tar_hdr->th_linkflag; } } - NDMP_LOG(LOG_DEBUG, "n [%s] f [%c] s %lld m %o u %d g %d t %d", - tar_hdr->th_name, tar_hdr->th_linkflag, - acls->acl_attr.st_size, acls->acl_attr.st_mode, - acls->acl_attr.st_uid, acls->acl_attr.st_gid, - acls->acl_attr.st_mtime); - /* * If the restore is running using DAR we should check for * extended attribute entries */ if (dar_recovered && --- 484,493 ----
*** 518,528 **** hardlink_done = !hardlink_q_get(hardlink_q, hardlink_inode, 0, &hardlink_target); } if (hardlink_done) { ! NDMP_LOG(LOG_DEBUG, "found hardlink, inode = %u, target = [%s]", hardlink_inode, hardlink_target? hardlink_target : "--"); /* create a hardlink to hardlink_target */ --- 514,524 ---- hardlink_done = !hardlink_q_get(hardlink_q, hardlink_inode, 0, &hardlink_target); } if (hardlink_done) { ! syslog(LOG_DEBUG, "found hardlink, inode = %u, target = [%s]", hardlink_inode, hardlink_target? hardlink_target : "--"); /* create a hardlink to hardlink_target */
*** 547,557 **** } } else { nmp = rs_new_name(rnp, name, pos, file_name); if (!nmp) { ! NDMP_LOG(LOG_DEBUG, "can't make name for %s", longname); } } --- 543,553 ---- } } else { nmp = rs_new_name(rnp, name, pos, file_name); if (!nmp) { ! syslog(LOG_ERR, "can't make name for %s", longname); } }
*** 567,583 **** if (erc == 0) { (void) tlm_entry_restored( job_stats, file_name, pos); ! NDMP_LOG(LOG_DEBUG, "restored %s -> %s", nmp, hardlink_target); } } else { ! NDMP_LOG(LOG_DEBUG, "no target for hardlink %s", nmp); } name[0] = 0; --- 563,579 ---- if (erc == 0) { (void) tlm_entry_restored( job_stats, file_name, pos); ! syslog(LOG_DEBUG, "restored %s -> %s", nmp, hardlink_target); } } else { ! syslog(LOG_DEBUG, "no target for hardlink %s", nmp); } name[0] = 0;
*** 688,702 **** nmp = name; hardlink_tmp_idx++; hardlink_tmp_file = 1; want_this_file = TRUE; ! NDMP_LOG(LOG_DEBUG, "To restore temp hardlink file %s.", nmp); } else { ! NDMP_LOG(LOG_DEBUG, "No tmplink_dir specified."); } } rv = restore_file(&fp, nmp, file_size, --- 684,698 ---- nmp = name; hardlink_tmp_idx++; hardlink_tmp_file = 1; want_this_file = TRUE; ! syslog(LOG_DEBUG, "To restore temp hardlink file %s.", nmp); } else { ! syslog(LOG_DEBUG, "No tmplink_dir specified."); } } rv = restore_file(&fp, nmp, file_size,
*** 716,726 **** * to locate the data records. */ if (is_hardlink && !DAR) { if (hardlink_q_add(hardlink_q, hardlink_inode, 0, nmp, hardlink_tmp_file)) ! NDMP_LOG(LOG_DEBUG, "failed to add (%u, %s) to HL q", hardlink_inode, nmp); } /* remove / reverse the temporary stuff */ --- 712,722 ---- * to locate the data records. */ if (is_hardlink && !DAR) { if (hardlink_q_add(hardlink_q, hardlink_inode, 0, nmp, hardlink_tmp_file)) ! syslog(LOG_ERR, "failed to add (%u, %s) to HL q", hardlink_inode, nmp); } /* remove / reverse the temporary stuff */
*** 747,759 **** } } if (rv != 0) continue; - NDMP_LOG(LOG_DEBUG, "sizeleft %s %d, %lld", longname, - size_left, huge_size); - if (want_this_file) { job_stats->js_bytes_total += file_size; job_stats->js_files_total++; } --- 743,752 ----
*** 769,779 **** /* * Add an entry to hardlink_q to record * this hardlink. */ if (is_hardlink) { ! NDMP_LOG(LOG_DEBUG, "Restored hardlink file %s", nmp); if (DAR) { (void) hardlink_q_add( --- 762,772 ---- /* * Add an entry to hardlink_q to record * this hardlink. */ if (is_hardlink) { ! syslog(LOG_DEBUG, "Restored hardlink file %s", nmp); if (DAR) { (void) hardlink_q_add(
*** 805,816 **** case LF_SYMLINK: file_name = (*longname == 0) ? thname_buf : longname; link_name = (*longlink == 0) ? tar_hdr->th_linkname : longlink; ! NDMP_LOG(LOG_DEBUG, "file_name[%s]", file_name); ! NDMP_LOG(LOG_DEBUG, "link_name[%s]", link_name); if (is_file_wanted(file_name, sels, exls, flags, &mchtype, &pos)) { nmp = rs_new_name(rnp, name, pos, file_name); if (nmp) { erc = create_sym_link(nmp, link_name, --- 798,809 ---- case LF_SYMLINK: file_name = (*longname == 0) ? thname_buf : longname; link_name = (*longlink == 0) ? tar_hdr->th_linkname : longlink; ! syslog(LOG_DEBUG, "file_name[%s]", file_name); ! syslog(LOG_DEBUG, "link_name[%s]", link_name); if (is_file_wanted(file_name, sels, exls, flags, &mchtype, &pos)) { nmp = rs_new_name(rnp, name, pos, file_name); if (nmp) { erc = create_sym_link(nmp, link_name,
*** 918,928 **** file_size = max(0, file_size); size_left = get_long_name(lib, drv, file_size, longlink, &lnk_end, local_commands); if (size_left != 0) ! NDMP_LOG(LOG_DEBUG, "fsize %d sleft %d lnkend %d", file_size, size_left, lnk_end); break; case LF_LONGNAME: file_size = min(file_size, --- 911,921 ---- file_size = max(0, file_size); size_left = get_long_name(lib, drv, file_size, longlink, &lnk_end, local_commands); if (size_left != 0) ! syslog(LOG_DEBUG, "fsize %d sleft %d lnkend %d", file_size, size_left, lnk_end); break; case LF_LONGNAME: file_size = min(file_size,
*** 930,940 **** file_size = max(0, file_size); size_left = get_long_name(lib, drv, file_size, longname, &nm_end, local_commands); if (size_left != 0) ! NDMP_LOG(LOG_DEBUG, "fsize %d sleft %d nmend %d", file_size, size_left, nm_end); is_long_name = TRUE; break; case LF_ACL: --- 923,933 ---- file_size = max(0, file_size); size_left = get_long_name(lib, drv, file_size, longname, &nm_end, local_commands); if (size_left != 0) ! syslog(LOG_DEBUG, "fsize %d sleft %d nmend %d", file_size, size_left, nm_end); is_long_name = TRUE; break; case LF_ACL:
*** 996,1005 **** --- 989,999 ---- char *dir; /* where to restore the files */ char job[TLM_MAX_BACKUP_JOB_NAME+1]; /* the restore job name */ int erc; /* error return codes */ int flags; + int i; struct rs_name_maker rn; tlm_commands_t *commands; tlm_cmd_t *local_commands; char *list = NULL;
*** 1025,1052 **** * do not test for "dir" having no string, since that * is a legal condition. Restore to origional location * will not have a restore directory. */ if (*job == '\0') { ! NDMP_LOG(LOG_DEBUG, "No job defined"); local_commands->tc_reader = TLM_STOP; free(dir); (void) pthread_barrier_wait(&argp->ba_barrier); return (-1); } ! sels = argp->ba_sels; if (sels == NULL) { local_commands->tc_reader = TLM_STOP; free(dir); (void) pthread_barrier_wait(&argp->ba_barrier); return (-1); } exls = &list; tlm_log_list("selections", sels); - tlm_log_list("exclusions", exls); if (wildcard_enabled()) flags |= RSFLG_MATCH_WCARD; local_commands->tc_ref++; --- 1019,1052 ---- * do not test for "dir" having no string, since that * is a legal condition. Restore to origional location * will not have a restore directory. */ if (*job == '\0') { ! syslog(LOG_DEBUG, "No job defined"); local_commands->tc_reader = TLM_STOP; free(dir); (void) pthread_barrier_wait(&argp->ba_barrier); return (-1); } ! sels = ndmp_malloc(sizeof (char *) * (argp->ba_count + 1)); ! /* One extra for NULL terminate */ if (sels == NULL) { local_commands->tc_reader = TLM_STOP; free(dir); (void) pthread_barrier_wait(&argp->ba_barrier); return (-1); } + + (void) memset(sels, 0, (argp->ba_count + 1) * sizeof (char *)); + for (i = 0; i < argp->ba_count; i++) { + sels[i] = argp->ba_sels[i]; + } + exls = &list; tlm_log_list("selections", sels); if (wildcard_enabled()) flags |= RSFLG_MATCH_WCARD; local_commands->tc_ref++;
*** 1063,1083 **** rn.rn_nlp = dir; /* * work */ - NDMP_LOG(LOG_DEBUG, "start restore job %s", job); erc = tar_getdir(commands, local_commands, job_stats, &rn, 1, 1, sels, exls, flags, 0, NULL, NULL); /* * teardown */ - NDMP_LOG(LOG_DEBUG, "end restore job %s", job); tlm_un_ref_job_stats(job); tlm_release_list(sels); - tlm_release_list(exls); commands->tcs_writer_count--; local_commands->tc_reader = TLM_STOP; tlm_release_reader_writer_ipc(local_commands); free(dir); --- 1063,1080 ----
*** 1102,1112 **** if (*cp == '\0' || *cp == '/') { c = *cp; *cp = '\0'; if (lstat64(dir, &st) < 0) if (mkdir(dir, 0777) < 0) { ! NDMP_LOG(LOG_DEBUG, "Error %d" " creating directory %s", errno, dir); *cp = c; return (errno); } --- 1099,1109 ---- if (*cp == '\0' || *cp == '/') { c = *cp; *cp = '\0'; if (lstat64(dir, &st) < 0) if (mkdir(dir, 0777) < 0) { ! syslog(LOG_ERR, "Error %d" " creating directory %s", errno, dir); *cp = c; return (errno); }
*** 1127,1137 **** int rv; char *cp; struct stat64 st; if (!path || !*path) { ! NDMP_LOG(LOG_DEBUG, "Invalid argument"); return (-1); } cp = strrchr(path, '/'); if (cp) --- 1124,1134 ---- int rv; char *cp; struct stat64 st; if (!path || !*path) { ! syslog(LOG_ERR, "Invalid argument"); return (-1); } cp = strrchr(path, '/'); if (cp)
*** 1167,1181 **** int ret, rv; *size_left = 0; if (!real_name) { if (want_this_file) { ! NDMP_LOG(LOG_DEBUG, "No file name but wanted!"); want_this_file = FALSE; } ! } else ! NDMP_LOG(LOG_DEBUG, "new file[%s]", real_name); /* * OK, some FM is creeping in here ... * int *fp is used to keep the * backup file channel open through --- 1164,1177 ---- int ret, rv; *size_left = 0; if (!real_name) { if (want_this_file) { ! syslog(LOG_DEBUG, "No file name but wanted!"); want_this_file = FALSE; } ! } /* * OK, some FM is creeping in here ... * int *fp is used to keep the * backup file channel open through
*** 1225,1235 **** if (want_this_file) { *fp = open(real_name, O_CREAT | O_TRUNC | O_WRONLY, S_IRUSR | S_IWUSR); if (*fp == -1) { ! NDMP_LOG(LOG_ERR, "Could not open %s for restore: %d", real_name, errno); job_stats->js_errors++; want_this_file = FALSE; /* --- 1221,1231 ---- if (want_this_file) { *fp = open(real_name, O_CREAT | O_TRUNC | O_WRONLY, S_IRUSR | S_IWUSR); if (*fp == -1) { ! syslog(LOG_ERR, "Could not open %s for restore: %d", real_name, errno); job_stats->js_errors++; want_this_file = FALSE; /*
*** 1268,1296 **** error = 0; rec = get_read_buffer(size, &error, &actual_size, local_commands); if (actual_size <= 0) { ! NDMP_LOG(LOG_DEBUG, "RESTORE WRITER> error %d, actual_size %d", error, actual_size); /* no more data for this file for now */ job_stats->js_bytes_in_file = 0; *size_left = size; return (0); } else if (error) { ! NDMP_LOG(LOG_DEBUG, "Error %d in file [%s]", error, local_commands->tc_file_name); break; } write_size = min(size, actual_size); if (want_this_file) { ret = write(*fp, rec, write_size); if (ret < 0) { ! NDMP_LOG(LOG_ERR, "Write error %d for file [%s]", errno, local_commands->tc_file_name); job_stats->js_errors++; if (ERROR_IS_FATAL(errno)) { rv = errno; --- 1264,1292 ---- error = 0; rec = get_read_buffer(size, &error, &actual_size, local_commands); if (actual_size <= 0) { ! syslog(LOG_ERR, "RESTORE WRITER> error %d, actual_size %d", error, actual_size); /* no more data for this file for now */ job_stats->js_bytes_in_file = 0; *size_left = size; return (0); } else if (error) { ! syslog(LOG_ERR, "Error %d in file [%s]", error, local_commands->tc_file_name); break; } write_size = min(size, actual_size); if (want_this_file) { ret = write(*fp, rec, write_size); if (ret < 0) { ! syslog(LOG_ERR, "Write error %d for file [%s]", errno, local_commands->tc_file_name); job_stats->js_errors++; if (ERROR_IS_FATAL(errno)) { rv = errno;
*** 1298,1308 **** } } else { NS_ADD(wdisk, ret); NS_INC(wfile); if (ret < write_size) { ! NDMP_LOG(LOG_ERR, "Partial write for file [%s]", local_commands->tc_file_name); } } } --- 1294,1304 ---- } } else { NS_ADD(wdisk, ret); NS_INC(wfile); if (ret < write_size) { ! syslog(LOG_ERR, "Partial write for file [%s]", local_commands->tc_file_name); } } }
*** 1398,1426 **** char *xattrname; int actual_size; int error; if (!fname) { ! NDMP_LOG(LOG_DEBUG, "No file name but wanted!"); ! } else { ! NDMP_LOG(LOG_DEBUG, "new xattr[%s]", fname); } error = 0; xhdr = (struct xattr_hdr *)get_read_buffer(size, &error, &actual_size, local_commands); if (xhdr == NULL || error != 0) { ! NDMP_LOG(LOG_DEBUG, "Could not read xattr [%s:%s] for restore. ", name, fname); job_stats->js_errors++; return (0); } /* Check extended attribute header */ if (strcmp(xhdr->h_version, XATTR_ARCH_VERS) != 0) { ! NDMP_LOG(LOG_DEBUG, "Unrecognized header format [%s]", xhdr->h_version); return (0); } xbuf = (struct xattr_buf *)(((char *)xhdr) + sizeof (struct xattr_hdr)); --- 1394,1420 ---- char *xattrname; int actual_size; int error; if (!fname) { ! syslog(LOG_DEBUG, "No file name but wanted!"); } error = 0; xhdr = (struct xattr_hdr *)get_read_buffer(size, &error, &actual_size, local_commands); if (xhdr == NULL || error != 0) { ! syslog(LOG_ERR, "Could not read xattr [%s:%s] for restore. ", name, fname); job_stats->js_errors++; return (0); } /* Check extended attribute header */ if (strcmp(xhdr->h_version, XATTR_ARCH_VERS) != 0) { ! syslog(LOG_ERR, "Unrecognized header format [%s]", xhdr->h_version); return (0); } xbuf = (struct xattr_buf *)(((char *)xhdr) + sizeof (struct xattr_hdr));
*** 1430,1440 **** if (*fp == 0) { int fd; fd = attropen(name, xattrname, O_CREAT | O_RDWR, 0755); if (fd == -1) { ! NDMP_LOG(LOG_DEBUG, "Could not open xattr [%s:%s] for restore err=%d.", name, xattrname, errno); job_stats->js_errors++; return (0); } --- 1424,1434 ---- if (*fp == 0) { int fd; fd = attropen(name, xattrname, O_CREAT | O_RDWR, 0755); if (fd == -1) { ! syslog(LOG_ERR, "Could not open xattr [%s:%s] for restore err=%d.", name, xattrname, errno); job_stats->js_errors++; return (0); }
*** 1445,1455 **** /* Get the actual extended attribute file */ tar_hdr = (tlm_tar_hdr_t *)get_read_buffer(sizeof (*tar_hdr), &error, &actual_size, local_commands); if (tar_hdr == NULL || error != 0) { ! NDMP_LOG(LOG_DEBUG, "Could not read xattr data [%s:%s] for restore. ", fname, xattrname); job_stats->js_errors++; return (0); } --- 1439,1449 ---- /* Get the actual extended attribute file */ tar_hdr = (tlm_tar_hdr_t *)get_read_buffer(sizeof (*tar_hdr), &error, &actual_size, local_commands); if (tar_hdr == NULL || error != 0) { ! syslog(LOG_ERR, "Could not read xattr data [%s:%s] for restore. ", fname, xattrname); job_stats->js_errors++; return (0); }
*** 1457,1470 **** acls->acl_attr.st_size = oct_atoi(tar_hdr->th_size); acls->acl_attr.st_uid = oct_atoi(tar_hdr->th_uid); acls->acl_attr.st_gid = oct_atoi(tar_hdr->th_gid); acls->acl_attr.st_mtime = oct_atoi(tar_hdr->th_mtime); - NDMP_LOG(LOG_DEBUG, "xattr_hdr: %s size %d mode %06o uid %d gid %d", - xattrname, acls->acl_attr.st_size, acls->acl_attr.st_mode, - acls->acl_attr.st_uid, acls->acl_attr.st_gid); - size = acls->acl_attr.st_size; while (size > 0 && local_commands->tc_writer == TLM_RESTORE_RUN) { char *rec; int write_size; int sysattr_write = 0; --- 1451,1460 ----
*** 1475,1499 **** if ((actual_size < size) && sysattr_rw(xattrname)) { rec = get_read_one_buf(rec, actual_size, size, &error, local_commands); if (rec == NULL) { ! NDMP_LOG(LOG_DEBUG, "Error %d in file [%s]", error, xattrname); return (size); } actual_size = size; sysattr_write = 1; } if (actual_size <= 0) { ! NDMP_LOG(LOG_DEBUG, "RESTORE WRITER> error %d, actual_size %d", error, actual_size); return (size); } else if (error) { ! NDMP_LOG(LOG_DEBUG, "Error %d in file [%s]", error, local_commands->tc_file_name); break; } else { write_size = min(size, actual_size); if ((write_size = write(*fp, rec, write_size)) < 0) { --- 1465,1489 ---- if ((actual_size < size) && sysattr_rw(xattrname)) { rec = get_read_one_buf(rec, actual_size, size, &error, local_commands); if (rec == NULL) { ! syslog(LOG_ERR, "Error %d in file [%s]", error, xattrname); return (size); } actual_size = size; sysattr_write = 1; } if (actual_size <= 0) { ! syslog(LOG_ERR, "RESTORE WRITER> error %d, actual_size %d", error, actual_size); return (size); } else if (error) { ! syslog(LOG_ERR, "Error %d in file [%s]", error, local_commands->tc_file_name); break; } else { write_size = min(size, actual_size); if ((write_size = write(*fp, rec, write_size)) < 0) {
*** 1532,1542 **** found = FALSE; for (i = 0; *list != NULL; list++, i++) { cp = *list + strspn(*list, "/"); if (match(cp, name)) { found = TRUE; ! NDMP_LOG(LOG_DEBUG, "exact_find> found[%s]", cp); break; } } return (found); --- 1522,1532 ---- found = FALSE; for (i = 0; *list != NULL; list++, i++) { cp = *list + strspn(*list, "/"); if (match(cp, name)) { found = TRUE; ! syslog(LOG_DEBUG, "exact_find> found[%s]", cp); break; } } return (found);
*** 1551,1568 **** char tmp[TLM_MAX_PATH_NAME]; boolean_t rv; if (IS_SET(flags, RSFLG_MATCH_WCARD)) { if (!tlm_cat_path(tmp, parent, "*")) { ! NDMP_LOG(LOG_DEBUG, "is_parent> path too long [%s]", parent); rv = FALSE; } else rv = (match(tmp, child) != 0) ? TRUE : FALSE; } else { if (!tlm_cat_path(tmp, parent, "/")) { ! NDMP_LOG(LOG_DEBUG, "is_parent> path too long [%s]", parent); rv = FALSE; } else rv = (strncmp(tmp, child, strlen(tmp)) == 0) ? TRUE : FALSE; --- 1541,1558 ---- char tmp[TLM_MAX_PATH_NAME]; boolean_t rv; if (IS_SET(flags, RSFLG_MATCH_WCARD)) { if (!tlm_cat_path(tmp, parent, "*")) { ! syslog(LOG_ERR, "is_parent> path too long [%s]", parent); rv = FALSE; } else rv = (match(tmp, child) != 0) ? TRUE : FALSE; } else { if (!tlm_cat_path(tmp, parent, "/")) { ! syslog(LOG_ERR, "is_parent> path too long [%s]", parent); rv = FALSE; } else rv = (strncmp(tmp, child, strlen(tmp)) == 0) ? TRUE : FALSE;
*** 1590,1600 **** int flags, int *mchtype, int *pos) { char *p_sel; ! char *uc_name, *retry, *namep; boolean_t found; int i; name_match_fp_t *cmp_fp; if (name == NULL || sels == NULL || exls == NULL) --- 1580,1590 ---- int flags, int *mchtype, int *pos) { char *p_sel; ! char *uc_name = NULL, *retry, *namep; boolean_t found; int i; name_match_fp_t *cmp_fp; if (name == NULL || sels == NULL || exls == NULL)
*** 1608,1618 **** /* * For empty selection, restore everything */ if (*sels == NULL || **sels == '\0') { ! NDMP_LOG(LOG_DEBUG, "is_file_wanted: Restore all"); return (TRUE); } retry = ndmp_malloc(TLM_MAX_PATH_NAME); if (retry == NULL) --- 1598,1608 ---- /* * For empty selection, restore everything */ if (*sels == NULL || **sels == '\0') { ! syslog(LOG_DEBUG, "is_file_wanted: Restore all"); return (TRUE); } retry = ndmp_malloc(TLM_MAX_PATH_NAME); if (retry == NULL)
*** 1633,1654 **** } (void) strlcpy(uc_name, namep, TLM_MAX_PATH_NAME); (void) strupr(uc_name); namep = uc_name; } - NDMP_LOG(LOG_DEBUG, "is_file_wanted> flg: 0x%x name: [%s]", - flags, name); for (i = 0; *sels != NULL; sels++, i++) { p_sel = *sels + strspn(*sels, "/"); /* * Try exact match. */ if ((*cmp_fp)(p_sel, namep)) { - NDMP_LOG(LOG_DEBUG, "match1> pos: %d [%s][%s]", - i, p_sel, name); found = TRUE; if (mchtype != NULL) *mchtype = PM_EXACT; break; } --- 1623,1640 ----
*** 1656,1666 **** * Try "entry/" and the current selection. The * current selection may be something like "<something>/". */ (void) tlm_cat_path(retry, namep, "/"); if ((*cmp_fp)(p_sel, retry)) { ! NDMP_LOG(LOG_DEBUG, "match2> pos %d [%s][%s]", i, p_sel, name); found = TRUE; if (mchtype != NULL) *mchtype = PM_EXACT; break; --- 1642,1652 ---- * Try "entry/" and the current selection. The * current selection may be something like "<something>/". */ (void) tlm_cat_path(retry, namep, "/"); if ((*cmp_fp)(p_sel, retry)) { ! syslog(LOG_DEBUG, "match2> pos %d [%s][%s]", i, p_sel, name); found = TRUE; if (mchtype != NULL) *mchtype = PM_EXACT; break;
*** 1668,1679 **** /* * If the following check returns true it means that the * 'name' is an entry below the 'p_sel' hierarchy. */ if (is_parent(p_sel, namep, flags)) { - NDMP_LOG(LOG_DEBUG, "parent1> pos %d [%s][%s]", - i, p_sel, name); found = TRUE; if (mchtype != NULL) *mchtype = PM_CHILD; break; } --- 1654,1663 ----
*** 1684,1694 **** * until the final entry matches with 'p_sel'. At that * time the middle directories of the entry have been passed * and they can't be restored. */ if (is_parent(namep, p_sel, flags)) { ! NDMP_LOG(LOG_DEBUG, "parent2> pos %d [%s][%s]", i, p_sel, name); found = TRUE; if (mchtype != NULL) *mchtype = PM_PARENT; break; --- 1668,1678 ---- * until the final entry matches with 'p_sel'. At that * time the middle directories of the entry have been passed * and they can't be restored. */ if (is_parent(namep, p_sel, flags)) { ! syslog(LOG_DEBUG, "parent2> pos %d [%s][%s]", i, p_sel, name); found = TRUE; if (mchtype != NULL) *mchtype = PM_PARENT; break;
*** 1726,1748 **** int err; int toread, actual_size, rec_size; char *rec; if (l <= 0 || d <= 0 || !lcmds || !mem) { ! NDMP_LOG(LOG_DEBUG, "Invalid argument"); return (-1); } toread = len; while (toread > 0) { rec = get_read_buffer(toread, &err, &actual_size, lcmds); if (actual_size <= 0) { ! NDMP_LOG(LOG_DEBUG, "err %d act_size %d detected", err, actual_size); break; } else if (err) { ! NDMP_LOG(LOG_DEBUG, "error %d reading data", err); return (-1); } rec_size = min(actual_size, toread); (void) memcpy(mem, rec, rec_size); mem += rec_size; --- 1710,1732 ---- int err; int toread, actual_size, rec_size; char *rec; if (l <= 0 || d <= 0 || !lcmds || !mem) { ! syslog(LOG_ERR, "Invalid argument"); return (-1); } toread = len; while (toread > 0) { rec = get_read_buffer(toread, &err, &actual_size, lcmds); if (actual_size <= 0) { ! syslog(LOG_ERR, "err %d act_size %d detected", err, actual_size); break; } else if (err) { ! syslog(LOG_ERR, "error %d reading data", err); return (-1); } rec_size = min(actual_size, toread); (void) memcpy(mem, rec, rec_size); mem += rec_size;
*** 1764,1774 **** tlm_cmd_t *local_commands) { char *p_record, *value; int rv; ! NDMP_LOG(LOG_DEBUG, "HUGE Record found: %d", recsize); rv = 0; if (recsize == 0) { /* * The humongus_file_header was written in a --- 1748,1758 ---- tlm_cmd_t *local_commands) { char *p_record, *value; int rv; ! syslog(LOG_WARNING, "HUGE Record found: %d", recsize); rv = 0; if (recsize == 0) { /* * The humongus_file_header was written in a
*** 1776,1796 **** * record was 0 before this fix. For backward compatiblity * read only one RECORDSIZE-size block if the header.size * field is 0. Otherwise the header.size field should show * the length of the data of this header. */ ! NDMP_LOG(LOG_DEBUG, "Old HUGE record found"); recsize = RECORDSIZE; } if (input_mem(lib, drv, local_commands, name, recsize) != recsize) { rv = -1; *size = 0; *name = '\0'; ! NDMP_LOG(LOG_DEBUG, "Error reading a HUGE file name"); } else { ! NDMP_LOG(LOG_DEBUG, "HUGE [%s]", name); p_record = name; value = parse(&p_record, " "); *size = atoll(value); /* --- 1760,1780 ---- * record was 0 before this fix. For backward compatiblity * read only one RECORDSIZE-size block if the header.size * field is 0. Otherwise the header.size field should show * the length of the data of this header. */ ! syslog(LOG_WARNING, "Old HUGE record found"); recsize = RECORDSIZE; } if (input_mem(lib, drv, local_commands, name, recsize) != recsize) { rv = -1; *size = 0; *name = '\0'; ! syslog(LOG_ERR, "Error reading a HUGE file name"); } else { ! syslog(LOG_DEBUG, "HUGE [%s]", name); p_record = name; value = parse(&p_record, " "); *size = atoll(value); /*
*** 1800,1810 **** * without check on the buffer size. */ (void) strlcpy(name, p_record, TLM_MAX_PATH_NAME); } ! NDMP_LOG(LOG_DEBUG, "HUGE Record %lld [%s]", *size, name); return (rv); } /* --- 1784,1794 ---- * without check on the buffer size. */ (void) strlcpy(name, p_record, TLM_MAX_PATH_NAME); } ! syslog(LOG_DEBUG, "HUGE Record %lld [%s]", *size, name); return (rv); } /*
*** 1818,1828 **** long *buf_spot, tlm_cmd_t *local_commands) { int nread; ! NDMP_LOG(LOG_DEBUG, "LONGNAME Record found rs %d bs %d", recsize, *buf_spot); if (*buf_spot < 0) *buf_spot = 0; --- 1802,1812 ---- long *buf_spot, tlm_cmd_t *local_commands) { int nread; ! syslog(LOG_DEBUG, "LONGNAME Record found rs %d bs %d", recsize, *buf_spot); if (*buf_spot < 0) *buf_spot = 0;
*** 1829,1844 **** nread = input_mem(lib, drv, local_commands, name + *buf_spot, recsize); if (nread < 0) { nread = recsize; /* return 0 as size left */ name[*buf_spot] = '\0'; ! NDMP_LOG(LOG_ERR, "Error %d reading a long file name %s.", nread, name); } else { *buf_spot += nread; name[*buf_spot] = '\0'; ! NDMP_LOG(LOG_DEBUG, "LONGNAME [%s]", name); } return (recsize - nread); } --- 1813,1828 ---- nread = input_mem(lib, drv, local_commands, name + *buf_spot, recsize); if (nread < 0) { nread = recsize; /* return 0 as size left */ name[*buf_spot] = '\0'; ! syslog(LOG_ERR, "Error %d reading a long file name %s.", nread, name); } else { *buf_spot += nread; name[*buf_spot] = '\0'; ! syslog(LOG_DEBUG, "LONGNAME [%s]", name); } return (recsize - nread); }
*** 1855,1865 **** /* * Make sure all directories in this path exist, create them if * needed. */ - NDMP_LOG(LOG_DEBUG, "new dir[%s]", dir); erc = 0; p = &dir[1]; do { temp = *p; --- 1839,1848 ----
*** 1867,1877 **** *p = 0; if (stat64(dir, &attr) < 0) { if (mkdir(dir, 0777) != 0 && errno != EEXIST) { erc = errno; job_stats->js_errors++; ! NDMP_LOG(LOG_DEBUG, "Could not create directory %s: %d", dir, errno); break; } } --- 1850,1860 ---- *p = 0; if (stat64(dir, &attr) < 0) { if (mkdir(dir, 0777) != 0 && errno != EEXIST) { erc = errno; job_stats->js_errors++; ! syslog(LOG_ERR, "Could not create directory %s: %d", dir, errno); break; } }
*** 1902,1912 **** if (erc) { /* Nothing to do if the destination already exists */ if (erc == EEXIST) return (0); job_stats->js_errors++; ! NDMP_LOG(LOG_DEBUG, "error %d (errno %d) hardlink [%s] to [%s]", erc, errno, name_new, name_old); return (erc); } return (set_acl(name_new, acls)); } --- 1885,1895 ---- if (erc) { /* Nothing to do if the destination already exists */ if (erc == EEXIST) return (0); job_stats->js_errors++; ! syslog(LOG_ERR, "error %d (errno %d) hardlink [%s] to [%s]", erc, errno, name_new, name_old); return (erc); } return (set_acl(name_new, acls)); }
*** 1927,1939 **** return (erc); st = &acls->acl_attr; if (symlink(target, dst) != 0) { erc = errno; job_stats->js_errors++; ! NDMP_LOG(LOG_DEBUG, "error %d softlink [%s] to [%s]", errno, dst, target); } else { st->st_mode |= S_IFLNK; erc = set_acl(dst, acls); } --- 1910,1929 ---- return (erc); st = &acls->acl_attr; if (symlink(target, dst) != 0) { erc = errno; + if (errno == EEXIST) { + erc = 0; + syslog(LOG_DEBUG, + "softlink [%s] to [%s] already existed", + dst, target); + } else { job_stats->js_errors++; ! syslog(LOG_ERR, "error %d softlink [%s] to [%s]", errno, dst, target); + } } else { st->st_mode |= S_IFLNK; erc = set_acl(dst, acls); }
*** 1962,1972 **** case LF_FIFO: mode = S_IFIFO; dev = 0; break; default: ! NDMP_LOG(LOG_ERR, "unsupported flag %d", flag); return (-1); } /* Remove the old entry first */ if (rmdir(name) < 0) { --- 1952,1962 ---- case LF_FIFO: mode = S_IFIFO; dev = 0; break; default: ! syslog(LOG_ERR, "unsupported flag %d", flag); return (-1); } /* Remove the old entry first */ if (rmdir(name) < 0) {
*** 1973,1983 **** if (errno == ENOTDIR) (void) unlink(name); } if (mknod(name, 0777 | mode, dev) != 0) { job_stats->js_errors++; ! NDMP_LOG(LOG_DEBUG, "error %d mknod [%s] major" " %d minor %d", errno, name, major, minor); return (errno); } return (set_acl(name, acls)); } --- 1963,1973 ---- if (errno == ENOTDIR) (void) unlink(name); } if (mknod(name, 0777 | mode, dev) != 0) { job_stats->js_errors++; ! syslog(LOG_ERR, "error %d mknod [%s] major" " %d minor %d", errno, name, major, minor); return (errno); } return (set_acl(name, acls)); }
*** 2008,2018 **** bp = ((char *)&acls->acl_info) + *acl_spot; nread = input_mem(lib, drv, local_commands, (void *)bp, file_size); if (nread < 0) { *acl_spot = 0; (void) memset(acls, 0, sizeof (tlm_acls_t)); ! NDMP_LOG(LOG_DEBUG, "Error reading ACL data"); return (0); } *acl_spot += nread; acls->acl_non_trivial = TRUE; --- 1998,2008 ---- bp = ((char *)&acls->acl_info) + *acl_spot; nread = input_mem(lib, drv, local_commands, (void *)bp, file_size); if (nread < 0) { *acl_spot = 0; (void) memset(acls, 0, sizeof (tlm_acls_t)); ! syslog(LOG_ERR, "Error reading ACL data"); return (0); } *acl_spot += nread; acls->acl_non_trivial = TRUE;
*** 2023,2033 **** ndmp_set_eprivs_least(void) { priv_set_t *priv_set; if ((priv_set = priv_allocset()) == NULL) { ! NDMP_LOG(LOG_ERR, "Out of memory."); return (-1); } priv_basicset(priv_set); --- 2013,2023 ---- ndmp_set_eprivs_least(void) { priv_set_t *priv_set; if ((priv_set = priv_allocset()) == NULL) { ! syslog(LOG_ERR, "Out of memory."); return (-1); } priv_basicset(priv_set);
*** 2045,2055 **** (void) priv_addset(priv_set, PRIV_SYS_DEVICES); (void) priv_addset(priv_set, PRIV_SYS_MOUNT); (void) priv_addset(priv_set, PRIV_SYS_CONFIG); if (setppriv(PRIV_SET, PRIV_EFFECTIVE, priv_set) == -1) { ! NDMP_LOG(LOG_ERR, "Additional privileges required."); priv_freeset(priv_set); return (-1); } priv_freeset(priv_set); return (0); --- 2035,2045 ---- (void) priv_addset(priv_set, PRIV_SYS_DEVICES); (void) priv_addset(priv_set, PRIV_SYS_MOUNT); (void) priv_addset(priv_set, PRIV_SYS_CONFIG); if (setppriv(PRIV_SET, PRIV_EFFECTIVE, priv_set) == -1) { ! syslog(LOG_ERR, "Additional privileges required."); priv_freeset(priv_set); return (-1); } priv_freeset(priv_set); return (0);
*** 2059,2076 **** ndmp_set_eprivs_all(void) { priv_set_t *priv_set; if ((priv_set = priv_allocset()) == NULL) { ! NDMP_LOG(LOG_ERR, "Out of memory."); return (-1); } priv_fillset(priv_set); if (setppriv(PRIV_SET, PRIV_EFFECTIVE, priv_set) != 0) { ! NDMP_LOG(LOG_ERR, "Additional privileges required."); return (-1); } priv_freeset(priv_set); return (0); } --- 2049,2066 ---- ndmp_set_eprivs_all(void) { priv_set_t *priv_set; if ((priv_set = priv_allocset()) == NULL) { ! syslog(LOG_ERR, "Out of memory."); return (-1); } priv_fillset(priv_set); if (setppriv(PRIV_SET, PRIV_EFFECTIVE, priv_set) != 0) { ! syslog(LOG_ERR, "Additional privileges required."); return (-1); } priv_freeset(priv_set); return (0); }
*** 2093,2124 **** if (!name || !acls) return (0); st = &acls->acl_attr; - NDMP_LOG(LOG_DEBUG, "set_attr: %s uid %d gid %d uname %s gname %s " - "mode %o", name, st->st_uid, st->st_gid, acls->uname, acls->gname, - st->st_mode); uid = st->st_uid; if ((pwd = getpwnam(acls->uname)) != NULL) { - NDMP_LOG(LOG_DEBUG, "set_attr: new uid %d old %d", - pwd->pw_uid, uid); uid = pwd->pw_uid; } gid = st->st_gid; if ((grp = getgrnam(acls->gname)) != NULL) { - NDMP_LOG(LOG_DEBUG, "set_attr: new gid %d old %d", - grp->gr_gid, gid); gid = grp->gr_gid; } erc = lchown(name, uid, gid); if (erc != 0) { erc = errno; ! NDMP_LOG(LOG_ERR, "Could not set uid or/and gid for file %s.", name); } if ((st->st_mode & (S_ISUID | S_ISGID)) != 0) { /* --- 2083,2107 ---- if (!name || !acls) return (0); st = &acls->acl_attr; uid = st->st_uid; if ((pwd = getpwnam(acls->uname)) != NULL) { uid = pwd->pw_uid; } gid = st->st_gid; if ((grp = getgrnam(acls->gname)) != NULL) { gid = grp->gr_gid; } erc = lchown(name, uid, gid); if (erc != 0) { erc = errno; ! syslog(LOG_ERR, "Could not set uid or/and gid for file %s.", name); } if ((st->st_mode & (S_ISUID | S_ISGID)) != 0) { /*
*** 2125,2135 **** * Change effective privileges to 'all' which is required to * change setuid bit for 'root' owned files. If fails, just * send error to log file and proceed. */ if (ndmp_set_eprivs_all()) { ! NDMP_LOG(LOG_ERR, "Could not set effective privileges to 'all'."); } else { priv_all = TRUE; } } --- 2108,2118 ---- * Change effective privileges to 'all' which is required to * change setuid bit for 'root' owned files. If fails, just * send error to log file and proceed. */ if (ndmp_set_eprivs_all()) { ! syslog(LOG_ERR, "Could not set effective privileges to 'all'."); } else { priv_all = TRUE; } }
*** 2136,2146 **** if (!S_ISLNK(st->st_mode)) { erc = chmod(name, st->st_mode); if (erc != 0) { erc = errno; ! NDMP_LOG(LOG_ERR, "Could not set correct file" " permission for file %s: %d", name, errno); } tbuf.modtime = st->st_mtime; tbuf.actime = st->st_atime; --- 2119,2129 ---- if (!S_ISLNK(st->st_mode)) { erc = chmod(name, st->st_mode); if (erc != 0) { erc = errno; ! syslog(LOG_ERR, "Could not set correct file" " permission for file %s: %d", name, errno); } tbuf.modtime = st->st_mtime; tbuf.actime = st->st_atime;
*** 2152,2162 **** * Give up the 'all' privileges for effective sets and go back * to least required privileges. If fails, just send error to * log file and proceed. */ if (ndmp_set_eprivs_least()) ! NDMP_LOG(LOG_ERR, "Could not set least required privileges."); } return (erc); } --- 2135,2145 ---- * Give up the 'all' privileges for effective sets and go back * to least required privileges. If fails, just send error to * log file and proceed. */ if (ndmp_set_eprivs_least()) ! syslog(LOG_ERR, "Could not set least required privileges."); } return (erc); }
*** 2168,2179 **** set_acl(char *name, tlm_acls_t *acls) { int erc; acl_t *aclp = NULL; - if (name) - NDMP_LOG(LOG_DEBUG, "set_acl: %s", name); if (acls == NULL) return (0); /* Need a place to save real modification time */ --- 2151,2160 ----
*** 2181,2204 **** if (ERROR_IS_FATAL(erc)) return (erc); if (!acls->acl_non_trivial) { (void) memset(acls, 0, sizeof (tlm_acls_t)); - NDMP_LOG(LOG_DEBUG, "set_acl: skipping trivial"); return (erc); } erc = acl_fromtext(acls->acl_info.attr_info, &aclp); if (erc != 0) { ! NDMP_LOG(LOG_DEBUG, "TAPE RESTORE> acl_fromtext errno %d", erc); } if (aclp) { erc = acl_set(name, aclp); if (erc < 0) { erc = errno; ! NDMP_LOG(LOG_DEBUG, "TAPE RESTORE> acl_set errno %d", errno); } acl_free(aclp); } (void) memset(acls, 0, sizeof (tlm_acls_t)); --- 2162,2184 ---- if (ERROR_IS_FATAL(erc)) return (erc); if (!acls->acl_non_trivial) { (void) memset(acls, 0, sizeof (tlm_acls_t)); return (erc); } erc = acl_fromtext(acls->acl_info.attr_info, &aclp); if (erc != 0) { ! syslog(LOG_ERR, "TAPE RESTORE> acl_fromtext errno %d", erc); } if (aclp) { erc = acl_set(name, aclp); if (erc < 0) { erc = errno; ! syslog(LOG_ERR, "TAPE RESTORE> acl_set errno %d", errno); } acl_free(aclp); } (void) memset(acls, 0, sizeof (tlm_acls_t));
*** 2256,2272 **** { char *rv; rv = NULL; if (!buf) { ! NDMP_LOG(LOG_DEBUG, "buf is NULL"); } else if (!path) { ! NDMP_LOG(LOG_DEBUG, "path is NULL"); } else if (!rnp->rn_nlp) { ! NDMP_LOG(LOG_DEBUG, "rn_nlp is NULL [%s]", path); } else if (!tlm_cat_path(buf, rnp->rn_nlp, path)) { ! NDMP_LOG(LOG_DEBUG, "Path too long [%s][%s]", rnp->rn_nlp, path); } else rv = buf; return (rv); --- 2236,2252 ---- { char *rv; rv = NULL; if (!buf) { ! syslog(LOG_DEBUG, "buf is NULL"); } else if (!path) { ! syslog(LOG_DEBUG, "path is NULL"); } else if (!rnp->rn_nlp) { ! syslog(LOG_DEBUG, "rn_nlp is NULL [%s]", path); } else if (!tlm_cat_path(buf, rnp->rn_nlp, path)) { ! syslog(LOG_DEBUG, "Path too long [%s][%s]", rnp->rn_nlp, path); } else rv = buf; return (rv);
*** 2303,2314 **** slashp = bk_path + strlen(bk_path) - 1; if (*slashp == '/') (void) snprintf(pbuf, TLM_MAX_PATH_NAME, "%s%s", bk_path, p); else (void) snprintf(pbuf, TLM_MAX_PATH_NAME, "%s/%s", bk_path, p); - - NDMP_LOG(LOG_DEBUG, "old path [%s] new path [%s]", path, pbuf); } /* * Iterate over ZFS metadata stored in the backup stream and use the callback --- 2283,2292 ----
*** 2406,2425 **** /* LINTED improper alignment */ mhpx = (ndmp_metadata_header_ext_t *)mhbuf; if (mhpx->nh_major > META_HDR_MAJOR_VERSION) { /* Major header mismatch */ ! NDMP_LOG(LOG_ERR, "metadata header mismatch", "M%d != M%d", mhpx->nh_major, META_HDR_MAJOR_VERSION); free(mhbuf); return (-1); } if (mhpx->nh_major == META_HDR_MAJOR_VERSION && mhpx->nh_minor > META_HDR_MINOR_VERSION) { /* Minor header mismatch */ ! NDMP_LOG(LOG_ERR, "Warning:" "metadata header mismatch m%d != m%d", mhpx->nh_minor, META_HDR_MINOR_VERSION); continue; } --- 2384,2403 ---- /* LINTED improper alignment */ mhpx = (ndmp_metadata_header_ext_t *)mhbuf; if (mhpx->nh_major > META_HDR_MAJOR_VERSION) { /* Major header mismatch */ ! syslog(LOG_ERR, "metadata header mismatch", "M%d != M%d", mhpx->nh_major, META_HDR_MAJOR_VERSION); free(mhbuf); return (-1); } if (mhpx->nh_major == META_HDR_MAJOR_VERSION && mhpx->nh_minor > META_HDR_MINOR_VERSION) { /* Minor header mismatch */ ! syslog(LOG_ERR, "Warning:" "metadata header mismatch m%d != m%d", mhpx->nh_minor, META_HDR_MINOR_VERSION); continue; }