php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #30654 OCIPLogon always creates new connection with OCINLogon
Submitted: 2004-11-02 04:30 UTC Modified: 2004-11-03 14:36 UTC
From: fujimoto@php.net Assigned: tony2001
Status: Closed Package: OCI8 related
PHP Version: 4.3.9 OS: Linux
Private report: No CVE-ID:
 [2004-11-02 04:30 UTC] fujimoto@php.net
Description:
------------
OCIPLogon always creates new connection even if the process
already has the connectoin with same user, same password 
and same sid, when it's called with OCINLogon.

This happens when I called OCINLogon after OCIPLogon with
same user, password and sid as OCIPLogon
(please see also following "Reproduce code").

I'm not sure why but when php is trying to shutting down
the resource created by OCINLogon, _oci_close_session()
remove the entry in OCI(user). And then of course,
_oci_open_session() called by OCIPLogon cannot find entry
in OCI(uesr) and creates new connection next time...

and the fix will be something like this?

Index: oci8.c
===================================================================
RCS file: /repository/php-src/ext/oci8/oci8.c,v
retrieving revision 1.183.2.15
diff -r1.183.2.15 oci8.c
2479c2479
<       if (! OCI(shutdown)) {
---
>       if (!OCI(shutdown) && !session->persistent) {


Reproduce code:
---------------
<?php
$ora_user = "foo";
$ora_password = "bar";
$ora_sid = "blabla";
$conn_p = OCIPLogon($ora_user, $ora_password, $ora_sid);
$conn_n = OCINLogon($ora_user, $ora_password, $ora_sid);
?>

Expected result:
----------------
OCIPLogon does not create new connection more than once,
and returns the connection created in previous execution.


Actual result:
--------------
OCIPLogon creates new connection everytime. You can confirm
this in v$session table.


Patches

Add a Patch

Pull Requests

Add a Pull Request

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2004-11-02 09:08 UTC] derick@php.net
Thank you for taking the time to write to us, but this is not
a bug. Please double-check the documentation available at
http://www.php.net/manual/ and the instructions on how to report
a bug at http://bugs.php.net/how-to-report.php

Only connections created with the persistent versoin of the logon function are recorded, just like with any other database extension. No bug here.
 [2004-11-02 09:19 UTC] fujimoto@php.net
I believe you are misunderstanding my words. I know you are
fed up with a lot of bogus bugs but this one's not.

The problem here is the recorded entry which created by
OCI*P*Logon is deleted by the destructor of the connection
created by OCI*N*Logon (in case both of them are created with 
same user, password, sid).

I do not mean such a simple matter as you wrote... (although
the cause of this problem is rather simple one:)

 [2004-11-03 14:36 UTC] tony2001@php.net
This bug has been fixed in CVS.

Snapshots of the sources are packaged every three hours; this change
will be in the next snapshot. You can grab the snapshot at
http://snaps.php.net/.
 
Thank you for the report, and for helping us make PHP better.

Fixed, thanks!

 
PHP Copyright © 2001-2014 The PHP Group
All rights reserved.
Last updated: Thu Apr 17 16:02:22 2014 UTC