cvs: pear /PECL/session_pgsql package.xml session_pgsql.c session_pgsql.h

From: Date: Thu, 16 Jan 2003 07:12:26 +0000
Subject: cvs: pear /PECL/session_pgsql package.xml session_pgsql.c session_pgsql.h
Groups: php.pear.cvs 
Request: Send a blank email to pear-cvs+get-8282@lists.php.net to get a copy of this message
yohgaki Thu Jan 16 02:12:26 2003 EDT Modified files: /pear/PECL/session_pgsql package.xml session_pgsql.c session_pgsql.h Log: Added remote addr logging. Added more clean up code for binary version. Some cosmetic changes to returned array key value and code clean up.

Index: pear/PECL/session_pgsql/package.xml diff -u pear/PECL/session_pgsql/package.xml:1.1 pear/PECL/session_pgsql/package.xml:1.2 --- pear/PECL/session_pgsql/package.xml:1.1 Mon Jan 13 08:19:11 2003 +++ pear/PECL/session_pgsql/package.xml Thu Jan 16 02:12:26 2003 @@ -18,10 +18,10 @@ <license>PHP</license> <release> <state>alpha</state> - <version>0.4.0</version> + <version>0.4.1</version> <date>2002-01-10</date> <notes> - - 1st Pre-alpha relase. + - 1st alpha relase. </notes> <filelist> <file role="src" name="config.m4"/> Index: pear/PECL/session_pgsql/session_pgsql.c diff -u pear/PECL/session_pgsql/session_pgsql.c:1.30 pear/PECL/session_pgsql/session_pgsql.c:1.31 --- pear/PECL/session_pgsql/session_pgsql.c:1.30 Tue Jan 14 15:34:49 2003 +++ pear/PECL/session_pgsql/session_pgsql.c Thu Jan 16 02:12:26 2003 @@ -6,7 +6,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: session_pgsql.c,v 1.30 2003/01/14 20:34:49 yohgaki Exp $ */ +/* $Id: session_pgsql.c,v 1.31 2003/01/16 07:12:26 yohgaki Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" @@ -54,7 +54,7 @@ #endif static void php_session_pgsql_init_globals(php_session_pgsql_globals *session_pgsql_globals_p TSRMLS_DC); -static int php_pg_pgsql_init_servers(TSRMLS_D); +static int php_ps_pgsql_init_servers(TSRMLS_D); static int php_ps_pgsql_create_table(int id TSRMLS_DC); static PGconn *php_ps_pgsql_connect(int id TSRMLS_DC); static PGconn *php_ps_pgsql_get_db(const char *key TSRMLS_DC); @@ -103,20 +103,21 @@ cnt++; } PS_PGSQL(servers) = cnt; + PS_PGSQL(db) = new_value; return SUCCESS; } /* {{{ PHP_INI */ PHP_INI_BEGIN() -STD_PHP_INI_ENTRY("session.pgsql_disable", "0", PHP_INI_SYSTEM, OnUpdateBool, disable, php_session_pgsql_globals, session_pgsql_globals) -STD_PHP_INI_ENTRY("session_pgsql.db", "host=localhost dbname=php_session user=nobody", PHP_INI_SYSTEM|PHP_INI_PERDIR, OnUpdate_session_pgsql_db, db, php_session_pgsql_globals, session_pgsql_globals) -STD_PHP_INI_ENTRY("session_pgsql.sem_file_name",PS_DEFAULT_PGSQL_FILE,PHP_INI_SYSTEM, OnUpdateString, sem_file_name, php_session_pgsql_globals, session_pgsql_globals) -STD_PHP_INI_ENTRY("session.pgsql_create_table","1", PHP_INI_SYSTEM, OnUpdateBool, create_table, php_session_pgsql_globals, session_pgsql_globals) -STD_PHP_INI_ENTRY("session.pgsql_failover_mode","0", PHP_INI_SYSTEM, OnUpdateBool, failover_mode, php_session_pgsql_globals, session_pgsql_globals) -STD_PHP_INI_ENTRY("session.pgsql_use_app_vars","0", PHP_INI_SYSTEM, OnUpdateBool, use_app_vars, php_session_pgsql_globals, session_pgsql_globals) -STD_PHP_INI_ENTRY("session.pgsql_serializable","0", PHP_INI_SYSTEM, OnUpdateBool, serializable, php_session_pgsql_globals, session_pgsql_globals) -STD_PHP_INI_ENTRY("session.pgsql_gc_interval", "3600", PHP_INI_SYSTEM, OnUpdateInt, gc_interval, php_session_pgsql_globals, session_pgsql_globals) +STD_PHP_INI_ENTRY("session.pgsql_disable", "0", PHP_INI_SYSTEM, OnUpdateBool, disable, php_session_pgsql_globals, session_pgsql_globals) +STD_PHP_INI_ENTRY("session_pgsql.db", "host=localhost dbname=php_session user=nobody", PHP_INI_SYSTEM, OnUpdate_session_pgsql_db, db, php_session_pgsql_globals, session_pgsql_globals) +STD_PHP_INI_ENTRY("session_pgsql.sem_file_name", PS_DEFAULT_PGSQL_FILE, PHP_INI_SYSTEM, OnUpdateString, sem_file_name, php_session_pgsql_globals, session_pgsql_globals) +STD_PHP_INI_ENTRY("session.pgsql_create_table", "1", PHP_INI_SYSTEM, OnUpdateBool, create_table, php_session_pgsql_globals, session_pgsql_globals) +STD_PHP_INI_ENTRY("session.pgsql_failover_mode", "0", PHP_INI_SYSTEM, OnUpdateBool, failover_mode, php_session_pgsql_globals, session_pgsql_globals) +STD_PHP_INI_ENTRY("session.pgsql_use_app_vars", "0", PHP_INI_SYSTEM, OnUpdateBool, use_app_vars, php_session_pgsql_globals, session_pgsql_globals) +STD_PHP_INI_ENTRY("session.pgsql_serializable", "0", PHP_INI_SYSTEM, OnUpdateBool, serializable, php_session_pgsql_globals, session_pgsql_globals) +STD_PHP_INI_ENTRY("session.pgsql_gc_interval", "3600", PHP_INI_SYSTEM, OnUpdateInt, gc_interval, php_session_pgsql_globals, session_pgsql_globals) STD_PHP_INI_ENTRY("session.pgsql_vacuum_interval", "18000", PHP_INI_SYSTEM, OnUpdateInt, vacuum_interval, php_session_pgsql_globals, session_pgsql_globals) PHP_INI_END() /* }}} */ @@ -150,7 +151,7 @@ PHP_MINIT(session_pgsql), PHP_MSHUTDOWN(session_pgsql), PHP_RINIT(session_pgsql), PHP_RSHUTDOWN(session_pgsql), PHP_MINFO(session_pgsql), - "0.4.0", + "0.4.1", STANDARD_MODULE_PROPERTIES }; /* }}} */ @@ -228,10 +229,10 @@ } /* initilize postgresql server connections */ - if (php_pg_pgsql_init_servers(TSRMLS_C) == FAILURE) { + if (php_ps_pgsql_init_servers(TSRMLS_C) == FAILURE) { /* No servers are available */ php_log_err("session pgsql: Cannot connect to any PostgreSQL server. Check session_pgsql.db" TSRMLS_CC); - return SUCCESS; /* continuce execution */ + return FAILURE; } /* register pgsql session save handler */ @@ -248,6 +249,28 @@ int i; ELOG("MSHUTDOWN Called"); + + if (PS_PGSQL(disable)) { + return SUCCESS; + } + + /* cleanup globals for users loading extension... + selectively loading session_pgsql does not make sense, though. */ + if (PS_PGSQL(sess_custom)) { + free(PS_PGSQL(sess_custom)); + } + if (PS_PGSQL(sess_error_message)) { + free(PS_PGSQL(sess_error_message)); + } + if (PS_PGSQL(sess_addr_created)) { + free(PS_PGSQL(sess_addr_created)); + } + if (PS_PGSQL(sess_addr_modified)) { + free(PS_PGSQL(sess_addr_modified)); + } + if (PS_PGSQL(remote_addr)) { + free(PS_PGSQL(remote_addr)); + } /* link is closed at shutdown These values will be initilized */ for (i = 0; i < PS_PGSQL(servers); i++) { @@ -258,9 +281,6 @@ free(PS_PGSQL(connstr)[i]); } } - if (PS_PGSQL(disable)) { - return SUCCESS; - } /* clean up mm */ if (ps_pgsql_instance->owner == getpid() && ps_pgsql_instance->mm) { if (ps_pgsql_instance->last_gc) { @@ -281,11 +301,17 @@ */ PHP_RINIT_FUNCTION(session_pgsql) { + zval **remote_addr; + ELOG("RINIT Called"); + + if (PS_PGSQL(disable)) { + return SUCCESS; + } + /* These clean up cannot be done at rshutdown, since it executed - before session write */ + before session write. */ if (PS_PGSQL(sess_custom)) { - /* looks like emalloced memory is freed to early */ free(PS_PGSQL(sess_custom)); PS_PGSQL(sess_custom) = NULL; } @@ -293,6 +319,24 @@ free(PS_PGSQL(sess_error_message)); PS_PGSQL(sess_error_message) = NULL; } + if (PS_PGSQL(sess_addr_created)) { + free(PS_PGSQL(sess_addr_created)); + PS_PGSQL(sess_addr_created) = NULL; + } + if (PS_PGSQL(sess_addr_modified)) { + free(PS_PGSQL(sess_addr_modified)); + PS_PGSQL(sess_addr_modified) = NULL; + } + if (PS_PGSQL(remote_addr)) { + free(PS_PGSQL(remote_addr)); + } + if (zend_hash_find(Z_ARRVAL_P(PG(http_globals)[TRACK_VARS_SERVER]), + "REMOTE_ADDR", sizeof("REMOTE_ADDR"), (void **)&remote_addr) == SUCCESS) { + PS_PGSQL(remote_addr) = strdup(Z_STRVAL_PP(remote_addr)); + } + else { + PS_PGSQL(remote_addr) = strdup(""); + } return SUCCESS; } /* }}} */ @@ -304,9 +348,9 @@ { ELOG("RSHUTDOWN Called"); /* NOTE: RSHUTDOWN is called *before* writing/closing session... */ - if (PS_PGSQL(disable)) { - return SUCCESS; - } +/* if (PS_PGSQL(disable)) { */ +/* return SUCCESS; */ +/* } */ return SUCCESS; } /* }}} */ @@ -334,19 +378,29 @@ } PS_PGSQL(sess_custom) = NULL; PS_PGSQL(sess_error_message) = NULL; + PS_PGSQL(sess_addr_created) = NULL; + PS_PGSQL(sess_addr_modified) = NULL; + PS_PGSQL(remote_addr) = NULL; + } /* }}} */ /* {{{ php_ps_pgsql_init_servers */ -static int php_pg_pgsql_init_servers(TSRMLS_D) +static int php_ps_pgsql_init_servers(TSRMLS_D) { int id; for (id = 0; id < PS_PGSQL(servers); id++) { assert(PS_PGSQL(connstr)[id]); /* if link is bad, NULL is returned */ - PS_PGSQL(pgsql_link)[id] = PQconnectdb(PS_PGSQL(connstr)[id]); - if (PS_PGSQL(pgsql_link)[id] && PS_PGSQL(create_table)) { + if (PS_PGSQL(pgsql_link)[id]) { + PQreset(PS_PGSQL(pgsql_link)[id]); + } + else { + PS_PGSQL(pgsql_link)[id] = PQconnectdb(PS_PGSQL(connstr)[id]); + } + if (PQstatus(PS_PGSQL(pgsql_link)[id]) == CONNECTION_OK + && PS_PGSQL(pgsql_link)[id] && PS_PGSQL(create_table)) { /* if there is problem, link is set to NULL */ if (php_ps_pgsql_create_table(id TSRMLS_CC) == FAILURE) { php_error(E_NOTICE, "session pgsql: Cannot create tables (%s)", PS_PGSQL(connstr)[id]); @@ -376,8 +430,8 @@ "sess_created integer, " "sess_modified integer, " "sess_expire integer, " - "sess_addr_created cidr, " - "sess_addr_modified cidr, " + "sess_addr_created text, " + "sess_addr_modified text, " "sess_counter integer, " "sess_error integer, " "sess_warning integer, " @@ -490,10 +544,11 @@ PS_PGSQL(current_id) = id; } if (!db) { - /* if something wrong. use 1st server that is usable */ + /* if something wrong. use next server that is usable */ + int start_id = PS_PGSQL(current_id); PS_PGSQL(current_id) = -1; - for (id = 0; id < PS_PGSQL(servers); id++) { - if (PS_PGSQL(pgsql_link)[id]) { + if (start_id+1 <= PS_PGSQL(servers)) { + for (id = start_id+1; id < PS_PGSQL(servers) && PS_PGSQL(pgsql_link)[id]; id++) { /* if link is bad, NULL is returned */ db = php_ps_pgsql_connect(id); if (db) { @@ -502,6 +557,14 @@ } } } + for (id = 0; id < start_id && PS_PGSQL(pgsql_link)[id]; id++) { + /* if link is bad, NULL is returned */ + db = php_ps_pgsql_connect(id); + if (db) { + PS_PGSQL(current_id) = id; + break; + } + } } return db; } @@ -634,7 +697,7 @@ PGresult *pg_result; /* ExecStatusType pg_status; */ char query[QUERY_BUF_SIZE+1]; - char *query_tpl = "SELECT sess_expire, sess_counter, sess_error, sess_warning, sess_notice, sess_data, sess_custom FROM php_session WHERE sess_id = '%s';"; + char *query_tpl = "SELECT sess_expire, sess_counter, sess_error, sess_warning, sess_notice, sess_data, sess_custom, sess_created, sess_modified, sess_addr_created, sess_addr_modified FROM php_session WHERE sess_id = '%s';"; int ret = FAILURE; /* start reading */ @@ -674,6 +737,7 @@ } else { char *tmp; + PS_PGSQL(sess_expire) = (int)atoi(PQgetvalue(pg_result, 0, 0)); /* update counter */ PS_PGSQL(sess_cnt) = (int)atoi(PQgetvalue(pg_result, 0, 1)); PS_PGSQL(sess_cnt)++; @@ -687,7 +751,12 @@ *val = estrndup(tmp, *vallen); /* custom field */ tmp = PQgetvalue(pg_result, 0, 6); - PS_PGSQL(sess_custom) = strdup(tmp); + PS_PGSQL(sess_custom) = strdup(tmp); + /* other */ + PS_PGSQL(sess_created) = (int)atoi(PQgetvalue(pg_result, 0, 7)); + PS_PGSQL(sess_modified) = (int)atoi(PQgetvalue(pg_result, 0, 8)); + PS_PGSQL(sess_addr_created) = strdup(PQgetvalue(pg_result, 0, 9)); + PS_PGSQL(sess_addr_modified) = strdup(PQgetvalue(pg_result, 0, 10)); } } ret = SUCCESS; @@ -722,17 +791,20 @@ char *query_delete = "DELETE FROM php_session WHERE sess_id = '%s';"; char *query_insert = - "INSERT INTO php_session (sess_id, sess_created, sess_modified, sess_expire, sess_data, sess_counter, sess_error, sess_warning, sess_notice, sess_custom) " - "VALUES ('%s', %d, %d, %d, '%s', 1, 0, 0, 0 %s);"; + "INSERT INTO php_session (sess_id, sess_name, sess_created, sess_addr_created, sess_modified, sess_expire, sess_data, sess_counter, sess_error, sess_warning, sess_notice, sess_custom) " + "VALUES ('%s', '%s', %d, '%s', %d, %d, '%s', 1, 0, 0, 0 %s);"; char *query_update = - "UPDATE php_session SET sess_data = '%s', sess_modified = %d , sess_expire = %d , sess_counter = %d, sess_error = %d, sess_warning = %d , sess_notice = %d %s" + "UPDATE php_session SET sess_data = '%s', sess_modified = %d, sess_addr_modified = '%s', sess_expire = %d , sess_counter = %d, sess_error = %d, sess_warning = %d , sess_notice = %d %s" "WHERE sess_id = '%s';"; - char *escaped_val, *escaped_custom; + char *escaped_key, *escaped_val, *escaped_custom; smart_str buf= {0}; - int val_len, custom_len; + size_t custom_len, key_len; + key_len = strlen(key); + escaped_key = (char *)emalloc(key_len*2+1); + key_len = PQescapeString(escaped_key, key, key_len); if (PS_PGSQL(sess_del)) { - query_len = strlen(query_delete)+strlen(key); + query_len = strlen(query_delete) + key_len; query = emalloc(query_len+1); snprintf(query, query_len, query_delete, key); pg_result = PQexec(PS_PGSQL(current_db), query); @@ -742,55 +814,69 @@ now = time(NULL); exp = now + PS(gc_maxlifetime); + query_len = key_len; escaped_val = (char *)emalloc(vallen*2+1); - val_len = PQescapeString(escaped_val, val, vallen); + query_len += PQescapeString(escaped_val, val, vallen); + query_len += strlen(PS_PGSQL(remote_addr)); if (PS_PGSQL(sess_new)) { + char *escaped_sess_name; + int name_len; /* INSERT */ + query_len += strlen(query_insert); if (PS_PGSQL(sess_custom) && PS_PGSQL(sess_custom)[0]) { smart_str_appendl(&buf, ", '", 3); custom_len = strlen(PS_PGSQL(sess_custom)); escaped_custom = (char *)emalloc(custom_len*2+1); custom_len = PQescapeString(escaped_custom, PS_PGSQL(sess_custom), custom_len); smart_str_appendl(&buf, escaped_custom, custom_len); - smart_str_appends(&buf, "'"); + smart_str_appends(&buf, "' "); smart_str_0(&buf); efree(escaped_custom); } else { smart_str_appends(&buf, ", ''"); smart_str_0(&buf); - custom_len = 0; } - query_len = strlen(query_insert)+val_len+strlen(key)+custom_len+buf.len+128; + query_len += buf.len; + name_len = strlen(PS(session_name)); + escaped_sess_name = (char *)emalloc(name_len*2+1); + query_len += PQescapeString(escaped_sess_name, PS(session_name), name_len); + query_len += 32*3; /* 32 bytes for an int should be enough */ query = emalloc(query_len+1); - snprintf(query, query_len, query_insert, key, now, now, exp, escaped_val, buf.c); + snprintf(query, query_len, query_insert, + escaped_key, escaped_sess_name, now, PS_PGSQL(remote_addr), now, exp, escaped_val, buf.c); pg_result = PQexec(PS_PGSQL(current_db), query); + efree(escaped_sess_name); } else { /* UPDATE */ + query_len += strlen(query_update); if (PS_PGSQL(sess_custom) && PS_PGSQL(sess_custom)[0]) { smart_str_appends(&buf, ", sess_custom = '"); custom_len = strlen(PS_PGSQL(sess_custom)); escaped_custom = (char *)emalloc(custom_len*2+1); custom_len = PQescapeString(escaped_custom, PS_PGSQL(sess_custom), custom_len); smart_str_appendl(&buf, escaped_custom, custom_len); - smart_str_appends(&buf, "'"); + smart_str_appends(&buf, "' "); smart_str_0(&buf); efree(escaped_custom); } else { smart_str_appends(&buf, ""); smart_str_0(&buf); - custom_len = 0; } - query_len = strlen(query_update)+strlen(key)+val_len+custom_len+buf.len+128; + query_len += buf.len; + query_len += 32*6; /* 32 bytes for an int should be enough */ query = emalloc(query_len+1); - snprintf(query, query_len, query_update, escaped_val, now, exp, PS_PGSQL(sess_cnt), PS_PGSQL(sess_error), PS_PGSQL(sess_warning), PS_PGSQL(sess_notice), buf.c, key); + snprintf(query, query_len, query_update, + escaped_val, now, PS_PGSQL(remote_addr), exp, PS_PGSQL(sess_cnt), + PS_PGSQL(sess_error), PS_PGSQL(sess_warning), PS_PGSQL(sess_notice), buf.c, escaped_key); pg_result = PQexec(PS_PGSQL(current_db), query); } smart_str_free(&buf); PQclear(pg_result); efree(query); + efree(escaped_key); efree(escaped_val); /* save error message is any */ @@ -972,16 +1058,24 @@ { int i; char buf[BUF_SIZE]; + char *servers; if (ZEND_NUM_ARGS()) { WRONG_PARAM_COUNT; } + if (PS_PGSQL(disable)) { + php_error(E_WARNING, "session_pgsql is disabled"); + RETURN_FALSE; + } + array_init(return_value); + servers = safe_estrdup(PS_PGSQL(db)); + add_assoc_string(return_value, "Servers", servers, 0); add_assoc_long(return_value, "Number of Servers", PS_PGSQL(servers)); add_assoc_long(return_value, "Failover Mode", PS_PGSQL(failover_mode)); for (i = 0; i < PS_PGSQL(servers); i++) { - snprintf(buf, BUF_SIZE, "Connection String #%d", i); + snprintf(buf, BUF_SIZE, "Server String #%d", i); add_assoc_string(return_value, buf, PS_PGSQL(connstr)[i], 1); snprintf(buf, BUF_SIZE, "Server Status #%d", i); if (PS_PGSQL(pgsql_link)[i]) { @@ -998,7 +1092,12 @@ Reset connection to session database servsers */ PHP_FUNCTION(session_pgsql_reset) { - if (php_pg_pgsql_init_servers(TSRMLS_C) == FAILURE) { + if (PS_PGSQL(disable)) { + php_error(E_WARNING, "session_pgsql is disabled"); + RETURN_FALSE; + } + + if (php_ps_pgsql_init_servers(TSRMLS_C) == FAILURE) { RETURN_FALSE; } RETURN_TRUE; @@ -1013,6 +1112,11 @@ WRONG_PARAM_COUNT; } + if (PS_PGSQL(disable)) { + php_error(E_WARNING, "session_pgsql is disabled"); + RETURN_FALSE; + } + array_init(return_value); add_assoc_string(return_value, "Session ID", PS(id), 1); add_assoc_long(return_value, "Server ID", PS_PGSQL(current_id)); @@ -1021,6 +1125,21 @@ add_assoc_long(return_value, "Errors", PS_PGSQL(sess_error)); add_assoc_long(return_value, "Warnings", PS_PGSQL(sess_warning)); add_assoc_long(return_value, "Notices", PS_PGSQL(sess_notice)); + add_assoc_long(return_value, "Created", PS_PGSQL(sess_created)); + add_assoc_long(return_value, "Modified", PS_PGSQL(sess_modified)); + add_assoc_long(return_value, "Expires", PS_PGSQL(sess_expire)); + if (PS_PGSQL(sess_addr_created)) { + add_assoc_string(return_value, "Address Created", PS_PGSQL(sess_addr_created), 1); + } + else { + add_assoc_string(return_value, "Address Created", empty_string, 0); + } + if (PS_PGSQL(sess_addr_modified)) { + add_assoc_string(return_value, "Address Modified", PS_PGSQL(sess_addr_modified), 1); + } + else { + add_assoc_string(return_value, "Address Modified", empty_string, 0); + } if (PS_PGSQL(sess_custom)) { add_assoc_string(return_value, "Custom", PS_PGSQL(sess_custom), 1); } @@ -1042,6 +1161,11 @@ RETURN_FALSE; } + if (PS_PGSQL(disable)) { + php_error(E_WARNING, "session_pgsql is disabled"); + RETURN_FALSE; + } + if (PS_PGSQL(sess_custom)) { free(PS_PGSQL(sess_custom)); } @@ -1059,6 +1183,11 @@ if (ZEND_NUM_ARGS()) { WRONG_PARAM_COUNT; } + if (PS_PGSQL(disable)) { + php_error(E_WARNING, "session_pgsql is disabled"); + RETURN_FALSE; + } + if (PS_PGSQL(sess_custom) && PS_PGSQL(sess_custom)[0]) { RETURN_STRING(PS_PGSQL(sess_custom), 1); } @@ -1078,6 +1207,11 @@ RETURN_FALSE; } + if (PS_PGSQL(disable)) { + php_error(E_WARNING, "session_pgsql is disabled"); + RETURN_FALSE; + } + switch (error_level) { case E_ERROR: case E_USER_ERROR: @@ -1114,6 +1248,11 @@ int with_error_message = 0; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|b", &with_error_message) == FAILURE) { + RETURN_FALSE; + } + + if (PS_PGSQL(disable)) { + php_error(E_WARNING, "session_pgsql is disabled"); RETURN_FALSE; } Index: pear/PECL/session_pgsql/session_pgsql.h diff -u pear/PECL/session_pgsql/session_pgsql.h:1.17 pear/PECL/session_pgsql/session_pgsql.h:1.18 --- pear/PECL/session_pgsql/session_pgsql.h:1.17 Tue Jan 14 05:46:35 2003 +++ pear/PECL/session_pgsql/session_pgsql.h Thu Jan 16 02:12:26 2003 @@ -53,8 +53,14 @@ int sess_error; int sess_warning; int sess_notice; + int sess_created; + int sess_modified; + int sess_expire; char *sess_custom; /* malloc/free should be used */ char *sess_error_message; /* malloc/free should be used */ + char *sess_addr_created; /* malloc/free should be used */ + char *sess_addr_modified; /* malloc/free should be used */ + char *remote_addr; /* malloc/free should be used */ int maxlifetime; int app_modified;
« previous php.pear.cvs (#8282) next »