# patched codeigniter's oci8 driver to cater for codepot's usecasees.

# renamed user to user_account
# changed some files to support oracle
This commit is contained in:
2015-04-29 14:31:15 +00:00
parent 21b84fe0cd
commit 3e00b1023e
17 changed files with 281 additions and 97 deletions

View File

@ -11,7 +11,34 @@ default_site_name = "@PACKAGE@"
;------------------------------------------------------------------------------
; database settings
;
; database_driver: mysql for MySQL, postgre for PostgreSQL
; database_driver: mysql, mysqli, postgre, oci8
;
; == MySQL ==
; database_hostname = "localhost"
; database_port = ""
; database_username = "codepot"
; database_password = "codepot"
; database_name = "codepot"
; database_driver = "mysql"
; database_prefix = ""
;
; == PostgresSQL ==
; database_hostname = ""
; database_port = ""
; database_username = "codepot"
; database_password = "codepot"
; database_name = "codepot"
; database_driver = "postgre"
; database_prefix = ""
;
; == Oracle
; database_hostname = "(DESCRIPTION=(ADDRESS=(COMMUNITY=tcp.world)(PROTOCOL=TCP)(HOST=192.168.1.126)(PORT=1521))(CONNECT_DATA=(SID=ORCL)))"
; database_port = ""
; database_username = "scott"
; database_password = "tiger"
; database_name = ""
; database_driver = "oci8"
; database_prefix = "cpot_"
;------------------------------------------------------------------------------
database_hostname = "localhost"
database_port = ""

View File

