]> granicus.if.org Git - php/commitdiff
Fix for #34369
authorFrank M. Kromann <fmk@php.net>
Mon, 5 Sep 2005 05:03:21 +0000 (05:03 +0000)
committerFrank M. Kromann <fmk@php.net>
Mon, 5 Sep 2005 05:03:21 +0000 (05:03 +0000)
Add extra parameter to mssql_connect to force a new connection

ext/mssql/php_mssql.c

index 532e763d6d2a60e65f6569ed304bc55f8de288fe..fa51f04503a2ad6496199e123ebbc5bc70c380df 100644 (file)
@@ -376,7 +376,7 @@ static void php_mssql_do_connect(INTERNAL_FUNCTION_PARAMETERS, int persistent)
 {
        char *user, *passwd, *host;
        char *hashed_details;
-       int hashed_details_length;
+       int hashed_details_length, new_link = 0;
        mssql_link mssql, *mssql_ptr;
        char buffer[32];
 
@@ -434,6 +434,25 @@ static void php_mssql_do_connect(INTERNAL_FUNCTION_PARAMETERS, int persistent)
                                sprintf(hashed_details,"mssql_%s_%s_%s",Z_STRVAL_PP(yyhost),Z_STRVAL_PP(yyuser),Z_STRVAL_PP(yypasswd)); /* SAFE */
                        }
                        break;
+               case 4: {
+                               zval **yyhost,**yyuser,**yypasswd, **yynew_link;
+                       
+                               if (zend_get_parameters_ex(4, &yyhost, &yyuser, &yypasswd, &yynew_link) == FAILURE) {
+                                       WRONG_PARAM_COUNT;
+                               }
+                               convert_to_string_ex(yyhost);
+                               convert_to_string_ex(yyuser);
+                               convert_to_string_ex(yypasswd);
+                               convert_to_long_ex(yynew_link);
+                               host = Z_STRVAL_PP(yyhost);
+                               user = Z_STRVAL_PP(yyuser);
+                               passwd = Z_STRVAL_PP(yypasswd);
+                               new_link = Z_LVAL_PP(yynew_link);
+                               hashed_details_length = Z_STRLEN_PP(yyhost)+Z_STRLEN_PP(yyuser)+Z_STRLEN_PP(yypasswd)+5+3;
+                               hashed_details = (char *) emalloc(hashed_details_length+1);
+                               sprintf(hashed_details,"mssql_%s_%s_%s",Z_STRVAL_PP(yyhost),Z_STRVAL_PP(yyuser),Z_STRVAL_PP(yypasswd)); /* SAFE */
+                       }
+                       break;
                default:
                        WRONG_PARAM_COUNT;
                        break;
@@ -483,7 +502,7 @@ static void php_mssql_do_connect(INTERNAL_FUNCTION_PARAMETERS, int persistent)
                list_entry *le;
 
                /* try to find if we already have this link in our persistent list */
-               if (zend_hash_find(&EG(persistent_list), hashed_details, hashed_details_length + 1, (void **) &le)==FAILURE) {  /* we don't */
+               if (new_link || zend_hash_find(&EG(persistent_list), hashed_details, hashed_details_length + 1, (void **) &le)==FAILURE) {  /* we don't */
                        list_entry new_le;
 
                        if (MS_SQL_G(max_links) != -1 && MS_SQL_G(num_links) >= MS_SQL_G(max_links)) {
@@ -596,7 +615,7 @@ static void php_mssql_do_connect(INTERNAL_FUNCTION_PARAMETERS, int persistent)
                 * if it doesn't, open a new mssql link, add it to the resource list,
                 * and add a pointer to it with hashed_details as the key.
                 */
-               if (zend_hash_find(&EG(regular_list), hashed_details, hashed_details_length + 1,(void **) &index_ptr)==SUCCESS) {
+               if (!new_link && zend_hash_find(&EG(regular_list), hashed_details, hashed_details_length + 1,(void **) &index_ptr)==SUCCESS) {
                        int type,link;
                        void *ptr;
 
@@ -686,7 +705,7 @@ static int php_mssql_get_default_link(INTERNAL_FUNCTION_PARAMETERS)
        return MS_SQL_G(default_link);
 }
 
-/* {{{ proto int mssql_connect([string servername [, string username [, string password]]])
+/* {{{ proto int mssql_connect([string servername [, string username [, string password [, bool new_link]]]])
    Establishes a connection to a MS-SQL server */
 PHP_FUNCTION(mssql_connect)
 {
@@ -695,7 +714,7 @@ PHP_FUNCTION(mssql_connect)
 
 /* }}} */
 
-/* {{{ proto int mssql_pconnect([string servername [, string username [, string password]]])
+/* {{{ proto int mssql_pconnect([string servername [, string username [, string password [, bool new_link]]]])
    Establishes a persistent connection to a MS-SQL server */
 PHP_FUNCTION(mssql_pconnect)
 {