clamav-0.88.1-native.patch
上传用户:lswyart
上传日期:2008-06-12
资源大小:3441k
文件大小:465k
源码类别:

杀毒

开发平台:

Visual C++

  1. diff -auprbN clamav-0.88.1/clamd/clamd.c clamav-0.88.1-native/clamd/clamd.c --- clamav-0.88.1/clamd/clamd.c 2006-01-10 04:52:15.000000000 +1100 +++ clamav-0.88.1-native/clamd/clamd.c 2006-04-06 17:10:41.000000000 +1000 @@ -282,6 +282,8 @@ void clamd(struct optstruct *opt)   exit(1);      }   +    root->callback = NULL;
  2. +
  3.      /* fork into background */      if(!cfgopt(copt, "Foreground"))   daemonize(); diff -auprbN clamav-0.88.1/clamd/others.c clamav-0.88.1-native/clamd/others.c --- clamav-0.88.1/clamd/others.c 2005-10-31 07:22:01.000000000 +1100 +++ clamav-0.88.1-native/clamd/others.c 2006-04-06 17:10:41.000000000 +1000 @@ -322,3 +322,25 @@ int readsock(int sockfd, char *buf, size      return n;  }  #endif +
  4. +/* Moved away from shared/output.c since it uses send and needs to be linked always on winsock lib on win32,
  5. +   anyway it's only used by clamd */
  6. +int mdprintf(int desc, const char *str, ...)
  7. +{
  8. + va_list args;
  9. + char buff[512];
  10. + int bytes;
  11. +
  12. +    va_start(args, str);
  13. +    bytes = vsnprintf(buff, sizeof(buff), str, args);
  14. +    va_end(args);
  15. +
  16. +    if(bytes == -1)
  17. + return bytes;
  18. +
  19. +    if(bytes >= sizeof(buff))
  20. + bytes = sizeof(buff) - 1;
  21. +
  22. +    return send(desc, buff, bytes, 0);
  23. +}
  24. +
  25. diff -auprbN clamav-0.88.1/clamd/others.h clamav-0.88.1-native/clamd/others.h --- clamav-0.88.1/clamd/others.h 2005-12-23 12:25:22.000000000 +1100 +++ clamav-0.88.1-native/clamd/others.h 2006-04-06 17:10:41.000000000 +1000 @@ -30,6 +30,7 @@ int poll_fd(int fd, int timeout_sec);  int is_fd_connected(int fd);  void virusaction(const char *filename, const char *virname, const struct cfgstruct *copt);  int writen(int fd, void *buff, unsigned int count); +int mdprintf(int desc, const char *str, ...);
  26.    #if defined(HAVE_RECVMSG) && (defined(HAVE_ACCRIGHTS_IN_MSGHDR) || defined(HAVE_CONTROL_IN_MSGHDR)) && !defined(C_CYGWIN) && !defined(C_OS2) && !defined(INCOMPLETE_CMSG)  int readsock(int sockfd, char *buf, size_t size); diff -auprbN clamav-0.88.1/clamd/server-th.c clamav-0.88.1-native/clamd/server-th.c --- clamav-0.88.1/clamd/server-th.c 2006-03-27 07:32:57.000000000 +1100 +++ clamav-0.88.1-native/clamd/server-th.c 2006-04-06 17:10:41.000000000 +1000 @@ -219,6 +219,7 @@ static struct cl_node *reload_db(struct       }      logg("Database correctly reloaded (%d viruses)n", virnum);   +    root->callback = NULL;
  27.      return root;  }   diff -auprbN clamav-0.88.1/clamdscan/client.c clamav-0.88.1-native/clamdscan/client.c --- clamav-0.88.1/clamdscan/client.c 2006-03-26 07:36:09.000000000 +1100 +++ clamav-0.88.1-native/clamdscan/client.c 2006-04-06 17:10:41.000000000 +1000 @@ -571,7 +571,7 @@ void move_infected(const char *filename,      }        if(rename(filename, movefilename) == -1) { - if(filecopy(filename, movefilename) == -1) { + if(cli_filecopy(filename, movefilename) == -1) {
  28.       mprintf("@cannot move '%s' to '%s': %sn", filename, movefilename, strerror(errno));       notmoved++;       free(movefilename); diff -auprbN clamav-0.88.1/clamscan/clamscan.c clamav-0.88.1-native/clamscan/clamscan.c --- clamav-0.88.1/clamscan/clamscan.c 2006-01-10 04:46:05.000000000 +1100 +++ clamav-0.88.1-native/clamscan/clamscan.c 2006-04-06 17:10:41.000000000 +1000 @@ -222,6 +222,7 @@ void help(void)      mprintf("    --no-summary                         Disable summary at end of scanningn");      mprintf("    --infected            -i             Only print infected filesn");      mprintf("    --bell                               Sound bell on virus detectionn"); +    mprintf("    --show-progress                      Print progress indicator for each filen");
  29.        mprintf("n");      mprintf("    --tempdir=DIRECTORY                  Create temporary files in DIRECTORYn"); @@ -276,3 +277,25 @@ void help(void)        exit(0);  } +
  30. +#ifdef _WIN32
  31. +/* Display summary on Ctrl+C, --no-summary is not honored here :( */
  32. +void console_ctrl_handler(DWORD ctrl_type)
  33. +{
  34. +    double mb;
  35. +    mprintf("nScanning aborted...n");
  36. +    mprintf("n----------- SCAN SUMMARY -----------n");
  37. +    mprintf("Known viruses: %dn", claminfo.sigs);
  38. +    mprintf("Engine version: %sn", cl_retver());
  39. +    mprintf("Scanned directories: %dn", claminfo.dirs);
  40. +    mprintf("Scanned files: %dn", claminfo.files);
  41. +    mprintf("Infected files: %dn", claminfo.ifiles);
  42. +    if(claminfo.notremoved)
  43. +        mprintf("Not removed: %dn", claminfo.notremoved);
  44. +    if(claminfo.notmoved)
  45. +        mprintf("Not moved: %dn", claminfo.notmoved);
  46. +    mb = claminfo.blocks * (CL_COUNT_PRECISION / 1024) / 1024.0;
  47. +    mprintf("Data scanned: %2.2lf MBn", mb);
  48. +    exit(1);
  49. +}
  50. +#endif
  51. diff -auprbN clamav-0.88.1/clamscan/manager.c clamav-0.88.1-native/clamscan/manager.c --- clamav-0.88.1/clamscan/manager.c 2006-01-10 04:46:23.000000000 +1100 +++ clamav-0.88.1-native/clamscan/manager.c 2006-04-06 17:10:41.000000000 +1000 @@ -29,9 +29,14 @@  #include <ctype.h>  #include <sys/stat.h>  #include <sys/types.h> +#ifdef HAVE_SYS_WAIT_H
  52.  #include <sys/wait.h> +#endif
  53.  #include <utime.h> +#include <time.h>
  54. +#ifdef HAVE_USER_GROUP_DB
  55.  #include <grp.h> +#endif
  56.  #include <fcntl.h>  #include <unistd.h>  #include <sys/types.h> @@ -56,6 +61,45 @@  dev_t procdev;  #endif   +#ifdef _WIN32
  57. +#define WIFSIGNALED(x) (x)
  58. +#define WIFEXITED(x) (1)
  59. +#define WTERMSIG(x) (x)
  60. +#endif
  61. +
  62. +#ifndef min
  63. +#define min(a,b) ((a < b) ? a : b)
  64. +#endif
  65. +
  66. +/* Callback */
  67. +typedef struct _cb_data_t
  68. +{
  69. +    const char *filename;
  70. +    size_t size, count;
  71. +    int fd;
  72. +    int condition;
  73. +} cb_data_t;
  74. +
  75. +cb_data_t cbdata;
  76. +
  77. +static const char *rotation = "|/-\";
  78. +
  79. +/* Callback function for scanning */
  80. +int scancallback(int desc, int bytes)
  81. +{
  82. +    int percent;
  83. +
  84. +    if (desc == cbdata.fd)
  85. +    {
  86. +        cbdata.count += bytes;
  87. +        percent = min(100, (int) (((double) cbdata.count) * 100.0f / ((double) cbdata.size)));
  88. +        mprintf("%s: [%3i%%]r", cbdata.filename, percent);
  89. +    }
  90. +    else /* archives or stdin */
  91. +        mprintf("%s: [%c]r", cbdata.filename, rotation[time(NULL) % sizeof(rotation)]);
  92. +
  93. +    return cbdata.condition;
  94. +}
  95.    int scanmanager(const struct optstruct *opt)  { @@ -69,7 +113,7 @@ int scanmanager(const struct optstruct *      /* njh@bandsman.co.uk: BeOS */ -#if !defined(C_CYGWIN) && !defined(C_OS2) && !defined(C_BEOS) +#if !defined(C_CYGWIN) && !defined(C_OS2) && !defined(C_BEOS) && !defined(_WIN32)
  96.      if(!geteuid()) {   if((user = getpwnam(UNPUSER)) == NULL) {       mprintf("@Can't get information about user "UNPUSER"n"); @@ -127,6 +171,14 @@ int scanmanager(const struct optstruct *   return 50;      }   +    /* setup callback */
  97. +    if(optl(opt, "show-progress")) {
  98. +        trie->callback = scancallback;
  99. +        memset(&cbdata, 0, sizeof(cbdata));
  100. +        cbdata.condition = 1;
  101. +    } else
  102. +        trie->callback = NULL;
  103. +
  104.      /* set (default) limits */        limits = (struct cl_limits *) calloc(1, sizeof(struct cl_limits)); @@ -349,7 +401,9 @@ int scanfile(const char *filename, struc   return 0;      }   +#ifndef _WIN32
  105.      if(geteuid()) +#endif
  106.   if(checkaccess(filename, NULL, R_OK) != 1) {       if(!printinfected)   mprintf("%s: Access deniedn", filename); @@ -405,6 +459,7 @@ int scanfile(const char *filename, struc    && (optl(opt, "tgz") || optl(opt, "deb"))) ) {     /* check permissions */ +#ifndef _WIN32
  107.   switch(checkaccess(filename, UNPUSER, R_OK)) {       case -1:   mprintf("@Can't get information about user "UNPUSER"n"); @@ -431,6 +486,15 @@ int scanfile(const char *filename, struc       case 1:   return(scancompressed(filename, root, user, opt, limits, options));   } +#else
  108. + if(limits && limits->maxfilesize)
  109. + if(fileinfo(filename, 1) / 1024 > limits->maxfilesize) {
  110. + if(!printinfected)
  111. + mprintf("%s: Archive too big.n", filename);
  112. + return 0;
  113. + }
  114. + return(scancompressed(filename, root, user, opt, limits, options));
  115. +#endif /* _WIN32 */
  116.      }        if((ret = checkfile(filename, root, limits, options, printclean)) == CL_VIRUS) { @@ -465,15 +529,7 @@ int scancompressed(const char *filename,      }        /* check write access */ - -    tmpdir = getenv("TMPDIR"); - -    if(tmpdir == NULL) -#ifdef P_tmpdir - tmpdir = P_tmpdir; -#else - tmpdir = "/tmp"; -#endif +    tmpdir = cli_gettempdir();
  117.        if(checkaccess(tmpdir, UNPUSER, W_OK) != 1) {   mprintf("@Can't write to the temporary directoryn"); @@ -488,7 +544,7 @@ int scancompressed(const char *filename,   exit(63); /* critical */      }   -#ifndef C_OS2 +#if !defined(C_OS2) && !defined(_WIN32)
  118.      if(user)   chown(gendir, user->pw_uid, user->pw_gid);  #endif @@ -670,16 +726,7 @@ int scandenied(const char *filename, str      }        /* check write access */ - -    tmpdir = getenv("TMPDIR"); - -    if(tmpdir == NULL) -#ifdef P_tmpdir - tmpdir = P_tmpdir; -#else - tmpdir = "/tmp"; -#endif - +    tmpdir = cli_gettempdir();
  119.        if(checkaccess(tmpdir, UNPUSER, W_OK) != 1) {   mprintf("@Can't write to the temporary directory %sn", tmpdir); @@ -702,7 +749,7 @@ int scandenied(const char *filename, str        sprintf(tmpfile, "%s/%s", gendir, pt);   -    if(filecopy(filename, tmpfile) == -1) { +    if(cli_filecopy(filename, tmpfile) == -1) {
  120.   mprintf("!I/O errorn");   perror("copyfile()");   exit(58); @@ -710,7 +757,7 @@ int scandenied(const char *filename, str        fixperms(gendir);   -#ifndef C_OS2 +#if !defined(C_OS2) && !defined(_WIN32)
  121.      if(user) {   chown(gendir, user->pw_uid, user->pw_gid);   chown(tmpfile, user->pw_uid, user->pw_gid); @@ -756,11 +803,17 @@ int checkfile(const char *filename, cons        mprintf("*Scanning %sn", filename);   -    if((fd = open(filename, O_RDONLY)) == -1) { +    if((fd = open(filename, O_RDONLY|O_BINARY)) == -1) {
  122.   mprintf("@Can't open file %sn", filename);   return 54;      }   +    cbdata.count = 0;
  123. +    cbdata.fd = fd;
  124. +    cbdata.filename = filename;
  125. +    cbdata.size = lseek(fd, 0, SEEK_END);
  126. +    lseek(fd, 0, SEEK_SET);
  127. +
  128.      if((ret = cl_scandesc(fd, &virname, &claminfo.blocks, root, limits, options)) == CL_VIRUS) {   mprintf("%s: %s FOUNDn", filename, virname);   logg("%s: %s FOUNDn", filename, virname); @@ -771,7 +824,7 @@ int checkfile(const char *filename, cons        } else if(ret == CL_CLEAN) {   if(!printinfected && printclean) -     mprintf("%s: OKn", filename); +        mprintf("%s: OK    n", filename);
  129.      } else   if(!printinfected)       mprintf("%s: %sn", filename, cl_strerror(ret)); @@ -787,16 +840,13 @@ int checkstdin(const struct cl_node *roo   char *file, buff[FILEBUFF];   FILE *fs;   +    cbdata.count = 0;
  130. +    cbdata.fd = fileno(stdin);
  131. +    cbdata.filename = "stdin";
  132. +    cbdata.size = -1;
  133.        /* check write access */ -    tmpdir = getenv("TMPDIR"); - -    if(tmpdir == NULL) -#ifdef P_tmpdir - tmpdir = P_tmpdir; -#else - tmpdir = "/tmp"; -#endif +    tmpdir = cli_gettempdir();
  134.        if(checkaccess(tmpdir, UNPUSER, W_OK) != 1) {   mprintf("@Can't write to temporary directoryn"); @@ -810,6 +860,14 @@ int checkstdin(const struct cl_node *roo   return 63;      }   +#ifdef _WIN32
  135. +    if (setmode(fileno(stdin), O_BINARY) == -1)
  136. +    {
  137. +        mprintf("@Cannot set binary mode for stdinn");
  138. +        return 62;
  139. +    }
  140. +#endif
  141. +
  142.      while((ret = fread(buff, 1, FILEBUFF, stdin)))   fwrite(buff, 1, ret, fs);   @@ -827,7 +885,7 @@ int checkstdin(const struct cl_node *roo        } else if(ret == CL_CLEAN) {   if(!printinfected) -     mprintf("stdin: OKn"); +     mprintf("stdin: OK   n");
  143.      } else   if(!printinfected)       mprintf("stdin: %sn", cl_strerror(ret)); @@ -869,7 +927,11 @@ int clamav_unpack(const char *prog, char      } else   maxspace = 0;   - +#ifdef _WIN32
  144. +    /* Warning no support for maxfiles/maxspace while unpacking on win32 */
  145. +    {
  146. +        status = spawnvp(P_WAIT, prog, args);
  147. +#else
  148.      switch(pid = fork()) {   case -1:       return -1; @@ -929,14 +991,15 @@ int clamav_unpack(const char *prog, char   }       } else   waitpid(pid, &status, 0); - +#endif /* _WIN32 */
  149.         if(WIFSIGNALED(status)) {   switch(WTERMSIG(status)) { - +#ifndef _WIN32
  150.       case 9:   mprintf("nUnpacker process %d stopped due to exceeded limitsn", pid);   return 0; +#endif
  151.       case 6: /* abort */   mprintf("@Can't run %sn", prog);   return -2; @@ -972,8 +1035,9 @@ void move_infected(const char *filename,          return;      }   -    if(!(tmp = strrchr(filename, '/'))) - tmp = (char *) filename; +    tmp = (char *) (filename + strlen(filename) - 1);
  152. +    while ((tmp > filename) && (*tmp != '/') && (*tmp != '\')) tmp--;
  153. +    if (tmp > filename) tmp++; /* Trailing slash */
  154.        movefilename_size = sizeof(char) * (strlen(movedir) + strlen(tmp) + sizeof(numext) + 2);   @@ -1027,7 +1091,7 @@ void move_infected(const char *filename,      }        if(rename(filename, movefilename) == -1) { - if(filecopy(filename, movefilename) == -1) { + if(cli_filecopy(filename, movefilename) == -1) {
  155.       mprintf("@cannot move '%s' to '%s': %sn", filename, movefilename, strerror(errno));       claminfo.notmoved++;       free(movefilename); @@ -1035,7 +1099,7 @@ void move_infected(const char *filename,   }     chmod(movefilename, fstat.st_mode); -#ifndef C_OS2 +#if !defined(C_OS2) && !defined(_WIN32)
  156.   chown(movefilename, fstat.st_uid, fstat.st_gid);  #endif   diff -auprbN clamav-0.88.1/clamscan/manager.h clamav-0.88.1-native/clamscan/manager.h --- clamav-0.88.1/clamscan/manager.h 2005-06-24 06:03:08.000000000 +1000 +++ clamav-0.88.1-native/clamscan/manager.h 2006-04-06 17:10:41.000000000 +1000 @@ -20,7 +20,9 @@  #define __MANAGER_H    #include <clamav.h> +#ifdef HAVE_USER_GROUP_DB
  157.  #include <pwd.h> +#endif
  158.  #include "options.h"    int scanmanager(const struct optstruct *opt); diff -auprbN clamav-0.88.1/clamscan/options.c clamav-0.88.1-native/clamscan/options.c --- clamav-0.88.1/clamscan/options.c 2005-06-24 06:03:09.000000000 +1000 +++ clamav-0.88.1-native/clamscan/options.c 2006-04-06 17:10:41.000000000 +1000 @@ -47,6 +47,14 @@ static char clamdscan_short[] = { 'h', '    int clamdscan_mode = 0;   +#ifdef _WIN32 /* Report summary on Ctrl+C */
  159. +extern void console_ctrl_handler(DWORD ctrl_type);
  160. +static void stop_console_handler(void)
  161. +{
  162. +    SetConsoleCtrlHandler((PHANDLER_ROUTINE) console_ctrl_handler, FALSE);
  163. +}
  164. +#endif
  165. +
  166.  int main(int argc, char **argv)  {   int ret, opt_index, i, len; @@ -73,6 +81,7 @@ int main(int argc, char **argv)       {"force", 0, 0, 0},       {"recursive", 0, 0, 'r'},       {"bell", 0, 0, 0}, +        {"show-progress", 0, 0, 0},
  167.       {"disable-summary", 0, 0, 0}, /* obsolete */       {"no-summary", 0, 0, 0},       {"infected", 0, 0, 'i'}, @@ -169,11 +178,26 @@ int main(int argc, char **argv)            for(i=optind; i<argc; i++) {       strncat(opt->filename, argv[i], strlen(argv[i])); +#ifdef _WIN32
  168. +        {
  169. +            /* strip trailing  / */
  170. +            char *check = &opt->filename[strlen(opt->filename) - 1];
  171. +            while ((*check == '\') || (*check == '/'))
  172. +                *check-- = 0;
  173. +
  174. +            /* Allow c: d: notation */
  175. +            if (opt->filename[strlen(opt->filename)-1] == ':')
  176. +                strcat(opt->filename, "/");
  177. +        }
  178. +#endif
  179.       if(i != argc-1)   strncat(opt->filename, "t", 1);   }        } +#ifdef _WIN32
  180. +    INSTALL_CTRL_C_HANDLER();
  181. +#endif
  182.      ret = clamscan(opt);        free_opt(opt); diff -auprbN clamav-0.88.1/clamscan/others.c clamav-0.88.1-native/clamscan/others.c --- clamav-0.88.1/clamscan/others.c 2005-06-24 06:03:08.000000000 +1000 +++ clamav-0.88.1-native/clamscan/others.c 2006-04-06 17:10:41.000000000 +1000 @@ -30,10 +30,14 @@  #include <ctype.h>  #include <unistd.h>  #include <errno.h> +#ifdef HAVE_USER_GROUP_DB
  183.  #include <pwd.h> +#endif
  184.  #include <sys/types.h>  #include <sys/stat.h> +#ifdef HAVE_SYS_WAIT_H
  185.  #include <sys/wait.h> +#endif
  186.  #include <sys/time.h>  #include <time.h>  #include <fcntl.h> @@ -74,6 +78,12 @@ int fileinfo(const char *filename, short    int checkaccess(const char *path, const char *username, int mode)  { +#ifdef _WIN32
  187. +    /* Assume the file can be accessed, a fully compliant port here
  188. +       would break the function in two part, win9x will be always dummy,
  189. +       on winxp/2k/2k3 it would be not trivial. */
  190. +    return 1;
  191. +#else
  192.   struct passwd *user;   int ret = 0, status;   @@ -115,6 +125,7 @@ int checkaccess(const char *path, const       }        return ret; +#endif /* _WIN32 */
  193.  }    int match_regex(const char *filename, const char *pattern) @@ -122,7 +133,7 @@ int match_regex(const char *filename, co  #ifdef HAVE_REGEX_H   regex_t reg;   int match, flags; -#if !defined(C_CYGWIN) && !defined(C_OS2) +#if !defined(C_CYGWIN) && !defined(C_OS2) && !defined(_WIN32)
  194.   flags = REG_EXTENDED;  #else   flags = REG_EXTENDED | REG_ICASE; /* case insensitive on Windows */ diff -auprbN clamav-0.88.1/clamscan/treewalk.c clamav-0.88.1-native/clamscan/treewalk.c --- clamav-0.88.1/clamscan/treewalk.c 2005-12-23 12:16:56.000000000 +1100 +++ clamav-0.88.1-native/clamscan/treewalk.c 2006-04-06 17:10:41.000000000 +1000 @@ -26,8 +26,12 @@  #include <unistd.h>  #include <sys/stat.h>  #include <sys/types.h> +#ifdef HAVE_SYS_WAIT_H
  195.  #include <sys/wait.h> +#endif
  196. +#ifdef HAVE_USER_GROUP_DB
  197.  #include <grp.h> +#endif
  198.  #include <dirent.h>  #include <errno.h>   @@ -134,67 +138,11 @@ int treewalk(const char *dirname, struct    }   -int rmdirs(const char *dirname) -{ - DIR *dd; - struct dirent *dent; - struct stat maind, statbuf; - char *fname; - -    if((dd = opendir(dirname)) != NULL) { - while(stat(dirname, &maind) != -1) { -     if(!rmdir(dirname)) break; -     if(errno != ENOTEMPTY && errno != EEXIST && errno != EBADF) { - mprintf("@Can't remove temporary directory %s: %sn", dirname, strerror(errno)); - closedir(dd); - return 0; -     } - -     while((dent = readdir(dd))) { -#ifndef C_INTERIX - if(dent->d_ino) -#endif - { -     if(strcmp(dent->d_name, ".") && strcmp(dent->d_name, "..")) { - fname = mcalloc(strlen(dirname) + strlen(dent->d_name) + 2, sizeof(char)); - sprintf(fname, "%s/%s", dirname, dent->d_name); - - /* stat the file */ - if(lstat(fname, &statbuf) != -1) { -     if(S_ISDIR(statbuf.st_mode) && !S_ISLNK(statbuf.st_mode)) { - if(rmdir(fname) == -1) { /* can't be deleted */ -     if(errno == EACCES) { - mprintf("@Can't remove some temporary directories due to access problem.n"); - closedir(dd); - return 0; -     } -     rmdirs(fname); - } -     } else - unlink(fname); - } - - free(fname); -     } - } -     } - -     rewinddir(dd); - - } - -    } else {  - if(!printinfected) -     mprintf("%s: Can't open directory.n", dirname); - return 53; -    } - -    closedir(dd); -    return 0; -} -  int clamav_rmdirs(const char *dir)  { +#ifdef _WIN32
  199. +    return cli_rmdirs(dir);
  200. +#else
  201.  #ifndef C_CYGWIN   struct passwd *user;  #endif @@ -229,7 +177,7 @@ int clamav_rmdirs(const char *dir)   }       }  #endif -     rmdirs(dir); +     cli_rmdirs(dir);
  202.       exit(0);       break;   default: @@ -239,7 +187,7 @@ int clamav_rmdirs(const char *dir)       else   return -2;      } - +#endif /* _WIN32 */
  203.  }    int fixperms(const char *dirname) diff -auprbN clamav-0.88.1/clamscan/treewalk.h clamav-0.88.1-native/clamscan/treewalk.h --- clamav-0.88.1/clamscan/treewalk.h 2005-06-24 06:03:08.000000000 +1000 +++ clamav-0.88.1-native/clamscan/treewalk.h 2006-04-06 17:10:41.000000000 +1000 @@ -19,7 +19,9 @@  #ifndef __TREEWALK_H  #define __TREEWALK_H   +#ifdef HAVE_USER_GROUP_DB
  204.  #include <pwd.h> +#endif
  205.  #include <clamav.h>    #include "options.h" @@ -31,7 +33,6 @@ struct s_du {    int treewalk(const char *dirname, struct cl_node *root, const struct passwd *user, const struct optstruct *opt, const struct cl_limits *limits, int options, unsigned int depth);   -int rmdirs(const char *dirname);  int clamav_rmdirs(const char *dir);  int fixperms(const char *dirname);  int du(const char *dirname, struct s_du *n); diff -auprbN clamav-0.88.1/contrib/msvc/README.txt clamav-0.88.1-native/contrib/msvc/README.txt --- clamav-0.88.1/contrib/msvc/README.txt 1970-01-01 10:00:00.000000000 +1000 +++ clamav-0.88.1-native/contrib/msvc/README.txt 2006-04-06 17:10:43.000000000 +1000 @@ -0,0 +1,49 @@ +*** ClamAV native win32 port for 0.88.1 ***
  206. +
  207. +Copyright (c) 2005-2006 Gianluigi Tiesi <sherpya@netfarm.it>
  208. +
  209. +This program is free software; you can redistribute it and/or
  210. +modify it under the terms of the GNU Library General Public
  211. +License as published by the Free Software Foundation; either
  212. +version 2 of the License, or (at your option) any later version.
  213. +
  214. +This library is distributed in the hope that it will be useful,
  215. +but WITHOUT ANY WARRANTY; without even the implied warranty of
  216. +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  217. +Library General Public License for more details.
  218. +You should have received a copy of the GNU Library General Public
  219. +License along with this software; if not, write to the
  220. +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  221. +
  222. +***
  223. +
  224. +[what is working]
  225. +- libclamav dll linkable from external applications
  226. +- freshclam with dns query support (silent disabled on Win95 and NT4 due to missing os functionalities)
  227. +- sigtool
  228. +- No need for cygwin dlls or registry keys to handle temp directory (it's a native port)
  229. +- db path and config path can be optionally stored in the registry (see notes)
  230. +- The patch applies to 0.88.1 and doesn't affect unix compilation
  231. +  (autoconf should be called before building it on unix)
  232. +
  233. +[what is not working]
  234. +- clamd/clamdscan - probabily they will never ported
  235. +- clamscan could crash unexpectly due to different behaviour of some functions on win32
  236. +  please send me the file that causes the crash so I can fix it
  237. +
  238. +[todo]
  239. +- check mmap port for incompatibilites
  240. +- no support for maxfiles maxspace checks while unpacking with external programs
  241. +
  242. +- You can store database and config paths in the registry using the clamav.reg file
  243. +  (I may make a nsis installer in the future), paths can be also REG_EXPAND_SZ,
  244. +  environment variables are permitted (i.e. you can use paths like %HomeDrive%Clamav).
  245. +
  246. +- To use binaries compiled with Visual Studio 2005, you need the msvcrt80 side by side assembly,
  247. +  the "simple way" is uncompress Microsoft.VC80.CRT.zip in the directory of executables,
  248. +  the directory Microsoft.VC80.CRT must be placed as is, putting directly dlls in the same directory
  249. +  of the executable will not work. On windows 9x you should put the dll and the manifest in windows
  250. +  system directory without the Microsoft.VC80.CRT directory. For more info about this refer to the
  251. +  relative msdn-page. You can also download the redist package directly from Microsoft.
  252. +
  253. +!!!! Please report bugs to sherpya@netfarm.it and not to bugs@clamav.net !!!!
  254. diff -auprbN clamav-0.88.1/contrib/msvc/clamav-config.h clamav-0.88.1-native/contrib/msvc/clamav-config.h --- clamav-0.88.1/contrib/msvc/clamav-config.h 1970-01-01 10:00:00.000000000 +1000 +++ clamav-0.88.1-native/contrib/msvc/clamav-config.h 2006-04-06 17:10:43.000000000 +1000 @@ -0,0 +1,121 @@ +/* Define if your snprintf is busted */
  255. +
  256. +/* "build clamd" */
  257. +/* #define BUILD_CLAMD 1 */
  258. +
  259. +/* thread safe */
  260. +#define CL_THREAD_SAFE 1
  261. +
  262. +/* where to look for the config file */
  263. +#define CONFDIR "."
  264. +
  265. +/* Path to virus database directory. */
  266. +#define DATADIR "."
  267. +
  268. +/* Name of the main database */
  269. +#define DB1NAME "main.cvd"
  270. +
  271. +/* Name of the daily database */
  272. +#define DB2NAME "daily.cvd"
  273. +
  274. +/* "default FD_SETSIZE value" */
  275. +#define DEFAULT_FD_SETSIZE 64
  276. +
  277. +/* file i/o buffer size */
  278. +#define FILEBUFF 8192
  279. +
  280. +/* have bzip2 */
  281. +#define HAVE_BZLIB_H 1
  282. +
  283. +/* have gmp installed */
  284. +#ifndef _M_X64 /* not yet working on x86_64 */
  285. +#define HAVE_GMP 1
  286. +#endif
  287. +
  288. +/* Define to 1 if you have the <inttypes.h> header file. */
  289. +#define HAVE_INTTYPES_H 1
  290. +
  291. +/* Define to 1 if you have the <limits.h> header file. */
  292. +#define HAVE_LIMITS_H 1
  293. +
  294. +/* Define to 1 if you have the <malloc.h> header file. */
  295. +#define HAVE_MALLOC_H 1
  296. +
  297. +/* Define to 1 if you have the `memcpy' function. */
  298. +#define HAVE_MEMCPY 1
  299. +
  300. +/* Define to 1 if you have the <memory.h> header file. */
  301. +#define HAVE_MEMORY_H 1
  302. +
  303. +/* Define to 1 if you have a working `mmap' system call. */
  304. +#define HAVE_MMAP 1
  305. +
  306. +/* Define to 1 if you have the <sys/mman.h> header file. */
  307. +#define HAVE_SYS_MMAN_H 1
  308. +
  309. +/* "pragma pack" */
  310. +#define HAVE_PRAGMA_PACK 1
  311. +
  312. +/* Define to 1 if you have the <regex.h> header file. */
  313. +#define HAVE_REGEX_H 1
  314. +
  315. +/* Define to 1 if you have the `snprintf' function. */
  316. +/* #undef HAVE_SNPRINTF */
  317. +
  318. +/* Define to 1 if you have the <stdlib.h> header file. */
  319. +#define HAVE_STDLIB_H 1
  320. +
  321. +/* Define to 1 if you have the <string.h> header file. */
  322. +#define HAVE_STRING_H 1
  323. +
  324. +/* Define to 1 if you have the <sys/stat.h> header file. */
  325. +#define HAVE_SYS_STAT_H 1
  326. +
  327. +/* Define to 1 if you have the <sys/types.h> header file. */
  328. +#define HAVE_SYS_TYPES_H 1
  329. +
  330. +/* zlib installed */
  331. +#define HAVE_ZLIB_H 1
  332. +
  333. +/* "no fd_set" */
  334. +#define NO_FD_SET 1
  335. +
  336. +/* Name of package */
  337. +#define PACKAGE "clamav"
  338. +
  339. +/* scan buffer size */
  340. +#define SCANBUFF 131072
  341. +
  342. +/* The number of bytes in type int */
  343. +#define SIZEOF_INT 4
  344. +
  345. +/* The number of bytes in type long */
  346. +#define SIZEOF_LONG 4
  347. +
  348. +/* The number of bytes in type long long */
  349. +#define SIZEOF_LONG_LONG 8
  350. +
  351. +/* The number of bytes in type short */
  352. +#define SIZEOF_SHORT 2
  353. +
  354. +/* Define to 1 if you have the ANSI C header files. */
  355. +#define STDC_HEADERS 1
  356. +
  357. +/* Version number of package */
  358. +#define VERSION "0.88.1"
  359. +
  360. +/* use libcurl in mbox code */
  361. +/* #define WITH_CURL 1 */
  362. +/* #define CURL_STATICLIB */
  363. +
  364. +/* endianess */
  365. +#define WORDS_BIGENDIAN 0
  366. +
  367. +/* thread safe */
  368. +/* #undef _REENTRANT */
  369. +
  370. +/* Define to `__inline__' or `__inline' if that's what the C compiler
  371. +   calls it, or to nothing if 'inline' is not supported under any name.  */
  372. +#define inline _inline
  373. +
  374. +#include <osdeps.h>
  375. diff -auprbN clamav-0.88.1/contrib/msvc/clamav.dsw clamav-0.88.1-native/contrib/msvc/clamav.dsw --- clamav-0.88.1/contrib/msvc/clamav.dsw 1970-01-01 10:00:00.000000000 +1000 +++ clamav-0.88.1-native/contrib/msvc/clamav.dsw 2006-04-06 17:10:43.000000000 +1000 @@ -0,0 +1,74 @@ +Microsoft Developer Studio Workspace File, Format Version 6.00
  376. +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
  377. +
  378. +###############################################################################
  379. +
  380. +Project: "clamscan"=".clamscan.dsp" - Package Owner=<4>
  381. +
  382. +Package=<5>
  383. +{{{
  384. +}}}
  385. +
  386. +Package=<4>
  387. +{{{
  388. +    Begin Project Dependency
  389. +    Project_Dep_Name libclamav
  390. +    End Project Dependency
  391. +}}}
  392. +
  393. +###############################################################################
  394. +
  395. +Project: "freshclam"=".freshclam.dsp" - Package Owner=<4>
  396. +
  397. +Package=<5>
  398. +{{{
  399. +}}}
  400. +
  401. +Package=<4>
  402. +{{{
  403. +    Begin Project Dependency
  404. +    Project_Dep_Name libclamav
  405. +    End Project Dependency
  406. +}}}
  407. +
  408. +###############################################################################
  409. +
  410. +Project: "libclamav"=".libclamav.dsp" - Package Owner=<4>
  411. +
  412. +Package=<5>
  413. +{{{
  414. +}}}
  415. +
  416. +Package=<4>
  417. +{{{
  418. +}}}
  419. +
  420. +###############################################################################
  421. +
  422. +Project: "sigtool"=".sigtool.dsp" - Package Owner=<4>
  423. +
  424. +Package=<5>
  425. +{{{
  426. +}}}
  427. +
  428. +Package=<4>
  429. +{{{
  430. +    Begin Project Dependency
  431. +    Project_Dep_Name libclamav
  432. +    End Project Dependency
  433. +}}}
  434. +
  435. +###############################################################################
  436. +
  437. +Global:
  438. +
  439. +Package=<5>
  440. +{{{
  441. +}}}
  442. +
  443. +Package=<3>
  444. +{{{
  445. +}}}
  446. +
  447. +###############################################################################
  448. +
  449. diff -auprbN clamav-0.88.1/contrib/msvc/clamav.rc clamav-0.88.1-native/contrib/msvc/clamav.rc --- clamav-0.88.1/contrib/msvc/clamav.rc 1970-01-01 10:00:00.000000000 +1000 +++ clamav-0.88.1-native/contrib/msvc/clamav.rc 2006-04-06 17:10:43.000000000 +1000 @@ -0,0 +1,39 @@ +#include <windows.h>
  450. +
  451. +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
  452. +
  453. +VS_VERSION_INFO VERSIONINFO
  454. + FILEVERSION 0,88,1,0
  455. + PRODUCTVERSION 0,88,1,0
  456. + FILEFLAGSMASK 0x17L
  457. +#ifdef _DEBUG
  458. + FILEFLAGS 0x1L
  459. +#else
  460. + FILEFLAGS 0x0L
  461. +#endif
  462. + FILEOS 0x4L
  463. + FILETYPE 0x2L
  464. + FILESUBTYPE 0x0L
  465. +BEGIN
  466. + BLOCK "StringFileInfo"
  467. + BEGIN
  468. + BLOCK "00000409"
  469. + BEGIN
  470. + VALUE "FileDescription", "ClamAV Antivirus"
  471. + VALUE "FileVersion", "0, 88, 1, 0"
  472. + VALUE "InternalName", __MODULE__
  473. + VALUE "LegalCopyright", "Copyright (C) 2006 ClamAV Team"
  474. + VALUE "OriginalFilename", __MODULE__
  475. + VALUE "ProductName", "ClamAV Antivirus"
  476. + VALUE "ProductVersion", "0, 88, 1, 0"
  477. + END
  478. + END
  479. + BLOCK "VarFileInfo"
  480. + BEGIN
  481. + VALUE "Translation", 0x0, 1033
  482. + END
  483. +END
  484. +
  485. +#ifdef __ICON__
  486. +100 ICON __ICON__
  487. +#endif
  488. diff -auprbN clamav-0.88.1/contrib/msvc/clamav.reg clamav-0.88.1-native/contrib/msvc/clamav.reg --- clamav-0.88.1/contrib/msvc/clamav.reg 1970-01-01 10:00:00.000000000 +1000 +++ clamav-0.88.1-native/contrib/msvc/clamav.reg 2006-04-06 17:10:43.000000000 +1000 @@ -0,0 +1,6 @@ +REGEDIT4
  489. +
  490. +[HKEY_LOCAL_MACHINESOFTWAREClamAV]
  491. +"ConfigDir"="C:\Clamav"
  492. +"DataDir"="C:\Clamav\db"
  493. +
  494. diff -auprbN clamav-0.88.1/contrib/msvc/clamav.sln clamav-0.88.1-native/contrib/msvc/clamav.sln --- clamav-0.88.1/contrib/msvc/clamav.sln 1970-01-01 10:00:00.000000000 +1000 +++ clamav-0.88.1-native/contrib/msvc/clamav.sln 2006-04-06 17:10:43.000000000 +1000 @@ -0,0 +1,62 @@ +锘