@ -125,7 +125,7 @@ CREATE TABLE issue_change (
status VARCHAR(32) NOT NULL,
owner VARCHAR(255) NOT NULL,
priority VARCHAR(32) NOT NULL,
comment TEXT NOT NULL,
comment TEXT NOT NULL,
updatedon DATETIME NOT NULL,
updatedby VARCHAR(32) NOT NULL,
@ -183,7 +183,7 @@ CREATE TABLE code_review (
projectid VARCHAR(32) NOT NULL,
rev BIGINT NOT NULL,
sno BIGINT NOT NULL,
comment TEXT NOT NULL,
comment TEXT NOT NULL,
createdon DATETIME NOT NULL,
createdby VARCHAR(32) NOT NULL,
@ -215,7 +215,7 @@ CREATE TABLE user_settings (
icon_name VARCHAR(255) UNIQUE NULL
) charset=utf8 engine=InnoDB;
CREATE TABLE user (
CREATE TABLE user_account (
userid VARCHAR(32) PRIMARY KEY,
passwd VARCHAR(255) NOT NULL,
email VARCHAR(255),

View File

@ -9,7 +9,7 @@
--
--
-- DROP SEQUENCE "cpot_log_id_seq";
-- DROP TABLE "cpot_user";
-- DROP TABLE "cpot_user_account";
-- DROP TABLE "cpot_user_settings";
-- DROP TABLE "cpot_log";
-- DROP TABLE "cpot_code_review";
@ -202,7 +202,7 @@ CREATE TABLE "cpot_user_settings" (
"icon_name" VARCHAR(255) UNIQUE NULL
);
CREATE TABLE "cpot_user" (
CREATE TABLE "cpot_user_account" (
"userid" VARCHAR(32) PRIMARY KEY,
"passwd" VARCHAR(255) NOT NULL,
"email" VARCHAR(255),

View File

@ -143,7 +143,7 @@ CREATE TABLE issue_change (
status VARCHAR(32) NOT NULL,
owner VARCHAR(255) NOT NULL,
priority VARCHAR(32) NOT NULL,
comment TEXT NOT NULL,
comment TEXT NOT NULL,
updatedon TIMESTAMP NOT NULL,
updatedby VARCHAR(32) NOT NULL,
@ -203,7 +203,7 @@ CREATE TABLE code_review (
projectid VARCHAR(32) NOT NULL,
rev BIGINT NOT NULL,
sno BIGINT NOT NULL,
comment TEXT NOT NULL,
comment TEXT NOT NULL,
createdon TIMESTAMP NOT NULL,
createdby VARCHAR(32) NOT NULL,
@ -236,7 +236,7 @@ CREATE TABLE user_settings (
icon_name VARCHAR(255) UNIQUE NULL
);
CREATE TABLE "user" (
CREATE TABLE user_account (
userid VARCHAR(32) PRIMARY KEY,
passwd VARCHAR(255) NOT NULL,
email VARCHAR(255),

View File

@ -162,15 +162,9 @@ sub authenticate_ldap
sub authenticate_database
{
my ($dbh, $prefix, $userid, $password, $driver) = @_;
my ($dbh, $prefix, $userid, $password, $qc) = @_;
my $user_table_name = "${prefix}user";
if ($driver eq 'postgre' && length($prefix) <= 0)
{
$user_table_name = '"user"';
}
my $query = $dbh->prepare ("SELECT userid,passwd FROM ${user_table_name} WHERE userid=? and enabled='Y'");
my $query = $dbh->prepare ("SELECT ${qc}userid${qc},${qc}passwd${qc} FROM ${qc}${prefix}user_account${qc} WHERE ${qc}userid${qc}=? and ${qc}enabled${qc}='Y'");
if (!$query || !$query->execute ($userid))
{
return (-1, $dbh->errstr());
@ -201,15 +195,30 @@ sub open_database
my $dbport = $cfg->{database_port};
if ($dbtype eq 'postgre') { $dbtype = 'Pg'; }
elsif ($dbtype eq 'oci8') { $dbtype = 'Oracle'; }
elsif ($dbtype eq 'mysqli') { $dbtype = 'mysql'; }
my $dbstr = "DBI:$dbtype:database=$dbname;";
if (length($dbhost) > 0) { $dbstr .= "host=$dbhost;"; }
if (length($dbport) > 0) { $dbstr .= "port=$dbport;"; }
my $dbstr;
my $dbuser;
my $dbpass;
if ($dbtype eq 'Oracle')
{
$dbstr = "DBI:$dbtype:";
$dbuser = $cfg->{database_username} . '/' . $cfg->{database_password} . '@' . $dbhost;
$dbpass = '';
}
else
{
$dbstr = "DBI:$dbtype:database=$dbname;";
if (length($dbhost) > 0) { $dbstr .= "host=$dbhost;"; }
if (length($dbport) > 0) { $dbstr .= "port=$dbport;"; }
$dbuser = $cfg->{database_username};
$dbpass = $cfg->{database_password};
}
my $dbh = DBI->connect(
$dbstr,
$cfg->{database_username},
$cfg->{database_password},
$dbstr, $dbuser, $dbpass,
{ RaiseError => 0, PrintError => 0, AutoCommit => 0 }
);
@ -224,9 +233,9 @@ sub close_database
sub is_project_member
{
my ($dbh, $prefix, $projectid, $userid) = @_;
my ($dbh, $prefix, $projectid, $userid, $qc) = @_;
my $query = $dbh->prepare ("SELECT projectid FROM ${prefix}project_membership WHERE userid=? AND projectid=?");
my $query = $dbh->prepare ("SELECT ${qc}projectid${qc} FROM ${qc}${prefix}project_membership${qc} WHERE ${qc}userid${qc}=? AND ${qc}projectid${qc}=?");
if (!$query || !$query->execute ($userid, $projectid))
{
return (-1, $dbh->errstr());
@ -239,9 +248,9 @@ sub is_project_member
sub is_project_public
{
my ($dbh, $prefix, $projectid) = @_;
my ($dbh, $prefix, $projectid, $qc) = @_;
my $query = $dbh->prepare ("SELECT public FROM ${prefix}project WHERE id=?");
my $query = $dbh->prepare ("SELECT ${qc}public${qc} FROM ${qc}${prefix}project${qc} WHERE ${qc}id${qc}=?");
if (!$query || !$query->execute ($projectid))
{
return (-1, $dbh->errstr());
@ -275,6 +284,9 @@ sub __handler
my $member = undef;
my $errmsg = undef;
my $qc = '';
if ($cfg->{database_driver} eq 'oci8') { $qc = '"'; }
if ($r->proxyreq() == Apache2::Const::PROXYREQ_PROXY)
{
$author = $r->headers_in->{'Proxy-Authorization'};
@ -301,7 +313,7 @@ sub __handler
if ($is_method_r)
{
($public, $errmsg) = is_project_public ($dbh, $cfg->{database_prefix}, $repo);
($public, $errmsg) = is_project_public ($dbh, $cfg->{database_prefix}, $repo, $qc);
if ($public <= -1)
{
# failed to contact the authentication server
@ -326,7 +338,7 @@ sub __handler
elsif ($cfg->{login_model} eq 'DbLoginModel')
{
($auth, $errmsg) = authenticate_database (
$dbh, $cfg->{database_prefix}, $userid, $password, $cfg->{database_driver});
$dbh, $cfg->{database_prefix}, $userid, $password, $qc);
if ($auth <= -1)
{
$r->log_error ("Database error - $errmsg");
@ -352,7 +364,7 @@ sub __handler
return Apache2::Const::OK;
}
($member, $errmsg) = is_project_member ($dbh, $cfg->{database_prefix}, $repo, $userid);
($member, $errmsg) = is_project_member ($dbh, $cfg->{database_prefix}, $repo, $userid, $qc);
if ($member <= -1)
{
$r->log_error ("Cannot check project membership - $errmsg");

View File

@ -12,6 +12,8 @@ my $REPO = $ARGV[0];
my $REPOBASE = basename($REPO);
my $REV = $ARGV[1];
my $QC = '';
sub get_config
{
my $cfg = new Config::Simple();
@ -44,15 +46,31 @@ sub open_database
my $dbport = $cfg->{database_port};
if ($dbtype eq 'postgre') { $dbtype = 'Pg'; }
elsif ($dbtype eq 'oci8') { $dbtype = 'Oracle'; }
elsif ($dbtype eq 'mysqli') { $dbtype = 'mysql'; }
my $dbstr = "DBI:$dbtype:database=$dbname;";
if (length($dbhost) > 0) { $dbstr .= "host=$dbhost;"; }
if (length($dbport) > 0) { $dbstr .= "port=$dbport;"; }
my $dbstr;
my $dbuser;
my $dbpass;
if ($dbtype eq 'Oracle')
{
$QC = '"';
$dbstr = "DBI:$dbtype:";
$dbuser = $cfg->{database_username} . '/' . $cfg->{database_password} . '@' . $dbhost;
$dbpass = '';
}
else
{
$dbstr = "DBI:$dbtype:database=$dbname;";
if (length($dbhost) > 0) { $dbstr .= "host=$dbhost;"; }
if (length($dbport) > 0) { $dbstr .= "port=$dbport;"; }
$dbuser = $cfg->{database_username};
$dbpass = $cfg->{database_password};
}
my $dbh = DBI->connect(
$dbstr,
$cfg->{database_username},
$cfg->{database_password},
$dbstr, $dbuser, $dbpass,
{ RaiseError => 0, PrintError => 0, AutoCommit => 0 }
);
@ -75,12 +93,21 @@ sub write_commit_log
#| 895 | code | codepot | svn,codepot,72 | 2011-10-10 14:26:43 | commit | hyunghwan.chung |
my $message = "svn,$projectid,$revision";
my $createdon = strftime ('%Y-%m-%d %H:%M:%S', localtime());
# the PHP side is executing ALTER SESSION SET NLS_TIMESTAMP_FORMAT='YYYY-MM-DD HH24:MI:SS.FF.
# do i have to do it here or use the database time (CURRENT_TIMESTAMP) instead?
# make sure that you have the same time between the app server and the data server.
# to minize side-effect of using the time of data server.
#my $createdon = strftime ('%Y-%m-%d %H:%M:%S', localtime());
$dbh->begin_work ();
my $query = $dbh->prepare ("INSERT INTO ${prefix}log (type,projectid,message,createdon,action,userid) VALUES (?,?,?,?,?,?)");
if (!$query || !$query->execute ('code', $projectid, $message, $createdon, 'commit', $userid))
#my $query = $dbh->prepare ("INSERT INTO ${QC}${prefix}log${QC} (${QC}type${QC},${QC}projectid${QC},${QC}message${QC},${QC}createdon${QC},${QC}action${QC},${QC}userid${QC}) VALUES (?,?,?,?,?,?)");
#if (!$query || !$query->execute ('code', $projectid, $message, $createdon, 'commit', $userid))
my $query = $dbh->prepare ("INSERT INTO ${QC}${prefix}log${QC} (${QC}type${QC},${QC}projectid${QC},${QC}message${QC},${QC}createdon${QC},${QC}action${QC},${QC}userid${QC}) VALUES (?,?,?,CURRENT_TIMESTAMP,?,?)");
if (!$query || !$query->execute ('code', $projectid, $message, 'commit', $userid))
{
my $errstr = $dbh->errstr();
$query->finish ();

View File

@ -15,6 +15,8 @@ my $USER = $ARGV[2];
my $PROPNAME = $ARGV[3];
my $ACTION = $ARGV[4];
my $QC = '';
# [STDIN] PROPVAL ** the old property value is passed via STDIN.
sub get_config
@ -49,15 +51,31 @@ sub open_database
my $dbport = $cfg->{database_port};
if ($dbtype eq 'postgre') { $dbtype = 'Pg'; }
elsif ($dbtype eq 'oci8') { $dbtype = 'Oracle'; }
elsif ($dbtype eq 'mysqli') { $dbtype = 'mysql'; }
my $dbstr = "DBI:$dbtype:database=$dbname;";
if (length($dbhost) > 0) { $dbstr .= "host=$dbhost;"; }
if (length($dbport) > 0) { $dbstr .= "port=$dbport;"; }
my $dbstr;
my $dbuser;
my $dbpass;
if ($dbtype eq 'Oracle')
{
$QC = '"';
$dbstr = "DBI:$dbtype:";
$dbuser = $cfg->{database_username} . '/' . $cfg->{database_password} . '@' . $dbhost;
$dbpass = '';
}
else
{
$dbstr = "DBI:$dbtype:database=$dbname;";
if (length($dbhost) > 0) { $dbstr .= "host=$dbhost;"; }
if (length($dbport) > 0) { $dbstr .= "port=$dbport;"; }
$dbuser = $cfg->{database_username};
$dbpass = $cfg->{database_password};
}
my $dbh = DBI->connect(
$dbstr,
$cfg->{database_username},
$cfg->{database_password},
$dbstr, $dbuser, $dbpass,
{ RaiseError => 0, PrintError => 0, AutoCommit => 0 }
);
@ -84,7 +102,7 @@ sub write_revprop_change_log
$dbh->begin_work ();
my $query = $dbh->prepare ("INSERT INTO ${prefix}log (type,projectid,message,createdon,action,userid) VALUES (?,?,?,?,?,?)");
my $query = $dbh->prepare ("INSERT INTO ${QC}${prefix}log${QC} (${QC}type${QC},${QC}projectid${QC},${QC}message${QC},${QC}createdon${QC},${QC}action${QC},${QC}userid${QC}) VALUES (?,?,?,?,?,?)");
if (!$query || !$query->execute ('code', $projectid, $message, $createdon, 'revpropchange', $userid))
{
my $errstr = $dbh->errstr();

View File

@ -15,6 +15,8 @@ my $REPOFS = $ARGV[0];
my $REPOBASE = basename($REPOFS);
my $TRANSACTION = $ARGV[1];
my $QC = '';
my %SVN_ACTIONS =
(
'A ' => 'add',
@ -69,15 +71,31 @@ sub open_database
my $dbport = $cfg->{database_port};
if ($dbtype eq 'postgre') { $dbtype = 'Pg'; }
elsif ($dbtype eq 'oci8') { $dbtype = 'Oracle'; }
elsif ($dbtype eq 'mysqli') { $dbtype = 'mysql'; }
my $dbstr = "DBI:$dbtype:database=$dbname;";
if (length($dbhost) > 0) { $dbstr .= "host=$dbhost;"; }
if (length($dbport) > 0) { $dbstr .= "port=$dbport;"; }
my $dbstr;
my $dbuser;
my $dbpass;
if ($dbtype eq 'Oracle')
{
$QC = '"';
$dbstr = "DBI:$dbtype:";
$dbuser = $cfg->{database_username} . '/' . $cfg->{database_password} . '@' . $dbhost;
$dbpass = '';
}
else
{
$dbstr = "DBI:$dbtype:database=$dbname;";
if (length($dbhost) > 0) { $dbstr .= "host=$dbhost;"; }
if (length($dbport) > 0) { $dbstr .= "port=$dbport;"; }
$dbuser = $cfg->{database_username};
$dbpass = $cfg->{database_password};
}
my $dbh = DBI->connect(
$dbstr,
$cfg->{database_username},
$cfg->{database_password},
$dbstr, $dbuser, $dbpass,
{ RaiseError => 0, PrintError => 0, AutoCommit => 0 }
);
@ -94,7 +112,7 @@ sub is_project_member
{
my ($dbh, $prefix, $projectid, $userid) = @_;
my $query = $dbh->prepare ("SELECT projectid FROM ${prefix}project_membership WHERE userid=? AND projectid=?");
my $query = $dbh->prepare ("SELECT ${QC}projectid${QC} FROM ${QC}${prefix}project_membership${QC} WHERE ${QC}userid${QC}=? AND ${QC}projectid${QC}=?");
if (!$query || !$query->execute ($userid, $projectid))
{
return (-1, $dbh->errstr());
@ -109,7 +127,7 @@ sub is_project_commitable
{
my ($dbh, $prefix, $projectid) = @_;
my $query = $dbh->prepare ("SELECT commitable FROM ${prefix}project WHERE id=?");
my $query = $dbh->prepare ("SELECT ${QC}commitable${QC} FROM ${QC}${prefix}project${QC} WHERE ${QC}id${QC}=?");
if (!$query || !$query->execute ($projectid))
{
return (-1, $dbh->errstr());

View File

@ -18,6 +18,8 @@ my $USER = $ARGV[2];
my $PROPNAME = $ARGV[3];
my $ACTION = $ARGV[4];
my $QC = '';
sub get_config
{
my $cfg = new Config::Simple();
@ -52,15 +54,31 @@ sub open_database
my $dbport = $cfg->{database_port};
if ($dbtype eq 'postgre') { $dbtype = 'Pg'; }
elsif ($dbtype eq 'oci8') { $dbtype = 'Oracle'; }
elsif ($dbtype eq 'mysqli') { $dbtype = 'mysql'; }
my $dbstr = "DBI:$dbtype:database=$dbname;";
if (length($dbhost) > 0) { $dbstr .= "host=$dbhost;"; }
if (length($dbport) > 0) { $dbstr .= "port=$dbport;"; }
my $dbstr;
my $dbuser;
my $dbpass;
if ($dbtype eq 'Oracle')
{
$QC = '"';
$dbstr = "DBI:$dbtype:";
$dbuser = $cfg->{database_username} . '/' . $cfg->{database_password} . '@' . $dbhost;
$dbpass = '';
}
else
{
$dbstr = "DBI:$dbtype:database=$dbname;";
if (length($dbhost) > 0) { $dbstr .= "host=$dbhost;"; }
if (length($dbport) > 0) { $dbstr .= "port=$dbport;"; }
$dbuser = $cfg->{database_username};
$dbpass = $cfg->{database_password};
}
my $dbh = DBI->connect(
$dbstr,
$cfg->{database_username},
$cfg->{database_password},
$dbstr, $dbuser, $dbpass,
{ RaiseError => 0, PrintError => 0, AutoCommit => 0 }
);
@ -77,7 +95,7 @@ sub is_project_member
{
my ($dbh, $prefix, $projectid, $userid) = @_;
my $query = $dbh->prepare ("SELECT projectid FROM ${prefix}project_membership WHERE userid=? AND projectid=?");
my $query = $dbh->prepare ("SELECT ${QC}projectid${QC} FROM ${QC}${prefix}project_membership${QC} WHERE ${QC}userid${QC}=? AND ${QC}projectid${QC}=?");
if (!$query || !$query->execute ($userid, $projectid))
{
return (-1, $dbh->errstr());

View File

@ -10,6 +10,8 @@ my $CFG_FILE = '@CFGDIR@/codepot.ini';
my $REPOBASE = basename($ARGV[0]);
my $USER = $ARGV[1];
my $QC = '';
sub get_config
{
my $cfg = new Config::Simple();
@ -42,15 +44,31 @@ sub open_database
my $dbport = $cfg->{database_port};
if ($dbtype eq 'postgre') { $dbtype = 'Pg'; }
elsif ($dbtype eq 'oci8') { $dbtype = 'Oracle'; }
elsif ($dbtype eq 'mysqli') { $dbtype = 'mysql'; }
my $dbstr = "DBI:$dbtype:database=$dbname;";
if (length($dbhost) > 0) { $dbstr .= "host=$dbhost;"; }
if (length($dbport) > 0) { $dbstr .= "port=$dbport;"; }
my $dbstr;
my $dbuser;
my $dbpass;
if ($dbtype eq 'Oracle')
{
$QC = '"';
$dbstr = "DBI:$dbtype:";
$dbuser = $cfg->{database_username} . '/' . $cfg->{database_password} . '@' . $dbhost;
$dbpass = '';
}
else
{
$dbstr = "DBI:$dbtype:database=$dbname;";
if (length($dbhost) > 0) { $dbstr .= "host=$dbhost;"; }
if (length($dbport) > 0) { $dbstr .= "port=$dbport;"; }
$dbuser = $cfg->{database_username};
$dbpass = $cfg->{database_password};
}
my $dbh = DBI->connect(
$dbstr,
$cfg->{database_username},
$cfg->{database_password},
$dbstr, $dbuser, $dbpass,
{ RaiseError => 0, PrintError => 0, AutoCommit => 0 }
);
@ -67,7 +85,7 @@ sub is_project_member
{
my ($dbh, $prefix, $projectid, $userid) = @_;
my $query = $dbh->prepare ("SELECT projectid FROM ${prefix}project_membership WHERE userid=? AND projectid=?");
my $query = $dbh->prepare ("SELECT ${QC}projectid${QC} FROM ${QC}${prefix}project_membership${QC} WHERE ${QC}userid${QC}=? AND ${QC}projectid${QC}=?");
if (!$query || !$query->execute ($userid, $projectid))
{
return (-1, $dbh->errstr());
@ -82,7 +100,7 @@ sub is_project_commitable
{
my ($dbh, $prefix, $projectid) = @_;
my $query = $dbh->prepare ("SELECT commitable FROM ${prefix}project WHERE id=?");
my $query = $dbh->prepare ("SELECT ${QC}commitable${QC} FROM ${QC}${prefix}project${QC} WHERE ${QC}id${QC}=?");
if (!$query || !$query->execute ($projectid))
{
return (-1, $dbh->errstr());