Package: rekall
Version: 2.2.6-4
Severity: serious
Tags: patch upstream
Justification: no longer builds from source

Hi Peter,

A recent fix to unixodbc is causing rekall to fail to build on 64-bit
architectures for the libmysqlclient15off transition[1]:

[...]
make[4]: Entering directory /build/buildd/rekall-2.2.6/db/odbc'
/bin/sh ../../libtool --silent --mode=compile --tag=CXX g++ -DHAVE_CONFIG_H -I. 
-I. -I../.. -I../../libs/common -I ../srclib -I /usr/include -I/usr/include/kde 
-I/usr/share/qt3/include -I.    -D__KB_KDE=1 -D__KB_TKC=0 -D__KB_EMBEDDED=0 
-DODBC_NS=NS_KBODBC -DGET_EXTRA=0 -DQT_THREAD_SUPPORT -D_REENTRANT 
-Wl,--no-undefined -Wnon-virtual-dtor -Wno-long-long -Wundef -ansi 
-D_XOPEN_SOURCE=500 -D_BSD_SOURCE -Wcast-align -Wconversion -Wchar-subscripts 
-Wall -W -Wpointer-arith -Wwrite-strings -O2 -g -Wall -O2 -Wformat-security 
-Wmissing-format-attribute -fno-exceptions -fno-check-new -fno-common  -c -o 
kb_odbc.lo kb_odbc.cpp
kb_odbc.cpp: In member function 'virtual bool 
NS_KBODBC::KBODBC::doConnect(KBServerInfo*)':
kb_odbc.cpp:693: warning: cast from 'char*' to 'SQLUSMALLINT*' increases 
required alignment of target type
kb_odbc.cpp:714: warning: cast from 'char*' to 'SQLUSMALLINT*' increases 
required alignment of target type
kb_odbc.cpp: In member function 'bool 
NS_KBODBC::KBODBC::doListTables(KBTableDetailsList&, const QString&, bool, 
uint)':
kb_odbc.cpp:1051: error: cannot convert 'SQLINTEGER*' to 'SQLLEN*' for argument 
'6' to 'SQLRETURN SQLBindCol(void*, SQLUSMALLINT, SQLSMALLINT, void*, SQLLEN, 
SQLLEN*)'
kb_odbc.cpp:1052: error: cannot convert 'SQLINTEGER*' to 'SQLLEN*' for argument 
'6' to 'SQLRETURN SQLBindCol(void*, SQLUSMALLINT, SQLSMALLINT, void*, SQLLEN, 
SQLLEN*)'
kb_odbc.cpp:1053: error: cannot convert 'SQLINTEGER*' to 'SQLLEN*' for argument 
'6' to 'SQLRETURN SQLBindCol(void*, SQLUSMALLINT, SQLSMALLINT, void*, SQLLEN, 
SQLLEN*)'
kb_odbc.cpp: In member function 'bool NS_KBODBC::KBODBC::bindParameters(void*, 
uint, const KBValue*, QPtrList<KBODBCValue>&, QTextCodec*)':
kb_odbc.cpp:1826: error: cannot convert 'SQLINTEGER*' to 'SQLLEN*' for argument 
'10' to 'SQLRETURN SQLBindParameter(void*, SQLUSMALLINT, SQLSMALLINT, 
SQLSMALLINT, SQLSMALLINT, SQLULEN, SQLSMALLINT, void*, SQLLEN, SQLLEN*)'
kb_odbc.cpp: In member function 'bool NS_KBODBC::KBODBC::getRowCount(void*, 
int&)':
kb_odbc.cpp:1847: error: cannot convert 'SQLINTEGER*' to 'SQLLEN*' for argument 
'2' to 'SQLRETURN SQLRowCount(void*, SQLLEN*)'
kb_odbc.cpp: In constructor 
'NS_KBODBC::KBODBCQrySelect::KBODBCQrySelect(NS_KBODBC::KBODBC*, void*, bool, 
const QString&, bool&)':
kb_odbc.cpp:2011: error: cannot convert 'SQLUINTEGER*' to 'SQLULEN*' for 
argument '7' to 'SQLRETURN SQLDescribeCol(void*, SQLUSMALLINT, SQLCHAR*, 
SQLSMALLINT, SQLSMALLINT*, SQLSMALLINT*, SQLULEN*, SQLSMALLINT*, SQLSMALLINT*)'
kb_odbc.cpp: In member function 'virtual bool 
NS_KBODBC::KBODBCQrySelect::execute(uint, const KBValue*)':
kb_odbc.cpp:2157: error: cannot convert 'SQLUINTEGER*' to 'SQLULEN*' for 
argument '7' to 'SQLRETURN SQLDescribeCol(void*, SQLUSMALLINT, SQLCHAR*, 
SQLSMALLINT, SQLSMALLINT*, SQLSMALLINT*, SQLULEN*, SQLSMALLINT*, SQLSMALLINT*)'
[...]

