cli_ftw: when readdir fails, call the error callback (bb #1735).

Also report all failures to clamdscan.
0.96
Török Edvin 16 years ago
parent 0f7ba61742
commit 7e98915f9b
  1. 3
      clamd/scanner.c
  2. 15
      libclamav/others_common.c

@ -106,8 +106,7 @@ int scan_callback(struct stat *sb, char *filename, const char *msg, enum cli_ftw
scandata->errors++;
return CL_EMEM;
case error_stat:
if (msg == scandata->toplevel_path)
conn_reply_errno(scandata->conn, msg, "lstat() failed:");
conn_reply_errno(scandata->conn, msg, "lstat() failed:");
logg("^lstat() failed on: %s\n", msg);
scandata->errors++;
return CL_SUCCESS;

@ -569,10 +569,11 @@ static int cli_ftw_dir(const char *dirname, int flags, int maxdepth, cli_ftw_cb
if((dd = opendir(dirname)) != NULL) {
struct dirent *dent;
int err;
errno = 0;
ret = CL_SUCCESS;
#ifdef HAVE_READDIR_R_3
while(!readdir_r(dd, &result.d, &dent) && dent) {
while(!(err = readdir_r(dd, &result.d, &dent)) && dent) {
#elif defined(HAVE_READDIR_R_2)
while((dent = (struct dirent *) readdir_r(dd, &result.d))) {
#else
@ -680,7 +681,19 @@ static int cli_ftw_dir(const char *dirname, int flags, int maxdepth, cli_ftw_cb
}
errno = 0;
}
#ifndef HAVE_READDIR_R_3
err = errno;
#endif
closedir(dd);
if (err) {
char errs[128];
cli_errmsg("Unable to readdir() directory %s: %s\n", dirname,
cli_strerror(errno, errs, sizeof(errs)));
/* report error to callback using error_stat */
ret = callback(NULL, NULL, dirname, error_stat, data);
if (ret != CL_SUCCESS)
return ret;
}
if (entries) {
cli_qsort(entries, entries_cnt, sizeof(*entries), ftw_compare);

Loading…
Cancel
Save