aboutsummaryrefslogtreecommitdiffstats
path: root/security/py-clamav/files/patch-pyclamav.c
diff options
context:
space:
mode:
Diffstat (limited to 'security/py-clamav/files/patch-pyclamav.c')
-rw-r--r--security/py-clamav/files/patch-pyclamav.c120
1 files changed, 120 insertions, 0 deletions
diff --git a/security/py-clamav/files/patch-pyclamav.c b/security/py-clamav/files/patch-pyclamav.c
new file mode 100644
index 000000000000..5785478ff497
--- /dev/null
+++ b/security/py-clamav/files/patch-pyclamav.c
@@ -0,0 +1,120 @@
+--- pyclamav.c.orig 2009-03-24 18:25:44.000000000 -0300
++++ pyclamav.c 2009-03-24 18:25:51.000000000 -0300
+@@ -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,8 +49,7 @@
+ unsigned int signumber = 0;
+
+ /* Structures for clamav */
+-struct cl_node *root = NULL;
+-struct cl_limits limits;
++struct cl_engine *root = NULL;
+ struct cl_stat dbstat;
+
+
+@@ -86,21 +66,22 @@
+ if (cl_statchkdir(&dbstat) == 1)
+ {
+ /* free the tree */
+- cl_free(root);
++ cl_engine_free(root);
+ signumber=0;
+ root=NULL;
+
+ /* Load DB */
+- if((ret = cl_load(cl_retdbdir(), &root, &signumber, CL_DB_STDOPT))) {
++ if((ret = cl_load(cl_retdbdir(), root, &signumber, CL_DB_STDOPT)) != CL_SUCCESS) {
+ /* Raise exception with error message */
+ PyErr_SetString(PyclamavError, cl_strerror(ret));
++ cl_engine_free(root);
+ return -2;
+ }
+
+ /* build the final tree */
+- if((ret = cl_build(root))) {
++ if((ret = cl_engine_compile(root)) != CL_SUCCESS) {
+ /* free the partial tree */
+- cl_free(root);
++ cl_engine_free(root);
+ /* Raise exception with error message */
+ PyErr_SetString(PyclamavError, cl_strerror(ret));
+ return -2;
+@@ -231,7 +212,7 @@
+ return NULL;
+ }
+
+- ret = cl_scanfile(file_to_scan, &virname, &size, root, &limits, CL_SCAN_STDOPT);
++ ret = cl_scanfile(file_to_scan, &virname, &size, root, CL_SCAN_STDOPT);
+
+ /* Test return code */
+ switch (ret) {
+@@ -278,17 +259,28 @@
+ /* 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@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"));
+
++ if((ret = cl_init(CL_INIT_DEFAULT)) != CL_SUCCESS) {
++ /* Raise exception with error message */
++ PyErr_SetString(PyclamavError, cl_strerror(ret));
++ return;
++ }
+
+- if((ret = cl_load(cl_retdbdir(), &root, &signumber, CL_DB_STDOPT))) {
++ if(!(root = cl_engine_new())) {
++ PyErr_SetString(PyclamavError, "Can't create new engine.");
++ return;
++ }
++
++ if((ret = cl_load(cl_retdbdir(), root, &signumber, CL_DB_STDOPT)) != CL_SUCCESS) {
+ /* Raise exception with error message */
+ PyErr_SetString(PyclamavError, cl_strerror(ret));
++ cl_engine_free(root);
+ return;
+ }
+
+ /* build the final tree */
+- if((ret = cl_build(root))) {
++ if((ret = cl_engine_compile(root)) != CL_SUCCESS) {
+ /* free the partial tree */
+- cl_free(root);
++ cl_engine_free(root);
+ /* Raise exception with error message */
+ PyErr_SetString(PyclamavError, cl_strerror(ret));
+ return;
+@@ -301,13 +293,6 @@
+
+
+
+- /* 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 ;
+ }
+