The ODBC API standard includes bugs in the definition of several function
calls which take cast pointers as one of their possible arguments, resulting
in truncated pointers on 64-bit systems.  The Debian unixodbc packages have
deviated from this standard since before the sarge release, in order to
provide libraries that are actually usable on 64-bit systems.  However,
owing to an upstream decision to favor standards-compliance over utility by
default in this case, the headers did not by default declare this
64-bit-clean API; instead, they declared a 32-bit API that did not match the
actual ABI presented by the unixodbc library.

unixodbc 2.2.11-10 corrected this oversight on my part, by fixing the
headers to export the proper 64-bit interface.  The result is that
ODBC-using packages which don't know to expect this 64-bit interface will
now fail to build, as seen in this build log.

The attached patch makes the necessary type changes from SQLINTEGER and
SQLUINTEGER to SQLLEN and SQLULEN.  Note that SQLLEN is a late addition to
the ODBC standard, so its use will prevent rekall from building with older
ODBC library versions; if this is a concern for your upstream, please let me
know as I would be happy to help devise a patch that degrades gracefully for
the sake of portability.

Cheers,
-- 
Steve Langasek                   Give me a lever long enough and a Free OS
Debian Developer                   to set it on, and I can move the world.
[EMAIL PROTECTED]                                   http://www.debian.org/

[1] 
http://buildd.debian.org/fetch.php?pkg=rekall&arch=ia64&ver=2.2.6-4%2Bb1&stamp=1142837162&file=log
diff -Nru /tmp/PNNoYydHyZ/rekall-2.2.6/db/iodbc/kb_odbc.cpp 
/tmp/8Nlwaa4yke/rekall-2.2.6/db/iodbc/kb_odbc.cpp
--- /tmp/PNNoYydHyZ/rekall-2.2.6/db/iodbc/kb_odbc.cpp   2004-11-25 
01:31:06.000000000 -0800
+++ /tmp/8Nlwaa4yke/rekall-2.2.6/db/iodbc/kb_odbc.cpp   2006-03-20 
01:28:05.000000000 -0800
@@ -1026,9 +1026,9 @@
        SQLCHAR         name    [101]   = "" ;
        SQLCHAR         type    [101]   = "" ;
        SQLCHAR         remarks [301]   = "" ;
-       SQLINTEGER      indName         ;
-       SQLINTEGER      indType         ;
-       SQLINTEGER      indRemarks      ;
+       SQLLEN          indName         ;
+       SQLLEN          indType         ;
+       SQLLEN          indRemarks      ;
 
        long            odbcRC          ;
 
@@ -1843,7 +1843,7 @@
                int             &nRows
        )
 {
-       SQLINTEGER sqlRows ;
+       SQLLEN sqlRows ;
        long       odbcRC  = SQLRowCount (stmHandle, &sqlRows) ;
 
        if (!checkRCOK(stmHandle, odbcRC, "Error finding ODBC row count"))
@@ -1993,7 +1993,7 @@
                SQLCHAR         colName[101]    ;
                SQLSMALLINT     nameLen         ;       
                SQLSMALLINT     colType         ;
-               SQLUINTEGER     colSize         ;
+               SQLULEN         colSize         ;
                SQLSMALLINT     decimal         ;
                SQLSMALLINT     nullable        ;
                long            odbcRC          ;
@@ -2140,7 +2140,7 @@
                SQLCHAR         colName[101]    ;
                SQLSMALLINT     nameLen         ;       
                SQLSMALLINT     colType         ;
-               SQLUINTEGER     colSize         ;
+               SQLULEN         colSize         ;
                SQLSMALLINT     decimal         ;
                SQLSMALLINT     nullable        ;
 
diff -Nru /tmp/PNNoYydHyZ/rekall-2.2.6/db/iodbc/kb_odbc_jet.cpp 
/tmp/8Nlwaa4yke/rekall-2.2.6/db/iodbc/kb_odbc_jet.cpp
--- /tmp/PNNoYydHyZ/rekall-2.2.6/db/iodbc/kb_odbc_jet.cpp       2004-11-25 
01:31:06.000000000 -0800
+++ /tmp/8Nlwaa4yke/rekall-2.2.6/db/iodbc/kb_odbc_jet.cpp       2006-03-20 
01:28:05.000000000 -0800
@@ -136,7 +136,7 @@
        }
 
        char            buffer[32]      ;
