| 2 |
* |
* |
| 3 |
* $Revision$ |
* $Revision$ |
| 4 |
* $Log$ |
* $Log$ |
| 5 |
|
* Revision 1.32 2004/12/25 09:46:47 youi |
| 6 |
|
* MySQL+MyODBCで動作するように修正した. |
| 7 |
|
* |
| 8 |
* Revision 1.31 2004/12/21 11:42:59 youi |
* Revision 1.31 2004/12/21 11:42:59 youi |
| 9 |
* コメントの引数,戻り値の説明などを追加. |
* コメントの引数,戻り値の説明などを追加. |
| 10 |
* |
* |
| 148 |
#include <errmsg.h> |
#include <errmsg.h> |
| 149 |
#include <string> |
#include <string> |
| 150 |
#include <assert.h> |
#include <assert.h> |
| 151 |
|
#include <sql.h> |
| 152 |
|
#include <sqlext.h> |
| 153 |
using namespace std; |
using namespace std; |
| 154 |
|
|
| 155 |
#include "common.h" |
#include "common.h" |
| 159 |
#include "criteria.h" |
#include "criteria.h" |
| 160 |
#include "commonal.h" |
#include "commonal.h" |
| 161 |
|
|
|
#ifdef IMPORT_MYSQLDLL |
|
|
typedef MYSQL* (__stdcall *mysql_init_t)(MYSQL *mysql); |
|
|
typedef void (__stdcall *mysql_close_t)(MYSQL *mysql); |
|
|
typedef MYSQL* (__stdcall *mysql_real_connect_t)(MYSQL *mysql, const char *host, const char *user, const char *passwd, const char *db, unsigned int port, const char *unix_socket, unsigned int client_flag); |
|
|
typedef unsigned long (__stdcall *mysql_real_escape_string_t)(MYSQL *mysql, char *to, const char *from, unsigned long length); |
|
|
typedef MYSQL_RES* (__stdcall *mysql_store_result_t)(MYSQL *mysql); |
|
|
typedef MYSQL_RES* (__stdcall *mysql_use_result_t)(MYSQL *mysql); |
|
|
typedef int (__stdcall *mysql_query_t)(MYSQL *mysql, const char *query); |
|
|
typedef my_ulonglong (__stdcall *mysql_num_rows_t)(MYSQL_RES *result); |
|
|
typedef MYSQL_ROW (__stdcall *mysql_fetch_row_t)(MYSQL_RES *result); |
|
|
typedef unsigned int (__stdcall *mysql_errno_t)(MYSQL *mysql); |
|
|
typedef char* (__stdcall *mysql_error_t)(MYSQL *mysql); |
|
|
typedef my_ulonglong (__stdcall *mysql_insert_id_t)(MYSQL *mysql); |
|
|
typedef void (__stdcall *mysql_free_result_t)(MYSQL_RES *result); |
|
|
typedef my_ulonglong (_stdcall* mysql_affected_rows_t)(MYSQL *mysql); |
|
|
|
|
|
mysql_init_t fp_mysql_init = NULL; |
|
|
mysql_close_t fp_mysql_close = NULL; |
|
|
mysql_real_connect_t fp_mysql_real_connect = NULL; |
|
|
mysql_real_escape_string_t fp_mysql_real_escape_string = NULL; |
|
|
mysql_store_result_t fp_mysql_store_result = NULL; |
|
|
mysql_use_result_t fp_mysql_use_result = NULL; |
|
|
mysql_query_t fp_mysql_query = NULL; |
|
|
mysql_num_rows_t fp_mysql_num_rows = NULL; |
|
|
mysql_fetch_row_t fp_mysql_fetch_row = NULL; |
|
|
mysql_errno_t fp_mysql_errno = NULL; |
|
|
mysql_error_t fp_mysql_error = NULL; |
|
|
mysql_insert_id_t fp_mysql_insert_id = NULL; |
|
|
mysql_free_result_t fp_mysql_free_result = NULL; |
|
|
mysql_affected_rows_t fp_mysql_affected_rows = NULL; |
|
|
#else |
|
|
#define fp_mysql_init mysql_init |
|
|
#define fp_mysql_close mysql_close |
|
|
#define fp_mysql_real_connect mysql_real_connect |
|
|
#define fp_mysql_real_escape_string mysql_real_escape_string |
|
|
#define fp_mysql_store_result mysql_store_result |
|
|
#define fp_mysql_use_result mysql_use_result |
|
|
#define fp_mysql_query mysql_query |
|
|
#define fp_mysql_num_rows mysql_num_rows |
|
|
#define fp_mysql_fetch_row mysql_fetch_row |
|
|
#define fp_mysql_errno mysql_errno |
|
|
#define fp_mysql_error mysql_error |
|
|
#define fp_mysql_insert_id mysql_insert_id |
|
|
#define fp_mysql_free_result mysql_free_result |
|
|
#define fp_mysql_affected_rows mysql_affected_rows |
|
|
#endif |
|
|
|
|
|
static MYSQL* mysql = NULL; //!< MySQLのハンドル |
|
| 162 |
static string dbprefix; //!< XOOPSデータベーステーブルのPREFIX |
static string dbprefix; //!< XOOPSデータベーステーブルのPREFIX |
| 163 |
|
|
| 164 |
|
static SQLHANDLE henv = NULL; |
| 165 |
|
static SQLHANDLE hdbc = NULL; |
| 166 |
|
static SQLHANDLE hstmt = NULL; |
| 167 |
|
|
| 168 |
|
static string odbcDiagString( SQLHANDLE hstmt, SQLRETURN sqlcode ); |
| 169 |
|
|
| 170 |
|
static result_t countResultRows( const char* sql, SQLINTEGER* count ) |
| 171 |
|
{ |
| 172 |
|
result_t ret = RES_ERROR; |
| 173 |
|
SQLRETURN sqlcode; |
| 174 |
|
SQLHANDLE hstmt = NULL; |
| 175 |
|
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) { |
| 176 |
|
if( ( sqlcode = SQLExecDirect( hstmt, (SQLCHAR*)sql, strlen( sql ) ) ) == SQL_SUCCESS ){ |
| 177 |
|
*count = 0; |
| 178 |
|
while( ( sqlcode = SQLFetch( hstmt ) ) == SQL_SUCCESS ) ( *count )++; |
| 179 |
|
ret = RES_OK; |
| 180 |
|
}else{ |
| 181 |
|
string s( "SQLExecDirect in countResultRows " ); |
| 182 |
|
s += odbcDiagString( hstmt, sqlcode ); |
| 183 |
|
s += "sql="; |
| 184 |
|
s += string( sql ); |
| 185 |
|
setLastErrorString( s.c_str( ) ); |
| 186 |
|
ret = RES_DB_QUERY_ERROR; |
| 187 |
|
} |
| 188 |
|
SQLFreeHandle( SQL_HANDLE_STMT, hstmt ); |
| 189 |
|
} |
| 190 |
|
return ret; |
| 191 |
|
} |
| 192 |
|
|
| 193 |
|
/** |
| 194 |
|
* |
| 195 |
|
* 文字列コピー. |
| 196 |
|
* 指定文字数をコピーし,バッファの最後をNULL終端する. |
| 197 |
|
* ( dstのサイズ >= len + 1 )であること |
| 198 |
|
* |
| 199 |
|
*/ |
| 200 |
|
static char* strncpy2( char* dst, const char* src, int len ) |
| 201 |
|
{ |
| 202 |
|
strncpy( dst, src, len ); |
| 203 |
|
dst[ len ] = '\0'; |
| 204 |
|
// fprintf( stderr, "strncpy2 '%s'\n", dst ); |
| 205 |
|
return dst; |
| 206 |
|
} |
| 207 |
|
|
| 208 |
|
/** |
| 209 |
|
* |
| 210 |
|
* SQLの実行結果からエラー文字列を生成する |
| 211 |
|
* |
| 212 |
|
* @param hstmt SQL文のハンドル |
| 213 |
|
* @param sqlcode SQLExecDirect,SQLExecuteの戻り値 |
| 214 |
|
* @return エラー文字列 |
| 215 |
|
*/ |
| 216 |
|
static string odbcDiagString( SQLHANDLE hstmt, SQLRETURN sqlcode ) |
| 217 |
|
{ |
| 218 |
|
string s; |
| 219 |
|
if( sqlcode == SQL_ERROR || sqlcode == SQL_SUCCESS_WITH_INFO ){ |
| 220 |
|
SQLCHAR SQLState[6]; |
| 221 |
|
SQLINTEGER NativeError; |
| 222 |
|
SQLCHAR MessageText[ 1024 ]; |
| 223 |
|
SQLSMALLINT BufferLength; |
| 224 |
|
SQLSMALLINT TextLength; |
| 225 |
|
SQLGetDiagRec( SQL_HANDLE_STMT, hstmt, 1, SQLState, &NativeError, MessageText, 1024, &TextLength ); |
| 226 |
|
|
| 227 |
|
s += string( (char*)MessageText ); |
| 228 |
|
s += " SQLSTATE="; |
| 229 |
|
s += string( (char*)SQLState ); |
| 230 |
|
|
| 231 |
|
} |
| 232 |
|
s += " sqlcode="; |
| 233 |
|
s += intToString( sqlcode ); |
| 234 |
|
return s; |
| 235 |
|
} |
| 236 |
|
|
| 237 |
/** |
/** |
| 238 |
* |
* |
| 239 |
* phpのaddslashesと同じ。 |
* 指定カラムの値を取り出してその文字列を返す |
| 240 |
* |
* |
| 241 |
* @param addslashesすべき文字列。NULL指定不可。 |
*/ |
| 242 |
* @return addslashesされた文字列 |
string getResultCol( SQLHANDLE hstmt, int col ) |
| 243 |
|
{ |
| 244 |
|
string s; |
| 245 |
|
SQLRETURN sqlcode; |
| 246 |
|
SQLCHAR BinaryPtr[5000]; |
| 247 |
|
SQLUINTEGER PartID; |
| 248 |
|
SQLINTEGER PartIDInd, BinaryLenOrInd, NumBytes; |
| 249 |
|
SQLRETURN rc; |
| 250 |
|
|
| 251 |
|
while ( ( sqlcode = SQLGetData(hstmt, col, SQL_C_CHAR, BinaryPtr, sizeof(BinaryPtr), |
| 252 |
|
&BinaryLenOrInd)) != SQL_NO_DATA) { |
| 253 |
|
NumBytes = (BinaryLenOrInd > 5000) || (BinaryLenOrInd == SQL_NO_TOTAL) ? 5000 : BinaryLenOrInd; |
| 254 |
|
s += string( (char*)BinaryPtr, NumBytes ); |
| 255 |
|
} |
| 256 |
|
// fprintf( stderr, "getResultCol col=%d ret='%s'\n", col, s.c_str()); |
| 257 |
|
return s; |
| 258 |
|
} |
| 259 |
|
|
| 260 |
|
|
| 261 |
|
/** |
| 262 |
|
* |
| 263 |
|
* クォートなどを\記号でエスケープする |
| 264 |
|
* |
| 265 |
|
* @param str addslashesすべき文字列。NULL指定不可。 |
| 266 |
|
* @return 変換後の文字列 |
| 267 |
*/ |
*/ |
| 268 |
string addSlashes( const char *str ) |
string addSlashes( const char *str ) |
| 269 |
{ |
{ |
| 270 |
if ( mysql == NULL ){ |
if ( hdbc == NULL ){ |
| 271 |
string s; |
string s; |
| 272 |
return s; |
return s; |
| 273 |
} |
}else{ |
| 274 |
int len = strlen(str); |
string s( str ); |
| 275 |
char *buf = new char[len*2+1]; |
return s; |
| 276 |
int bufLen = fp_mysql_real_escape_string( mysql, buf, str, len ); |
} |
| 277 |
string s( buf, bufLen ); |
|
| 278 |
|
int len = strlen(str) * 3; |
| 279 |
|
char* dst = new char[ len ]; |
| 280 |
|
const char* from = str; |
| 281 |
|
char* to = dst; |
| 282 |
|
while( *from != '\0' ){ |
| 283 |
|
switch( *from ){ |
| 284 |
|
case '\'': |
| 285 |
|
case '\"': |
| 286 |
|
case ';': |
| 287 |
|
*to = '\\'; to++; |
| 288 |
|
break; |
| 289 |
|
} |
| 290 |
|
*to = *from; to++; |
| 291 |
|
from++; |
| 292 |
|
} |
| 293 |
|
*to = '\0'; |
| 294 |
|
string s( dst ); |
| 295 |
|
delete[] dst; |
| 296 |
return s; |
return s; |
| 297 |
} |
} |
| 298 |
|
|
| 309 |
static bool gidExists( groupid_t gid ) |
static bool gidExists( groupid_t gid ) |
| 310 |
{ |
{ |
| 311 |
string sql; |
string sql; |
| 312 |
MYSQL_RES* result; |
SQLRETURN sqlcode; |
| 313 |
MYSQL_ROW row; |
SQLHANDLE hstmt = NULL; |
| 314 |
|
|
| 315 |
|
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) != SQL_SUCCESS ) { |
| 316 |
|
setLastErrorString( "SQLAllocHandle(SQL_HANDLE_STMT,...) in gidExists" ); |
| 317 |
|
return false; |
| 318 |
|
} |
| 319 |
|
|
| 320 |
sql = "SELECT * FROM " + dbprefix + "_vpaccount_groups "; |
sql = "SELECT * FROM " + dbprefix + "_vpaccount_groups "; |
| 321 |
sql += "WHERE gid=" + string( unsignedIntToString( gid ) ); |
sql += "WHERE gid=" + string( unsignedIntToString( gid ) ); |
| 322 |
if( fp_mysql_query( mysql, sql.c_str( ) ) ){ |
if( ( sqlcode = SQLExecDirect( hstmt, (SQLCHAR*)sql.c_str(), sql.length() ) ) != SQL_SUCCESS ){ |
| 323 |
fprintf( stderr, "%d %s\n", fp_mysql_errno(mysql), fp_mysql_error(mysql) ); |
setLastErrorString( "SQLExecDirect in gidExists" ); |
| 324 |
|
SQLFreeHandle( SQL_HANDLE_STMT, hstmt ); |
| 325 |
return false; |
return false; |
| 326 |
} |
} |
| 327 |
result = fp_mysql_store_result( mysql ) ; |
|
| 328 |
if( !fp_mysql_fetch_row(result) ){ |
if( ( sqlcode = SQLFetch( hstmt ) ) != SQL_SUCCESS ){ |
| 329 |
fp_mysql_free_result( result ); |
setLastErrorString( "SQLFetch in gidExists" ); |
| 330 |
|
SQLFreeHandle( SQL_HANDLE_STMT, hstmt ); |
| 331 |
return false; |
return false; |
| 332 |
} |
} |
| 333 |
fp_mysql_free_result( result ); |
|
| 334 |
|
SQLFreeHandle( SQL_HANDLE_STMT, hstmt ); |
| 335 |
return true; |
return true; |
| 336 |
} |
} |
| 337 |
|
|
| 348 |
*/ |
*/ |
| 349 |
static bool uidExists( userid_t uid ) |
static bool uidExists( userid_t uid ) |
| 350 |
{ |
{ |
| 351 |
|
bool ret = false; |
| 352 |
string sql; |
string sql; |
| 353 |
MYSQL_RES* result; |
SQLRETURN sqlcode; |
| 354 |
MYSQL_ROW row; |
SQLINTEGER count = 0; |
| 355 |
|
|
| 356 |
sql = "SELECT * FROM " + dbprefix + "_vpaccount_users "; |
sql = "SELECT * FROM " + dbprefix + "_vpaccount_users "; |
| 357 |
sql += "WHERE uid=" + string( unsignedIntToString( uid ) ); |
sql += "WHERE uid=" + string( unsignedIntToString( uid ) ); |
| 358 |
if( fp_mysql_query( mysql, sql.c_str( ) ) ){ |
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) { |
| 359 |
fprintf( stderr, "%d %s\n", fp_mysql_errno(mysql), fp_mysql_error(mysql) ); |
if( ( sqlcode = SQLExecDirect( hstmt, (SQLCHAR*)sql.c_str(), sql.length() ) ) == SQL_SUCCESS ){ |
| 360 |
return false; |
if( ( sqlcode = SQLFetch( hstmt ) ) == SQL_SUCCESS ){ |
| 361 |
} |
ret = true; |
| 362 |
result = fp_mysql_store_result( mysql ) ; |
}else{ |
| 363 |
if( !fp_mysql_fetch_row(result) ){ |
string s( "SQLFetch in uidExists "); |
| 364 |
fp_mysql_free_result( result ); |
s += odbcDiagString( hstmt, sqlcode ); |
| 365 |
return false; |
s += string( ", sql=" ) + string( sql ); |
| 366 |
|
setLastErrorString( s.c_str( ) ); |
| 367 |
|
ret = false; |
| 368 |
|
} |
| 369 |
|
}else{ |
| 370 |
|
string s( "SQLExecDirect in uidExists "); |
| 371 |
|
s += odbcDiagString( hstmt, sqlcode ); |
| 372 |
|
s += string( ", sql=" ) + string( sql ); |
| 373 |
|
setLastErrorString( s.c_str( ) ); |
| 374 |
|
ret = false; |
| 375 |
|
} |
| 376 |
|
}else{ |
| 377 |
|
string s( "SQLAllocHandle in uidExists "); |
| 378 |
|
s += odbcDiagString( hstmt, sqlcode ); |
| 379 |
|
setLastErrorString( s.c_str( ) ); |
| 380 |
|
ret = false; |
| 381 |
} |
} |
| 382 |
fp_mysql_free_result( result ); |
return ret; |
|
return true; |
|
| 383 |
} |
} |
| 384 |
|
|
| 385 |
|
|
| 411 |
return sql; |
return sql; |
| 412 |
} |
} |
| 413 |
|
|
| 414 |
|
|
| 415 |
/** |
/** |
| 416 |
* |
* |
| 417 |
* データベースの初期化 |
* データベースの初期化 |
| 418 |
* |
* |
| 419 |
* @param host データベースのホスト名 |
* @param dsn DSN |
| 420 |
* @param user データベースにアクセスするユーザ名 |
* @param user データベースにアクセスするユーザ名 |
| 421 |
* @param password 上記ユーザのパスワード |
* @param password 上記ユーザのパスワード |
| 422 |
* @param dbname データベースの名前 |
* @param dbname ダミー |
| 423 |
* @param prefix XOOPSデータベーステーブルのPREFIX |
* @param prefix XOOPSデータベーステーブルのPREFIX |
| 424 |
* @return RES_OK |
* @return RES_OK |
| 425 |
* @return RES_DB_INITIALIZE_ERROR |
* @return RES_DB_INITIALIZE_ERROR |
| 426 |
* @return RES_DB_CONNECT_ERROR |
* @return RES_DB_CONNECT_ERROR |
| 427 |
* @refer result_t |
* @refer result_t |
| 428 |
*/ |
*/ |
| 429 |
result_t initializeDB( const char* host, const char* user, const char* password, const char* dbname, const char* prefix ) |
result_t initializeDB( const char* dsn, const char* user, const char* password, const char* dbname, const char* prefix ) |
| 430 |
{ |
{ |
| 431 |
|
SQLRETURN sqlcode; |
| 432 |
|
|
| 433 |
// 既に接続中なら、一旦切断 |
// 既に接続中なら、一旦切断 |
| 434 |
if ( mysql != NULL ) |
if ( hdbc != NULL ) |
| 435 |
fp_mysql_close( mysql ); |
SQLDisconnect( hdbc ); |
| 436 |
|
|
| 437 |
dbprefix = prefix; |
dbprefix = prefix; |
| 438 |
|
|
|
|
|
| 439 |
// 初期化と接続 |
// 初期化と接続 |
| 440 |
mysql = fp_mysql_init(NULL); |
// if( SQLAllocEnv( &henv ) != SQL_SUCCESS ) { |
| 441 |
if ( mysql == NULL ){ |
if( SQLAllocHandle( SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv ) != SQL_SUCCESS ) { |
| 442 |
|
setLastErrorString( "SQLAllocHandle(SQL_HANDLE_ENV,...) in initializeDB" ); |
| 443 |
return RES_DB_INITIALIZE_ERROR; |
return RES_DB_INITIALIZE_ERROR; |
| 444 |
} |
} |
| 445 |
char *unix_socket = NULL; // ? |
//ODBC Ver.3 として振舞うように属性を設定 |
| 446 |
unsigned int flag = 0; // ? |
SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0); |
| 447 |
if ( NULL == fp_mysql_real_connect( mysql, host, user, password, dbname, 3306, unix_socket, flag ) ){ |
|
| 448 |
|
// if( ( sqlcode = SQLAllocConnect( henv, &hdbc ) ) != SQL_SUCCESS ) { |
| 449 |
|
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_DBC, henv, &hdbc ) ) != SQL_SUCCESS ) { |
| 450 |
|
setLastErrorString( "SQLAllocHandle(SQL_HANDLE_DBC,...) in initializeDB" ); |
| 451 |
|
return RES_DB_INITIALIZE_ERROR; |
| 452 |
|
} |
| 453 |
|
//ログインに5秒以上要したらタイムアウトする設定 |
| 454 |
|
SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT, (SQLPOINTER *)5, 0); |
| 455 |
|
|
| 456 |
|
if ( ( sqlcode = SQLConnect( hdbc, (SQLCHAR*)dsn, strlen( dsn ), (SQLCHAR*)user, strlen( user ), (SQLCHAR*)password, strlen( password ) ) ) != SQL_SUCCESS ){ |
| 457 |
|
setLastErrorString( "SQLConnect in initializeDB" ); |
| 458 |
return RES_DB_CONNECT_ERROR; |
return RES_DB_CONNECT_ERROR; |
| 459 |
} |
} |
|
|
|
| 460 |
return RES_OK; |
return RES_OK; |
| 461 |
} |
} |
| 462 |
|
|
| 469 |
*/ |
*/ |
| 470 |
result_t uninitializeDB() |
result_t uninitializeDB() |
| 471 |
{ |
{ |
| 472 |
if ( mysql != NULL ){ |
if ( hdbc != NULL ){ |
| 473 |
fp_mysql_close( mysql ); |
SQLDisconnect( hdbc ); |
| 474 |
mysql = NULL; |
hdbc = NULL; |
| 475 |
} |
} |
|
|
|
| 476 |
return RES_OK; |
return RES_OK; |
| 477 |
} |
} |
| 478 |
|
|
|
|
|
| 479 |
/** |
/** |
| 480 |
* |
* |
| 481 |
* Platformユーザ承認状態取得 |
* Platformユーザ承認状態取得 |
| 488 |
*/ |
*/ |
| 489 |
bool isActivated( sessionid_t sid, userid_t uid ) |
bool isActivated( sessionid_t sid, userid_t uid ) |
| 490 |
{ |
{ |
| 491 |
if( mysql == NULL ) return false; |
if( hdbc == NULL ) return false; |
| 492 |
if( !isValidSessionID( sid ) ) return false; |
if( !isValidSessionID( sid ) ) return false; |
| 493 |
|
|
| 494 |
|
bool ret = false; |
| 495 |
string sql; |
string sql; |
| 496 |
MYSQL_RES* result; |
SQLRETURN sqlcode; |
| 497 |
MYSQL_ROW row; |
SQLHANDLE hstmt = NULL; |
| 498 |
|
|
| 499 |
sql = "SELECT * FROM " + dbprefix + "_vpaccount_users "; |
sql = "SELECT * FROM " + dbprefix + "_vpaccount_users "; |
| 500 |
sql += "WHERE activate=1 and uid=" + string( unsignedIntToString( uid ) ); |
sql += "WHERE activate=1 and uid=" + string( unsignedIntToString( uid ) ); |
| 501 |
if( fp_mysql_query( mysql, sql.c_str( ) ) ){ |
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) { |
| 502 |
fprintf( stderr, "%d %s\n", fp_mysql_errno(mysql), fp_mysql_error(mysql) ); |
if( ( sqlcode = SQLExecDirect( hstmt, (SQLCHAR*)sql.c_str(), sql.length() ) ) == SQL_SUCCESS ){ |
| 503 |
return false; |
if( ( sqlcode = SQLFetch( hstmt ) ) == SQL_SUCCESS ){ |
| 504 |
} |
ret = true; |
| 505 |
result = fp_mysql_store_result( mysql ) ; |
}else{ |
| 506 |
if( row = fp_mysql_fetch_row(result) ){ |
string s( "SQLFetch in isActivated " ); |
| 507 |
fp_mysql_free_result( result ); |
s += odbcDiagString( hstmt, sqlcode ); |
| 508 |
return true; |
s += ", sql=" + sql; |
| 509 |
|
setLastErrorString( s.c_str() ); |
| 510 |
|
ret = false; |
| 511 |
|
} |
| 512 |
|
}else{ |
| 513 |
|
string s( "SQLExecDirect in isActivated " ); |
| 514 |
|
s += odbcDiagString( hstmt, sqlcode ); |
| 515 |
|
s += ", sql=" + sql; |
| 516 |
|
setLastErrorString( s.c_str() ); |
| 517 |
|
ret = false; |
| 518 |
|
} |
| 519 |
|
SQLFreeHandle( SQL_HANDLE_STMT, hstmt ); |
| 520 |
|
}else{ |
| 521 |
|
setLastErrorString( "SQLAllocHandle(SQL_HANDLE_STMT,...) in isActivated" ); |
| 522 |
|
ret = false; |
| 523 |
} |
} |
| 524 |
return false; |
return ret; |
| 525 |
} |
} |
| 526 |
|
|
| 527 |
/** |
/** |
| 537 |
*/ |
*/ |
| 538 |
result_t activate( sessionid_t sid, userid_t uid, bool activate ) |
result_t activate( sessionid_t sid, userid_t uid, bool activate ) |
| 539 |
{ |
{ |
| 540 |
if( mysql == NULL ) return RES_DB_NOT_INITIALIZED; |
if( hdbc == NULL ) return RES_DB_NOT_INITIALIZED; |
| 541 |
if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION; |
if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION; |
| 542 |
|
|
| 543 |
string sql; |
string sql; |
| 544 |
MYSQL_RES* result; |
SQLRETURN sqlcode; |
| 545 |
MYSQL_ROW row; |
result_t ret = RES_ERROR; |
| 546 |
|
|
| 547 |
sql = "UPDATE " + dbprefix + "_vpaccount_users "; |
sql = "UPDATE " + dbprefix + "_vpaccount_users "; |
| 548 |
sql += "SET activate=" + string( activate ? "1" : "0" ); |
sql += "SET activate=" + string( activate ? "1" : "0" ); |
| 549 |
sql += " WHERE uid=" + string( unsignedIntToString( uid ) ); |
sql += " WHERE uid=" + string( unsignedIntToString( uid ) ); |
| 550 |
if( fp_mysql_query( mysql, sql.c_str( ) ) ){ |
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) { |
| 551 |
fprintf( stderr, "%d %s\n", fp_mysql_errno(mysql), fp_mysql_error(mysql) ); |
if( ( sqlcode = SQLExecDirect( hstmt, (SQLCHAR*)sql.c_str(), sql.length() ) ) == SQL_SUCCESS ){ |
| 552 |
return RES_DB_QUERY_ERROR; |
SQLINTEGER count = 0; |
| 553 |
} |
if( ( sqlcode = SQLRowCount( hstmt, &count ) ) == SQL_SUCCESS && count > 0 ){ |
| 554 |
if ( fp_mysql_affected_rows(mysql) == 0 ){ |
ret = RES_OK; |
| 555 |
// 更新失敗 |
}else{ |
| 556 |
return RES_NO_SUCH_USER; |
string s( "SQLRowCount in activate "); |
| 557 |
|
s += odbcDiagString( hstmt, sqlcode ); |
| 558 |
|
s += string( ", sql=" ) + string( sql ); |
| 559 |
|
setLastErrorString( s.c_str( ) ); |
| 560 |
|
ret = RES_NO_SUCH_USER; |
| 561 |
|
} |
| 562 |
|
}else{ |
| 563 |
|
string s( "SQLExecDirect in activate " ); |
| 564 |
|
s += odbcDiagString( hstmt, sqlcode ); |
| 565 |
|
s += ", sql="; |
| 566 |
|
s += string( sql ); |
| 567 |
|
setLastErrorString( s.c_str( ) ); |
| 568 |
|
ret = RES_DB_QUERY_ERROR; |
| 569 |
|
} |
| 570 |
|
SQLFreeHandle( SQL_HANDLE_STMT, hstmt ); |
| 571 |
|
}else{ |
| 572 |
|
setLastErrorString( "SQLAllocHandle(SQL_HANDLE_STMT,...) in activate" ); |
| 573 |
|
ret = RES_ERROR; |
| 574 |
} |
} |
| 575 |
return RES_OK; |
return ret; |
| 576 |
} |
} |
| 577 |
|
|
| 578 |
/** |
/** |
| 585 |
*/ |
*/ |
| 586 |
int getAccountCount( sessionid_t sid ) |
int getAccountCount( sessionid_t sid ) |
| 587 |
{ |
{ |
| 588 |
if( mysql == NULL ) return 0; |
if( hdbc == NULL ) return 0; |
| 589 |
if( !isValidSessionID( sid ) ) return 0; |
if( !isValidSessionID( sid ) ) return 0; |
| 590 |
|
|
| 591 |
int ret = 0; |
int ret = 0; |
| 592 |
string sql; |
string sql; |
| 593 |
MYSQL_RES* result; |
SQLRETURN sqlcode; |
| 594 |
MYSQL_ROW row; |
SQLHANDLE hstmt = NULL; |
| 595 |
|
|
| 596 |
//アカウント数を求める |
//アカウント数を求める |
| 597 |
sql = "SELECT COUNT(*) FROM " + dbprefix + "_vpaccount_users "; |
sql = "SELECT COUNT(*) FROM " + dbprefix + "_vpaccount_users "; |
| 598 |
if( fp_mysql_query( mysql, sql.c_str( ) ) ){ |
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) { |
| 599 |
fprintf( stderr, "%d %s\n", fp_mysql_errno(mysql), fp_mysql_error(mysql) ); |
if( ( sqlcode = SQLExecDirect( hstmt, (SQLCHAR*)sql.c_str(), sql.length() ) ) == SQL_SUCCESS ){ |
| 600 |
return 0; |
SQLUINTEGER count = 0; |
| 601 |
} |
SQLINTEGER len; |
| 602 |
result = fp_mysql_store_result( mysql ) ; |
SQLBindCol( hstmt, 1, SQL_C_ULONG, &count, 0, &len ); |
| 603 |
if( row = fp_mysql_fetch_row(result) ){ |
if( ( sqlcode = SQLFetch( hstmt ) ) == SQL_SUCCESS ){ |
| 604 |
ret = atoi( row[ 0 ] != NULL ? row[ 0 ] : "" ); |
ret = count; |
| 605 |
|
}else { |
| 606 |
|
string s( "SQLFetch in getAccountCount sql=" ); |
| 607 |
|
s += string( sql ); |
| 608 |
|
setLastErrorString( s.c_str( ) ); |
| 609 |
|
ret = 0; |
| 610 |
|
} |
| 611 |
|
}else{ |
| 612 |
|
setLastErrorString( "SQLExecDirect in getAccountCount" ); |
| 613 |
|
ret = 0; |
| 614 |
|
} |
| 615 |
|
SQLFreeHandle( SQL_HANDLE_STMT, hstmt ); |
| 616 |
}else{ |
}else{ |
| 617 |
fp_mysql_free_result( result ); |
setLastErrorString( "SQLAllocHandle(SQL_HANDLE_STMT,...) in getAccountCount" ); |
| 618 |
return 0; |
ret = 0; |
| 619 |
} |
} |
|
fp_mysql_free_result( result ); |
|
| 620 |
return ret; |
return ret; |
| 621 |
} |
} |
| 622 |
|
|
| 633 |
*/ |
*/ |
| 634 |
result_t deleteAccount( sessionid_t sid, userid_t uid ) |
result_t deleteAccount( sessionid_t sid, userid_t uid ) |
| 635 |
{ |
{ |
| 636 |
if( mysql == NULL ) return RES_DB_NOT_INITIALIZED; |
if( hdbc == NULL ) return RES_DB_NOT_INITIALIZED; |
| 637 |
if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION; |
if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION; |
| 638 |
|
|
| 639 |
|
result_t ret1 = RES_ERROR, ret2 = RES_ERROR; |
| 640 |
string sql; |
string sql; |
| 641 |
|
SQLRETURN sqlcode; |
| 642 |
|
SQLHANDLE hstmt = NULL; |
| 643 |
|
|
| 644 |
sql = "DELETE FROM " + dbprefix + "_users "; |
sql = "DELETE FROM " + dbprefix + "_users "; |
| 645 |
sql += "WHERE uid = " + string( unsignedIntToString( uid ) ); |
sql += "WHERE uid = " + string( unsignedIntToString( uid ) ); |
| 646 |
if( fp_mysql_query( mysql, sql.c_str( ) ) ){ |
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) { |
| 647 |
fprintf( stderr, "%d %s\n", fp_mysql_errno(mysql), fp_mysql_error(mysql) ); |
if( ( sqlcode = SQLExecDirect( hstmt, (SQLCHAR*)sql.c_str(), sql.length() ) ) == SQL_SUCCESS ){ |
| 648 |
return RES_DB_QUERY_ERROR; |
SQLINTEGER count = 0; |
| 649 |
|
if( ( sqlcode = SQLRowCount( hstmt, &count ) ) == SQL_SUCCESS && count > 0 ){ |
| 650 |
|
ret1 = RES_OK; |
| 651 |
|
}else{ |
| 652 |
|
string s( "SQLRowCount in deleteAccount" ); |
| 653 |
|
s += odbcDiagString( hstmt, sqlcode ); |
| 654 |
|
s += string( ", sql=" ) + string( sql ); |
| 655 |
|
setLastErrorString( s.c_str( ) ); |
| 656 |
|
ret1 = RES_NO_SUCH_USER; |
| 657 |
|
} |
| 658 |
|
}else{ |
| 659 |
|
string s( "SQLExecDirect in deleteAccount" ); |
| 660 |
|
s += odbcDiagString( hstmt, sqlcode ); |
| 661 |
|
s += ", sql="; |
| 662 |
|
s += string( sql ); |
| 663 |
|
setLastErrorString( s.c_str( ) ); |
| 664 |
|
ret1 = RES_DB_QUERY_ERROR; |
| 665 |
|
} |
| 666 |
|
SQLFreeHandle( SQL_HANDLE_STMT, hstmt ); |
| 667 |
|
}else{ |
| 668 |
|
setLastErrorString( "SQLAllocHandle(SQL_HANDLE_STMT,...) in deleteAccount" ); |
| 669 |
|
ret1 = RES_ERROR; |
| 670 |
} |
} |
| 671 |
|
|
| 672 |
sql = "DELETE FROM " + dbprefix + "_vpaccount_users "; |
sql = "DELETE FROM " + dbprefix + "_vpaccount_users "; |
| 673 |
sql += "WHERE uid = " + string( unsignedIntToString( uid ) ); |
sql += "WHERE uid = " + string( unsignedIntToString( uid ) ); |
| 674 |
if( fp_mysql_query( mysql, sql.c_str( ) ) ){ |
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) { |
| 675 |
fprintf( stderr, "%d %s\n", fp_mysql_errno(mysql), fp_mysql_error(mysql) ); |
if( ( sqlcode = SQLExecDirect( hstmt, (SQLCHAR*)sql.c_str(), sql.length() ) ) == SQL_SUCCESS ){ |
| 676 |
return RES_DB_QUERY_ERROR; |
SQLINTEGER count = 0; |
| 677 |
|
if( ( sqlcode = SQLRowCount( hstmt, &count ) ) == SQL_SUCCESS && count > 0 ){ |
| 678 |
|
ret2 = RES_OK; |
| 679 |
|
}else{ |
| 680 |
|
string s( "SQLRowCount in deleteAccount" ); |
| 681 |
|
s += odbcDiagString( hstmt, sqlcode ); |
| 682 |
|
s += string( ", sql=" ) + string( sql ); |
| 683 |
|
setLastErrorString( s.c_str( ) ); |
| 684 |
|
ret2 = RES_NO_SUCH_USER; |
| 685 |
|
} |
| 686 |
|
}else{ |
| 687 |
|
string s( "SQLExecDirect in deleteAccount" ); |
| 688 |
|
s += odbcDiagString( hstmt, sqlcode ); |
| 689 |
|
s += ", sql="; |
| 690 |
|
s += string( sql ); |
| 691 |
|
setLastErrorString( s.c_str( ) ); |
| 692 |
|
ret2 = RES_DB_QUERY_ERROR; |
| 693 |
|
} |
| 694 |
|
SQLFreeHandle( SQL_HANDLE_STMT, hstmt ); |
| 695 |
|
}else{ |
| 696 |
|
setLastErrorString( "SQLAllocHandle(SQL_HANDLE_STMT,...) in deleteAccount" ); |
| 697 |
|
ret2 = RES_ERROR; |
| 698 |
} |
} |
| 699 |
|
|
| 700 |
return RES_OK; |
//一方でもエラーならエラーを返す |
| 701 |
|
return ret1 != RES_OK ? ret1 : ret2; |
| 702 |
} |
} |
| 703 |
|
|
| 704 |
/** |
/** |
| 745 |
#ifdef USE_SYSLOG |
#ifdef USE_SYSLOG |
| 746 |
openlog( "commonal", LOG_ODELAY, LOG_USER ); |
openlog( "commonal", LOG_ODELAY, LOG_USER ); |
| 747 |
#endif |
#endif |
| 748 |
if( mysql == NULL ) return RES_DB_NOT_INITIALIZED; |
if( hdbc == NULL ) return RES_DB_NOT_INITIALIZED; |
| 749 |
if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION; |
if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION; |
| 750 |
if( uidsLen <= 0 ){ |
if( uidsLen <= 0 ){ |
| 751 |
*accounts = new account_t[ 0 ]; |
*accounts = new account_t[ 0 ]; |
| 756 |
return RES_OK; |
return RES_OK; |
| 757 |
} |
} |
| 758 |
|
|
| 759 |
|
result_t ret = RES_ERROR; |
| 760 |
|
SQLRETURN sqlcode; |
| 761 |
|
SQLHANDLE hstmt = NULL; |
| 762 |
string sql; |
string sql; |
|
MYSQL_RES* result; |
|
|
MYSQL_ROW row; |
|
| 763 |
account_t* dst = new account_t[ uidsLen ]; |
account_t* dst = new account_t[ uidsLen ]; |
| 764 |
|
|
| 765 |
sql += "SELECT u1.uid, u1.name, u1.uname, u1.email, u1.url, u1.user_avatar, u1.user_regdate, u1.user_icq, u1.user_from, u1.user_sig, u1.user_viewemail, u1.actkey, u1.user_aim, u1.user_yim, u1.user_msnm, u1.pass, u1.posts, u1.attachsig, u1.rank, u1.level, u1.theme, u1.timezone_offset, u1.last_login, u1.umode, u1.uorder, u1.notify_method, u1.notify_mode, u1.user_occ, u1.bio, u1.user_intrest, u1.user_mailok, u2.activate, u2.address, u2.division, u2.tel, u2.company_name, u2.country, u2.zipcode, u2.fax, u2.base_url, u2.notice_mail, u2.notice_mail_since "; |
sql += "SELECT u1.uid, u1.name, u1.uname, u1.email, u1.url, u1.user_avatar, u1.user_regdate, u1.user_icq, u1.user_from, u1.user_sig, u1.user_viewemail, u1.actkey, u1.user_aim, u1.user_yim, u1.user_msnm, u1.pass, u1.posts, u1.attachsig, u1.rank, u1.level, u1.theme, u1.timezone_offset, u1.last_login, u1.umode, u1.uorder, u1.notify_method, u1.notify_mode, u1.user_occ, u1.bio, u1.user_intrest, u1.user_mailok, u2.activate, u2.address, u2.division, u2.tel, u2.company_name, u2.country, u2.zipcode, u2.fax, u2.base_url, u2.notice_mail, u2.notice_mail_since "; |
| 773 |
sql += " ) "; |
sql += " ) "; |
| 774 |
} |
} |
| 775 |
sql += criteria2str( cri ); |
sql += criteria2str( cri ); |
| 776 |
#ifdef USE_SYSLOG |
|
| 777 |
syslog( LOG_DEBUG, sql.c_str( ) ); |
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) { |
| 778 |
#endif |
if( ( sqlcode = SQLExecDirect( hstmt, (SQLCHAR*)sql.c_str(), sql.length() ) ) == SQL_SUCCESS ){ |
| 779 |
if( fp_mysql_query( mysql, sql.c_str( ) ) ){ |
SQLINTEGER len; |
| 780 |
fprintf( stderr, "%s\n", sql.c_str( ) ); |
userid_t uid = 0; |
| 781 |
fprintf( stderr, "%d %s\n", fp_mysql_errno(mysql), fp_mysql_error(mysql) ); |
SQLBindCol( hstmt, 1, SQL_C_ULONG, &uid, 0, &len ); |
| 782 |
#ifdef USE_SYSLOG |
*accountsLen=0; |
| 783 |
syslog( LOG_ERR, "query failed %d %s", fp_mysql_errno(mysql), fp_mysql_error(mysql) ); |
for( int i = 0; ( sqlcode = SQLFetch( hstmt ) ) == SQL_SUCCESS && i < uidsLen ; i++ ){ |
| 784 |
closelog( ); |
dst[ i ].setUID( uid ); |
| 785 |
#endif |
dst[ i ].setName( getResultCol( hstmt, 2 ).c_str() ); |
| 786 |
return RES_DB_QUERY_ERROR; |
dst[ i ].setUname( getResultCol( hstmt, 3 ).c_str() ); |
| 787 |
|
dst[ i ].setEmail( getResultCol( hstmt, 4 ).c_str() ); |
| 788 |
|
dst[ i ].setURL( getResultCol( hstmt, 5 ).c_str() ); |
| 789 |
|
dst[ i ].setUserAvatar( getResultCol( hstmt, 6 ).c_str() ); |
| 790 |
|
dst[ i ].setUserRegdate( atoi( getResultCol( hstmt, 7 ).c_str() ) ); |
| 791 |
|
dst[ i ].setUserIcq( getResultCol( hstmt, 8 ).c_str() ); |
| 792 |
|
dst[ i ].setUserFrom( getResultCol( hstmt, 9 ).c_str() ); |
| 793 |
|
dst[ i ].setUserSig( getResultCol( hstmt, 10 ).c_str() ); |
| 794 |
|
dst[ i ].setUserViewemail( atoi( getResultCol( hstmt, 11 ).c_str() )); |
| 795 |
|
dst[ i ].setActkey( getResultCol( hstmt, 12 ).c_str() ); |
| 796 |
|
dst[ i ].setUserAim( getResultCol( hstmt, 13 ).c_str() ); |
| 797 |
|
dst[ i ].setUserYim( getResultCol( hstmt, 14 ).c_str() ); |
| 798 |
|
dst[ i ].setUserMsnm( getResultCol( hstmt, 15 ).c_str() ); |
| 799 |
|
dst[ i ].setPass( getResultCol( hstmt, 16 ).c_str() ); |
| 800 |
|
dst[ i ].setPosts( atoi( getResultCol( hstmt, 17 ).c_str() )); |
| 801 |
|
dst[ i ].setAttachsig( atoi( getResultCol( hstmt, 18 ).c_str() )); |
| 802 |
|
dst[ i ].setRank( atoi( getResultCol( hstmt, 19 ).c_str() )); |
| 803 |
|
dst[ i ].setLevel( atoi( getResultCol( hstmt, 20 ).c_str() )); |
| 804 |
|
dst[ i ].setTheme( getResultCol( hstmt, 21 ).c_str() ); |
| 805 |
|
dst[ i ].setTimezoneOffset( atof( getResultCol( hstmt, 22 ).c_str() ) ); |
| 806 |
|
dst[ i ].setLastLogin( atoi( getResultCol( hstmt, 23 ).c_str() )); |
| 807 |
|
dst[ i ].setUmode( getResultCol( hstmt, 24 ).c_str() ); |
| 808 |
|
dst[ i ].setUorder( atoi( getResultCol( hstmt, 25 ).c_str() )); |
| 809 |
|
dst[ i ].setNotifyMethod( atoi( getResultCol( hstmt, 26 ).c_str() )); |
| 810 |
|
dst[ i ].setNotifyMode( atoi( getResultCol( hstmt, 27 ).c_str() )); |
| 811 |
|
dst[ i ].setUserOcc( getResultCol( hstmt, 28 ).c_str() ); |
| 812 |
|
dst[ i ].setBio( getResultCol( hstmt, 29 ).c_str() ); |
| 813 |
|
dst[ i ].setUserIntrest( getResultCol( hstmt, 30 ).c_str() ); |
| 814 |
|
dst[ i ].setUserMailok( atoi( getResultCol( hstmt, 31 ).c_str() )); |
| 815 |
|
dst[ i ].setActivate( atoi( getResultCol( hstmt, 32 ).c_str() )); |
| 816 |
|
dst[ i ].setAddress( getResultCol( hstmt, 33 ).c_str() ); |
| 817 |
|
dst[ i ].setDivision( getResultCol( hstmt, 34 ).c_str() ); |
| 818 |
|
dst[ i ].setTel( getResultCol( hstmt, 35 ).c_str() ); |
| 819 |
|
dst[ i ].setCompanyName( getResultCol( hstmt, 36 ).c_str() ); |
| 820 |
|
dst[ i ].setCountry( getResultCol( hstmt, 37 ).c_str() ); |
| 821 |
|
dst[ i ].setZipcode( getResultCol( hstmt, 38 ).c_str() ); |
| 822 |
|
dst[ i ].setFax( getResultCol( hstmt, 39 ).c_str() ); |
| 823 |
|
dst[ i ].setBaseURL( getResultCol( hstmt, 40 ).c_str() ); |
| 824 |
|
dst[ i ].setNoticeMail( atoi( getResultCol( hstmt, 41 ).c_str() )); |
| 825 |
|
dst[ i ].setNoticeMailSince( atoi( getResultCol( hstmt, 42 ).c_str() )); |
| 826 |
|
( *accountsLen )++; |
| 827 |
|
} |
| 828 |
|
*accounts = dst; |
| 829 |
|
ret = RES_OK; |
| 830 |
|
}else{ |
| 831 |
|
setLastErrorString( "SQLExecDirect in getAccounts" ); |
| 832 |
|
ret = RES_DB_QUERY_ERROR; |
| 833 |
|
} |
| 834 |
|
SQLFreeHandle( SQL_HANDLE_STMT, hstmt ); |
| 835 |
|
}else{ |
| 836 |
|
setLastErrorString( "SQLAllocHandle(SQL_HANDLE_STMT,...) in getAccounts" ); |
| 837 |
|
ret = RES_DB_QUERY_ERROR; |
| 838 |
} |
} |
| 839 |
#ifdef USE_SYSLOG |
return ret; |
|
syslog( LOG_DEBUG, "query succeed" ); |
|
|
#endif |
|
|
result = fp_mysql_use_result( mysql ) ; |
|
|
*accountsLen=0; |
|
|
for( int i = 0; ( row = fp_mysql_fetch_row(result) ) != 0 && i < uidsLen ; i++ ){ |
|
|
#ifdef USE_SYSLOG |
|
|
syslog( LOG_DEBUG, "set to account_t %d", i ); |
|
|
#endif |
|
|
dst[ i ].setUID( atoi( row[ 0 ] != NULL ? row[ 0 ] : "" ) ); |
|
|
dst[ i ].setName( row[ 1 ] ); |
|
|
dst[ i ].setUname( row[ 2 ] ); |
|
|
dst[ i ].setEmail( row[ 3 ] ); |
|
|
dst[ i ].setURL( row[ 4 ] ); |
|
|
dst[ i ].setUserAvatar( row[ 5 ] ); |
|
|
dst[ i ].setUserRegdate( atoi( row[ 6 ] != NULL ? row[ 6 ] : "" ) ); |
|
|
dst[ i ].setUserIcq( row[ 7 ] ); |
|
|
dst[ i ].setUserFrom( row[ 8 ] ); |
|
|
dst[ i ].setUserSig( row[ 9 ] ); |
|
|
dst[ i ].setUserViewemail( atoi( row[ 10 ] != NULL ? row[ 10 ] : "" ) ); |
|
|
dst[ i ].setActkey( row[ 11 ] ); |
|
|
dst[ i ].setUserAim( row[ 12 ] ); |
|
|
dst[ i ].setUserYim( row[ 13 ] ); |
|
|
dst[ i ].setUserMsnm( row[ 14 ] ); |
|
|
dst[ i ].setPass( row[ 15 ] ); |
|
|
dst[ i ].setPosts( atoi( row[ 16 ] != NULL ? row[ 16 ] : "" ) ); |
|
|
dst[ i ].setAttachsig( atoi( row[ 17 ] != NULL ? row[ 17 ] : "" ) ); |
|
|
dst[ i ].setRank( atoi( row[ 18 ] != NULL ? row[ 18 ] : "" ) ); |
|
|
dst[ i ].setLevel( atoi( row[ 19 ] != NULL ? row[ 19 ] : "" ) ); |
|
|
dst[ i ].setTheme( row[ 20 ] ); |
|
|
dst[ i ].setTimezoneOffset( atof( row[ 21 ] ) ); |
|
|
dst[ i ].setLastLogin( atoi( row[ 22 ] != NULL ? row[ 22 ] : "" ) ); |
|
|
dst[ i ].setUmode( row[ 23 ] ); |
|
|
dst[ i ].setUorder( atoi( row[ 24 ] != NULL ? row[ 24 ] : "" ) ); |
|
|
dst[ i ].setNotifyMethod( atoi( row[ 25 ] != NULL ? row[ 25 ] : "" ) ); |
|
|
dst[ i ].setNotifyMode( atoi( row[ 26 ] != NULL ? row[ 26 ] : "" ) ); |
|
|
dst[ i ].setUserOcc( row[ 27 ] ); |
|
|
dst[ i ].setBio( row[ 28 ] ); |
|
|
dst[ i ].setUserIntrest( row[ 29 ] ); |
|
|
dst[ i ].setUserMailok( atoi( row[ 30 ] != NULL ? row[ 30 ] : "" ) ); |
|
|
dst[ i ].setActivate( atoi( row[ 31 ] != NULL ? row[ 31 ] : "" ) ); |
|
|
dst[ i ].setAddress( row[ 32 ] ); |
|
|
dst[ i ].setDivision( row[ 33 ] ); |
|
|
dst[ i ].setTel( row[ 34 ] ); |
|
|
dst[ i ].setCompanyName( row[ 35 ] ); |
|
|
dst[ i ].setCountry( row[ 36 ] ); |
|
|
dst[ i ].setZipcode( row[ 37 ] ); |
|
|
dst[ i ].setFax( row[ 38 ] ); |
|
|
dst[ i ].setBaseURL( row[ 39 ] ); |
|
|
dst[ i ].setNoticeMail( atoi( row[ 40 ] != NULL ? row[ 40 ] : "" ) ); |
|
|
dst[ i ].setNoticeMailSince( atoi( row[ 41 ] != NULL ? row[ 41 ] : "" ) ); |
|
|
( *accountsLen )++; |
|
|
} |
|
|
while( row = fp_mysql_fetch_row(result) ); |
|
|
fp_mysql_free_result( result ); |
|
|
*accounts = dst; |
|
|
#ifdef USE_SYSLOG |
|
|
syslog( LOG_DEBUG, "return RES_OK" ); |
|
|
closelog( ); |
|
|
#endif |
|
|
return RES_OK; |
|
| 840 |
} |
} |
| 841 |
|
|
| 842 |
/** |
/** |
| 856 |
*/ |
*/ |
| 857 |
result_t insertAccount( sessionid_t sid, const account_t* account, userid_t* uid ) |
result_t insertAccount( sessionid_t sid, const account_t* account, userid_t* uid ) |
| 858 |
{ |
{ |
| 859 |
if( mysql == NULL ) return RES_DB_NOT_INITIALIZED; |
if( hdbc == NULL ) return RES_DB_NOT_INITIALIZED; |
| 860 |
if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION; |
if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION; |
| 861 |
|
|
| 862 |
string sql; |
string sql; |
| 863 |
string tmp; |
string tmp; |
| 864 |
char buf[ 12 ]; |
char buf[ 12 ]; |
| 865 |
|
SQLRETURN sqlcode; |
| 866 |
|
result_t ret = RES_ERROR; |
| 867 |
|
|
| 868 |
//xoopsのユーザテーブルに書き込む |
//xoopsのユーザテーブルに書き込む |
| 869 |
sql = "INSERT INTO " + dbprefix + "_users (uname, name, email, url, user_avatar, user_regdate, user_icq, user_from, user_sig, user_viewemail, actkey, user_aim, user_yim, user_msnm, pass, posts, attachsig, rank, level, theme, timezone_offset, last_login, umode, uorder, notify_method, notify_mode, user_occ, bio, user_intrest, user_mailok) VALUES ("; |
SQLCHAR uname[ACCOUNT_UNAME_LEN], name[ACCOUNT_NAME_LEN], email[ACCOUNT_EMAIL_LEN], url[ACCOUNT_URL_LEN], user_avatar[ACCOUNT_USER_AVATAR_LEN], user_icq[ACCOUNT_USER_ICQ_LEN], user_from[ACCOUNT_USER_FROM_LEN], user_sig[ACCOUNT_USER_SIG_LEN], actkey[ACCOUNT_ACTKEY_LEN], user_aim[ACCOUNT_USER_AIM_LEN], user_yim[ACCOUNT_USER_YIM_LEN], user_msnm[ACCOUNT_USER_MSNM_LEN], pass[ACCOUNT_PASS_LEN], theme[ACCOUNT_THEME_LEN], umode[ACCOUNT_UMODE_LEN], user_occ[ACCOUNT_USER_OCC_LEN], bio[ACCOUNT_BIO_LEN], user_intrest[ACCOUNT_USER_INTREST_LEN]; |
| 870 |
sql += "'" + string( addSlashes( account -> getUname( ) ) ) + "', "; |
SQLINTEGER user_regdate, user_viewemail, posts, attachsig, rank, level, last_login, uorder, notify_method, notify_mode, user_mailok; |
| 871 |
sql += "'" + string( addSlashes( account -> getName( ) ) ) + "', "; |
SQLDOUBLE timezone_offset; |
| 872 |
sql += "'" + string( addSlashes( account -> getEmail( ) ) ) + "', "; |
|
| 873 |
sql += "'" + string( addSlashes( account -> getURL( ) ) ) + "', "; |
SQLINTEGER cbUname = SQL_NTS, cbName = SQL_NTS, cbEmail = SQL_NTS, cbUrl = SQL_NTS, cbUser_avatar = SQL_NTS, cbUser_icq = SQL_NTS, cbUser_from = SQL_NTS, cbUser_sig = SQL_NTS, cbActkey = SQL_NTS, cbUser_aim = SQL_NTS, cbUser_yim = SQL_NTS, cbUser_msnm = SQL_NTS, cbPass = SQL_NTS, cbTheme = SQL_NTS, cbUmode = SQL_NTS, cbUser_occ = SQL_NTS, cbBio = SQL_NTS, cbUser_intrest = SQL_NTS; |
| 874 |
sql += "'" + string( addSlashes( account -> getUserAvatar( ) ) ) + "', "; |
SQLINTEGER cbUser_regdate = 0, cbUser_viewemail = 0, cbPosts = 0, cbAttachsig = 0, cbRank = 0, cbLevel = 0, cbLast_login = 0, cbUorder = 0, cbNotify_method = 0, cbNotify_mode = 0, cbUser_mailok = 0, cbTimezone_offset = 0; |
| 875 |
snprintf( buf, 12, "%d", time( NULL ) ); |
|
| 876 |
sql += string( buf ) + ", "; |
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) { |
| 877 |
sql += "'" + string( addSlashes( account -> getUserIcq( ) ) ) + "', "; |
string sql; |
| 878 |
sql += "'" + string( addSlashes( account -> getUserFrom( ) ) ) + "', "; |
sql = "INSERT INTO " + dbprefix + "_users (uname, name, email, url, user_avatar, user_regdate, user_icq, user_from, user_sig, user_viewemail, actkey, user_aim, user_yim, user_msnm, pass, posts, attachsig, rank, level, theme, timezone_offset, last_login, umode, uorder, notify_method, notify_mode, user_occ, bio, user_intrest, user_mailok) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"; |
| 879 |
sql += "'" + string( addSlashes( account -> getUserSig( ) ) ) + "', "; |
sqlcode = SQLPrepare(hstmt, (SQLCHAR*)sql.c_str(), SQL_NTS); |
| 880 |
snprintf( buf, 12, "%d", account -> getUserViewemail( ) ); |
if( sqlcode == SQL_SUCCESS || sqlcode == SQL_SUCCESS_WITH_INFO ){ |
| 881 |
sql += string( buf ) + ", "; |
SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, ACCOUNT_UNAME_LEN, 0, uname, 0, &cbUname ); |
| 882 |
sql += "'" + string( addSlashes( account -> getActkey( ) ) ) + "', "; |
SQLBindParameter(hstmt, 2, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, ACCOUNT_NAME_LEN, 0, name, 0, &cbName ); |
| 883 |
sql += "'" + string( addSlashes( account -> getUserAim( ) ) ) + "', "; |
SQLBindParameter(hstmt, 3, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, ACCOUNT_EMAIL_LEN, 0, email, 0, &cbEmail ); |
| 884 |
sql += "'" + string( addSlashes( account -> getUserYim( ) ) ) + "', "; |
SQLBindParameter(hstmt, 4, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, ACCOUNT_URL_LEN, 0, url, 0, &cbUrl ); |
| 885 |
sql += "'" + string( addSlashes( account -> getUserMsnm( ) ) ) + "', "; |
SQLBindParameter(hstmt, 5, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, ACCOUNT_USER_AVATAR_LEN, 0, user_avatar, 0, &cbUser_avatar ); |
| 886 |
sql += "'" + string( addSlashes( account -> getPass( ) ) ) + "', "; |
SQLBindParameter(hstmt, 6, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &user_regdate, 0, &cbUser_regdate ); |
| 887 |
snprintf( buf, 12, "%d", account -> getPosts( ) ); |
SQLBindParameter(hstmt, 7, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, ACCOUNT_USER_ICQ_LEN, 0, user_icq, 0, &cbUser_icq ); |
| 888 |
sql += string( buf ) + ", "; |
SQLBindParameter(hstmt, 8, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, ACCOUNT_USER_FROM_LEN, 0, user_from, 0, &cbUser_from ); |
| 889 |
snprintf( buf, 12, "%d", account -> getAttachsig( ) ); |
SQLBindParameter(hstmt, 9, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, ACCOUNT_USER_SIG_LEN, 0, user_sig, 0, &cbUser_sig ); |
| 890 |
sql += string( buf ) + ", "; |
SQLBindParameter(hstmt, 10, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &user_viewemail, 0, &cbUser_viewemail ); |
| 891 |
snprintf( buf, 12, "%d", account -> getRank( ) ); |
SQLBindParameter(hstmt, 11, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, ACCOUNT_ACTKEY_LEN, 0, actkey, 0, &cbActkey ); |
| 892 |
sql += string( buf ) + ", "; |
SQLBindParameter(hstmt, 12, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, ACCOUNT_USER_AIM_LEN, 0, user_aim, 0, &cbUser_aim ); |
| 893 |
snprintf( buf, 12, "%d", account -> getLevel( ) ); |
SQLBindParameter(hstmt, 13, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, ACCOUNT_USER_YIM_LEN, 0, user_yim, 0, &cbUser_yim ); |
| 894 |
sql += string( buf ) + ", "; |
SQLBindParameter(hstmt, 14, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, ACCOUNT_USER_MSNM_LEN, 0, user_msnm, 0, &cbUser_msnm ); |
| 895 |
sql += "'" + string( addSlashes( account -> getTheme( ) ) ) + "', "; |
SQLBindParameter(hstmt, 15, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, ACCOUNT_PASS_LEN, 0, pass, 0, &cbPass ); |
| 896 |
snprintf( buf, 12, "%lf", account -> getTimezoneOffset( ) ); |
SQLBindParameter(hstmt, 16, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &posts, 0, &cbPosts ); |
| 897 |
sql += string( buf ) + ", "; |
SQLBindParameter(hstmt, 17, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &attachsig, 0, &cbAttachsig ); |
| 898 |
sql += "0, "; //last login |
SQLBindParameter(hstmt, 18, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &rank, 0, &cbRank ); |
| 899 |
sql += "'" + string( addSlashes( account -> getUmode( ) ) ) + "', "; |
SQLBindParameter(hstmt, 19, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &level, 0, &cbLevel ); |
| 900 |
snprintf( buf, 12, "%d", account -> getUorder( ) ); |
SQLBindParameter(hstmt, 20, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, ACCOUNT_THEME_LEN, 0, theme, 0, &cbTheme ); |
| 901 |
sql += string( buf ) + ", "; |
SQLBindParameter(hstmt, 21, SQL_PARAM_INPUT, SQL_C_DOUBLE, SQL_DOUBLE, 0, 0, &timezone_offset, 0, &cbTimezone_offset ); |
| 902 |
snprintf( buf, 12, "%d", account -> getNotifyMethod( ) ); |
SQLBindParameter(hstmt, 22, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &last_login, 0, &cbLast_login ); |
| 903 |
sql += string( buf ) + ", "; |
SQLBindParameter(hstmt, 23, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, ACCOUNT_UMODE_LEN, 0, umode, 0, &cbUmode ); |
| 904 |
snprintf( buf, 12, "%d", account -> getNotifyMode( ) ); |
SQLBindParameter(hstmt, 24, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &uorder, 0, &cbUorder ); |
| 905 |
sql += string( buf ) + ", "; |
SQLBindParameter(hstmt, 25, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, ¬ify_method, 0, &cbNotify_method ); |
| 906 |
sql += "'" + string( addSlashes( account -> getUserOcc( ) ) ) + "', "; |
SQLBindParameter(hstmt, 26, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, ¬ify_mode, 0, &cbNotify_mode ); |
| 907 |
sql += "'" + string( addSlashes( account -> getBio( ) ) ) + "', "; |
SQLBindParameter(hstmt, 27, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, ACCOUNT_USER_OCC_LEN, 0, user_occ, 0, &cbUser_occ ); |
| 908 |
sql += "'" + string( addSlashes( account -> getUserIntrest( ) ) ) + "', "; |
SQLBindParameter(hstmt, 28, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, ACCOUNT_BIO_LEN, 0, bio, 0, &cbBio ); |
| 909 |
snprintf( buf, 12, "%d", account -> getUserMailok( ) ); |
SQLBindParameter(hstmt, 29, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, ACCOUNT_USER_INTREST_LEN, 0, user_intrest, 0, &cbUser_intrest ); |
| 910 |
sql += string( buf ) + ")"; |
SQLBindParameter(hstmt, 30, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &user_mailok, 0, &cbUser_mailok ); |
| 911 |
if( fp_mysql_query( mysql, sql.c_str( ) ) ){ |
|
| 912 |
fprintf( stderr, "%s\n", sql.c_str( ) ); |
strncpy2( (char*)uname, account -> getUname( ), ACCOUNT_UNAME_LEN ); |
| 913 |
fprintf( stderr, "%d %s\n", fp_mysql_errno(mysql), fp_mysql_error(mysql) ); |
strncpy2( (char*)name, account -> getName( ), ACCOUNT_NAME_LEN ); |
| 914 |
return RES_DB_QUERY_ERROR; |
strncpy2( (char*)email, account -> getEmail( ), ACCOUNT_EMAIL_LEN ); |
| 915 |
|
strncpy2( (char*)url, account -> getURL( ), ACCOUNT_URL_LEN ); |
| 916 |
|
strncpy2( (char*)user_avatar, account -> getUserAvatar( ), ACCOUNT_USER_AVATAR_LEN ); |
| 917 |
|
user_regdate = time( NULL ); |
| 918 |
|
strncpy2( (char*)user_icq, account -> getUserIcq( ), ACCOUNT_USER_ICQ_LEN ); |
| 919 |
|
strncpy2( (char*)user_from, account -> getUserFrom( ), ACCOUNT_USER_FROM_LEN ); |
| 920 |
|
strncpy2( (char*)user_sig, account -> getUserSig( ), ACCOUNT_USER_SIG_LEN ); |
| 921 |
|
user_viewemail = account -> getUserViewemail( ); |
| 922 |
|
strncpy2( (char*)actkey, account -> getActkey( ), ACCOUNT_ACTKEY_LEN ); |
| 923 |
|
strncpy2( (char*)user_aim, account -> getUserAim( ), ACCOUNT_USER_AIM_LEN ); |
| 924 |
|
strncpy2( (char*)user_yim, account -> getUserYim( ), ACCOUNT_USER_YIM_LEN ); |
| 925 |
|
strncpy2( (char*)user_msnm, account -> getUserMsnm( ), ACCOUNT_USER_MSNM_LEN ); |
| 926 |
|
strncpy2( (char*)pass, account -> getPass( ), ACCOUNT_PASS_LEN ); |
| 927 |
|
posts = account -> getPosts( ); |
| 928 |
|
attachsig = account -> getAttachsig( ); |
| 929 |
|
rank = account -> getRank( ); |
| 930 |
|
level = account -> getLevel( ); |
| 931 |
|
strncpy2( (char*)theme, account -> getTheme( ), ACCOUNT_THEME_LEN ); |
| 932 |
|
timezone_offset = account -> getTimezoneOffset( ); |
| 933 |
|
last_login = 0; |
| 934 |
|
strncpy2( (char*)umode, account -> getUmode( ), ACCOUNT_UMODE_LEN ); |
| 935 |
|
uorder = account -> getUorder( ); |
| 936 |
|
notify_method = account -> getNotifyMethod( ); |
| 937 |
|
notify_mode = account -> getNotifyMode( ); |
| 938 |
|
strncpy2( (char*)user_occ, account -> getUserOcc( ), ACCOUNT_USER_OCC_LEN ); |
| 939 |
|
strncpy2( (char*)bio, account -> getBio( ), ACCOUNT_BIO_LEN ); |
| 940 |
|
strncpy2( (char*)user_intrest, account -> getUserIntrest( ), ACCOUNT_USER_INTREST_LEN ); |
| 941 |
|
user_mailok = account -> getUserMailok( ); |
| 942 |
|
|
| 943 |
|
if( ( sqlcode = SQLExecute( hstmt ) ) == SQL_SUCCESS ){ |
| 944 |
|
SQLINTEGER count = 0; |
| 945 |
|
if( ( sqlcode = SQLRowCount( hstmt, &count ) ) == SQL_SUCCESS && count > 0 ){ |
| 946 |
|
//ユーザIDを取得する |
| 947 |
|
SQLHANDLE hstmt2 = NULL; |
| 948 |
|
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt2 ) ) == SQL_SUCCESS ) { |
| 949 |
|
sql = "SELECT LAST_INSERT_ID()"; // MySQL |
| 950 |
|
// sql = "SELECT LAST_INSERT_ROWID()"; // SQLite |
| 951 |
|
if( ( sqlcode = SQLExecDirect( hstmt2, (SQLCHAR*)sql.c_str(), sql.length() ) ) == SQL_SUCCESS ){ |
| 952 |
|
SQLUINTEGER last_insert_id; |
| 953 |
|
SQLINTEGER len; |
| 954 |
|
SQLBindCol( hstmt2, 1, SQL_C_ULONG, &last_insert_id, 0, &len ); |
| 955 |
|
if( ( sqlcode = SQLFetch( hstmt2 ) ) == SQL_SUCCESS ){ |
| 956 |
|
*uid = last_insert_id; |
| 957 |
|
ret = RES_OK; |
| 958 |
|
}else{ |
| 959 |
|
ret = RES_DB_QUERY_ERROR; |
| 960 |
|
string s( "SQLFetch in insertAccount " ); |
| 961 |
|
s += odbcDiagString( hstmt, sqlcode ); |
| 962 |
|
setLastErrorString( s.c_str( ) ); |
| 963 |
|
} |
| 964 |
|
}else{ |
| 965 |
|
string s( "SQLExecDirect in insertAccount " ); |
| 966 |
|
s += odbcDiagString( hstmt, sqlcode ); |
| 967 |
|
setLastErrorString( s.c_str( ) ); |
| 968 |
|
ret = RES_DB_QUERY_ERROR; |
| 969 |
|
} |
| 970 |
|
SQLFreeHandle( SQL_HANDLE_STMT, hstmt2 ); |
| 971 |
|
} |
| 972 |
|
}else{ |
| 973 |
|
string s( "SQLRowCount in insertAccount sql=" ); |
| 974 |
|
s += string( sql ); |
| 975 |
|
setLastErrorString( s.c_str( ) ); |
| 976 |
|
ret = RES_DB_QUERY_ERROR; |
| 977 |
|
} |
| 978 |
|
}else{ |
| 979 |
|
string s( "SQLExecute in insertAccount " ); |
| 980 |
|
s += odbcDiagString( hstmt, sqlcode ); |
| 981 |
|
setLastErrorString( s.c_str( ) ); |
| 982 |
|
ret = RES_DB_QUERY_ERROR; |
| 983 |
|
} |
| 984 |
|
}else{ |
| 985 |
|
string s( "SQLPrepare in insertAccount " ); |
| 986 |
|
s += odbcDiagString( hstmt, sqlcode ); |
| 987 |
|
setLastErrorString( s.c_str( ) ); |
| 988 |
|
ret = RES_ERROR; |
| 989 |
|
} |
| 990 |
|
SQLFreeHandle( SQL_HANDLE_STMT, hstmt ); |
| 991 |
|
}else{ |
| 992 |
|
setLastErrorString( "SQLAllocHandle(SQL_HANDLE_STMT,...) in insertAccount" ); |
| 993 |
|
ret = RES_ERROR; |
| 994 |
} |
} |
| 995 |
|
|
|
//ユーザIDを取得する |
|
|
*uid = fp_mysql_insert_id( mysql ); |
|
|
|
|
| 996 |
//vpaccountのユーザテーブルに残りの情報を書き込む |
//vpaccountのユーザテーブルに残りの情報を書き込む |
| 997 |
sql = "INSERT INTO " + dbprefix + "_vpaccount_users (uid, activate, address, division, tel, company_name, country, zipcode, fax, base_url, notice_mail, notice_mail_since) VALUES ("; |
SQLUINTEGER activate; |
| 998 |
snprintf( buf, 12, "%d", *uid ); |
SQLCHAR address[VP_ACCOUNT_ADDRESS_LEN+1]; |
| 999 |
sql += string( buf ) + ", "; |
SQLCHAR division[VP_ACCOUNT_DIVISION_LEN+1]; |
| 1000 |
if( account -> getActivate() ){ |
SQLCHAR tel[VP_ACCOUNT_TEL_LEN+1]; |
| 1001 |
sql += "1, "; |
SQLCHAR company_name[VP_ACCOUNT_COMPANY_NAME_LEN+1]; |
| 1002 |
}else{ |
SQLCHAR country[VP_ACCOUNT_COUNTRY_LEN+1]; |
| 1003 |
sql += "0, "; |
SQLCHAR zipcode[VP_ACCOUNT_ZIPCODE_LEN+1]; |
| 1004 |
} |
SQLCHAR fax[VP_ACCOUNT_FAX_LEN+1]; |
| 1005 |
sql += "'" + string( addSlashes( account -> getAddress() ) ) + "', "; |
SQLCHAR base_url[VP_ACCOUNT_BASE_URL_LEN+1]; |
| 1006 |
sql += "'" + string( addSlashes( account -> getDivision() ) ) + "', "; |
SQLINTEGER cbAddress = SQL_NTS, cbDivision = SQL_NTS, cbTel = SQL_NTS, cbCompany_name = SQL_NTS, cbCountry = SQL_NTS, cbZipcode = SQL_NTS, cbFax = SQL_NTS, cbBase_url = SQL_NTS; |
| 1007 |
sql += "'" + string( addSlashes( account -> getTel() ) ) + "', "; |
SQLINTEGER cbUid = 0, cbActivate = 0, cbNotice_mail = 0, cbNotice_mail_since = 0; |
| 1008 |
sql += "'" + string( addSlashes( account -> getCompanyName() ) ) + "', "; |
SQLUINTEGER notice_mail; |
| 1009 |
sql += "'" + string( addSlashes( account -> getCountry() ) ) + "', "; |
SQLUINTEGER notice_mail_since; |
| 1010 |
sql += "'" + string( addSlashes( account -> getZipcode() ) ) + "', "; |
if( ret == RES_OK && ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) { |
| 1011 |
sql += "'" + string( addSlashes( account -> getFax() ) ) + "', "; |
string sql; |
| 1012 |
sql += "'" + string( addSlashes( account -> getBaseURL() ) ) + "', "; |
sql = "INSERT INTO " + dbprefix + "_vpaccount_users (uid, activate, address, division, tel, company_name, country, zipcode, fax, base_url, notice_mail, notice_mail_since) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )"; |
| 1013 |
snprintf( buf, 12, "%d", account -> getNoticeMail( ) ); |
sqlcode = SQLPrepare(hstmt, (SQLCHAR*)sql.c_str(), SQL_NTS); |
| 1014 |
sql += string( buf ) + ", "; |
if( sqlcode == SQL_SUCCESS || sqlcode == SQL_SUCCESS_WITH_INFO ){ |
| 1015 |
snprintf( buf, 12, "%d", account -> getNoticeMailSince( ) ); |
SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_SSHORT, SQL_INTEGER, 0, 0, uid, 0, &cbUid); |
| 1016 |
sql += string( buf ) + ")"; |
SQLBindParameter(hstmt, 2, SQL_PARAM_INPUT, SQL_C_SSHORT, SQL_INTEGER, 0, 0, &activate, 0, &cbActivate); |
| 1017 |
if( fp_mysql_query( mysql, sql.c_str( ) ) ){ |
SQLBindParameter(hstmt, 3, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, VP_ACCOUNT_ADDRESS_LEN, 0, address, 0, &cbAddress); |
| 1018 |
fprintf( stderr, "%s\n", sql.c_str( ) ); |
SQLBindParameter(hstmt, 4, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, VP_ACCOUNT_DIVISION_LEN, 0, division, 0, &cbDivision); |
| 1019 |
fprintf( stderr, "%d %s\n", fp_mysql_errno(mysql), fp_mysql_error(mysql) ); |
SQLBindParameter(hstmt, 5, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, VP_ACCOUNT_TEL_LEN, 0, tel, 0, &cbTel); |
| 1020 |
//xoops_usersへinsertしたレコードを削除する |
SQLBindParameter(hstmt, 6, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, VP_ACCOUNT_COMPANY_NAME_LEN, 0, company_name, 0, &cbCompany_name); |
| 1021 |
sql = "DELETE FROM " + dbprefix + "_users where uid="; |
SQLBindParameter(hstmt, 7, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, VP_ACCOUNT_COUNTRY_LEN, 0, country, 0, &cbCountry); |
| 1022 |
snprintf( buf, 12, "%d", *uid ); |
SQLBindParameter(hstmt, 8, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, VP_ACCOUNT_ZIPCODE_LEN, 0, zipcode, 0, &cbZipcode); |
| 1023 |
sql += string( buf ); |
SQLBindParameter(hstmt, 9, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, VP_ACCOUNT_FAX_LEN, 0, fax, 0, &cbFax); |
| 1024 |
fp_mysql_query( mysql, sql.c_str( ) ); |
SQLBindParameter(hstmt, 10, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, VP_ACCOUNT_BASE_URL_LEN, 0, base_url, 0, &cbBase_url); |
| 1025 |
return RES_DB_QUERY_ERROR; |
SQLBindParameter(hstmt, 11, SQL_PARAM_INPUT, SQL_C_SSHORT, SQL_INTEGER, 0, 0, ¬ice_mail, 0, &cbNotice_mail); |
| 1026 |
|
SQLBindParameter(hstmt, 12, SQL_PARAM_INPUT, SQL_C_SSHORT, SQL_INTEGER, 0, 0, ¬ice_mail_since, 0, &cbNotice_mail_since); |
| 1027 |
|
|
| 1028 |
|
activate = account -> getActivate() ? 1 : 0; |
| 1029 |
|
strncpy2( (char*)address, account -> getAddress(), VP_ACCOUNT_ADDRESS_LEN ); |
| 1030 |
|
strncpy2( (char*)division, account -> getDivision(), VP_ACCOUNT_DIVISION_LEN ); |
| 1031 |
|
strncpy2( (char*)tel, account -> getTel(), VP_ACCOUNT_TEL_LEN ); |
| 1032 |
|
strncpy2( (char*)company_name, account -> getCompanyName(), VP_ACCOUNT_COMPANY_NAME_LEN ); |
| 1033 |
|
strncpy2( (char*)country, account -> getCountry(), VP_ACCOUNT_COUNTRY_LEN ); |
| 1034 |
|
strncpy2( (char*)zipcode, account -> getZipcode(), VP_ACCOUNT_ZIPCODE_LEN ); |
| 1035 |
|
strncpy2( (char*)fax, account -> getFax(), VP_ACCOUNT_FAX_LEN ); |
| 1036 |
|
strncpy2( (char*)base_url, account -> getBaseURL(), VP_ACCOUNT_BASE_URL_LEN ); |
| 1037 |
|
notice_mail = account -> getNoticeMail( ); |
| 1038 |
|
notice_mail_since = account -> getNoticeMailSince( ); |
| 1039 |
|
|
| 1040 |
|
if( ( sqlcode = SQLExecute( hstmt ) ) == SQL_SUCCESS ){ |
| 1041 |
|
SQLINTEGER count = 0; |
| 1042 |
|
if( ( sqlcode = SQLRowCount( hstmt, &count ) ) == SQL_SUCCESS && count > 0 ){ |
| 1043 |
|
ret = RES_OK; |
| 1044 |
|
}else{ |
| 1045 |
|
string s( "SQLRowCount in insertAccount sql=" ); |
| 1046 |
|
s += string( sql ); |
| 1047 |
|
setLastErrorString( s.c_str( ) ); |
| 1048 |
|
ret = RES_DB_QUERY_ERROR; |
| 1049 |
|
} |
| 1050 |
|
}else{ |
| 1051 |
|
string s( "SQLExecute in insertAccount " ); |
| 1052 |
|
s += odbcDiagString( hstmt, sqlcode ); |
| 1053 |
|
setLastErrorString( s.c_str( ) ); |
| 1054 |
|
ret = RES_DB_QUERY_ERROR; |
| 1055 |
|
} |
| 1056 |
|
}else{ |
| 1057 |
|
//xoops_usersへinsertしたレコードを削除する |
| 1058 |
|
sql = "DELETE FROM " + dbprefix + "_users where uid="; |
| 1059 |
|
snprintf( buf, 12, "%d", *uid ); |
| 1060 |
|
sql += string( buf ); |
| 1061 |
|
SQLHANDLE hstmt2 = NULL; |
| 1062 |
|
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt2 ) ) == SQL_SUCCESS ) { |
| 1063 |
|
SQLExecDirect( hstmt2, (SQLCHAR*)sql.c_str(), sql.length() ); |
| 1064 |
|
SQLFreeHandle( SQL_HANDLE_STMT, hstmt2 ); |
| 1065 |
|
} |
| 1066 |
|
string s( "SQLExecDirect in insertAccount sql=" ); |
| 1067 |
|
s += string( sql ); |
| 1068 |
|
setLastErrorString( s.c_str( ) ); |
| 1069 |
|
ret = RES_DB_QUERY_ERROR; |
| 1070 |
|
} |
| 1071 |
|
SQLFreeHandle( SQL_HANDLE_STMT, hstmt ); |
| 1072 |
|
}else{ |
| 1073 |
|
setLastErrorString( "SQLAllocHandle(SQL_HANDLE_STMT,...) in insertAccount" ); |
| 1074 |
|
ret = RES_ERROR; |
| 1075 |
} |
} |
| 1076 |
|
|
| 1077 |
return RES_OK; |
return ret; |
| 1078 |
} |
} |
| 1079 |
|
|
| 1080 |
/** |
/** |
| 1094 |
*/ |
*/ |
| 1095 |
result_t updateAccount( sessionid_t sid, const account_t* account ) |
result_t updateAccount( sessionid_t sid, const account_t* account ) |
| 1096 |
{ |
{ |
| 1097 |
if( mysql == NULL ) return RES_DB_NOT_INITIALIZED; |
if( hdbc == NULL ) return RES_DB_NOT_INITIALIZED; |
| 1098 |
if( account == NULL ) return RES_ERROR; |
if( account == NULL ) return RES_ERROR; |
| 1099 |
if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION; |
if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION; |
| 1100 |
if( !uidExists( account -> getUID( ) ) ) return RES_NO_SUCH_USER; |
if( !uidExists( account -> getUID( ) ) ) return RES_NO_SUCH_USER; |
| 1101 |
|
SQLRETURN sqlcode; |
| 1102 |
string sql; |
result_t ret = RES_ERROR; |
|
string tmp; |
|
|
char buf[ 12 ]; |
|
| 1103 |
|
|
| 1104 |
//xoopsのユーザテーブルに書き込む |
//xoopsのユーザテーブルに書き込む |
| 1105 |
sql = "UPDATE " + dbprefix + "_users SET "; |
SQLCHAR uname[ACCOUNT_UNAME_LEN], name[ACCOUNT_NAME_LEN], email[ACCOUNT_EMAIL_LEN], url[ACCOUNT_URL_LEN], user_avatar[ACCOUNT_USER_AVATAR_LEN], user_icq[ACCOUNT_USER_ICQ_LEN], user_from[ACCOUNT_USER_FROM_LEN], user_sig[ACCOUNT_USER_SIG_LEN], actkey[ACCOUNT_ACTKEY_LEN], user_aim[ACCOUNT_USER_AIM_LEN], user_yim[ACCOUNT_USER_YIM_LEN], user_msnm[ACCOUNT_USER_MSNM_LEN], pass[ACCOUNT_PASS_LEN], theme[ACCOUNT_THEME_LEN], umode[ACCOUNT_UMODE_LEN], user_occ[ACCOUNT_USER_OCC_LEN], bio[ACCOUNT_BIO_LEN], user_intrest[ACCOUNT_USER_INTREST_LEN]; |
| 1106 |
sql += "uname='" + string( addSlashes( account -> getUname( ) ) ) + "', "; |
SQLINTEGER uid, user_regdate, user_viewemail, posts, attachsig, rank, level, last_login, uorder, notify_method, notify_mode, user_mailok; |
| 1107 |
sql += "name='" + string( addSlashes( account -> getName( ) ) ) + "', "; |
SQLDOUBLE timezone_offset; |
| 1108 |
sql += "email='" + string( addSlashes( account -> getEmail( ) ) ) + "', "; |
|
| 1109 |
sql += "url='" + string( addSlashes( account -> getURL( ) ) ) + "', "; |
SQLINTEGER cbUname = SQL_NTS, cbName = SQL_NTS, cbEmail = SQL_NTS, cbUrl = SQL_NTS, cbUser_avatar = SQL_NTS, cbUser_icq = SQL_NTS, cbUser_from = SQL_NTS, cbUser_sig = SQL_NTS, cbActkey = SQL_NTS, cbUser_aim = SQL_NTS, cbUser_yim = SQL_NTS, cbUser_msnm = SQL_NTS, cbPass = SQL_NTS, cbTheme = SQL_NTS, cbUmode = SQL_NTS, cbUser_occ = SQL_NTS, cbBio = SQL_NTS, cbUser_intrest = SQL_NTS; |
| 1110 |
sql += "user_avatar='" + string( addSlashes( account -> getUserAvatar( ) ) ) + "', "; |
SQLINTEGER cbUid = 0, cbUser_regdate = 0, cbUser_viewemail = 0, cbPosts = 0, cbAttachsig = 0, cbRank = 0, cbLevel = 0, cbLast_login = 0, cbUorder = 0, cbNotify_method = 0, cbNotify_mode, cbUser_mailok = 0, cbTimezone_offset = 0; |
| 1111 |
sql += "user_regdate=" + string( intToString( account -> getUserRegdate( ) ) ) + ", "; |
|
| 1112 |
sql += "user_icq='" + string( addSlashes( account -> getUserIcq( ) ) ) + "', "; |
SQLUINTEGER activate; |
| 1113 |
sql += "user_from='" + string( addSlashes( account -> getUserFrom( ) ) ) + "', "; |
SQLCHAR address[VP_ACCOUNT_ADDRESS_LEN+1]; |
| 1114 |
sql += "user_sig='" + string( addSlashes( account -> getUserSig( ) ) ) + "', "; |
SQLCHAR division[VP_ACCOUNT_DIVISION_LEN+1]; |
| 1115 |
sql += "user_viewemail=" + string( intToString( account -> getUserViewemail( ) ) ) + ", "; |
SQLCHAR tel[VP_ACCOUNT_TEL_LEN+1]; |
| 1116 |
sql += "actkey='" + string( addSlashes( account -> getActkey( ) ) ) + "', "; |
SQLCHAR company_name[VP_ACCOUNT_COMPANY_NAME_LEN+1]; |
| 1117 |
sql += "user_aim='" + string( addSlashes( account -> getUserAim( ) ) ) + "', "; |
SQLCHAR country[VP_ACCOUNT_COUNTRY_LEN+1]; |
| 1118 |
sql += "user_yim='" + string( addSlashes( account -> getUserYim( ) ) ) + "', "; |
SQLCHAR zipcode[VP_ACCOUNT_ZIPCODE_LEN+1]; |
| 1119 |
sql += "user_msnm='" + string( addSlashes( account -> getUserMsnm( ) ) ) + "', "; |
SQLCHAR fax[VP_ACCOUNT_FAX_LEN+1]; |
| 1120 |
sql += "pass='" + string( account -> getPass( ) ) + "', "; |
SQLCHAR base_url[VP_ACCOUNT_BASE_URL_LEN+1]; |
| 1121 |
sql += "posts=" + string( intToString( account -> getPosts( ) ) ) + ", "; |
SQLINTEGER cbAddress = SQL_NTS, cbDivision = SQL_NTS, cbTel = SQL_NTS, cbCompany_name = SQL_NTS, cbCountry = SQL_NTS, cbZipcode = SQL_NTS, cbFax = SQL_NTS, cbBase_url = SQL_NTS; |
| 1122 |
sql += "attachsig=" + string( intToString( account -> getAttachsig( ) ) ) + ", "; |
SQLUINTEGER notice_mail; |
| 1123 |
sql += "rank=" + string( intToString( account -> getRank( ) ) ) + ", "; |
SQLUINTEGER notice_mail_since; |
| 1124 |
sql += "level=" + string( intToString( account -> getLevel( ) ) ) + ", "; |
SQLINTEGER len = 0; |
| 1125 |
sql += "theme='" + string( addSlashes( account -> getTheme( ) ) ) + "', "; |
|
| 1126 |
snprintf( buf, 12, "%.2f", account -> getTimezoneOffset( ) ); |
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) { |
| 1127 |
sql += "timezone_offset=" + string( buf ) + ", "; |
string sql; |
| 1128 |
sql += "last_login=" + string( unsignedIntToString( account -> getLastLogin( ) ) ) + ", "; |
|
| 1129 |
sql += "umode='" + string( account -> getUmode( ) ) + "', "; |
sql = "UPDATE " + dbprefix + "_users SET "; |
| 1130 |
sql += "uorder=" + string( intToString( account -> getUorder( ) ) ) + ", "; |
sql += "uname=?, "; |
| 1131 |
sql += "notify_method=" + string( intToString( account -> getNotifyMethod( ) ) ) + ", "; |
sql += "name=?, "; |
| 1132 |
sql += "notify_mode=" + string( intToString( account -> getNotifyMode( ) ) ) + ", "; |
sql += "email=?, "; |
| 1133 |
sql += "user_occ='" + string( addSlashes( account -> getUserOcc( ) ) ) + "', "; |
sql += "url=?, "; |
| 1134 |
sql += "bio='" + string( addSlashes( account -> getBio( ) ) ) + "', "; |
sql += "user_avatar=?, "; |
| 1135 |
sql += "user_intrest='" + string( addSlashes( account -> getUserIntrest( ) ) ) + "', "; |
sql += "user_regdate=?, "; |
| 1136 |
sql += "user_mailok=" + string( intToString( account -> getUserMailok( ) ) ); |
sql += "user_icq=?, "; |
| 1137 |
sql += " WHERE uid = " + string( intToString( account -> getUID( ) ) ); |
sql += "user_from=?, "; |
| 1138 |
|
sql += "user_sig=?, "; |
| 1139 |
if( fp_mysql_query( mysql, sql.c_str( ) ) ){ |
sql += "user_viewemail=?, "; |
| 1140 |
fprintf( stderr, "%s\n", sql.c_str( ) ); |
sql += "actkey=?, "; |
| 1141 |
fprintf( stderr, "%d %s\n", fp_mysql_errno(mysql), fp_mysql_error(mysql) ); |
sql += "user_aim=?, "; |
| 1142 |
return RES_DB_QUERY_ERROR; |
sql += "user_yim=?, "; |
| 1143 |
|
sql += "user_msnm=?, "; |
| 1144 |
|
sql += "pass=?, "; |
| 1145 |
|
sql += "posts=?, "; |
| 1146 |
|
sql += "attachsig=?, "; |
| 1147 |
|
sql += "rank=?, "; |
| 1148 |
|
sql += "level=?, "; |
| 1149 |
|
sql += "theme=?, "; |
| 1150 |
|
sql += "timezone_offset=?, "; |
| 1151 |
|
sql += "last_login=?, "; |
| 1152 |
|
sql += "umode=?, "; |
| 1153 |
|
sql += "uorder=?, "; |
| 1154 |
|
sql += "notify_method=?, "; |
| 1155 |
|
sql += "notify_mode=?, "; |
| 1156 |
|
sql += "user_occ=?, "; |
| 1157 |
|
sql += "bio=?, "; |
| 1158 |
|
sql += "user_intrest=?, "; |
| 1159 |
|
sql += "user_mailok=? "; |
| 1160 |
|
sql += " WHERE uid = ?"; |
| 1161 |
|
|
| 1162 |
|
sqlcode = SQLPrepare(hstmt, (SQLCHAR*)sql.c_str(), SQL_NTS); |
| 1163 |
|
if( sqlcode == SQL_SUCCESS || sqlcode == SQL_SUCCESS_WITH_INFO ){ |
| 1164 |
|
SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, ACCOUNT_UNAME_LEN, 0, uname, 0, &cbUname ); |
| 1165 |
|
SQLBindParameter(hstmt, 2, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, ACCOUNT_NAME_LEN, 0, name, 0, &cbName ); |
| 1166 |
|
SQLBindParameter(hstmt, 3, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, ACCOUNT_EMAIL_LEN, 0, email, 0, &cbEmail ); |
| 1167 |
|
SQLBindParameter(hstmt, 4, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, ACCOUNT_URL_LEN, 0, url, 0, &cbUrl ); |
| 1168 |
|
SQLBindParameter(hstmt, 5, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, ACCOUNT_USER_AVATAR_LEN, 0, user_avatar, 0, &cbUser_avatar ); |
| 1169 |
|
SQLBindParameter(hstmt, 6, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &user_regdate, 0, &cbUser_regdate ); |
| 1170 |
|
SQLBindParameter(hstmt, 7, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, ACCOUNT_USER_ICQ_LEN, 0, user_icq, 0, &cbUser_icq ); |
| 1171 |
|
SQLBindParameter(hstmt, 8, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, ACCOUNT_USER_FROM_LEN, 0, user_from, 0, &cbUser_from ); |
| 1172 |
|
SQLBindParameter(hstmt, 9, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, ACCOUNT_USER_SIG_LEN, 0, user_sig, 0, &cbUser_sig ); |
| 1173 |
|
SQLBindParameter(hstmt, 10, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &user_viewemail, 0, &cbUser_viewemail ); |
| 1174 |
|
SQLBindParameter(hstmt, 11, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, ACCOUNT_ACTKEY_LEN, 0, actkey, 0, &cbActkey ); |
| 1175 |
|
SQLBindParameter(hstmt, 12, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, ACCOUNT_USER_AIM_LEN, 0, user_aim, 0, &cbUser_aim ); |
| 1176 |
|
SQLBindParameter(hstmt, 13, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, ACCOUNT_USER_YIM_LEN, 0, user_yim, 0, &cbUser_yim ); |
| 1177 |
|
SQLBindParameter(hstmt, 14, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, ACCOUNT_USER_MSNM_LEN, 0, user_msnm, 0, &cbUser_msnm ); |
| 1178 |
|
SQLBindParameter(hstmt, 15, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, ACCOUNT_PASS_LEN, 0, pass, 0, &cbPass ); |
| 1179 |
|
SQLBindParameter(hstmt, 16, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &posts, 0, &cbPosts ); |
| 1180 |
|
SQLBindParameter(hstmt, 17, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &attachsig, 0, &cbAttachsig ); |
| 1181 |
|
SQLBindParameter(hstmt, 18, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &rank, 0, &cbRank ); |
| 1182 |
|
SQLBindParameter(hstmt, 19, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &level, 0, &cbLevel ); |
| 1183 |
|
SQLBindParameter(hstmt, 20, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, ACCOUNT_THEME_LEN, 0, theme, 0, &cbTheme ); |
| 1184 |
|
SQLBindParameter(hstmt, 21, SQL_PARAM_INPUT, SQL_C_DOUBLE, SQL_DOUBLE, 0, 0, &timezone_offset, 0, &cbTimezone_offset ); |
| 1185 |
|
SQLBindParameter(hstmt, 22, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &last_login, 0, &cbLast_login ); |
| 1186 |
|
SQLBindParameter(hstmt, 23, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, ACCOUNT_UMODE_LEN, 0, umode, 0, &cbUmode ); |
| 1187 |
|
SQLBindParameter(hstmt, 24, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &uorder, 0, &cbUorder ); |
| 1188 |
|
SQLBindParameter(hstmt, 25, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, ¬ify_method, 0, &cbNotify_method ); |
| 1189 |
|
SQLBindParameter(hstmt, 26, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, ¬ify_mode, 0, &cbNotify_mode ); |
| 1190 |
|
SQLBindParameter(hstmt, 27, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, ACCOUNT_USER_OCC_LEN, 0, user_occ, 0, &cbUser_occ ); |
| 1191 |
|
SQLBindParameter(hstmt, 28, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, ACCOUNT_BIO_LEN, 0, bio, 0, &cbBio ); |
| 1192 |
|
SQLBindParameter(hstmt, 29, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, ACCOUNT_USER_INTREST_LEN, 0, user_intrest, 0, &cbUser_intrest ); |
| 1193 |
|
SQLBindParameter(hstmt, 30, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &user_mailok, 0, &cbUser_mailok ); |
| 1194 |
|
SQLBindParameter(hstmt, 31, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &uid, 0, &cbUid ); |
| 1195 |
|
|
| 1196 |
|
strncpy2( (char*)uname, account -> getUname( ), ACCOUNT_UNAME_LEN ); |
| 1197 |
|
strncpy2( (char*)name, account -> getName( ), ACCOUNT_NAME_LEN ); |
| 1198 |
|
strncpy2( (char*)email, account -> getEmail( ), ACCOUNT_EMAIL_LEN ); |
| 1199 |
|
strncpy2( (char*)url, account -> getURL( ), ACCOUNT_URL_LEN ); |
| 1200 |
|
strncpy2( (char*)user_avatar, account -> getUserAvatar( ), ACCOUNT_USER_AVATAR_LEN ); |
| 1201 |
|
user_regdate = time( NULL ); |
| 1202 |
|
strncpy2( (char*)user_icq, account -> getUserIcq( ), ACCOUNT_USER_ICQ_LEN ); |
| 1203 |
|
strncpy2( (char*)user_from, account -> getUserFrom( ), ACCOUNT_USER_FROM_LEN ); |
| 1204 |
|
strncpy2( (char*)user_sig, account -> getUserSig( ), ACCOUNT_USER_SIG_LEN ); |
| 1205 |
|
user_viewemail = account -> getUserViewemail( ); |
| 1206 |
|
strncpy2( (char*)actkey, account -> getActkey( ), ACCOUNT_ACTKEY_LEN ); |
| 1207 |
|
strncpy2( (char*)user_aim, account -> getUserAim( ), ACCOUNT_USER_AIM_LEN ); |
| 1208 |
|
strncpy2( (char*)user_yim, account -> getUserYim( ), ACCOUNT_USER_YIM_LEN ); |
| 1209 |
|
strncpy2( (char*)user_msnm, account -> getUserMsnm( ), ACCOUNT_USER_MSNM_LEN ); |
| 1210 |
|
strncpy2( (char*)pass, account -> getPass( ), ACCOUNT_PASS_LEN ); |
| 1211 |
|
posts = account -> getPosts( ); |
| 1212 |
|
attachsig = account -> getAttachsig( ); |
| 1213 |
|
rank = account -> getRank( ); |
| 1214 |
|
level = account -> getLevel( ); |
| 1215 |
|
strncpy2( (char*)theme, account -> getTheme( ), ACCOUNT_THEME_LEN ); |
| 1216 |
|
timezone_offset = account -> getTimezoneOffset( ); |
| 1217 |
|
last_login = 0; |
| 1218 |
|
strncpy2( (char*)umode, account -> getUmode( ), ACCOUNT_UMODE_LEN ); |
| 1219 |
|
uorder = account -> getUorder( ); |
| 1220 |
|
notify_method = account -> getNotifyMethod( ); |
| 1221 |
|
notify_mode = account -> getNotifyMode( ); |
| 1222 |
|
strncpy2( (char*)user_occ, account -> getUserOcc( ), ACCOUNT_USER_OCC_LEN ); |
| 1223 |
|
strncpy2( (char*)bio, account -> getBio( ), ACCOUNT_BIO_LEN ); |
| 1224 |
|
strncpy2( (char*)user_intrest, account -> getUserIntrest( ), ACCOUNT_USER_INTREST_LEN ); |
| 1225 |
|
user_mailok = account -> getUserMailok( ); |
| 1226 |
|
uid = account -> getUID( ); |
| 1227 |
|
|
| 1228 |
|
if( ( sqlcode = SQLExecute( hstmt ) ) == SQL_SUCCESS ){ |
| 1229 |
|
SQLINTEGER count = 0; |
| 1230 |
|
if( ( sqlcode = SQLRowCount( hstmt, &count ) ) == SQL_SUCCESS && count > 0 ){ |
| 1231 |
|
ret = RES_OK; |
| 1232 |
|
}else{ |
| 1233 |
|
string s( "SQLRowCount in updateAccount sql=" ); |
| 1234 |
|
s += string( sql ); |
| 1235 |
|
setLastErrorString( s.c_str( ) ); |
| 1236 |
|
ret = RES_DB_QUERY_ERROR; |
| 1237 |
|
} |
| 1238 |
|
}else{ |
| 1239 |
|
string s( "SQLExecute in updateAccount " ); |
| 1240 |
|
s += odbcDiagString( hstmt, sqlcode ); |
| 1241 |
|
setLastErrorString( s.c_str( ) ); |
| 1242 |
|
ret = RES_DB_QUERY_ERROR; |
| 1243 |
|
} |
| 1244 |
|
}else{ |
| 1245 |
|
setLastErrorString( "SQLPrepare in updateAccount sql=" ); |
| 1246 |
|
ret = RES_ERROR; |
| 1247 |
|
} |
| 1248 |
|
SQLFreeHandle( SQL_HANDLE_STMT, hstmt ); |
| 1249 |
|
}else{ |
| 1250 |
|
setLastErrorString( "SQLAllocHandle(SQL_HANDLE_STMT,...) in updateAccount" ); |
| 1251 |
|
ret = RES_ERROR; |
| 1252 |
} |
} |
| 1253 |
|
|
| 1254 |
//vpaccountのユーザテーブルに残りの情報を上書きする |
//vpaccountのユーザテーブルに残りの情報を上書きする |
| 1255 |
sql = "UPDATE " + dbprefix + "_vpaccount_users SET "; |
if( ret == RES_OK && ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) { |
| 1256 |
sql += "activate="; |
string sql; |
| 1257 |
if( account -> getActivate() ){ |
|
| 1258 |
sql += "1, "; |
sql = "UPDATE " + dbprefix + "_vpaccount_users SET "; |
| 1259 |
}else{ |
sql += "activate=?, "; |
| 1260 |
sql += "0, "; |
sql += "address=?, "; |
| 1261 |
} |
sql += "division=?, "; |
| 1262 |
sql += "address='" + string( addSlashes( account -> getAddress() ) ) + "', "; |
sql += "tel=?, "; |
| 1263 |
sql += "division='" + string( addSlashes( account -> getDivision() ) ) + "', "; |
sql += "company_name=?, "; |
| 1264 |
sql += "tel='" + string( addSlashes( account -> getTel() ) ) + "', "; |
sql += "country=?, "; |
| 1265 |
sql += "company_name='" + string( addSlashes( account -> getCompanyName() ) ) + "', "; |
sql += "zipcode=?, "; |
| 1266 |
sql += "country='" + string( addSlashes( account -> getCountry() ) ) + "', "; |
sql += "fax=?, "; |
| 1267 |
sql += "zipcode='" + string( addSlashes( account -> getZipcode() ) ) + "', "; |
sql += "base_url=?, "; |
| 1268 |
sql += "fax='" + string( addSlashes( account -> getFax() ) ) + "', "; |
sql += "notice_mail=?, "; |
| 1269 |
sql += "base_url='" + string( addSlashes( account -> getBaseURL() ) ) + "', "; |
sql += "notice_mail_since=? "; |
| 1270 |
sql += "notice_mail=" + string( intToString( account -> getNoticeMail( ) ) ) + ", "; |
sql += "WHERE uid=?"; |
| 1271 |
sql += "notice_mail_since=" + string( intToString( account -> getNoticeMailSince( ) ) ); |
|
| 1272 |
sql += " WHERE uid = " + string( intToString( account -> getUID( ) ) ); |
sqlcode = SQLPrepare(hstmt, (SQLCHAR*)sql.c_str(), SQL_NTS); |
| 1273 |
|
if( sqlcode == SQL_SUCCESS || sqlcode == SQL_SUCCESS_WITH_INFO ){ |
| 1274 |
if( fp_mysql_query( mysql, sql.c_str( ) ) ){ |
SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_SSHORT, SQL_INTEGER, 0, 0, &activate, 0, &len); |
| 1275 |
fprintf( stderr, "%s\n", sql.c_str( ) ); |
SQLBindParameter(hstmt, 2, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, VP_ACCOUNT_ADDRESS_LEN, 0, address, 0, &cbAddress); |
| 1276 |
fprintf( stderr, "%d %s\n", fp_mysql_errno(mysql), fp_mysql_error(mysql) ); |
SQLBindParameter(hstmt, 3, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, VP_ACCOUNT_DIVISION_LEN, 0, division, 0, &cbDivision); |
| 1277 |
return RES_DB_QUERY_ERROR; |
SQLBindParameter(hstmt, 4, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, VP_ACCOUNT_TEL_LEN, 0, tel, 0, &cbTel); |
| 1278 |
|
SQLBindParameter(hstmt, 5, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, VP_ACCOUNT_COMPANY_NAME_LEN, 0, company_name, 0, &cbCompany_name); |
| 1279 |
|
SQLBindParameter(hstmt, 6, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, VP_ACCOUNT_COUNTRY_LEN, 0, country, 0, &cbCountry); |
| 1280 |
|
SQLBindParameter(hstmt, 7, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, VP_ACCOUNT_ZIPCODE_LEN, 0, zipcode, 0, &cbZipcode); |
| 1281 |
|
SQLBindParameter(hstmt, 8, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, VP_ACCOUNT_FAX_LEN, 0, fax, 0, &cbFax); |
| 1282 |
|
SQLBindParameter(hstmt, 9, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, VP_ACCOUNT_BASE_URL_LEN, 0, base_url, 0, &cbBase_url); |
| 1283 |
|
SQLBindParameter(hstmt, 10, SQL_PARAM_INPUT, SQL_C_SSHORT, SQL_INTEGER, 0, 0, ¬ice_mail, 0, &len); |
| 1284 |
|
SQLBindParameter(hstmt, 11, SQL_PARAM_INPUT, SQL_C_SSHORT, SQL_INTEGER, 0, 0, ¬ice_mail_since, 0, &len); |
| 1285 |
|
SQLBindParameter(hstmt, 12, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &uid, 0, &cbUid ); |
| 1286 |
|
|
| 1287 |
|
activate = account -> getActivate() ? 1 : 0; |
| 1288 |
|
strncpy2( (char*)address, account -> getAddress( ) , VP_ACCOUNT_ADDRESS_LEN ); |
| 1289 |
|
strncpy2( (char*)division, account -> getDivision(), VP_ACCOUNT_DIVISION_LEN ); |
| 1290 |
|
strncpy2( (char*)tel, account -> getTel(), VP_ACCOUNT_TEL_LEN ); |
| 1291 |
|
strncpy2( (char*)company_name, account -> getCompanyName(), VP_ACCOUNT_COMPANY_NAME_LEN ); |
| 1292 |
|
strncpy2( (char*)country, account -> getCountry(), VP_ACCOUNT_COUNTRY_LEN ); |
| 1293 |
|
strncpy2( (char*)zipcode, account -> getZipcode(), VP_ACCOUNT_ZIPCODE_LEN ); |
| 1294 |
|
strncpy2( (char*)fax, account -> getFax(), VP_ACCOUNT_FAX_LEN ); |
| 1295 |
|
strncpy2( (char*)base_url, account -> getBaseURL(), VP_ACCOUNT_BASE_URL_LEN ); |
| 1296 |
|
notice_mail = account -> getNoticeMail( ); |
| 1297 |
|
notice_mail_since = account -> getNoticeMailSince( ); |
| 1298 |
|
uid = account -> getUID( ); |
| 1299 |
|
|
| 1300 |
|
if( ( sqlcode = SQLExecute( hstmt ) ) == SQL_SUCCESS ){ |
| 1301 |
|
SQLINTEGER count = 0; |
| 1302 |
|
if( ( sqlcode = SQLRowCount( hstmt, &count ) ) == SQL_SUCCESS && count > 0 ){ |
| 1303 |
|
ret = RES_OK; |
| 1304 |
|
}else{ |
| 1305 |
|
string s( "SQLRowCount in updateAccount sql=" ); |
| 1306 |
|
s += string( sql ); |
| 1307 |
|
setLastErrorString( s.c_str( ) ); |
| 1308 |
|
ret = RES_DB_QUERY_ERROR; |
| 1309 |
|
} |
| 1310 |
|
}else{ |
| 1311 |
|
string s( "SQLExecute in updateAccount " ); |
| 1312 |
|
s += odbcDiagString( hstmt, sqlcode ); |
| 1313 |
|
setLastErrorString( s.c_str( ) ); |
| 1314 |
|
ret = RES_DB_QUERY_ERROR; |
| 1315 |
|
} |
| 1316 |
|
}else{ |
| 1317 |
|
setLastErrorString( "SQLPrepare in updateAccount sql=" ); |
| 1318 |
|
ret = RES_ERROR; |
| 1319 |
|
} |
| 1320 |
|
SQLFreeHandle( SQL_HANDLE_STMT, hstmt ); |
| 1321 |
|
}else{ |
| 1322 |
|
setLastErrorString( "SQLAllocHandle(SQL_HANDLE_STMT,...) in updateAccount" ); |
| 1323 |
|
ret = RES_ERROR; |
| 1324 |
} |
} |
| 1325 |
|
return ret; |
|
return RES_OK; |
|
| 1326 |
} |
} |
| 1327 |
|
|
| 1328 |
/** |
/** |
| 1343 |
*/ |
*/ |
| 1344 |
result_t dumpUids( sessionid_t sid, criteria_t* cri, userid_t** uids, int* uidsLen ) |
result_t dumpUids( sessionid_t sid, criteria_t* cri, userid_t** uids, int* uidsLen ) |
| 1345 |
{ |
{ |
| 1346 |
if( mysql == NULL ) return RES_DB_NOT_INITIALIZED; |
if( hdbc == NULL ) return RES_DB_NOT_INITIALIZED; |
| 1347 |
if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION; |
if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION; |
| 1348 |
|
|
| 1349 |
string sql; |
result_t ret = RES_ERROR; |
|
MYSQL_RES* result; |
|
|
MYSQL_ROW row; |
|
| 1350 |
userid_t* dst = 0; |
userid_t* dst = 0; |
| 1351 |
|
string sql; |
| 1352 |
|
SQLRETURN sqlcode; |
| 1353 |
|
SQLINTEGER count = 0; |
| 1354 |
|
|
| 1355 |
|
|
| 1356 |
sql = "SELECT uid FROM " + dbprefix + "_vpaccount_users "; |
sql = "SELECT uid FROM " + dbprefix + "_vpaccount_users "; |
| 1357 |
sql += criteria2str( cri ); |
sql += criteria2str( cri ); |
| 1358 |
if( fp_mysql_query( mysql, sql.c_str( ) ) ){ |
if( countResultRows( sql.c_str(), &count ) == RES_OK ){ |
| 1359 |
fprintf( stderr, "%d %s\n", fp_mysql_errno(mysql), fp_mysql_error(mysql) ); |
*uidsLen = count; |
| 1360 |
return RES_DB_QUERY_ERROR; |
dst = new userid_t[ *uidsLen ]; |
| 1361 |
} |
*uids = dst; |
| 1362 |
result = fp_mysql_store_result( mysql ) ; |
}else{ |
| 1363 |
if( result == NULL ){ |
return RES_ERROR; |
|
fprintf( stderr, "%d %s\n", fp_mysql_errno(mysql), fp_mysql_error(mysql) ); |
|
|
return RES_DB_QUERY_ERROR; |
|
|
} |
|
|
*uidsLen = fp_mysql_num_rows( result ); |
|
|
dst = new userid_t[ *uidsLen ]; |
|
|
for( int i = 0; ( row = fp_mysql_fetch_row(result) ) != 0 && i < *uidsLen ; i++ ){ |
|
|
dst[ i ] = atoi( row[ 0 ] != NULL ? row[ 0 ] : "" ); |
|
| 1364 |
} |
} |
| 1365 |
fp_mysql_free_result( result ); |
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) { |
| 1366 |
*uids = dst; |
if( ( sqlcode = SQLExecDirect( hstmt, (SQLCHAR*)sql.c_str(), sql.length() ) ) == SQL_SUCCESS ){ |
| 1367 |
|
userid_t uid; |
| 1368 |
return RES_OK; |
SQLINTEGER len = 0; |
| 1369 |
|
SQLBindCol( hstmt, 1, SQL_C_ULONG, &uid, 0, &len ); |
| 1370 |
|
|
| 1371 |
|
for( int i = 0; ( sqlcode = SQLFetch( hstmt ) ) == SQL_SUCCESS && i < *uidsLen ; i++ ){ |
| 1372 |
|
dst[ i ] = uid; |
| 1373 |
|
} |
| 1374 |
|
|
| 1375 |
|
ret = RES_OK; |
| 1376 |
|
}else{ |
| 1377 |
|
string s( "SQLExecDirect in dumpUids " ); |
| 1378 |
|
s += odbcDiagString( hstmt, sqlcode ); |
| 1379 |
|
s += "sql="; |
| 1380 |
|
s += string( sql ); |
| 1381 |
|
setLastErrorString( s.c_str( ) ); |
| 1382 |
|
ret = RES_DB_QUERY_ERROR; |
| 1383 |
|
} |
| 1384 |
|
SQLFreeHandle( SQL_HANDLE_STMT, hstmt ); |
| 1385 |
|
}else{ |
| 1386 |
|
setLastErrorString( "SQLAllocHandle(SQL_HANDLE_STMT,...) in dumpUids " ); |
| 1387 |
|
ret = RES_DB_QUERY_ERROR; |
| 1388 |
|
} |
| 1389 |
|
return ret; |
| 1390 |
} |
} |
| 1391 |
|
|
| 1392 |
/** |
/** |
| 1400 |
*/ |
*/ |
| 1401 |
int getGroupCount( sessionid_t sid ) |
int getGroupCount( sessionid_t sid ) |
| 1402 |
{ |
{ |
| 1403 |
if( mysql == NULL ) return 0; |
if( hdbc == NULL ) return 0; |
| 1404 |
if( !isValidSessionID( sid ) ) return 0; |
if( !isValidSessionID( sid ) ) return 0; |
| 1405 |
|
|
| 1406 |
|
SQLRETURN sqlcode; |
| 1407 |
|
SQLHANDLE hstmt = NULL; |
| 1408 |
string sql; |
string sql; |
| 1409 |
MYSQL_RES* result; |
int ret = 0; |
|
MYSQL_ROW row; |
|
|
int groupLen = 0; |
|
| 1410 |
|
|
| 1411 |
//グループ数を求める |
//グループ数を求める |
| 1412 |
sql = "SELECT COUNT(*) FROM " + dbprefix + "_vpaccount_groups"; |
sql = "SELECT COUNT(*) FROM " + dbprefix + "_vpaccount_groups"; |
| 1413 |
if( fp_mysql_query( mysql, sql.c_str( ) ) ){ |
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) { |
| 1414 |
fprintf( stderr, "%d %s\n", fp_mysql_errno(mysql), fp_mysql_error(mysql) ); |
if( ( sqlcode = SQLExecDirect( hstmt, (SQLCHAR*)sql.c_str(), sql.length() ) ) == SQL_SUCCESS ){ |
| 1415 |
return RES_DB_QUERY_ERROR; |
SQLUINTEGER count = 0; |
| 1416 |
} |
SQLINTEGER len; |
| 1417 |
result = fp_mysql_store_result( mysql ) ; |
SQLBindCol( hstmt, 1, SQL_C_ULONG, &count, 0, &len ); |
| 1418 |
if( row = fp_mysql_fetch_row(result) ){ |
if( ( sqlcode = SQLFetch( hstmt ) ) == SQL_SUCCESS ){ |
| 1419 |
groupLen = atoi( row[ 0 ] != NULL ? row[ 0 ] : "" ); |
ret = count; |
| 1420 |
|
}else { |
| 1421 |
|
string s( "SQLFetch in getGroupCount sql=" ); |
| 1422 |
|
s += string( sql ); |
| 1423 |
|
setLastErrorString( s.c_str( ) ); |
| 1424 |
|
ret = 0; |
| 1425 |
|
} |
| 1426 |
|
}else{ |
| 1427 |
|
setLastErrorString( "SQLExecDirect in getGroupCount" ); |
| 1428 |
|
ret = 0; |
| 1429 |
|
} |
| 1430 |
|
SQLFreeHandle( SQL_HANDLE_STMT, hstmt ); |
| 1431 |
|
}else{ |
| 1432 |
|
setLastErrorString( "SQLAllocHandle(SQL_HANDLE_STMT,...) in getGroupCount" ); |
| 1433 |
|
ret = 0; |
| 1434 |
} |
} |
| 1435 |
fp_mysql_free_result( result ); |
return ret; |
|
return groupLen; |
|
| 1436 |
} |
} |
| 1437 |
|
|
| 1438 |
/** |
/** |
| 1454 |
*/ |
*/ |
| 1455 |
result_t getGroupsByUid( sessionid_t sid, userid_t uid, criteria_t* cri, groupid_t** gids, int* gidsLen ) |
result_t getGroupsByUid( sessionid_t sid, userid_t uid, criteria_t* cri, groupid_t** gids, int* gidsLen ) |
| 1456 |
{ |
{ |
| 1457 |
if( mysql == NULL ) return RES_DB_NOT_INITIALIZED; |
if( hdbc == NULL ) return RES_DB_NOT_INITIALIZED; |
| 1458 |
if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION; |
if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION; |
| 1459 |
if( !uidExists( uid ) ) return RES_NO_SUCH_USER; //uidの存在をチェック |
if( !uidExists( uid ) ) return RES_NO_SUCH_USER; //uidの存在をチェック |
| 1460 |
|
|
| 1461 |
|
result_t ret = RES_ERROR; |
| 1462 |
string sql; |
string sql; |
| 1463 |
MYSQL_RES* result; |
SQLRETURN sqlcode; |
| 1464 |
MYSQL_ROW row; |
SQLHANDLE hstmt = NULL; |
| 1465 |
|
SQLINTEGER count = 0; |
| 1466 |
groupid_t* dst = 0; |
groupid_t* dst = 0; |
| 1467 |
int len = 0; |
int len = 0; |
| 1468 |
|
|
| 1469 |
//所属するグループの最大個数を求める |
sql = "SELECT gid FROM " + dbprefix + "_vpaccount_groups_users_link"; |
|
sql = "SELECT count(*) FROM " + dbprefix + "_vpaccount_groups_users_link"; |
|
| 1470 |
sql += " WHERE uid=" + string( unsignedIntToString( uid ) ); |
sql += " WHERE uid=" + string( unsignedIntToString( uid ) ); |
| 1471 |
sql += criteria2str( cri ); |
sql += criteria2str( cri ); |
| 1472 |
if( fp_mysql_query( mysql, sql.c_str( ) ) ){ |
if( countResultRows( sql.c_str(), &count ) == RES_OK ){ |
| 1473 |
fprintf( stderr, "%s\n", sql.c_str( ) ); |
*gidsLen = count; |
| 1474 |
fprintf( stderr, "%d %s\n", fp_mysql_errno(mysql), fp_mysql_error(mysql) ); |
dst = new groupid_t[ *gidsLen ]; |
| 1475 |
return RES_DB_QUERY_ERROR; |
*gids = dst; |
| 1476 |
} |
}else{ |
| 1477 |
result = fp_mysql_store_result( mysql ) ; |
return RES_ERROR; |
|
if( row = fp_mysql_fetch_row(result) ){ |
|
|
len = atoi( row[ 0 ] != NULL ? row[ 0 ] : "" ); |
|
| 1478 |
} |
} |
|
fp_mysql_free_result( result ); |
|
| 1479 |
|
|
| 1480 |
sql = "SELECT gid, uid, is_admin FROM " + dbprefix + "_vpaccount_groups_users_link"; |
//所属するグループの最大個数を求める |
| 1481 |
sql += " WHERE uid=" + string( unsignedIntToString( uid ) ); |
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) { |
| 1482 |
sql += criteria2str( cri ); |
if( ( sqlcode = SQLExecDirect( hstmt, (SQLCHAR*)sql.c_str(), sql.length() ) ) == SQL_SUCCESS ){ |
| 1483 |
if( fp_mysql_query( mysql, sql.c_str( ) ) ){ |
if( count > 0 ){ |
| 1484 |
fprintf( stderr, "%s\n", sql.c_str( ) ); |
SQLHANDLE hstmt2 = NULL; |
| 1485 |
fprintf( stderr, "%d %s\n", fp_mysql_errno(mysql), fp_mysql_error(mysql) ); |
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt2 ) ) == SQL_SUCCESS ) { |
| 1486 |
return RES_DB_QUERY_ERROR; |
sql = "SELECT gid, uid, is_admin FROM " + dbprefix + "_vpaccount_groups_users_link"; |
| 1487 |
} |
sql += " WHERE uid=" + string( unsignedIntToString( uid ) ); |
| 1488 |
*gidsLen = 0; |
sql += criteria2str( cri ); |
| 1489 |
dst = new groupid_t[ len ]; |
if( ( sqlcode = SQLExecDirect( hstmt2, (SQLCHAR*)sql.c_str(), sql.length() ) ) == SQL_SUCCESS ){ |
| 1490 |
result = fp_mysql_store_result( mysql ) ; |
SQLINTEGER len; |
| 1491 |
for( int i = 0; ( row = fp_mysql_fetch_row(result) ) != 0 && i < len ; i++ ){ |
groupid_t gid = 0; |
| 1492 |
dst[ i ] = atoi( row[ 0 ] != NULL ? row[ 0 ] : "" ); |
SQLBindCol( hstmt, 1, SQL_C_ULONG, &gid, 0, &len ); |
| 1493 |
( *gidsLen )++; |
for( int i = 0; ( sqlcode = SQLFetch( hstmt ) ) == SQL_SUCCESS && i < *gidsLen ; i++ ){ |
| 1494 |
|
dst[ i ] = gid; |
| 1495 |
|
} |
| 1496 |
|
ret = RES_OK; |
| 1497 |
|
}else{ |
| 1498 |
|
string s( "SQLExecDirect in getGroupsByUid " ); |
| 1499 |
|
s += odbcDiagString( hstmt, sqlcode ); |
| 1500 |
|
s += string( ", sql=" ) + string( sql ); |
| 1501 |
|
ret = RES_DB_QUERY_ERROR; |
| 1502 |
|
} |
| 1503 |
|
}else{ |
| 1504 |
|
string s( "SQLAllocHandle in getGroupsByUid " ); |
| 1505 |
|
s += odbcDiagString( hstmt, sqlcode ); |
| 1506 |
|
s += string( ", sql=" ) + string( sql ); |
| 1507 |
|
ret = RES_DB_QUERY_ERROR; |
| 1508 |
|
} |
| 1509 |
|
}else{ |
| 1510 |
|
ret = RES_OK; |
| 1511 |
|
} |
| 1512 |
|
}else{ |
| 1513 |
|
string s( "SQLExecDirect in getGroupsByUid " ); |
| 1514 |
|
s += odbcDiagString( hstmt, sqlcode ); |
| 1515 |
|
s += string( ", sql=" ) + string( sql ); |
| 1516 |
|
ret = RES_DB_QUERY_ERROR; |
| 1517 |
|
} |
| 1518 |
|
}else{ |
| 1519 |
|
string s( "SQLAllocHandle in getGroupsByUid " ); |
| 1520 |
|
setLastErrorString( s.c_str( ) ); |
| 1521 |
|
ret = RES_DB_QUERY_ERROR; |
| 1522 |
} |
} |
| 1523 |
fp_mysql_free_result( result ); |
return ret; |
|
*gids = dst; |
|
|
|
|
|
return RES_OK; |
|
| 1524 |
} |
} |
| 1525 |
|
|
| 1526 |
/** |
/** |
| 1538 |
*/ |
*/ |
| 1539 |
bool isGroupAdmin( sessionid_t sid, groupid_t gid, userid_t uid ) |
bool isGroupAdmin( sessionid_t sid, groupid_t gid, userid_t uid ) |
| 1540 |
{ |
{ |
| 1541 |
if( mysql == NULL ) return false; |
if( hdbc == NULL ) return false; |
| 1542 |
if( !isValidSessionID( sid ) ) return false; |
if( !isValidSessionID( sid ) ) return false; |
| 1543 |
if( !uidExists( uid ) ) return false; |
if( !uidExists( uid ) ) return false; |
| 1544 |
if( !gidExists( gid ) ) return false; |
if( !gidExists( gid ) ) return false; |
| 1545 |
|
|
| 1546 |
|
bool ret = false; |
| 1547 |
string sql; |
string sql; |
| 1548 |
MYSQL_RES* result; |
SQLRETURN sqlcode; |
| 1549 |
MYSQL_ROW row; |
SQLINTEGER count = 0; |
|
groupid_t* dst = 0; |
|
|
result_t res; |
|
| 1550 |
|
|
| 1551 |
sql = "SELECT * FROM " + dbprefix + "_vpaccount_groups_users_link "; |
sql = "SELECT * FROM " + dbprefix + "_vpaccount_groups_users_link "; |
| 1552 |
sql += "WHERE gid=" + string( unsignedIntToString( gid ) ); |
sql += "WHERE gid=" + string( unsignedIntToString( gid ) ); |
| 1553 |
sql += " AND uid=" + string( unsignedIntToString( uid ) ); |
sql += " AND uid=" + string( unsignedIntToString( uid ) ); |
| 1554 |
sql += " AND is_admin=1"; |
sql += " AND is_admin=1"; |
| 1555 |
if( fp_mysql_query( mysql, sql.c_str( ) ) ){ |
if( countResultRows( sql.c_str(), &count ) == RES_OK ){ |
| 1556 |
fprintf( stderr, "%d %s\n", fp_mysql_errno(mysql), fp_mysql_error(mysql) ); |
if( count > 0 ){ |
| 1557 |
return false; |
ret = true; |
| 1558 |
} |
}else{ |
| 1559 |
result = fp_mysql_store_result( mysql ); |
ret = false; |
| 1560 |
if( !fp_mysql_fetch_row(result) ){ |
} |
| 1561 |
fp_mysql_free_result( result ); |
}else{ |
| 1562 |
return false; |
ret = false; |
| 1563 |
} |
} |
| 1564 |
|
return ret; |
|
fp_mysql_free_result( result ); |
|
|
return true;; |
|
| 1565 |
} |
} |
| 1566 |
|
|
| 1567 |
/** |
/** |
| 1581 |
*/ |
*/ |
| 1582 |
result_t dumpGids( sessionid_t sid, criteria_t* cri, groupid_t** gids, int* gidsLen ) |
result_t dumpGids( sessionid_t sid, criteria_t* cri, groupid_t** gids, int* gidsLen ) |
| 1583 |
{ |
{ |
| 1584 |
if( mysql == NULL ) return RES_DB_NOT_INITIALIZED; |
if( hdbc == NULL ) return RES_DB_NOT_INITIALIZED; |
| 1585 |
if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION; |
if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION; |
| 1586 |
|
|
| 1587 |
string sql; |
result_t ret = RES_ERROR; |
|
MYSQL_RES* result; |
|
|
MYSQL_ROW row; |
|
| 1588 |
groupid_t* dst = 0; |
groupid_t* dst = 0; |
|
|
|
|
sql = "SELECT gid FROM " + dbprefix + "_vpaccount_groups "; |
|
|
sql += criteria2str( cri ); |
|
|
if( fp_mysql_query( mysql, sql.c_str( ) ) ){ |
|
|
fprintf( stderr, "%d %s\n", fp_mysql_errno(mysql), fp_mysql_error(mysql) ); |
|
|
return RES_DB_QUERY_ERROR; |
|
|
} |
|
|
result = fp_mysql_store_result( mysql ) ; |
|
|
if( result == NULL ){ |
|
|
fprintf( stderr, "%d %s\n", fp_mysql_errno(mysql), fp_mysql_error(mysql) ); |
|
|
return RES_DB_QUERY_ERROR; |
|
|
} |
|
|
*gidsLen = fp_mysql_num_rows( result ); |
|
|
dst = new groupid_t[ *gidsLen ]; |
|
|
for( int i = 0; ( row = fp_mysql_fetch_row(result) ) != 0 && i < *gidsLen ; i++ ){ |
|
|
dst[ i ] = atoi( row[ 0 ] != NULL ? row[ 0 ] : "" ); |
|
|
} |
|
|
fp_mysql_free_result( result ); |
|
|
*gids = dst; |
|
|
|
|
|
return RES_OK; |
|
|
/* |
|
|
if( mysql == NULL ) return RES_DB_NOT_INITIALIZED; |
|
|
if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION; |
|
|
|
|
| 1589 |
string sql; |
string sql; |
| 1590 |
MYSQL_RES* result; |
SQLRETURN sqlcode; |
| 1591 |
MYSQL_ROW row; |
SQLINTEGER count = 0; |
| 1592 |
groupid_t* dst = 0; |
|
| 1593 |
|
sql = "SELECT gid FROM " + dbprefix + "_vpaccount_groups "; |
|
//グループ数を求める |
|
|
sql = "SELECT COUNT(*) FROM " + dbprefix + "_vpaccount_groups "; |
|
| 1594 |
sql += criteria2str( cri ); |
sql += criteria2str( cri ); |
| 1595 |
if( fp_mysql_query( mysql, sql.c_str( ) ) ){ |
if( countResultRows( sql.c_str(), &count ) == RES_OK ){ |
| 1596 |
fprintf( stderr, "%d %s\n", fp_mysql_errno(mysql), fp_mysql_error(mysql) ); |
*gidsLen = count; |
|
return RES_DB_QUERY_ERROR; |
|
|
} |
|
|
result = fp_mysql_store_result( mysql ) ; |
|
|
if( row = fp_mysql_fetch_row(result) ){ |
|
|
*gidsLen = atoi( row[ 0 ] != NULL ? row[ 0 ] : "" ); |
|
| 1597 |
dst = new groupid_t[ *gidsLen ]; |
dst = new groupid_t[ *gidsLen ]; |
| 1598 |
|
*gids = dst; |
| 1599 |
}else{ |
}else{ |
|
fp_mysql_free_result( result ); |
|
| 1600 |
return RES_ERROR; |
return RES_ERROR; |
| 1601 |
} |
} |
|
fp_mysql_free_result( result ); |
|
|
|
|
|
sql = "SELECT gid, gname, gdesc FROM " + dbprefix + "_vpaccount_groups "; |
|
|
sql += criteria2str( cri ); |
|
|
if( fp_mysql_query( mysql, sql.c_str( ) ) ){ |
|
|
fprintf( stderr, "%d %s\n", fp_mysql_errno(mysql), fp_mysql_error(mysql) ); |
|
|
return RES_DB_QUERY_ERROR; |
|
|
} |
|
| 1602 |
|
|
| 1603 |
result = fp_mysql_use_result( mysql ) ; |
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) { |
| 1604 |
for( int i = 0; ( row = fp_mysql_fetch_row(result) ) != 0 && i < *gidsLen ; i++ ){ |
if( ( sqlcode = SQLExecDirect( hstmt, (SQLCHAR*)sql.c_str(), sql.length() ) ) == SQL_SUCCESS ){ |
| 1605 |
dst[ i ] = atoi( row[ 0 ] != NULL ? row[ 0 ] : "" ); |
groupid_t gid; |
| 1606 |
|
SQLINTEGER len = 0; |
| 1607 |
|
SQLBindCol( hstmt, 1, SQL_C_ULONG, &gid, 0, &len ); |
| 1608 |
|
for( int i = 0; ( sqlcode = SQLFetch( hstmt ) ) == SQL_SUCCESS && i < *gidsLen ; i++ ){ |
| 1609 |
|
dst[ i ] = gid; |
| 1610 |
|
} |
| 1611 |
|
|
| 1612 |
|
ret = RES_OK; |
| 1613 |
|
}else{ |
| 1614 |
|
string s( "SQLExecDirect in dumpGids " ); |
| 1615 |
|
s += odbcDiagString( hstmt, sqlcode ); |
| 1616 |
|
s += "sql="; |
| 1617 |
|
s += string( sql ); |
| 1618 |
|
setLastErrorString( s.c_str( ) ); |
| 1619 |
|
ret = RES_DB_QUERY_ERROR; |
| 1620 |
|
} |
| 1621 |
|
SQLFreeHandle( SQL_HANDLE_STMT, hstmt ); |
| 1622 |
} |
} |
| 1623 |
fp_mysql_free_result( result ); |
return ret; |
|
*gids = dst; |
|
|
|
|
|
return RES_OK; |
|
|
*/ |
|
| 1624 |
} |
} |
| 1625 |
|
|
| 1626 |
/** |
/** |
| 1642 |
*/ |
*/ |
| 1643 |
result_t dumpGroupAdmins( sessionid_t sid, groupid_t gid, criteria_t* cri, userid_t** uids, int* uidsLen ) |
result_t dumpGroupAdmins( sessionid_t sid, groupid_t gid, criteria_t* cri, userid_t** uids, int* uidsLen ) |
| 1644 |
{ |
{ |
| 1645 |
if( mysql == NULL ) return RES_DB_NOT_INITIALIZED; |
if( hdbc == NULL ) return RES_DB_NOT_INITIALIZED; |
| 1646 |
if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION; |
if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION; |
| 1647 |
|
|
| 1648 |
|
result_t ret = RES_ERROR; |
| 1649 |
|
groupid_t* dst = 0; |
| 1650 |
string sql; |
string sql; |
| 1651 |
MYSQL_RES* result; |
SQLRETURN sqlcode; |
| 1652 |
MYSQL_ROW row; |
SQLINTEGER count = 0; |
| 1653 |
userid_t* dst = 0; |
|
|
|
|
| 1654 |
sql = "SELECT uid FROM " + dbprefix + "_vpaccount_groups_users_link "; |
sql = "SELECT uid FROM " + dbprefix + "_vpaccount_groups_users_link "; |
| 1655 |
sql += " WHERE is_admin=1"; |
sql += " WHERE is_admin=1 and gid=" + unsignedIntToString( gid ); |
| 1656 |
if( fp_mysql_query( mysql, sql.c_str( ) ) ){ |
if( countResultRows( sql.c_str(), &count ) == RES_OK ){ |
| 1657 |
fprintf( stderr, "%d %s\n", fp_mysql_errno(mysql), fp_mysql_error(mysql) ); |
*uidsLen = count; |
| 1658 |
return RES_DB_QUERY_ERROR; |
*uids = new groupid_t[ *uidsLen ]; |
| 1659 |
} |
}else{ |
| 1660 |
|
return RES_ERROR; |
|
result = fp_mysql_store_result( mysql ); |
|
|
if( result == NULL ){ |
|
|
fprintf( stderr, "%d %s\n", fp_mysql_errno(mysql), fp_mysql_error(mysql) ); |
|
|
return RES_DB_QUERY_ERROR; |
|
| 1661 |
} |
} |
| 1662 |
|
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) { |
| 1663 |
*uidsLen = fp_mysql_num_rows( result ); |
if( ( sqlcode = SQLExecDirect( hstmt, (SQLCHAR*)sql.c_str(), sql.length() ) ) == SQL_SUCCESS ){ |
| 1664 |
dst = new userid_t[ *uidsLen ]; |
userid_t uid; |
| 1665 |
for( int i = 0; ( row = fp_mysql_fetch_row(result) ) != 0 && i < *uidsLen ; i++ ){ |
SQLINTEGER len = 0; |
| 1666 |
dst[ i ] = atoi( row[ 0 ] != NULL ? row[ 0 ] : "" ); |
SQLBindCol( hstmt, 1, SQL_C_ULONG, &uid, 0, &len ); |
| 1667 |
|
for( int i = 0; ( sqlcode = SQLFetch( hstmt ) ) == SQL_SUCCESS && i < *uidsLen ; i++ ){ |
| 1668 |
|
(*uids)[ i ] = uid; |
| 1669 |
|
} |
| 1670 |
|
ret = RES_OK; |
| 1671 |
|
}else{ |
| 1672 |
|
string s( "SQLExecDirect in dumpGroupAdmins " ); |
| 1673 |
|
s += odbcDiagString( hstmt, sqlcode ); |
| 1674 |
|
s += "sql="; |
| 1675 |
|
s += string( sql ); |
| 1676 |
|
setLastErrorString( s.c_str( ) ); |
| 1677 |
|
ret = RES_DB_QUERY_ERROR; |
| 1678 |
|
} |
| 1679 |
|
SQLFreeHandle( SQL_HANDLE_STMT, hstmt ); |
| 1680 |
} |
} |
| 1681 |
fp_mysql_free_result( result ); |
return ret; |
|
*uids = dst; |
|
|
|
|
|
return RES_OK; |
|
| 1682 |
} |
} |
| 1683 |
|
|
| 1684 |
/** |
/** |
| 1699 |
*/ |
*/ |
| 1700 |
result_t deleteMember( sessionid_t sid, groupid_t gid, userid_t uid ) |
result_t deleteMember( sessionid_t sid, groupid_t gid, userid_t uid ) |
| 1701 |
{ |
{ |
| 1702 |
if( mysql == NULL ) return RES_DB_NOT_INITIALIZED; |
if( hdbc == NULL ) return RES_DB_NOT_INITIALIZED; |
| 1703 |
if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION; |
if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION; |
| 1704 |
if( !uidExists( uid ) ) return RES_NO_SUCH_USER; //uidの存在をチェック |
if( !uidExists( uid ) ) return RES_NO_SUCH_USER; //uidの存在をチェック |
| 1705 |
if( !gidExists( gid ) ) return RES_NO_SUCH_GROUP; //gidの存在をチェック |
if( !gidExists( gid ) ) return RES_NO_SUCH_GROUP; //gidの存在をチェック |
| 1706 |
|
|
| 1707 |
|
result_t ret = RES_ERROR; |
| 1708 |
string sql; |
string sql; |
| 1709 |
|
SQLRETURN sqlcode; |
| 1710 |
|
SQLHANDLE hstmt = NULL; |
| 1711 |
|
|
| 1712 |
sql = "DELETE FROM " + dbprefix + "_vpaccount_groups_users_link "; |
sql = "DELETE FROM " + dbprefix + "_vpaccount_groups_users_link "; |
| 1713 |
sql += "WHERE gid=" + string( unsignedIntToString( gid ) ); |
sql += "WHERE gid=" + string( unsignedIntToString( gid ) ); |
| 1714 |
sql += " AND uid=" + string( unsignedIntToString( uid ) ); |
sql += " AND uid=" + string( unsignedIntToString( uid ) ); |
| 1715 |
if( fp_mysql_query( mysql, sql.c_str( ) ) ){ |
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) { |
| 1716 |
fprintf( stderr, "%d %s\n", fp_mysql_errno(mysql), fp_mysql_error(mysql) ); |
if( ( sqlcode = SQLExecDirect( hstmt, (SQLCHAR*)sql.c_str(), sql.length() ) ) == SQL_SUCCESS ){ |
| 1717 |
return RES_DB_QUERY_ERROR; |
SQLINTEGER count = 0; |
| 1718 |
|
if( ( sqlcode = SQLRowCount( hstmt, &count ) ) == SQL_SUCCESS && count > 0 ){ |
| 1719 |
|
ret = RES_OK; |
| 1720 |
|
}else{ |
| 1721 |
|
string s( "SQLRowCount in deleteMember" ); |
| 1722 |
|
s += odbcDiagString( hstmt, sqlcode ); |
| 1723 |
|
s += string( ", sql=" ) + string( sql ); |
| 1724 |
|
setLastErrorString( s.c_str( ) ); |
| 1725 |
|
ret = RES_NO_SUCH_USER; |
| 1726 |
|
} |
| 1727 |
|
}else{ |
| 1728 |
|
string s( "SQLExecDirect in deleteMember" ); |
| 1729 |
|
s += odbcDiagString( hstmt, sqlcode ); |
| 1730 |
|
s += ", sql="; |
| 1731 |
|
s += string( sql ); |
| 1732 |
|
setLastErrorString( s.c_str( ) ); |
| 1733 |
|
ret = RES_DB_QUERY_ERROR; |
| 1734 |
|
} |
| 1735 |
|
SQLFreeHandle( SQL_HANDLE_STMT, hstmt ); |
| 1736 |
|
}else{ |
| 1737 |
|
setLastErrorString( "SQLAllocHandle(SQL_HANDLE_STMT,...) in deleteMember" ); |
| 1738 |
|
ret = RES_ERROR; |
| 1739 |
} |
} |
| 1740 |
return RES_OK; |
return ret; |
| 1741 |
} |
} |
| 1742 |
|
|
| 1743 |
/** |
/** |
| 1759 |
*/ |
*/ |
| 1760 |
result_t insertMember( sessionid_t sid, groupid_t gid, userid_t uid, bool admin ) |
result_t insertMember( sessionid_t sid, groupid_t gid, userid_t uid, bool admin ) |
| 1761 |
{ |
{ |
| 1762 |
if( mysql == NULL ) return RES_DB_NOT_INITIALIZED; |
if( hdbc == NULL ) return RES_DB_NOT_INITIALIZED; |
| 1763 |
if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION; |
if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION; |
| 1764 |
if( !uidExists( uid ) ) return RES_NO_SUCH_USER; //uidの存在をチェック |
if( !uidExists( uid ) ) return RES_NO_SUCH_USER; //uidの存在をチェック |
| 1765 |
if( !gidExists( gid ) ) return RES_NO_SUCH_GROUP; //gidの存在をチェック |
if( !gidExists( gid ) ) return RES_NO_SUCH_GROUP; //gidの存在をチェック |
| 1766 |
|
|
| 1767 |
|
result_t ret = RES_ERROR; |
| 1768 |
string sql; |
string sql; |
| 1769 |
MYSQL_RES* result; |
SQLRETURN sqlcode; |
|
MYSQL_ROW row; |
|
|
groupid_t* dst = 0; |
|
|
result_t res; |
|
| 1770 |
|
|
| 1771 |
//メンバーを追加 |
//メンバーを追加 |
| 1772 |
sql = "INSERT INTO " + dbprefix + "_vpaccount_groups_users_link ( gid, uid, is_admin ) VALUES ("; |
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) { |
| 1773 |
sql += string( unsignedIntToString( gid ) ) + ", "; |
sql = "INSERT INTO " + dbprefix + "_vpaccount_groups_users_link ( gid, uid, is_admin ) VALUES ("; |
| 1774 |
sql += string( unsignedIntToString( uid ) ) + ", "; |
sql += string( unsignedIntToString( gid ) ) + ", "; |
| 1775 |
sql += string( admin ? "1" : "0" ) + ") "; |
sql += string( unsignedIntToString( uid ) ) + ", "; |
| 1776 |
if( fp_mysql_query( mysql, sql.c_str( ) ) ){ |
sql += string( admin ? "1" : "0" ) + ") "; |
| 1777 |
fprintf( stderr, "%d %s\n", fp_mysql_errno(mysql), fp_mysql_error(mysql) ); |
if( ( sqlcode = SQLExecDirect( hstmt, (SQLCHAR*)sql.c_str(), sql.length() ) ) == SQL_SUCCESS ){ |
| 1778 |
return RES_DB_QUERY_ERROR; |
SQLINTEGER count = 0; |
| 1779 |
|
if( ( sqlcode = SQLRowCount( hstmt, &count ) ) == SQL_SUCCESS && count > 0 ){ |
| 1780 |
|
ret = RES_OK; |
| 1781 |
|
}else{ |
| 1782 |
|
string s( "SQLRowCount in insertMember " ); |
| 1783 |
|
s += odbcDiagString( hstmt, sqlcode ); |
| 1784 |
|
s += string( ", sql=" ) + string( sql ); |
| 1785 |
|
setLastErrorString( s.c_str( ) ); |
| 1786 |
|
ret = RES_DB_QUERY_ERROR; |
| 1787 |
|
} |
| 1788 |
|
}else{ |
| 1789 |
|
string s( "SQLExecDirect in insertMember " ); |
| 1790 |
|
s += odbcDiagString( hstmt, sqlcode ); |
| 1791 |
|
s += string( ", sql=" ) + string( sql ); |
| 1792 |
|
setLastErrorString( s.c_str( ) ); |
| 1793 |
|
ret = RES_DB_QUERY_ERROR; |
| 1794 |
|
} |
| 1795 |
|
SQLFreeHandle( SQL_HANDLE_STMT, hstmt ); |
| 1796 |
|
}else{ |
| 1797 |
|
setLastErrorString( "SQLAllocHandle(SQL_HANDLE_STMT,...) in insertMember" ); |
| 1798 |
|
ret = RES_DB_QUERY_ERROR; |
| 1799 |
} |
} |
| 1800 |
return RES_OK; |
return ret; |
| 1801 |
} |
} |
| 1802 |
|
|
| 1803 |
/** |
/** |
| 1820 |
*/ |
*/ |
| 1821 |
result_t getMembers( sessionid_t sid, groupid_t gid, criteria_t* cri, userid_t** uids, int* uidsLen ) |
result_t getMembers( sessionid_t sid, groupid_t gid, criteria_t* cri, userid_t** uids, int* uidsLen ) |
| 1822 |
{ |
{ |
| 1823 |
if( mysql == NULL ) return RES_DB_NOT_INITIALIZED; |
if( hdbc == NULL ) return RES_DB_NOT_INITIALIZED; |
| 1824 |
if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION; |
if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION; |
| 1825 |
if( !gidExists( gid ) ) return RES_NO_SUCH_GROUP; //gidの存在をチェック |
if( !gidExists( gid ) ) return RES_NO_SUCH_GROUP; //gidの存在をチェック |
| 1826 |
|
|
| 1827 |
|
result_t ret = RES_ERROR; |
| 1828 |
string sql; |
string sql; |
| 1829 |
MYSQL_RES* result; |
SQLRETURN sqlcode; |
| 1830 |
MYSQL_ROW row; |
SQLHANDLE hstmt = NULL; |
| 1831 |
userid_t* dst = 0; |
userid_t* dst = 0; |
|
int len = 0; |
|
| 1832 |
|
|
| 1833 |
//メンバー数を求めてメモリ確保 |
//how many members ? |
| 1834 |
sql = "SELECT COUNT(*) FROM " + dbprefix + "_vpaccount_groups_users_link "; |
sql = "SELECT COUNT(*) FROM " + dbprefix + "_vpaccount_groups_users_link "; |
| 1835 |
sql += " WHERE gid=" + string( unsignedIntToString( gid ) ); |
sql += " WHERE gid=" + string( unsignedIntToString( gid ) ); |
| 1836 |
if( fp_mysql_query( mysql, sql.c_str( ) ) ){ |
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) { |
| 1837 |
fprintf( stderr, "%s\n", sql.c_str( ) ); |
if( ( sqlcode = SQLExecDirect( hstmt, (SQLCHAR*)sql.c_str(), sql.length() ) ) == SQL_SUCCESS ){ |
| 1838 |
fprintf( stderr, "%d %s\n", fp_mysql_errno(mysql), fp_mysql_error(mysql) ); |
SQLUINTEGER count = 0; |
| 1839 |
return RES_DB_QUERY_ERROR; |
SQLINTEGER len; |
| 1840 |
} |
SQLBindCol( hstmt, 1, SQL_C_ULONG, &count, 0, &len ); |
| 1841 |
result = fp_mysql_store_result( mysql ) ; |
if( ( sqlcode = SQLFetch( hstmt ) ) == SQL_SUCCESS ){ |
| 1842 |
if( row = fp_mysql_fetch_row(result) ){ |
dst = new userid_t[ count ]; |
| 1843 |
len = atoi( row[ 0 ] != NULL ? row[ 0 ] : "" ); |
*uids = dst; |
| 1844 |
dst = new userid_t[ len ]; |
*uidsLen = count; |
| 1845 |
|
if( count > 0 ){ |
| 1846 |
|
//retrive member's IDs |
| 1847 |
|
SQLHANDLE hstmt2 = NULL; |
| 1848 |
|
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt2 ) ) == SQL_SUCCESS ) { |
| 1849 |
|
sql = "SELECT uid, gid, is_admin FROM " + dbprefix + "_vpaccount_groups_users_link "; |
| 1850 |
|
sql += " WHERE gid=" + string( unsignedIntToString( gid ) ); |
| 1851 |
|
sql += " " + string( criteria2str( cri ) ); |
| 1852 |
|
if( ( sqlcode = SQLExecDirect( hstmt2, (SQLCHAR*)sql.c_str(), sql.length() ) ) == SQL_SUCCESS ){ |
| 1853 |
|
SQLUINTEGER uid = 0; |
| 1854 |
|
SQLINTEGER len; |
| 1855 |
|
SQLBindCol( hstmt2, 1, SQL_C_ULONG, &uid, 0, &len ); |
| 1856 |
|
for( int i = 0; ( sqlcode = SQLFetch( hstmt2 ) ) == SQL_SUCCESS && i < count ; i++ ){ |
| 1857 |
|
dst[ i ] = uid; |
| 1858 |
|
} |
| 1859 |
|
ret = RES_OK; |
| 1860 |
|
}else{ |
| 1861 |
|
setLastErrorString( "SQLExecDirect in getMembers" ); |
| 1862 |
|
ret = RES_DB_QUERY_ERROR; |
| 1863 |
|
} |
| 1864 |
|
SQLFreeHandle( SQL_HANDLE_STMT, hstmt2 ); |
| 1865 |
|
}else{ |
| 1866 |
|
setLastErrorString( "SQLAllocHandle(SQL_HANDLE_STMT,...) in getMembers" ); |
| 1867 |
|
ret = RES_DB_QUERY_ERROR; |
| 1868 |
|
} |
| 1869 |
|
}else{ |
| 1870 |
|
ret = RES_OK; |
| 1871 |
|
} |
| 1872 |
|
}else{ |
| 1873 |
|
string s( "SQLFetch in getMembers sql=" ); |
| 1874 |
|
s += string( sql ); |
| 1875 |
|
setLastErrorString( s.c_str( ) ); |
| 1876 |
|
ret = RES_DB_QUERY_ERROR; |
| 1877 |
|
} |
| 1878 |
|
}else{ |
| 1879 |
|
setLastErrorString( "SQLExecDirect in getMembers" ); |
| 1880 |
|
ret = RES_DB_QUERY_ERROR; |
| 1881 |
|
} |
| 1882 |
|
SQLFreeHandle( SQL_HANDLE_STMT, hstmt ); |
| 1883 |
}else{ |
}else{ |
| 1884 |
fp_mysql_free_result( result ); |
setLastErrorString( "SQLAllocHandle(SQL_HANDLE_STMT,...) in getMembers" ); |
| 1885 |
return RES_ERROR; |
ret = RES_DB_QUERY_ERROR; |
| 1886 |
} |
} |
| 1887 |
fp_mysql_free_result( result ); |
return ret; |
|
|
|
|
sql = "SELECT uid, gid, is_admin FROM " + dbprefix + "_vpaccount_groups_users_link "; |
|
|
sql += " WHERE gid=" + string( unsignedIntToString( gid ) ); |
|
|
sql += " " + string( criteria2str( cri ) ); |
|
|
if( fp_mysql_query( mysql, sql.c_str( ) ) ){ |
|
|
fprintf( stderr, "%d %s\n", fp_mysql_errno(mysql), fp_mysql_error(mysql) ); |
|
|
delete[] dst; |
|
|
*uidsLen = 0; |
|
|
return RES_DB_QUERY_ERROR; |
|
|
} |
|
|
*uidsLen = 0; |
|
|
result = fp_mysql_use_result( mysql ) ; |
|
|
for( int i = 0; ( row = fp_mysql_fetch_row(result) ) != 0 && i < len ; i++ ){ |
|
|
dst[ i ] = atoi( row[ 0 ] != NULL ? row[ 0 ] : "" ); |
|
|
( *uidsLen )++; |
|
|
} |
|
|
while( row = fp_mysql_fetch_row(result) ); |
|
|
fp_mysql_free_result( result ); |
|
|
*uids = dst; |
|
|
return RES_OK; |
|
| 1888 |
} |
} |
| 1889 |
|
|
| 1890 |
/** |
/** |
| 1902 |
*/ |
*/ |
| 1903 |
result_t deleteGroup( sessionid_t sid, groupid_t gid ) |
result_t deleteGroup( sessionid_t sid, groupid_t gid ) |
| 1904 |
{ |
{ |
| 1905 |
if( mysql == NULL ) return RES_DB_NOT_INITIALIZED; |
if( hdbc == NULL ) return RES_DB_NOT_INITIALIZED; |
| 1906 |
if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION; |
if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION; |
| 1907 |
|
|
| 1908 |
|
result_t ret = RES_ERROR; |
| 1909 |
string sql; |
string sql; |
| 1910 |
|
SQLRETURN sqlcode; |
| 1911 |
|
SQLHANDLE hstmt = NULL; |
| 1912 |
|
|
| 1913 |
sql = "DELETE FROM " + dbprefix + "_vpaccount_groups "; |
sql = "DELETE FROM " + dbprefix + "_vpaccount_groups "; |
| 1914 |
sql += "WHERE gid = " + string( unsignedIntToString( gid ) ); |
sql += "WHERE gid = " + string( unsignedIntToString( gid ) ); |
| 1915 |
if( fp_mysql_query( mysql, sql.c_str( ) ) ){ |
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) { |
| 1916 |
fprintf( stderr, "%s\n", sql.c_str( ) ); |
if( ( sqlcode = SQLExecDirect( hstmt, (SQLCHAR*)sql.c_str(), sql.length() ) ) == SQL_SUCCESS ){ |
| 1917 |
fprintf( stderr, "%d %s\n", fp_mysql_errno(mysql), fp_mysql_error(mysql) ); |
SQLINTEGER count = 0; |
| 1918 |
return RES_DB_QUERY_ERROR; |
if( ( sqlcode = SQLRowCount( hstmt, &count ) ) == SQL_SUCCESS && count > 0 ){ |
| 1919 |
|
ret = RES_OK; |
| 1920 |
|
}else{ |
| 1921 |
|
string s( "SQLRowCount in deleteGroup" ); |
| 1922 |
|
s += odbcDiagString( hstmt, sqlcode ); |
| 1923 |
|
s += string( ", sql=" ) + string( sql ); |
| 1924 |
|
setLastErrorString( s.c_str( ) ); |
| 1925 |
|
ret = RES_NO_SUCH_USER; |
| 1926 |
|
} |
| 1927 |
|
}else{ |
| 1928 |
|
string s( "SQLExecDirect in deleteGroup" ); |
| 1929 |
|
s += odbcDiagString( hstmt, sqlcode ); |
| 1930 |
|
s += ", sql="; |
| 1931 |
|
s += string( sql ); |
| 1932 |
|
setLastErrorString( s.c_str( ) ); |
| 1933 |
|
ret = RES_DB_QUERY_ERROR; |
| 1934 |
|
} |
| 1935 |
|
SQLFreeHandle( SQL_HANDLE_STMT, hstmt ); |
| 1936 |
|
}else{ |
| 1937 |
|
setLastErrorString( "SQLAllocHandle(SQL_HANDLE_STMT,...) in deleteGroup" ); |
| 1938 |
|
ret = RES_ERROR; |
| 1939 |
} |
} |
| 1940 |
return RES_OK; |
return ret; |
| 1941 |
} |
} |
| 1942 |
|
|
| 1943 |
/** |
/** |
| 1957 |
*/ |
*/ |
| 1958 |
result_t insertGroup( sessionid_t sid, const group_t* group, groupid_t* gid ) |
result_t insertGroup( sessionid_t sid, const group_t* group, groupid_t* gid ) |
| 1959 |
{ |
{ |
| 1960 |
if( mysql == NULL ) return RES_DB_NOT_INITIALIZED; |
if( hdbc == NULL ) return RES_DB_NOT_INITIALIZED; |
| 1961 |
if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION; |
if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION; |
| 1962 |
|
|
| 1963 |
|
result_t ret = RES_ERROR; |
| 1964 |
string sql; |
string sql; |
| 1965 |
sql = "INSERT INTO " + dbprefix + "_vpaccount_groups ( gname, gdesc ) VALUES ("; |
SQLCHAR gname[VP_GROUP_GNAME_LEN+1], gdesc[VP_GROUP_GDESC_LEN+1]; |
| 1966 |
sql += "'" + string( addSlashes( group -> getGname( ) ) ) + "', "; |
SQLINTEGER cbGname = SQL_NTS, cbGdesc = SQL_NTS; |
| 1967 |
sql += "'" + string( addSlashes( group -> getDesc( ) ) ) + "' )"; |
SQLRETURN sqlcode; |
| 1968 |
if( fp_mysql_query( mysql, sql.c_str( ) ) ){ |
|
| 1969 |
fprintf( stderr, "%s\n", sql.c_str( ) ); |
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) { |
| 1970 |
fprintf( stderr, "%d %s\n", fp_mysql_errno(mysql), fp_mysql_error(mysql) ); |
sql = "INSERT INTO " + dbprefix + "_vpaccount_groups ( gname, gdesc ) VALUES ( ?, ? )"; |
| 1971 |
return RES_DB_QUERY_ERROR; |
sqlcode = SQLPrepare(hstmt, (SQLCHAR*)sql.c_str(), SQL_NTS); |
| 1972 |
|
if( sqlcode == SQL_SUCCESS || sqlcode == SQL_SUCCESS_WITH_INFO ){ |
| 1973 |
|
SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, VP_GROUP_GNAME_LEN, 0, gname, 0, &cbGname ); |
| 1974 |
|
SQLBindParameter(hstmt, 2, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, VP_GROUP_GDESC_LEN, 0, gdesc, 0, &cbGdesc ); |
| 1975 |
|
strncpy2( (char*)gname, group -> getGname( ), VP_GROUP_GNAME_LEN ); |
| 1976 |
|
strncpy2( (char*)gdesc, group -> getDesc( ), VP_GROUP_GDESC_LEN ); |
| 1977 |
|
if( ( sqlcode = SQLExecute( hstmt ) ) == SQL_SUCCESS ){ |
| 1978 |
|
SQLINTEGER count = 0; |
| 1979 |
|
if( ( sqlcode = SQLRowCount( hstmt, &count ) ) == SQL_SUCCESS && count > 0 ){ |
| 1980 |
|
//グループIDを取得する |
| 1981 |
|
SQLHANDLE hstmt2 = NULL; |
| 1982 |
|
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt2 ) ) == SQL_SUCCESS ) { |
| 1983 |
|
sql = "SELECT LAST_INSERT_ID()"; // MySQL |
| 1984 |
|
// sql = "SELECT LAST_INSERT_ROWID()"; // SQLite |
| 1985 |
|
if( ( sqlcode = SQLExecDirect( hstmt2, (SQLCHAR*)sql.c_str(), sql.length() ) ) == SQL_SUCCESS ){ |
| 1986 |
|
SQLUINTEGER last_insert_id; |
| 1987 |
|
SQLINTEGER len; |
| 1988 |
|
SQLBindCol( hstmt2, 1, SQL_C_ULONG, &last_insert_id, 0, &len ); |
| 1989 |
|
if( ( sqlcode = SQLFetch( hstmt2 ) ) == SQL_SUCCESS ){ |
| 1990 |
|
*gid = last_insert_id; |
| 1991 |
|
ret = RES_OK; |
| 1992 |
|
}else{ |
| 1993 |
|
ret = RES_DB_QUERY_ERROR; |
| 1994 |
|
string s( "SQLFetch in insertGroup " ); |
| 1995 |
|
s += odbcDiagString( hstmt, sqlcode ); |
| 1996 |
|
setLastErrorString( s.c_str( ) ); |
| 1997 |
|
} |
| 1998 |
|
}else{ |
| 1999 |
|
string s( "SQLExecDirect in insertGroup " ); |
| 2000 |
|
s += odbcDiagString( hstmt, sqlcode ); |
| 2001 |
|
setLastErrorString( s.c_str( ) ); |
| 2002 |
|
ret = RES_DB_QUERY_ERROR; |
| 2003 |
|
} |
| 2004 |
|
SQLFreeHandle( SQL_HANDLE_STMT, hstmt2 ); |
| 2005 |
|
} |
| 2006 |
|
}else{ |
| 2007 |
|
string s( "SQLRowCount in insertGroup sql=" ); |
| 2008 |
|
s += string( sql ); |
| 2009 |
|
setLastErrorString( s.c_str( ) ); |
| 2010 |
|
ret = RES_DB_QUERY_ERROR; |
| 2011 |
|
} |
| 2012 |
|
}else{ |
| 2013 |
|
string s( "SQLExecute in insertGroup " ); |
| 2014 |
|
s += odbcDiagString( hstmt, sqlcode ); |
| 2015 |
|
setLastErrorString( s.c_str( ) ); |
| 2016 |
|
ret = RES_DB_QUERY_ERROR; |
| 2017 |
|
} |
| 2018 |
|
}else{ |
| 2019 |
|
string s( "SQLPrepare in insertGroup " ); |
| 2020 |
|
s += odbcDiagString( hstmt, sqlcode ); |
| 2021 |
|
setLastErrorString( s.c_str( ) ); |
| 2022 |
|
ret = RES_ERROR; |
| 2023 |
|
} |
| 2024 |
|
SQLFreeHandle( SQL_HANDLE_STMT, hstmt ); |
| 2025 |
|
}else{ |
| 2026 |
|
setLastErrorString( "SQLAllocHandle(SQL_HANDLE_STMT,...) in insertGroup" ); |
| 2027 |
|
ret = RES_ERROR; |
| 2028 |
} |
} |
| 2029 |
*gid = fp_mysql_insert_id( mysql ); |
return ret; |
|
return RES_OK; |
|
| 2030 |
} |
} |
| 2031 |
|
|
| 2032 |
/** |
/** |
| 2045 |
*/ |
*/ |
| 2046 |
result_t updateGroup( sessionid_t sid, const group_t* group ) |
result_t updateGroup( sessionid_t sid, const group_t* group ) |
| 2047 |
{ |
{ |
| 2048 |
if( mysql == NULL ) return RES_DB_NOT_INITIALIZED; |
if( hdbc == NULL ) return RES_DB_NOT_INITIALIZED; |
| 2049 |
if( group == NULL ) return RES_ERROR; |
if( group == NULL ) return RES_ERROR; |
| 2050 |
if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION; |
if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION; |
| 2051 |
if( !gidExists( group -> getGID( ) ) ) return RES_NO_SUCH_GROUP; |
if( !gidExists( group -> getGID( ) ) ) return RES_NO_SUCH_GROUP; |
| 2052 |
|
|
| 2053 |
|
result_t ret = RES_ERROR; |
| 2054 |
string sql; |
string sql; |
| 2055 |
sql = "UPDATE " + dbprefix + "_vpaccount_groups SET "; |
SQLCHAR gname[VP_GROUP_GNAME_LEN+1], gdesc[VP_GROUP_GDESC_LEN+1]; |
| 2056 |
sql += "gname='" + string( addSlashes( group -> getGname( ) ) ) + "', "; |
SQLINTEGER cbGname = SQL_NTS, cbGdesc = SQL_NTS; |
| 2057 |
sql += "gdesc='" + string( addSlashes( group -> getDesc( ) ) ) + "' "; |
SQLRETURN sqlcode; |
| 2058 |
sql += "WHERE gid=" + string( unsignedIntToString( group -> getGID( ) ) ); |
|
| 2059 |
if( fp_mysql_query( mysql, sql.c_str( ) ) ){ |
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) { |
| 2060 |
fprintf( stderr, "%s\n", sql.c_str( ) ); |
sql = "UPDATE " + dbprefix + "_vpaccount_groups SET gname=?, gdesc=? WHERE gid=" + string( unsignedIntToString( group -> getGID( ) ) ); |
| 2061 |
fprintf( stderr, "%d %s\n", fp_mysql_errno(mysql), fp_mysql_error(mysql) ); |
sqlcode = SQLPrepare(hstmt, (SQLCHAR*)sql.c_str(), SQL_NTS); |
| 2062 |
return RES_DB_QUERY_ERROR; |
if( sqlcode == SQL_SUCCESS || sqlcode == SQL_SUCCESS_WITH_INFO ){ |
| 2063 |
|
SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, VP_GROUP_GNAME_LEN, 0, gname, 0, &cbGname ); |
| 2064 |
|
SQLBindParameter(hstmt, 2, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, VP_GROUP_GDESC_LEN, 0, gdesc, 0, &cbGdesc ); |
| 2065 |
|
strncpy2( (char*)gname, group -> getGname( ), VP_GROUP_GNAME_LEN ); |
| 2066 |
|
strncpy2( (char*)gdesc, group -> getDesc( ), VP_GROUP_GDESC_LEN ); |
| 2067 |
|
if( ( sqlcode = SQLExecute( hstmt ) ) == SQL_SUCCESS ){ |
| 2068 |
|
SQLINTEGER count = 0; |
| 2069 |
|
if( ( sqlcode = SQLRowCount( hstmt, &count ) ) == SQL_SUCCESS && count > 0 ){ |
| 2070 |
|
ret = RES_OK; |
| 2071 |
|
}else{ |
| 2072 |
|
string s( "SQLRowCount in updateGroup sql=" ); |
| 2073 |
|
s += string( sql ); |
| 2074 |
|
setLastErrorString( s.c_str( ) ); |
| 2075 |
|
ret = RES_DB_QUERY_ERROR; |
| 2076 |
|
} |
| 2077 |
|
}else{ |
| 2078 |
|
string s( "SQLExecute in updateGroup " ); |
| 2079 |
|
s += odbcDiagString( hstmt, sqlcode ); |
| 2080 |
|
setLastErrorString( s.c_str( ) ); |
| 2081 |
|
ret = RES_DB_QUERY_ERROR; |
| 2082 |
|
} |
| 2083 |
|
}else{ |
| 2084 |
|
setLastErrorString( "SQLPrepare in updateGroup sql=" ); |
| 2085 |
|
ret = RES_ERROR; |
| 2086 |
|
} |
| 2087 |
|
SQLFreeHandle( SQL_HANDLE_STMT, hstmt ); |
| 2088 |
|
}else{ |
| 2089 |
|
setLastErrorString( "SQLAllocHandle(SQL_HANDLE_STMT,...) in updateGroup" ); |
| 2090 |
|
ret = RES_ERROR; |
| 2091 |
} |
} |
| 2092 |
return RES_OK; |
return RES_OK; |
| 2093 |
} |
} |
| 2133 |
*/ |
*/ |
| 2134 |
result_t getGroups( sessionid_t sid, groupid_t* gids, int gidsLen, criteria_t* cri, const group_t** groups, int* groupsLen ) |
result_t getGroups( sessionid_t sid, groupid_t* gids, int gidsLen, criteria_t* cri, const group_t** groups, int* groupsLen ) |
| 2135 |
{ |
{ |
| 2136 |
if( mysql == NULL ) return RES_DB_NOT_INITIALIZED; |
if( hdbc == NULL ) return RES_DB_NOT_INITIALIZED; |
| 2137 |
if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION; |
if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION; |
| 2138 |
|
|
| 2139 |
|
SQLRETURN sqlcode; |
| 2140 |
|
SQLHANDLE hstmt = NULL; |
| 2141 |
|
result_t ret = RES_ERROR; |
| 2142 |
string sql; |
string sql; |
|
MYSQL_RES* result; |
|
|
MYSQL_ROW row; |
|
| 2143 |
group_t* dst = new group_t[ gidsLen ]; |
group_t* dst = new group_t[ gidsLen ]; |
| 2144 |
|
|
| 2145 |
sql += "SELECT gid, gname, gdesc "; |
sql += "SELECT gid, gname, gdesc "; |
| 2151 |
} |
} |
| 2152 |
} |
} |
| 2153 |
sql += criteria2str( cri ); |
sql += criteria2str( cri ); |
| 2154 |
if( fp_mysql_query( mysql, sql.c_str( ) ) ){ |
|
| 2155 |
fprintf( stderr, "%s\n", sql.c_str( ) ); |
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) { |
| 2156 |
fprintf( stderr, "%d %s\n", fp_mysql_errno(mysql), fp_mysql_error(mysql) ); |
if( ( sqlcode = SQLExecDirect( hstmt, (SQLCHAR*)sql.c_str(), sql.length() ) ) == SQL_SUCCESS ){ |
| 2157 |
return RES_DB_QUERY_ERROR; |
SQLINTEGER len; |
| 2158 |
} |
groupid_t gid = 0; |
| 2159 |
result = fp_mysql_use_result( mysql ) ; |
SQLBindCol( hstmt, 1, SQL_C_ULONG, &gid, 0, &len ); |
| 2160 |
*groupsLen=0; |
*groupsLen=0; |
| 2161 |
for( int i = 0; ( row = fp_mysql_fetch_row(result) ) != 0 && i < gidsLen ; i++ ){ |
for( int i = 0; ( sqlcode = SQLFetch( hstmt ) ) == SQL_SUCCESS && i < gidsLen ; i++ ){ |
| 2162 |
dst[ i ].setGID( atoi( row[ 0 ] != NULL ? row[ 0 ] : "" ) ); |
dst[ i ].setGID( gid ); |
| 2163 |
dst[ i ].setGname( row[ 1 ] ); |
dst[ i ].setGname( getResultCol( hstmt, 2 ).c_str() ); |
| 2164 |
dst[ i ].setDesc( row[ 2 ] ); |
dst[ i ].setDesc( getResultCol( hstmt, 3 ).c_str() ); |
| 2165 |
( *groupsLen )++; |
( *groupsLen )++; |
| 2166 |
} |
} |
| 2167 |
while( row = fp_mysql_fetch_row(result) ); |
*groups = dst; |
| 2168 |
fp_mysql_free_result( result ); |
ret = RES_OK; |
| 2169 |
*groups = dst; |
}else{ |
| 2170 |
return RES_OK; |
setLastErrorString( "SQLExecDirect in getAccounts" ); |
| 2171 |
|
ret = RES_DB_QUERY_ERROR; |
| 2172 |
|
} |
| 2173 |
|
SQLFreeHandle( SQL_HANDLE_STMT, hstmt ); |
| 2174 |
|
}else{ |
| 2175 |
|
setLastErrorString( "SQLAllocHandle(SQL_HANDLE_STMT,...) in getAccounts" ); |
| 2176 |
|
ret = RES_DB_QUERY_ERROR; |
| 2177 |
|
} |
| 2178 |
|
return ret; |
| 2179 |
} |
} |
| 2180 |
|
|
| 2181 |
/** |
/** |
| 2190 |
*/ |
*/ |
| 2191 |
bool isModerator( sessionid_t sid, userid_t uid ) |
bool isModerator( sessionid_t sid, userid_t uid ) |
| 2192 |
{ |
{ |
| 2193 |
if( mysql == NULL ) return false; |
if( hdbc == NULL ) return false; |
| 2194 |
if( !isValidSessionID( sid ) ) return false; |
if( !isValidSessionID( sid ) ) return false; |
| 2195 |
//if( !uidExists( uid ) ) return false; |
if( !uidExists( uid ) ) return false; |
|
|
|
|
string sql; |
|
|
MYSQL_RES* result; |
|
|
MYSQL_ROW row; |
|
|
groupid_t* dst = 0; |
|
|
result_t res; |
|
| 2196 |
|
|
| 2197 |
sql = "SELECT value FROM " + dbprefix + "_vpaccount_config"; |
bool ret = false; |
| 2198 |
sql += " WHERE name='moderator_gid'"; |
SQLRETURN sqlcode; |
| 2199 |
if( fp_mysql_query( mysql, sql.c_str( ) ) ){ |
SQLHANDLE hstmt = NULL; |
| 2200 |
fprintf( stderr, "%s\n", sql.c_str( ) ); |
SQLINTEGER count = 0; |
| 2201 |
fprintf( stderr, "%d %s\n", fp_mysql_errno(mysql), fp_mysql_error(mysql) ); |
string sql; |
| 2202 |
return false; |
groupid_t moderator_gid; |
| 2203 |
} |
|
| 2204 |
result = fp_mysql_store_result( mysql ) ; |
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) { |
| 2205 |
if( result == NULL ){ |
sql = "SELECT value FROM " + dbprefix + "_vpaccount_config"; |
| 2206 |
fprintf( stderr, "%d %s\n", fp_mysql_errno(mysql), fp_mysql_error(mysql) ); |
sql += " WHERE name='moderator_gid'"; |
| 2207 |
return false; |
if( ( sqlcode = SQLExecDirect( hstmt, (SQLCHAR*)sql.c_str(), sql.length() ) ) == SQL_SUCCESS ){ |
| 2208 |
} |
SQLINTEGER len = 0; |
| 2209 |
if( row = fp_mysql_fetch_row(result) ){ |
SQLBindCol( hstmt, 1, SQL_C_ULONG, &moderator_gid, 0, &len ); |
| 2210 |
sql = "SELECT * from " + dbprefix + "_groups_users_link "; |
if( ( sqlcode = SQLFetch( hstmt ) ) == SQL_SUCCESS ){ |
| 2211 |
sql += "WHERE groupid=" + string( row[ 0 ] ); |
sql = "SELECT * from " + dbprefix + "_groups_users_link "; |
| 2212 |
sql += " AND uid=" + string( unsignedIntToString( uid ) ); |
sql += "WHERE groupid=" + unsignedIntToString( moderator_gid ); |
| 2213 |
fp_mysql_free_result( result ); |
sql += " AND uid=" + string( unsignedIntToString( uid ) ); |
| 2214 |
|
if( countResultRows( sql.c_str(), &count ) == RES_OK ){ |
| 2215 |
if( fp_mysql_query( mysql, sql.c_str( ) ) ){ |
if( count > 0 ){ |
| 2216 |
fprintf( stderr, "%d %s\n", fp_mysql_errno(mysql), fp_mysql_error(mysql) ); |
ret = true; |
| 2217 |
return false; |
} |
| 2218 |
} |
} |
| 2219 |
result = fp_mysql_store_result( mysql ); |
}else{ |
| 2220 |
if( result == NULL ){ |
setLastErrorString( "SQLFetch in isModerator " ); |
| 2221 |
fprintf( stderr, "%d %s\n", fp_mysql_errno(mysql), fp_mysql_error(mysql) ); |
} |
| 2222 |
return false; |
}else{ |
| 2223 |
} |
string s( "SQLExecDirect in isModerator " ); |
| 2224 |
if( !fp_mysql_fetch_row(result) ){ |
s += odbcDiagString( hstmt, sqlcode ); |
| 2225 |
fp_mysql_free_result( result ); |
s += ", sql="; |
| 2226 |
return false; |
s += string( sql ); |
| 2227 |
|
setLastErrorString( s.c_str( ) ); |
| 2228 |
} |
} |
| 2229 |
fp_mysql_free_result( result ); |
SQLFreeHandle( SQL_HANDLE_STMT, hstmt ); |
|
return true; |
|
| 2230 |
}else{ |
}else{ |
| 2231 |
fp_mysql_free_result( result ); |
setLastErrorString( "SQLAllocHandle in isModerator " ); |
|
return false; |
|
| 2232 |
} |
} |
| 2233 |
|
return ret; |
| 2234 |
} |
} |
| 2235 |
|
|
| 2236 |
/** |
/** |
| 2246 |
*/ |
*/ |
| 2247 |
result_t getUid( const char* uname, userid_t* uid ) |
result_t getUid( const char* uname, userid_t* uid ) |
| 2248 |
{ |
{ |
| 2249 |
if( mysql == NULL ) return RES_DB_NOT_INITIALIZED; |
if( hdbc == NULL ) return RES_DB_NOT_INITIALIZED; |
| 2250 |
if( uname == NULL ) return RES_ERROR; |
if( uname == NULL ) return RES_ERROR; |
| 2251 |
|
|
| 2252 |
|
result_t ret = RES_ERROR; |
| 2253 |
|
SQLRETURN sqlcode; |
| 2254 |
|
SQLHANDLE hstmt = NULL; |
| 2255 |
string sql; |
string sql; |
| 2256 |
string uname2 = addSlashes( uname ); |
string uname2 = addSlashes( uname ); |
| 2257 |
|
|
| 2258 |
sql = "SELECT uid FROM " + dbprefix + "_users WHERE uname='" + uname2 + "';"; |
sql = "SELECT uid FROM " + dbprefix + "_users WHERE uname='" + uname2 + "';"; |
| 2259 |
if( fp_mysql_query( mysql, sql.c_str( ) ) ){ |
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) { |
| 2260 |
fprintf( stderr, "%d %s\n", fp_mysql_errno(mysql), fp_mysql_error(mysql) ); |
if( ( sqlcode = SQLExecDirect( hstmt, (SQLCHAR*)sql.c_str(), sql.length() ) ) == SQL_SUCCESS ){ |
| 2261 |
return RES_DB_QUERY_ERROR; |
userid_t _uid = 0; |
| 2262 |
} |
SQLINTEGER len; |
| 2263 |
MYSQL_RES* result = fp_mysql_store_result( mysql ) ; |
SQLBindCol( hstmt, 1, SQL_C_ULONG, &_uid, 0, &len ); |
| 2264 |
MYSQL_ROW row = fp_mysql_fetch_row(result); |
sqlcode = SQLFetch( hstmt ); |
| 2265 |
if( row ){ |
if( sqlcode == SQL_SUCCESS ){ |
| 2266 |
*uid = atoi( row[0] != NULL ? row[0] : "" ); |
*uid = _uid; |
| 2267 |
fp_mysql_free_result( result ); |
ret = RES_OK; |
| 2268 |
return RES_OK; |
}else { |
| 2269 |
|
string s( "SQLFetch in getUid sql=" ); |
| 2270 |
|
s += string( sql ); |
| 2271 |
|
setLastErrorString( s.c_str( ) ); |
| 2272 |
|
ret = RES_NO_SUCH_USER; |
| 2273 |
|
} |
| 2274 |
|
}else{ |
| 2275 |
|
setLastErrorString( "SQLExecDirect in getUid" ); |
| 2276 |
|
ret = RES_DB_QUERY_ERROR; |
| 2277 |
|
} |
| 2278 |
|
SQLFreeHandle( SQL_HANDLE_STMT, hstmt ); |
| 2279 |
}else{ |
}else{ |
| 2280 |
fp_mysql_free_result( result ); |
setLastErrorString( "SQLAllocHandle(SQL_HANDLE_STMT,...) in getUid" ); |
| 2281 |
return RES_NO_SUCH_USER; |
ret = RES_DB_QUERY_ERROR; |
| 2282 |
} |
} |
| 2283 |
|
|
| 2284 |
|
return ret; |
| 2285 |
} |
} |
| 2286 |
|
|
| 2287 |
/** |
/** |
| 2295 |
*/ |
*/ |
| 2296 |
static result_t addSession( userid_t uid, sessionid_t* session ) |
static result_t addSession( userid_t uid, sessionid_t* session ) |
| 2297 |
{ |
{ |
| 2298 |
result_t ret; |
result_t ret = RES_DB_QUERY_ERROR; |
| 2299 |
|
SQLRETURN sqlcode; |
| 2300 |
string sql = "INSERT INTO " + dbprefix + "_vpaccount_session (uid) values (" + |
string sql = "INSERT INTO " + dbprefix + "_vpaccount_session (uid) values (" + |
| 2301 |
unsignedIntToString(uid) + ")"; |
unsignedIntToString(uid) + ")"; |
| 2302 |
if ( 0 == fp_mysql_query( mysql, sql.c_str() ) ){ |
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) { |
| 2303 |
*session = (int)fp_mysql_insert_id(mysql); |
if( ( sqlcode = SQLExecDirect( hstmt, (SQLCHAR*)sql.c_str(), sql.length() ) ) == SQL_SUCCESS ){ |
| 2304 |
ret = RES_OK; |
SQLFreeHandle( SQL_HANDLE_STMT, hstmt ); |
| 2305 |
} |
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) { |
| 2306 |
else { |
sql = "SELECT LAST_INSERT_ID()"; |
| 2307 |
ret = RES_DB_QUERY_ERROR; |
if( ( sqlcode = SQLExecDirect( hstmt, (SQLCHAR*)sql.c_str(), sql.length() ) ) == SQL_SUCCESS ){ |
| 2308 |
|
sessionid_t sid; |
| 2309 |
|
SQLINTEGER len; |
| 2310 |
|
SQLBindCol( hstmt, 1, SQL_C_ULONG, &sid, 0, &len ); |
| 2311 |
|
if( ( sqlcode = SQLFetch( hstmt ) ) == SQL_SUCCESS ){ |
| 2312 |
|
*session = sid; |
| 2313 |
|
ret = RES_OK; |
| 2314 |
|
} |
| 2315 |
|
} |
| 2316 |
|
SQLFreeHandle( SQL_HANDLE_STMT, hstmt ); |
| 2317 |
|
} |
| 2318 |
|
}else{ |
| 2319 |
|
SQLFreeHandle( SQL_HANDLE_STMT, hstmt ); |
| 2320 |
|
} |
| 2321 |
} |
} |
| 2322 |
return ret; |
return ret; |
| 2323 |
} |
} |
| 2337 |
*/ |
*/ |
| 2338 |
result_t loginUser(const char* uname, const char* passwd, sessionid_t* session ) |
result_t loginUser(const char* uname, const char* passwd, sessionid_t* session ) |
| 2339 |
{ |
{ |
| 2340 |
if( mysql == NULL ) return RES_DB_NOT_INITIALIZED; |
if( hdbc == NULL ) return RES_DB_NOT_INITIALIZED; |
| 2341 |
|
|
| 2342 |
result_t ret; |
result_t ret; |
| 2343 |
string sql; |
string sql; |
| 2344 |
|
SQLRETURN sqlcode; |
| 2345 |
|
|
| 2346 |
// uname, passwd -> uid |
// uname, passwd -> uid |
| 2347 |
string escUname = addSlashes( uname ); |
string escUname = addSlashes( uname ); |
| 2348 |
string escPasswd = addSlashes( passwd ); |
string escPasswd = addSlashes( passwd ); |
| 2349 |
sql = "SELECT uid FROM " + dbprefix + "_users WHERE uname='" + escUname + "' and pass=md5('" + escPasswd + "')"; |
sql = "SELECT uid FROM " + dbprefix + "_users WHERE uname='" + escUname + "' and pass=md5('" + escPasswd + "')"; |
| 2350 |
if( 0 == fp_mysql_query( mysql, sql.c_str( ) ) ){ |
|
| 2351 |
MYSQL_RES* result = fp_mysql_store_result( mysql ); |
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) { |
| 2352 |
if( result ){ |
if( ( sqlcode = SQLExecDirect( hstmt, (SQLCHAR*)sql.c_str(), sql.length() ) ) == SQL_SUCCESS ){ |
| 2353 |
MYSQL_ROW row = fp_mysql_fetch_row(result); |
userid_t uid = 0; |
| 2354 |
if( row ){ |
SQLINTEGER len; |
| 2355 |
userid_t uid = atoi( row[0] != NULL ? row[0] : "" ); |
SQLBindCol( hstmt, 1, SQL_C_ULONG, &uid, 0, &len ); |
| 2356 |
|
sqlcode = SQLFetch( hstmt ); |
| 2357 |
|
if( sqlcode == SQL_SUCCESS ){ |
| 2358 |
ret = addSession( uid, session ); |
ret = addSession( uid, session ); |
| 2359 |
}else{ |
}else { |
| 2360 |
ret = RES_LOGIN_FAILURE; |
string s( "SQLFetch in loginUser" ); |
| 2361 |
|
setLastErrorString( s.c_str( ) ); |
| 2362 |
|
ret = RES_LOGIN_FAILURE;//illegal loginname or password |
| 2363 |
} |
} |
| 2364 |
fp_mysql_free_result( result ); |
}else{ |
| 2365 |
}else { |
setLastErrorString( "SQLExecDirect in loginUser" ); |
| 2366 |
ret = RES_DB_QUERY_ERROR; |
ret = RES_DB_QUERY_ERROR; |
| 2367 |
} |
} |
| 2368 |
|
SQLFreeHandle( SQL_HANDLE_STMT, hstmt ); |
| 2369 |
}else{ |
}else{ |
| 2370 |
|
setLastErrorString( "SQLAllocHandle(SQL_HANDLE_STMT,...) in loginUser" ); |
| 2371 |
ret = RES_DB_QUERY_ERROR; |
ret = RES_DB_QUERY_ERROR; |
| 2372 |
} |
} |
| 2373 |
|
|
| 2384 |
*/ |
*/ |
| 2385 |
void logoutUser( sessionid_t sid ) |
void logoutUser( sessionid_t sid ) |
| 2386 |
{ |
{ |
| 2387 |
if( mysql == NULL ) return; // RES_DB_NOT_INITIALIZED; |
if( hdbc == NULL ) return; // RES_DB_NOT_INITIALIZED; |
| 2388 |
|
|
| 2389 |
result_t ret; |
result_t ret; |
| 2390 |
string sql; |
string sql; |
| 2391 |
|
|
| 2392 |
sql = "DELETE FROM " + dbprefix + "_vpaccount_session WHERE sid=" + intToString((int)sid); |
sql = "DELETE FROM " + dbprefix + "_vpaccount_session WHERE sid=" + intToString((int)sid); |
| 2393 |
if ( 0 == fp_mysql_query( mysql, sql.c_str() ) ){ |
if ( 0 == SQLExecDirect( hstmt, (SQLCHAR*)sql.c_str(), sql.length() ) ){ |
| 2394 |
|
/* |
| 2395 |
if ( fp_mysql_affected_rows(mysql) == 1 ){ |
if ( fp_mysql_affected_rows(mysql) == 1 ){ |
| 2396 |
// ログアウトした |
// ログアウトした |
| 2397 |
} |
} |
| 2398 |
else { |
else { |
| 2399 |
// sidが無効 |
// sidが無効 |
| 2400 |
} |
} |
| 2401 |
|
*/ |
| 2402 |
} |
} |
| 2403 |
else { |
else { |
| 2404 |
// DB問い合わせ中のエラー |
// DB問い合わせ中のエラー |
| 2422 |
*/ |
*/ |
| 2423 |
result_t createSession( const char* sess_id, userid_t uid, sessionid_t* session ) |
result_t createSession( const char* sess_id, userid_t uid, sessionid_t* session ) |
| 2424 |
{ |
{ |
| 2425 |
if( mysql == NULL ) return RES_DB_NOT_INITIALIZED; |
if( hdbc == NULL ) return RES_DB_NOT_INITIALIZED; |
| 2426 |
|
|
| 2427 |
result_t ret; |
result_t ret; |
| 2428 |
string sql; |
string sql; |
| 2429 |
|
SQLHANDLE hstmt = NULL; |
| 2430 |
|
SQLRETURN sqlcode; |
| 2431 |
|
|
| 2432 |
string escSess_id = addSlashes(sess_id); |
string escSess_id = addSlashes(sess_id); |
| 2433 |
sql = "SELECT sess_id from " + dbprefix + "_session where sess_id='" + escSess_id + "'"; |
sql = "SELECT sess_id from " + dbprefix + "_session where sess_id='" + escSess_id + "'"; |
| 2434 |
if( 0 == fp_mysql_query( mysql, sql.c_str( ) ) ){ |
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) { |
| 2435 |
MYSQL_RES* result = fp_mysql_store_result( mysql ); |
if( ( sqlcode = SQLExecDirect( hstmt, (SQLCHAR*)sql.c_str(), sql.length() ) ) == SQL_SUCCESS ){ |
| 2436 |
if( result ){ |
if( ( sqlcode = SQLFetch( hstmt ) ) == SQL_SUCCESS ){ |
|
MYSQL_ROW row = fp_mysql_fetch_row(result); |
|
|
if( row ){ |
|
| 2437 |
ret = addSession( uid, session ); |
ret = addSession( uid, session ); |
| 2438 |
}else{ |
}else{ |
| 2439 |
ret = RES_ERROR; |
ret = RES_ERROR; |
| 2440 |
} |
} |
|
fp_mysql_free_result( result ); |
|
| 2441 |
}else { |
}else { |
| 2442 |
ret = RES_DB_QUERY_ERROR; |
ret = RES_DB_QUERY_ERROR; |
| 2443 |
} |
} |
| 2444 |
}else{ |
}else{ |
| 2445 |
ret = RES_DB_QUERY_ERROR; |
ret = RES_DB_QUERY_ERROR; |
| 2446 |
} |
} |
|
|
|
| 2447 |
return ret; |
return ret; |
| 2448 |
} |
} |
| 2449 |
|
|
| 2461 |
*/ |
*/ |
| 2462 |
result_t getSession( sessionid_t sid, const session_t** ppsession ) |
result_t getSession( sessionid_t sid, const session_t** ppsession ) |
| 2463 |
{ |
{ |
| 2464 |
if( mysql == NULL ) return RES_DB_NOT_INITIALIZED; |
if( hdbc == NULL ) return RES_DB_NOT_INITIALIZED; |
| 2465 |
|
|
| 2466 |
result_t ret; |
result_t ret; |
| 2467 |
string sql; |
string sql; |
| 2468 |
|
|
| 2469 |
|
/* |
| 2470 |
sql = "SELECT sid, uid, unix_timestamp(timestamp) from " + dbprefix + |
sql = "SELECT sid, uid, unix_timestamp(timestamp) from " + dbprefix + |
| 2471 |
"_vpaccount_session where sid=" + unsignedIntToString((unsigned int)sid); |
"_vpaccount_session where sid=" + unsignedIntToString((unsigned int)sid); |
| 2472 |
if( 0 == fp_mysql_query( mysql, sql.c_str( ) ) ){ |
if( 0 == SQLExecDirect( hstmt, (SQLCHAR*)sql.c_str(), sql.length() ) ){ |
| 2473 |
MYSQL_RES* result = fp_mysql_store_result( mysql ); |
MYSQL_RES* result = fp_mysql_store_result( mysql ); |
| 2474 |
if( result ){ |
if( result ){ |
| 2475 |
MYSQL_ROW row = fp_mysql_fetch_row(result); |
MYSQL_ROW row = fp_mysql_fetch_row(result); |
| 2491 |
ret = RES_DB_QUERY_ERROR; |
ret = RES_DB_QUERY_ERROR; |
| 2492 |
} |
} |
| 2493 |
|
|
| 2494 |
|
*/ |
| 2495 |
return ret; |
return ret; |
| 2496 |
} |
} |
| 2497 |
|
|
| 2506 |
*/ |
*/ |
| 2507 |
bool isValidSessionID( sessionid_t sid ) |
bool isValidSessionID( sessionid_t sid ) |
| 2508 |
{ |
{ |
| 2509 |
if( mysql == NULL ) return false; |
if( hdbc == NULL ) return false; |
| 2510 |
|
|
| 2511 |
bool ret; |
bool ret = false; |
| 2512 |
string sql; |
string sql; |
|
string sidstr; |
|
| 2513 |
char buf[ 12 ]; |
char buf[ 12 ]; |
| 2514 |
snprintf( buf, 12, "%d", sid ); |
snprintf( buf, 12, "%d", sid ); |
| 2515 |
|
SQLRETURN sqlcode; |
| 2516 |
|
SQLHANDLE hstmt = NULL; |
| 2517 |
|
|
| 2518 |
sql = "SELECT * FROM " + dbprefix + "_vpaccount_session WHERE sid=" + string( buf ); |
sql = "SELECT * FROM " + dbprefix + "_vpaccount_session WHERE sid=" + string( buf ); |
| 2519 |
if( fp_mysql_query( mysql, sql.c_str( ) ) ){ |
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) { |
| 2520 |
return false; |
if( ( sqlcode = SQLExecDirect( hstmt, (SQLCHAR*)sql.c_str(), sql.length() ) ) == SQL_SUCCESS ){ |
| 2521 |
} |
if( ( sqlcode = SQLFetch( hstmt ) ) == SQL_SUCCESS ){ |
| 2522 |
MYSQL_RES* result = fp_mysql_store_result( mysql ); |
ret = true; |
| 2523 |
if( result ){ |
}else{ |
| 2524 |
MYSQL_ROW row = fp_mysql_fetch_row(result); |
snprintf( buf, 12, "%d", sqlcode ); |
| 2525 |
if( row ){ |
string s( "SQLFetch in isValidSessionID(sqlcode=" ); |
| 2526 |
ret = true; |
s += string( buf ) + ", sql=" + sql + ")"; |
| 2527 |
|
setLastErrorString( s.c_str() ); |
| 2528 |
|
ret = false; |
| 2529 |
|
} |
| 2530 |
}else{ |
}else{ |
| 2531 |
|
setLastErrorString( "SQLExecDirect in isValidSessionID" ); |
| 2532 |
ret = false; |
ret = false; |
| 2533 |
} |
} |
| 2534 |
fp_mysql_free_result( result ); |
SQLFreeHandle( SQL_HANDLE_STMT, hstmt ); |
| 2535 |
|
}else{ |
| 2536 |
|
setLastErrorString( "SQLAllocHandle(SQL_HANDLE_STMT,...) in isValidSessionID" ); |
| 2537 |
|
ret = false; |
| 2538 |
} |
} |
| 2539 |
return ret; |
return ret; |
| 2540 |
} |
} |
| 2554 |
void setLastErrorString( const char* str ) |
void setLastErrorString( const char* str ) |
| 2555 |
{ |
{ |
| 2556 |
errstr = str; |
errstr = str; |
| 2557 |
|
// fprintf( stderr, "setLastErrorString( '%s' );\n", str ); |
| 2558 |
} |
} |