From: <ope...@li...> - 2006-02-14 14:21:05
|
Update of /cvsroot/openca/debian/patches In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv11793/patches Modified Files: 30_bigint_serial_modules_dbi Log Message: Update dbi module dpatch. Include "SQL assumptions" and remove DATE field (not used) Author of changes: achetroi Index: 30_bigint_serial_modules_dbi =================================================================== RCS file: /cvsroot/openca/debian/patches/30_bigint_serial_modules_dbi,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** 30_bigint_serial_modules_dbi 14 Feb 2006 14:13:08 -0000 1.6 --- 30_bigint_serial_modules_dbi 14 Feb 2006 14:20:53 -0000 1.7 *************** *** 10,16 **** Index: src/modules/openca-dbi/DBI.pm =================================================================== ! --- openca-0.9.orig/src/modules/openca-dbi/DBI.pm (.../vendor/releases/openca-0.9.2.5) (revision 29) ! +++ openca-0.9/src/modules/openca-dbi/DBI.pm (.../trunk) (revision 29) ! @@ -137,12 +137,12 @@ FORMAT => ["format", "TEXT"], DATA => ["data", "LONGTEXT"], --- 10,59 ---- Index: src/modules/openca-dbi/DBI.pm =================================================================== ! --- openca-0.9.orig/src/modules/openca-dbi/DBI.pm (.../vendor/releases/openca-0.9.2.5) (revision 31) ! +++ openca-0.9/src/modules/openca-dbi/DBI.pm (.../trunk) (revision 31) ! @@ -121,6 +121,37 @@ use DBI; ! ## lowercase forget the filename). ## ! ############################################################################ ! ! +=pod ! + ! +=head2 SQL assumptions ! + ! +The most important and difficult stuff is the serial handling of X.509. ! +The length of these serials was defined in RFC 3280 4.1.2.2. ! +Such serials can have the size of a 20 byte integer. This is larger than ! +the most supported integer types. It is an integer called 256^20. We ! +have to perform a small aproximation for the decimal length: ! + ! +256^10 = 256^2)^10 ! + = 65535^10 ! + = (65535^2)^5 ! + = 4294836225^5 ! + < 4300000000^5 = (43*10^8)^5 ! + = 43^5*10^40 ! + = 147.008.443*10^40 ! + < 10^9*10^40 = 10^49 ! + ! +Some systems support such large decimal numbers. Other systems have a ! +problem with this. Otherwise we need a working ordering at minimum for ! +requests. This does not work if we use C<varchar>. ! + ! +The idea is a small hack. We use BIGINT for real integers and NUMERIC ! +for virtual integers. This means that BIGINT must be mapped to an ! +integer datatype while NUMERIC can be mapped to a character datatype ! +too. If there is a field which is an integer but it must support large ! +certificate serials then we use NUMERIC. Otherwise we use BIGINT. ! + ! +=cut ! + ! $OpenCA::DBI::SQL = { ! TABLE => { ! REQUEST => "request", ! @@ -132,17 +163,16 @@ $OpenCA::DBI::SQL = { ! ## I use here several duplicate array ! ## somewhere I have to stop the complexity ... ! VARIABLE => { ! - DATE => ["submit_date", "TEXT"], ! SUBMIT_DATE => ["submit_date", "TEXT"], FORMAT => ["format", "TEXT"], DATA => ["data", "LONGTEXT"], *************** *** 28,32 **** REQUEST_SERIAL => ["req_key", "BIGINT"], CSR_SERIAL => ["req_key", "BIGINT"], ! @@ -163,11 +163,12 @@ RAO => ["rao", "TEXT"], Operator => ["rao", "TEXT"], --- 71,75 ---- REQUEST_SERIAL => ["req_key", "BIGINT"], CSR_SERIAL => ["req_key", "BIGINT"], ! @@ -163,11 +193,12 @@ $OpenCA::DBI::SQL = { RAO => ["rao", "TEXT"], Operator => ["rao", "TEXT"], *************** *** 43,47 **** SCEP_TID => ["scep_tid", "TEXT"], LOA => ["loa", "TEXT"], ! @@ -216,7 +217,8 @@ "PUBKEY", "NOTAFTER", --- 86,90 ---- SCEP_TID => ["scep_tid", "TEXT"], LOA => ["loa", "TEXT"], ! @@ -216,7 +247,8 @@ $OpenCA::DBI::SQL->{TABLE_STRUCTURE} = "PUBKEY", "NOTAFTER", *************** *** 53,57 **** CA_CERTIFICATE => [ ## real serial senseless because at every time zero ! @@ -228,7 +230,8 @@ "EMAIL", "STATUS", --- 96,100 ---- CA_CERTIFICATE => [ ## real serial senseless because at every time zero ! @@ -228,7 +260,8 @@ $OpenCA::DBI::SQL->{TABLE_STRUCTURE} = "EMAIL", "STATUS", *************** *** 63,67 **** CRR => [ "CRR_SERIAL", ! @@ -505,7 +508,43 @@ ## begin of vendordependent databasestuff ## ############################################ --- 106,110 ---- CRR => [ "CRR_SERIAL", ! @@ -505,7 +538,43 @@ $OpenCA::DBI::MODULETYPE = { ## begin of vendordependent databasestuff ## ############################################ *************** *** 108,112 **** Pg => { TYPE => { ! @@ -514,6 +553,7 @@ LONGTEXT => "text", TEXT_KEY => "text", --- 151,155 ---- Pg => { TYPE => { ! @@ -514,6 +583,7 @@ $OpenCA::DBI::DB = { LONGTEXT => "text", TEXT_KEY => "text", *************** *** 116,120 **** }, DBI_OPTION => { ! @@ -529,6 +569,7 @@ LONGTEXT => "TEXT", TEXT_KEY => "VARCHAR (255)", --- 159,163 ---- }, DBI_OPTION => { ! @@ -529,6 +599,7 @@ $OpenCA::DBI::DB = { LONGTEXT => "TEXT", TEXT_KEY => "VARCHAR (255)", *************** *** 124,128 **** }, DBI_OPTION => {RaiseError => 0, ! @@ -542,7 +583,8 @@ LONGTEXT => "long varchar", ## 255 is the limit for a index key in db2 --- 167,171 ---- }, DBI_OPTION => {RaiseError => 0, ! @@ -542,7 +613,8 @@ $OpenCA::DBI::DB = { LONGTEXT => "long varchar", ## 255 is the limit for a index key in db2 *************** *** 134,138 **** }, DBI_OPTION => { ! @@ -558,6 +600,7 @@ ## 2000 is the limit for varchar in Oracle7 TEXT_KEY => "varchar2 (1999)", --- 177,181 ---- }, DBI_OPTION => { ! @@ -558,6 +630,7 @@ $OpenCA::DBI::DB = { ## 2000 is the limit for varchar in Oracle7 TEXT_KEY => "varchar2 (1999)", *************** *** 142,146 **** }, DBI_OPTION => { ! @@ -1095,8 +1138,14 @@ } --- 185,189 ---- }, DBI_OPTION => { ! @@ -1095,8 +1168,14 @@ sub storeItem_getArguments { } *************** *** 158,162 **** ## enforce status $result {STATUS} = $self->getStatus ( STATUS => $result {STATUS}, ! @@ -1291,6 +1340,8 @@ } } --- 201,205 ---- ## enforce status $result {STATUS} = $self->getStatus ( STATUS => $result {STATUS}, ! @@ -1291,6 +1370,8 @@ sub storeItem_update { } } *************** *** 167,171 **** $bind_values [scalar @bind_values] = $arguments->{NOTAFTER}; } ! @@ -1346,6 +1397,7 @@ if ($attr !~ /^KEY$/ and $arguments->{$attr}); } --- 210,214 ---- $bind_values [scalar @bind_values] = $arguments->{NOTAFTER}; } ! @@ -1346,6 +1427,7 @@ sub storeItem_insert { if ($attr !~ /^KEY$/ and $arguments->{$attr}); } *************** *** 175,179 **** } $query .= ") VALUES ("; ! @@ -1368,6 +1420,8 @@ } if ($arguments->{TABLE} =~ /CERTIFICATE/i) { --- 218,222 ---- } $query .= ") VALUES ("; ! @@ -1368,6 +1450,8 @@ sub storeItem_insert { } if ($arguments->{TABLE} =~ /CERTIFICATE/i) { *************** *** 184,188 **** } $query .= ")"; ! @@ -1474,7 +1528,7 @@ $bind_values [0] = $arguments{KEY}; } else { --- 227,231 ---- } $query .= ")"; ! @@ -1474,7 +1558,7 @@ sub getItem { $bind_values [0] = $arguments{KEY}; } else { *************** *** 193,197 **** undef @bind_values; } ! @@ -1899,8 +1953,11 @@ } --- 236,240 ---- undef @bind_values; } ! @@ -1899,8 +1983,11 @@ sub searchItems { # new one !!! } *************** *** 207,211 **** $self->debug ("searchItems: query: $query"); ! @@ -2029,8 +2086,11 @@ $bind_values [scalar @bind_values] = $arguments{STATUS}; $query .= $self->handleExpiredCert ( \%arguments ) if ($arguments{NOTAFTER}); --- 250,254 ---- $self->debug ("searchItems: query: $query"); ! @@ -2029,8 +2116,11 @@ sub listItems { $bind_values [scalar @bind_values] = $arguments{STATUS}; $query .= $self->handleExpiredCert ( \%arguments ) if ($arguments{NOTAFTER}); |