-       SQLINTEGER      bufflen         ;
+       SQLLEN          bufflen         ;
 
        odbcRC = SQLGetData
                 (      m_getHandle,
diff -Nru /tmp/PNNoYydHyZ/rekall-2.2.6/db/iodbc/kb_odbc_mysql.cpp 
/tmp/8Nlwaa4yke/rekall-2.2.6/db/iodbc/kb_odbc_mysql.cpp
--- /tmp/PNNoYydHyZ/rekall-2.2.6/db/iodbc/kb_odbc_mysql.cpp     2004-11-25 
01:31:06.000000000 -0800
+++ /tmp/8Nlwaa4yke/rekall-2.2.6/db/iodbc/kb_odbc_mysql.cpp     2006-03-20 
01:28:05.000000000 -0800
@@ -126,7 +126,7 @@
        }
 
        char            buffer[32]      ;
-       SQLINTEGER      bufflen         ;
+       SQLLEN          bufflen         ;
 
        odbcRC = SQLGetData
                 (      m_getHandle,
@@ -297,7 +297,7 @@
                }
 
                char            buffer[GETBUFSIZ+8]     ;
-               SQLINTEGER      bufflen                 ;
+               SQLLEN          bufflen                 ;
 
                odbcRC = SQLGetData
                         (      stmHandle,
diff -Nru /tmp/PNNoYydHyZ/rekall-2.2.6/db/odbc/kb_odbc.cpp 
/tmp/8Nlwaa4yke/rekall-2.2.6/db/odbc/kb_odbc.cpp
--- /tmp/PNNoYydHyZ/rekall-2.2.6/db/odbc/kb_odbc.cpp    2004-11-25 
01:31:06.000000000 -0800
+++ /tmp/8Nlwaa4yke/rekall-2.2.6/db/odbc/kb_odbc.cpp    2006-03-20 
01:28:05.000000000 -0800
@@ -1026,9 +1026,9 @@
        SQLCHAR         name    [101]   = "" ;
        SQLCHAR         type    [101]   = "" ;
        SQLCHAR         remarks [301]   = "" ;
-       SQLINTEGER      indName         ;
-       SQLINTEGER      indType         ;
-       SQLINTEGER      indRemarks      ;
+       SQLLEN          indName         ;
+       SQLLEN          indType         ;
+       SQLLEN          indRemarks      ;
 
        long            odbcRC          ;
 
@@ -1843,7 +1843,7 @@
                int             &nRows
        )
 {
-       SQLINTEGER sqlRows ;
+       SQLLEN sqlRows ;
        long       odbcRC  = SQLRowCount (stmHandle, &sqlRows) ;
 
        if (!checkRCOK(stmHandle, odbcRC, "Error finding ODBC row count"))
@@ -1993,7 +1993,7 @@
                SQLCHAR         colName[101]    ;
                SQLSMALLINT     nameLen         ;       
                SQLSMALLINT     colType         ;
-               SQLUINTEGER     colSize         ;
+               SQLULEN         colSize         ;
                SQLSMALLINT     decimal         ;
                SQLSMALLINT     nullable        ;
                long            odbcRC          ;
@@ -2140,7 +2140,7 @@
                SQLCHAR         colName[101]    ;
                SQLSMALLINT     nameLen         ;       
                SQLSMALLINT     colType         ;
-               SQLUINTEGER     colSize         ;
+               SQLULEN         colSize         ;
                SQLSMALLINT     decimal         ;
                SQLSMALLINT     nullable        ;
 
diff -Nru /tmp/PNNoYydHyZ/rekall-2.2.6/db/odbc/kb_odbc_jet.cpp 
/tmp/8Nlwaa4yke/rekall-2.2.6/db/odbc/kb_odbc_jet.cpp
--- /tmp/PNNoYydHyZ/rekall-2.2.6/db/odbc/kb_odbc_jet.cpp        2004-11-25 
01:31:06.000000000 -0800
+++ /tmp/8Nlwaa4yke/rekall-2.2.6/db/odbc/kb_odbc_jet.cpp        2006-03-20 
01:28:05.000000000 -0800
@@ -136,7 +136,7 @@
        }
 
        char            buffer[32]      ;
