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-2911 NDMP logging should use syslog and is too chatty

*** 34,46 **** --- 34,48 ---- * 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. */ /* This file contains all the door server code */ + #include <syslog.h> #include <door.h> #include <alloca.h> #include <errno.h> #include <note.h> #include <libintl.h>
*** 66,92 **** int fd; (void) mutex_lock(&ndmp_doorsrv_mutex); if (ndmp_door_fildes != -1) { ! NDMP_LOG(LOG_DEBUG, "ndmp_door_init: ndmpd service is already running."); (void) mutex_unlock(&ndmp_doorsrv_mutex); return (0); } if ((ndmp_door_fildes = door_create(ndmp_door_server, NULL, DOOR_UNREF)) < 0) { ! NDMP_LOG(LOG_DEBUG, "ndmp_door_init: Could not create door."); (void) mutex_unlock(&ndmp_doorsrv_mutex); return (-1); } (void) unlink(NDMP_DOOR_SVC); if ((fd = creat(NDMP_DOOR_SVC, 0444)) < 0) { ! NDMP_LOG(LOG_DEBUG, "ndmp_door_init: Can't create %s: %m.", NDMP_DOOR_SVC); (void) door_revoke(ndmp_door_fildes); ndmp_door_fildes = -1; (void) mutex_unlock(&ndmp_doorsrv_mutex); return (-1); --- 68,94 ---- int fd; (void) mutex_lock(&ndmp_doorsrv_mutex); if (ndmp_door_fildes != -1) { ! syslog(LOG_ERR, "ndmp_door_init: ndmpd service is already running."); (void) mutex_unlock(&ndmp_doorsrv_mutex); return (0); } if ((ndmp_door_fildes = door_create(ndmp_door_server, NULL, DOOR_UNREF)) < 0) { ! syslog(LOG_ERR, "ndmp_door_init: Could not create door."); (void) mutex_unlock(&ndmp_doorsrv_mutex); return (-1); } (void) unlink(NDMP_DOOR_SVC); if ((fd = creat(NDMP_DOOR_SVC, 0444)) < 0) { ! syslog(LOG_ERR, "ndmp_door_init: Can't create %s: %m.", NDMP_DOOR_SVC); (void) door_revoke(ndmp_door_fildes); ndmp_door_fildes = -1; (void) mutex_unlock(&ndmp_doorsrv_mutex); return (-1);
*** 94,111 **** (void) close(fd); (void) fdetach(NDMP_DOOR_SVC); if (fattach(ndmp_door_fildes, NDMP_DOOR_SVC) < 0) { ! NDMP_LOG(LOG_DEBUG, "ndmp_door_init: fattach failed %m"); (void) door_revoke(ndmp_door_fildes); ndmp_door_fildes = -1; (void) mutex_unlock(&ndmp_doorsrv_mutex); return (-1); } ! NDMP_LOG(LOG_DEBUG, "ndmp_door_init: Door server successfully started"); (void) mutex_unlock(&ndmp_doorsrv_mutex); return (0); } void --- 96,113 ---- (void) close(fd); (void) fdetach(NDMP_DOOR_SVC); if (fattach(ndmp_door_fildes, NDMP_DOOR_SVC) < 0) { ! syslog(LOG_ERR, "ndmp_door_init: fattach failed %m"); (void) door_revoke(ndmp_door_fildes); ndmp_door_fildes = -1; (void) mutex_unlock(&ndmp_doorsrv_mutex); return (-1); } ! syslog(LOG_DEBUG, "ndmp_door_init: Door server successfully started"); (void) mutex_unlock(&ndmp_doorsrv_mutex); return (0); } void
*** 135,145 **** (void) close(door); return (0); } if (info.di_target > 0) { ! NDMP_LOG(LOG_ERR, "Service already running: pid %ld", info.di_target); (void) close(door); return (1); } --- 137,147 ---- (void) close(door); return (0); } if (info.di_target > 0) { ! syslog(LOG_ERR, "Service already running: pid %ld", info.di_target); (void) close(door); return (1); }
*** 158,179 **** char *buf; int buflen; unsigned int used; ndmp_door_ctx_t *dec_ctx; ndmp_door_ctx_t *enc_ctx; ! unsigned int dec_status; ! unsigned int enc_status; dec_ctx = ndmp_door_decode_start(ptr, size); if (dec_ctx == 0) return; req_type = ndmp_door_get_uint32(dec_ctx); buflen = NDMP_DOOR_SIZE; if ((buf = alloca(buflen)) == NULL) { ! NDMP_LOG(LOG_DEBUG, "Out of memory."); (void) ndmp_door_decode_finish(dec_ctx); return; } enc_ctx = ndmp_door_encode_start(buf, buflen); --- 160,181 ---- char *buf; int buflen; unsigned int used; ndmp_door_ctx_t *dec_ctx; ndmp_door_ctx_t *enc_ctx; ! unsigned int dec_status = EINVAL; ! unsigned int enc_status = EINVAL; dec_ctx = ndmp_door_decode_start(ptr, size); if (dec_ctx == 0) return; req_type = ndmp_door_get_uint32(dec_ctx); buflen = NDMP_DOOR_SIZE; if ((buf = alloca(buflen)) == NULL) { ! syslog(LOG_ERR, "Out of memory."); (void) ndmp_door_decode_finish(dec_ctx); return; } enc_ctx = ndmp_door_encode_start(buf, buflen);
*** 181,191 **** (void) ndmp_door_decode_finish(dec_ctx); return; } if (req_type != NDMP_GET_STAT) ! NDMP_LOG(LOG_DEBUG, "ndmp_door_server: req_type=%d", req_type); switch (req_type) { case NDMP_GET_DOOR_STATUS: { ndmp_door_put_int32(enc_ctx, NDMP_DOOR_SRV_SUCCESS); break; --- 183,193 ---- (void) ndmp_door_decode_finish(dec_ctx); return; } if (req_type != NDMP_GET_STAT) ! syslog(LOG_DEBUG, "ndmp_door_server: req_type=%d", req_type); switch (req_type) { case NDMP_GET_DOOR_STATUS: { ndmp_door_put_int32(enc_ctx, NDMP_DOOR_SRV_SUCCESS); break;
*** 227,237 **** ndmp_door_put_uint64(enc_ctx, ndstat.ns_rtape); ndmp_door_put_uint64(enc_ctx, ndstat.ns_wtape); break; default: ! NDMP_LOG(LOG_DEBUG, "ndmp_door_server: Invalid request type 0x%x", req_type); goto decode_error; } if ((dec_status = ndmp_door_decode_finish(dec_ctx)) != 0) --- 229,239 ---- ndmp_door_put_uint64(enc_ctx, ndstat.ns_rtape); ndmp_door_put_uint64(enc_ctx, ndstat.ns_wtape); break; default: ! syslog(LOG_ERR, "ndmp_door_server: Invalid request type 0x%x", req_type); goto decode_error; } if ((dec_status = ndmp_door_decode_finish(dec_ctx)) != 0)