packages: python-pyclamav/python-pyclamav-new-api.patch (NEW) - use new Cla...

megabajt megabajt at pld-linux.org
Wed May 6 22:54:59 CEST 2009


Author: megabajt                     Date: Wed May  6 20:54:59 2009 GMT
Module: packages                      Tag: HEAD
---- Log message:
- use new Clamav API (patch from Debian)

---- Files affected:
packages/python-pyclamav:
   python-pyclamav-new-api.patch (NONE -> 1.1)  (NEW)

---- Diffs:

================================================================
Index: packages/python-pyclamav/python-pyclamav-new-api.patch
diff -u /dev/null packages/python-pyclamav/python-pyclamav-new-api.patch:1.1
--- /dev/null	Wed May  6 22:54:59 2009
+++ packages/python-pyclamav/python-pyclamav-new-api.patch	Wed May  6 22:54:54 2009
@@ -0,0 +1,126 @@
+
+--- python-clamav-0.4.1.orig/pyclamav.c
++++ python-clamav-0.4.1/pyclamav.c
+@@ -33,25 +33,6 @@
+ 
+ /* ********************************************************* */
+ 
+-/* To be able to compile with 
+-   releases 0.75 of libclamav 
+-
+-   Where cl_free was cl_freetrie
+-   and cl_build was cl_buildtrie
+-   CL_SCAN_STDOPT did not exist
+-*/
+-#ifndef CL_SCAN_STDOPT
+-#define CL_SCAN_STDOPT CL_RAW | CL_ARCHIVE | CL_MAIL | CL_DISABLERAR | CL_OLE2 | CL_ENCRYPTED
+-void cl_free(struct cl_node *rootnode) {
+-  cl_freetrie(rootnode);  
+-  return;    
+-} 
+-
+-int cl_build(struct cl_node *rootnode) {  
+-  return cl_buildtrie(rootnode);    
+-} 
+-#endif
+-
+ /* For python prior to 2.3 */
+ #ifndef PyMODINIT_FUNC
+ #define PyMODINIT_FUNC void
+@@ -68,11 +49,9 @@
+ unsigned int signumber = 0;
+  
+ /* Structures for clamav */
+-struct cl_node *root = NULL;
+-struct cl_limits limits;
++struct cl_engine *engine = NULL;
+ struct cl_stat dbstat;
+ 
+-
+ /*
+  * If the virus database has been changed, then
+  * free the current tree and reload the new one
+@@ -85,22 +64,22 @@
+   /* If yes : reload DB                */
+   if (cl_statchkdir(&dbstat) == 1)
+     {
+-      /* free the tree */
+-      cl_free(root); 
++      /* free the engine */
++      cl_engine_free(engine); 
+       signumber=0;
+-      root=NULL;
++      engine=NULL;
+ 
+       /* Load DB */
+-      if((ret = cl_load(cl_retdbdir(), &root, &signumber, CL_DB_STDOPT))) {
++      if((ret = cl_load(cl_retdbdir(), engine, &signumber, CL_DB_STDOPT)) != CL_SUCCESS) {
+ 	/* Raise exception with error message */
+ 	PyErr_SetString(PyclamavError,  cl_strerror(ret));
+ 	return -2;
+       }
+ 
+-      /* build the final tree */
+-      if((ret = cl_build(root))) {
+-	/* free the partial tree */
+-	cl_free(root); 
++      /* prepare the engine */
++      if((ret = cl_engine_compile(engine))) {
++	/* free the engine */
++	cl_engine_free(engine); 
+ 	/* Raise exception with error message */
+ 	PyErr_SetString(PyclamavError, cl_strerror(ret));
+ 	return -2;
+@@ -231,7 +210,7 @@
+     return NULL;     
+   }
+ 
+-  ret = cl_scanfile(file_to_scan, &virname, &size, root, &limits, CL_SCAN_STDOPT);
++  ret = cl_scanfile(file_to_scan, &virname, &size, engine, CL_SCAN_STDOPT);
+ 
+   /* Test return code */
+   switch (ret) {
+@@ -278,17 +257,21 @@
+   /* Set documentation string for the module */
+   PyDict_SetItemString(dict, "__doc__", PyString_FromString("pyclamav :\n\n  This is a python binding to the C libclamav library\n  (from the Clamav project - http://www.clamav.net).\n  It can be used to easily allow a Python script to scan\n  a file or a buffer against known viruses.\n\nAuthor : Alexandre Norman [norman at xael.org]\n\nFunctions :\n  - scanfile(string filename) : Scan a file for virus.\n  - get_numsig() : Return the number of known signatures.\n  - get_version() : Return the version of Clamav.\n  - version() : Return the version of pyclamav.\n"));
+ 
++  /* initialize libclamav */
++  cl_init(CL_INIT_DEFAULT);
++  engine = cl_engine_new();
+ 
+-  if((ret = cl_load(cl_retdbdir(), &root, &signumber, CL_DB_STDOPT))) {
++  if((ret = cl_load(cl_retdbdir(), engine, &signumber, CL_DB_STDOPT))) {
+     /* Raise exception with error message */
+     PyErr_SetString(PyclamavError,  cl_strerror(ret));
++    cl_engine_free(engine);
+     return;
+   }
+ 
+-  /* build the final tree */
+-  if((ret = cl_build(root))) {
+-    /* free the partial tree */
+-    cl_free(root); 
++  /* prepare the engine */
++  if((ret = cl_engine_compile(engine)) != CL_SUCCESS) {
++    /* free up the engine resources */
++    cl_engine_free(engine); 
+     /* Raise exception with error message */
+     PyErr_SetString(PyclamavError, cl_strerror(ret));
+     return;
+@@ -299,15 +282,6 @@
+   memset(&dbstat, 0, sizeof(struct cl_stat));
+   cl_statinidir(cl_retdbdir(), &dbstat);
+ 
+-
+-
+-  /* set up archive limits */
+-  memset(&limits, 0, sizeof(struct cl_limits));
+-  limits.maxfiles = 1000; /* max files */
+-  limits.maxfilesize = 10 * 1048576; /* maximal archived file size == 10 Mb */
+-  limits.maxreclevel = 5; /* maximal recursion level */
+-  limits.archivememlim = 0; /* disable memory limit for bzip2 scanner */
+-
+   return ;
+ }
+ 
+
================================================================


More information about the pld-cvs-commit mailing list