-       SQLINTEGER      bufflen         ;
+       SQLLEN          bufflen         ;
 
        odbcRC = SQLGetData
                 (      m_getHandle,
diff -Nru /tmp/PNNoYydHyZ/rekall-2.2.6/db/odbc/kb_odbc_mysql.cpp 
/tmp/8Nlwaa4yke/rekall-2.2.6/db/odbc/kb_odbc_mysql.cpp
--- /tmp/PNNoYydHyZ/rekall-2.2.6/db/odbc/kb_odbc_mysql.cpp      2004-11-25 
01:31:06.000000000 -0800
+++ /tmp/8Nlwaa4yke/rekall-2.2.6/db/odbc/kb_odbc_mysql.cpp      2006-03-20 
01:28:05.000000000 -0800
@@ -126,7 +126,7 @@
        }
 
        char            buffer[32]      ;
-       SQLINTEGER      bufflen         ;
+       SQLLEN          bufflen         ;
 
        odbcRC = SQLGetData
                 (      m_getHandle,
@@ -297,7 +297,7 @@
                }
 
                char            buffer[GETBUFSIZ+8]     ;
-               SQLINTEGER      bufflen                 ;
+               SQLLEN          bufflen                 ;
 
                odbcRC = SQLGetData
                         (      stmHandle,
diff -Nru /tmp/PNNoYydHyZ/rekall-2.2.6/db/srclib/kb_odbcrow.cpp 
/tmp/8Nlwaa4yke/rekall-2.2.6/db/srclib/kb_odbcrow.cpp
--- /tmp/PNNoYydHyZ/rekall-2.2.6/db/srclib/kb_odbcrow.cpp       2005-02-02 
09:05:35.000000000 -0800
+++ /tmp/8Nlwaa4yke/rekall-2.2.6/db/srclib/kb_odbcrow.cpp       2006-03-20 
01:28:05.000000000 -0800
@@ -46,8 +46,8 @@
        for (uint colno = 0 ; colno < nvals ; colno += 1)
        {
                char            buffer[GETBUFSIZ + 8];
-               SQLINTEGER      bufflen         ;
-               SQLINTEGER      bufflen2        ;
+               SQLLEN          bufflen         ;
+               SQLLEN          bufflen2        ;
                SQLRETURN       odbcRC          ;
 
                *(long*)(&buffer[GETBUFSIZ + 4]) = MAGIC;
diff -Nru /tmp/PNNoYydHyZ/rekall-2.2.6/db/srclib/kb_odbcval.h 
/tmp/8Nlwaa4yke/rekall-2.2.6/db/srclib/kb_odbcval.h
--- /tmp/PNNoYydHyZ/rekall-2.2.6/db/srclib/kb_odbcval.h 2004-11-18 
10:26:22.000000000 -0800
+++ /tmp/8Nlwaa4yke/rekall-2.2.6/db/srclib/kb_odbcval.h 2006-03-20 
01:28:05.000000000 -0800
@@ -21,7 +21,7 @@
        SQLSMALLINT     m_vtype         ;
        SQLPOINTER      m_vptr          ;
        SQLINTEGER      m_vlen          ;
-       SQLINTEGER      m_slind         ;
+       SQLLEN          m_slind         ;
 
 
 public  :
@@ -33,5 +33,5 @@
        inline  SQLSMALLINT     vtype   () { return  m_vtype ; }
        inline  SQLPOINTER      vptr    () { return  m_vptr  ; }
        inline  SQLINTEGER      vlen    () { return  m_vlen  ; }
-       inline  SQLINTEGER      *slind  () { return &m_slind ; }
+       inline  SQLLEN  *slind  () { return &m_slind ; }
 }      ;
diff -Nru /tmp/PNNoYydHyZ/rekall-2.2.6/debian/changelog 
/tmp/8Nlwaa4yke/rekall-2.2.6/debian/changelog
--- /tmp/PNNoYydHyZ/rekall-2.2.6/debian/changelog       2006-03-20 
01:28:02.000000000 -0800
+++ /tmp/8Nlwaa4yke/rekall-2.2.6/debian/changelog       2006-03-20 
01:28:05.000000000 -0800
@@ -1,3 +1,11 @@
+rekall (2.2.6-4.1) unstable; urgency=low
+
+  * Non-maintainer upload.
+  * Additional 64-bit compilation fixes, now that unixodbc is 64-bit
+    clean out of the box
+
+ -- Steve Langasek <[EMAIL PROTECTED]>  Mon, 20 Mar 2006 00:56:37 -0800
+
 rekall (2.2.6-4) unstable; urgency=low
 
   * Set build dependency to libmysqlclient15-dev (closes: #343808)

Attachment: signature.asc
Description: Digital signature

Reply via email to