| 2 |
* |
* |
| 3 |
* $Revision$ |
* $Revision$ |
| 4 |
* $Log$ |
* $Log$ |
| 5 |
|
* Revision 1.35 2005/01/06 07:20:17 youi |
| 6 |
|
* WIN32定義時のインクルードの追加. |
| 7 |
|
* MySQL APIに関するヘッダファイルを削除. |
| 8 |
|
* deleteAccount: 所属するPlatformグループからの削除を内蔵した. |
| 9 |
|
* insertAccount: ユーザ登録と同時にデフォルトPlatformグループへ登録する. |
| 10 |
|
* deleteMember: デフォルトPlatformグループからの削除を禁止する. |
| 11 |
|
* deleteMemberNoLimitの定義. |
| 12 |
|
* |
| 13 |
* Revision 1.34 2004/12/28 04:38:14 aga |
* Revision 1.34 2004/12/28 04:38:14 aga |
| 14 |
* ・logoutUser()の修正. |
* ・logoutUser()の修正. |
| 15 |
* |
* |
| 145 |
* |
* |
| 146 |
* |
* |
| 147 |
*/ |
*/ |
| 148 |
#ifdef __WIN__ |
#ifdef WIN32 |
| 149 |
#include <winsock.h> |
#include <windows.h> |
|
#define my_socket SOCKET |
|
|
#else |
|
|
typedef int my_socket; |
|
| 150 |
#endif |
#endif |
| 151 |
|
|
| 152 |
#ifdef USE_SYSLOG |
#ifdef USE_SYSLOG |
| 156 |
#include <stdio.h> |
#include <stdio.h> |
| 157 |
#include <stdlib.h> |
#include <stdlib.h> |
| 158 |
#include <string.h> |
#include <string.h> |
|
#include <mysql.h> |
|
|
#include <errmsg.h> |
|
| 159 |
#include <string> |
#include <string> |
| 160 |
#include <assert.h> |
#include <assert.h> |
| 161 |
#include <sql.h> |
#include <sql.h> |
| 176 |
static SQLHANDLE hstmt = NULL; |
static SQLHANDLE hstmt = NULL; |
| 177 |
|
|
| 178 |
static string odbcDiagString( SQLSMALLINT HandleType, SQLHANDLE hstmt, SQLRETURN sqlcode ); |
static string odbcDiagString( SQLSMALLINT HandleType, SQLHANDLE hstmt, SQLRETURN sqlcode ); |
| 179 |
|
static result_t deleteMemberNoLimit( sessionid_t sid, groupid_t gid, userid_t uid ); |
| 180 |
|
|
| 181 |
static result_t countResultRows( const char* sql, SQLINTEGER* count ) |
static result_t countResultRows( const char* sql, SQLINTEGER* count ) |
| 182 |
{ |
{ |
| 392 |
} |
} |
| 393 |
}else{ |
}else{ |
| 394 |
string s( "SQLAllocHandle in uidExists "); |
string s( "SQLAllocHandle in uidExists "); |
| 395 |
s += odbcDiagString( SQL_HANDLE_STMT, hstmt, sqlcode ); |
s += odbcDiagString( SQL_HANDLE_DBC, hdbc, sqlcode ); |
| 396 |
setLastErrorString( s.c_str( ) ); |
setLastErrorString( s.c_str( ) ); |
| 397 |
ret = false; |
ret = false; |
| 398 |
} |
} |
| 660 |
/** |
/** |
| 661 |
* |
* |
| 662 |
* アカウント削除 |
* アカウント削除 |
| 663 |
|
* グループからの削除とユーザ情報の削除を行ないます. |
| 664 |
* |
* |
| 665 |
* @param |
* @param |
| 666 |
* @return RES_OK |
* @return RES_OK |
| 667 |
|
* @return RES_ERROR |
| 668 |
* @return RES_DB_NOT_INITIALIZED |
* @return RES_DB_NOT_INITIALIZED |
| 669 |
* @return RES_NO_SUCH_SESSION |
* @return RES_NO_SUCH_SESSION |
| 670 |
* @return RES_DB_QUERY_ERROR |
* @return RES_DB_QUERY_ERROR |
| 676 |
if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION; |
if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION; |
| 677 |
|
|
| 678 |
result_t ret1 = RES_ERROR, ret2 = RES_ERROR; |
result_t ret1 = RES_ERROR, ret2 = RES_ERROR; |
| 679 |
|
criteria_t c; |
| 680 |
string sql; |
string sql; |
| 681 |
|
groupid_t* gids; |
| 682 |
|
int gidsLen; |
| 683 |
SQLRETURN sqlcode; |
SQLRETURN sqlcode; |
| 684 |
SQLHANDLE hstmt = NULL; |
SQLHANDLE hstmt = NULL; |
| 685 |
|
|
| 686 |
|
/* |
| 687 |
|
1. delete user from default platform group |
| 688 |
|
2. delete user profile from xoops_users |
| 689 |
|
3. delete platform user from vpaccount_users |
| 690 |
|
*/ |
| 691 |
|
|
| 692 |
|
//1. delete user from platform groups |
| 693 |
|
c.clearAll(); |
| 694 |
|
if( getGroupsByUid( sid, uid, &c, &gids, &gidsLen ) == RES_OK ){ |
| 695 |
|
for( int i = 0; i < gidsLen; i++ ) |
| 696 |
|
deleteMemberNoLimit( sid, gids[ i ], uid ); |
| 697 |
|
freeGID( gids ); |
| 698 |
|
} |
| 699 |
|
|
| 700 |
|
//2. delete user profile from xoops_users |
| 701 |
sql = "DELETE FROM " + dbprefix + "_users "; |
sql = "DELETE FROM " + dbprefix + "_users "; |
| 702 |
sql += "WHERE uid = " + string( unsignedIntToString( uid ) ); |
sql += "WHERE uid = " + string( unsignedIntToString( uid ) ); |
| 703 |
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) { |
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) { |
| 726 |
ret1 = RES_ERROR; |
ret1 = RES_ERROR; |
| 727 |
} |
} |
| 728 |
|
|
| 729 |
|
//3. delete platform user from vpaccount_users |
| 730 |
sql = "DELETE FROM " + dbprefix + "_vpaccount_users "; |
sql = "DELETE FROM " + dbprefix + "_vpaccount_users "; |
| 731 |
sql += "WHERE uid = " + string( unsignedIntToString( uid ) ); |
sql += "WHERE uid = " + string( unsignedIntToString( uid ) ); |
| 732 |
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) { |
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) { |
| 917 |
}else{ |
}else{ |
| 918 |
string s( "SQLAllocHandle(SQL_HANDLE_STMT,...) in getAccounts" ); |
string s( "SQLAllocHandle(SQL_HANDLE_STMT,...) in getAccounts" ); |
| 919 |
s += odbcDiagString( SQL_HANDLE_DBC, hdbc, sqlcode ); |
s += odbcDiagString( SQL_HANDLE_DBC, hdbc, sqlcode ); |
|
s += string( ", sql=" ) + string( sql ); |
|
| 920 |
setLastErrorString( s.c_str( ) ); |
setLastErrorString( s.c_str( ) ); |
| 921 |
#ifdef USE_SYSLOG |
#ifdef USE_SYSLOG |
| 922 |
syslog( LOG_DEBUG, "getAccounts %s", getLastErrorString( ) ); |
syslog( LOG_DEBUG, "getAccounts %s", getLastErrorString( ) ); |
| 932 |
/** |
/** |
| 933 |
* |
* |
| 934 |
* アカウント登録. |
* アカウント登録. |
| 935 |
|
* |
| 936 |
* ユーザ情報をデータベースに登録します. |
* ユーザ情報をデータベースに登録します. |
| 937 |
* 登録したユーザ情報に対応するユーザIDをuidに格納します. |
* 登録したユーザ情報に対応するユーザIDをuidに格納します. |
| 938 |
* |
* |
| 939 |
* @param sid セッション |
* @param sid セッション |
| 940 |
* @param account 登録するアカウント情報 |
* @param account 登録するアカウント情報 |
| 956 |
SQLRETURN sqlcode; |
SQLRETURN sqlcode; |
| 957 |
result_t ret = RES_ERROR; |
result_t ret = RES_ERROR; |
| 958 |
|
|
| 959 |
//xoopsのユーザテーブルに書き込む |
/* |
| 960 |
|
1. insert user profile into xoops_users |
| 961 |
|
2. insert platform user profile into vpaccount_users |
| 962 |
|
3. add user to default platform group |
| 963 |
|
*/ |
| 964 |
|
|
| 965 |
|
//1.xoopsのユーザテーブルに書き込む |
| 966 |
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]; |
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]; |
| 967 |
SQLINTEGER user_regdate, user_viewemail, posts, attachsig, rank, level, last_login, uorder, notify_method, notify_mode, user_mailok; |
SQLINTEGER user_regdate, user_viewemail, posts, attachsig, rank, level, last_login, uorder, notify_method, notify_mode, user_mailok; |
| 968 |
SQLDOUBLE timezone_offset; |
SQLDOUBLE timezone_offset; |
| 1090 |
ret = RES_ERROR; |
ret = RES_ERROR; |
| 1091 |
} |
} |
| 1092 |
|
|
| 1093 |
//vpaccountのユーザテーブルに残りの情報を書き込む |
if( ret == RES_OK ){ |
| 1094 |
SQLUINTEGER activate; |
//2.vpaccountのユーザテーブルに残りの情報を書き込む |
| 1095 |
SQLCHAR address[VP_ACCOUNT_ADDRESS_LEN+1]; |
SQLUINTEGER activate; |
| 1096 |
SQLCHAR division[VP_ACCOUNT_DIVISION_LEN+1]; |
SQLCHAR address[VP_ACCOUNT_ADDRESS_LEN+1]; |
| 1097 |
SQLCHAR tel[VP_ACCOUNT_TEL_LEN+1]; |
SQLCHAR division[VP_ACCOUNT_DIVISION_LEN+1]; |
| 1098 |
SQLCHAR company_name[VP_ACCOUNT_COMPANY_NAME_LEN+1]; |
SQLCHAR tel[VP_ACCOUNT_TEL_LEN+1]; |
| 1099 |
SQLCHAR country[VP_ACCOUNT_COUNTRY_LEN+1]; |
SQLCHAR company_name[VP_ACCOUNT_COMPANY_NAME_LEN+1]; |
| 1100 |
SQLCHAR zipcode[VP_ACCOUNT_ZIPCODE_LEN+1]; |
SQLCHAR country[VP_ACCOUNT_COUNTRY_LEN+1]; |
| 1101 |
SQLCHAR fax[VP_ACCOUNT_FAX_LEN+1]; |
SQLCHAR zipcode[VP_ACCOUNT_ZIPCODE_LEN+1]; |
| 1102 |
SQLCHAR base_url[VP_ACCOUNT_BASE_URL_LEN+1]; |
SQLCHAR fax[VP_ACCOUNT_FAX_LEN+1]; |
| 1103 |
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; |
SQLCHAR base_url[VP_ACCOUNT_BASE_URL_LEN+1]; |
| 1104 |
SQLINTEGER cbUid = 0, cbActivate = 0, cbNotice_mail = 0, cbNotice_mail_since = 0; |
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; |
| 1105 |
SQLUINTEGER notice_mail; |
SQLINTEGER cbUid = 0, cbActivate = 0, cbNotice_mail = 0, cbNotice_mail_since = 0; |
| 1106 |
SQLUINTEGER notice_mail_since; |
SQLUINTEGER notice_mail; |
| 1107 |
if( ret == RES_OK && ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) { |
SQLUINTEGER notice_mail_since; |
| 1108 |
string sql; |
if( ret == RES_OK && ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) { |
| 1109 |
sql = "INSERT INTO " + dbprefix + "_vpaccount_users (uid, activate, address, division, tel, company_name, country, zipcode, fax, base_url, notice_mail, notice_mail_since) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )"; |
string sql; |
| 1110 |
sqlcode = SQLPrepare(hstmt, (SQLCHAR*)sql.c_str(), SQL_NTS); |
sql = "INSERT INTO " + dbprefix + "_vpaccount_users (uid, activate, address, division, tel, company_name, country, zipcode, fax, base_url, notice_mail, notice_mail_since) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )"; |
| 1111 |
if( sqlcode == SQL_SUCCESS || sqlcode == SQL_SUCCESS_WITH_INFO ){ |
sqlcode = SQLPrepare(hstmt, (SQLCHAR*)sql.c_str(), SQL_NTS); |
| 1112 |
SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_SSHORT, SQL_INTEGER, 0, 0, uid, 0, &cbUid); |
if( sqlcode == SQL_SUCCESS || sqlcode == SQL_SUCCESS_WITH_INFO ){ |
| 1113 |
SQLBindParameter(hstmt, 2, SQL_PARAM_INPUT, SQL_C_SSHORT, SQL_INTEGER, 0, 0, &activate, 0, &cbActivate); |
SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_SSHORT, SQL_INTEGER, 0, 0, uid, 0, &cbUid); |
| 1114 |
SQLBindParameter(hstmt, 3, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, VP_ACCOUNT_ADDRESS_LEN, 0, address, 0, &cbAddress); |
SQLBindParameter(hstmt, 2, SQL_PARAM_INPUT, SQL_C_SSHORT, SQL_INTEGER, 0, 0, &activate, 0, &cbActivate); |
| 1115 |
SQLBindParameter(hstmt, 4, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, VP_ACCOUNT_DIVISION_LEN, 0, division, 0, &cbDivision); |
SQLBindParameter(hstmt, 3, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, VP_ACCOUNT_ADDRESS_LEN, 0, address, 0, &cbAddress); |
| 1116 |
SQLBindParameter(hstmt, 5, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, VP_ACCOUNT_TEL_LEN, 0, tel, 0, &cbTel); |
SQLBindParameter(hstmt, 4, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, VP_ACCOUNT_DIVISION_LEN, 0, division, 0, &cbDivision); |
| 1117 |
SQLBindParameter(hstmt, 6, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, VP_ACCOUNT_COMPANY_NAME_LEN, 0, company_name, 0, &cbCompany_name); |
SQLBindParameter(hstmt, 5, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, VP_ACCOUNT_TEL_LEN, 0, tel, 0, &cbTel); |
| 1118 |
SQLBindParameter(hstmt, 7, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, VP_ACCOUNT_COUNTRY_LEN, 0, country, 0, &cbCountry); |
SQLBindParameter(hstmt, 6, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, VP_ACCOUNT_COMPANY_NAME_LEN, 0, company_name, 0, &cbCompany_name); |
| 1119 |
SQLBindParameter(hstmt, 8, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, VP_ACCOUNT_ZIPCODE_LEN, 0, zipcode, 0, &cbZipcode); |
SQLBindParameter(hstmt, 7, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, VP_ACCOUNT_COUNTRY_LEN, 0, country, 0, &cbCountry); |
| 1120 |
SQLBindParameter(hstmt, 9, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, VP_ACCOUNT_FAX_LEN, 0, fax, 0, &cbFax); |
SQLBindParameter(hstmt, 8, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, VP_ACCOUNT_ZIPCODE_LEN, 0, zipcode, 0, &cbZipcode); |
| 1121 |
SQLBindParameter(hstmt, 10, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, VP_ACCOUNT_BASE_URL_LEN, 0, base_url, 0, &cbBase_url); |
SQLBindParameter(hstmt, 9, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, VP_ACCOUNT_FAX_LEN, 0, fax, 0, &cbFax); |
| 1122 |
SQLBindParameter(hstmt, 11, SQL_PARAM_INPUT, SQL_C_SSHORT, SQL_INTEGER, 0, 0, ¬ice_mail, 0, &cbNotice_mail); |
SQLBindParameter(hstmt, 10, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARCHAR, VP_ACCOUNT_BASE_URL_LEN, 0, base_url, 0, &cbBase_url); |
| 1123 |
SQLBindParameter(hstmt, 12, SQL_PARAM_INPUT, SQL_C_SSHORT, SQL_INTEGER, 0, 0, ¬ice_mail_since, 0, &cbNotice_mail_since); |
SQLBindParameter(hstmt, 11, SQL_PARAM_INPUT, SQL_C_SSHORT, SQL_INTEGER, 0, 0, ¬ice_mail, 0, &cbNotice_mail); |
| 1124 |
|
SQLBindParameter(hstmt, 12, SQL_PARAM_INPUT, SQL_C_SSHORT, SQL_INTEGER, 0, 0, ¬ice_mail_since, 0, &cbNotice_mail_since); |
| 1125 |
|
|
| 1126 |
activate = account -> getActivate() ? 1 : 0; |
activate = account -> getActivate() ? 1 : 0; |
| 1127 |
strncpy2( (char*)address, account -> getAddress(), VP_ACCOUNT_ADDRESS_LEN ); |
strncpy2( (char*)address, account -> getAddress(), VP_ACCOUNT_ADDRESS_LEN ); |
| 1128 |
strncpy2( (char*)division, account -> getDivision(), VP_ACCOUNT_DIVISION_LEN ); |
strncpy2( (char*)division, account -> getDivision(), VP_ACCOUNT_DIVISION_LEN ); |
| 1129 |
strncpy2( (char*)tel, account -> getTel(), VP_ACCOUNT_TEL_LEN ); |
strncpy2( (char*)tel, account -> getTel(), VP_ACCOUNT_TEL_LEN ); |
| 1130 |
strncpy2( (char*)company_name, account -> getCompanyName(), VP_ACCOUNT_COMPANY_NAME_LEN ); |
strncpy2( (char*)company_name, account -> getCompanyName(), VP_ACCOUNT_COMPANY_NAME_LEN ); |
| 1131 |
strncpy2( (char*)country, account -> getCountry(), VP_ACCOUNT_COUNTRY_LEN ); |
strncpy2( (char*)country, account -> getCountry(), VP_ACCOUNT_COUNTRY_LEN ); |
| 1132 |
strncpy2( (char*)zipcode, account -> getZipcode(), VP_ACCOUNT_ZIPCODE_LEN ); |
strncpy2( (char*)zipcode, account -> getZipcode(), VP_ACCOUNT_ZIPCODE_LEN ); |
| 1133 |
strncpy2( (char*)fax, account -> getFax(), VP_ACCOUNT_FAX_LEN ); |
strncpy2( (char*)fax, account -> getFax(), VP_ACCOUNT_FAX_LEN ); |
| 1134 |
strncpy2( (char*)base_url, account -> getBaseURL(), VP_ACCOUNT_BASE_URL_LEN ); |
strncpy2( (char*)base_url, account -> getBaseURL(), VP_ACCOUNT_BASE_URL_LEN ); |
| 1135 |
notice_mail = account -> getNoticeMail( ); |
notice_mail = account -> getNoticeMail( ); |
| 1136 |
notice_mail_since = account -> getNoticeMailSince( ); |
notice_mail_since = account -> getNoticeMailSince( ); |
| 1137 |
|
|
| 1138 |
if( ( sqlcode = SQLExecute( hstmt ) ) == SQL_SUCCESS ){ |
if( ( sqlcode = SQLExecute( hstmt ) ) == SQL_SUCCESS ){ |
| 1139 |
SQLINTEGER count = 0; |
SQLINTEGER count = 0; |
| 1140 |
if( ( sqlcode = SQLRowCount( hstmt, &count ) ) == SQL_SUCCESS && count > 0 ){ |
if( ( sqlcode = SQLRowCount( hstmt, &count ) ) == SQL_SUCCESS && count > 0 ){ |
| 1141 |
ret = RES_OK; |
ret = RES_OK; |
| 1142 |
|
if( ret == RES_OK ){ |
| 1143 |
|
//3.add new user to default group(not a group admin) |
| 1144 |
|
ret = insertMember( sid, DEFAULT_PLATFORM_GROUP_ID, *uid, false ); |
| 1145 |
|
}else{ |
| 1146 |
|
//xoops_usersへinsertしたレコードを削除する |
| 1147 |
|
sql = "DELETE FROM " + dbprefix + "_users where uid="; |
| 1148 |
|
sql += unsignedIntToString( *uid ); |
| 1149 |
|
SQLHANDLE hstmt2 = NULL; |
| 1150 |
|
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt2 ) ) == SQL_SUCCESS ) { |
| 1151 |
|
SQLExecDirect( hstmt2, (SQLCHAR*)sql.c_str(), sql.length() ); |
| 1152 |
|
SQLFreeHandle( SQL_HANDLE_STMT, hstmt2 ); |
| 1153 |
|
} |
| 1154 |
|
setLastErrorString( "insertMember in insertAccount" ); |
| 1155 |
|
ret = RES_DB_QUERY_ERROR; |
| 1156 |
|
} |
| 1157 |
|
}else{ |
| 1158 |
|
string s( "SQLRowCount in insertAccount sql=" ); |
| 1159 |
|
s += string( sql ); |
| 1160 |
|
setLastErrorString( s.c_str( ) ); |
| 1161 |
|
ret = RES_DB_QUERY_ERROR; |
| 1162 |
|
} |
| 1163 |
}else{ |
}else{ |
| 1164 |
string s( "SQLRowCount in insertAccount sql=" ); |
string s( "SQLExecute in insertAccount " ); |
| 1165 |
s += string( sql ); |
s += odbcDiagString( SQL_HANDLE_STMT, hstmt, sqlcode ); |
| 1166 |
setLastErrorString( s.c_str( ) ); |
setLastErrorString( s.c_str( ) ); |
| 1167 |
ret = RES_DB_QUERY_ERROR; |
ret = RES_DB_QUERY_ERROR; |
| 1168 |
} |
} |
| 1169 |
}else{ |
}else{ |
| 1170 |
string s( "SQLExecute in insertAccount " ); |
//xoops_usersへinsertしたレコードを削除する |
| 1171 |
s += odbcDiagString( SQL_HANDLE_STMT, hstmt, sqlcode ); |
sql = "DELETE FROM " + dbprefix + "_users where uid="; |
| 1172 |
|
sql += unsignedIntToString( *uid ); |
| 1173 |
|
SQLHANDLE hstmt2 = NULL; |
| 1174 |
|
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt2 ) ) == SQL_SUCCESS ) { |
| 1175 |
|
SQLExecDirect( hstmt2, (SQLCHAR*)sql.c_str(), sql.length() ); |
| 1176 |
|
SQLFreeHandle( SQL_HANDLE_STMT, hstmt2 ); |
| 1177 |
|
} |
| 1178 |
|
string s( "SQLExecDirect in insertAccount sql=" ); |
| 1179 |
|
s += string( sql ); |
| 1180 |
setLastErrorString( s.c_str( ) ); |
setLastErrorString( s.c_str( ) ); |
| 1181 |
ret = RES_DB_QUERY_ERROR; |
ret = RES_DB_QUERY_ERROR; |
| 1182 |
} |
} |
| 1183 |
|
SQLFreeHandle( SQL_HANDLE_STMT, hstmt ); |
| 1184 |
}else{ |
}else{ |
| 1185 |
//xoops_usersへinsertしたレコードを削除する |
setLastErrorString( "SQLAllocHandle(SQL_HANDLE_STMT,...) in insertAccount" ); |
| 1186 |
sql = "DELETE FROM " + dbprefix + "_users where uid="; |
ret = RES_ERROR; |
|
snprintf( buf, 12, "%d", *uid ); |
|
|
sql += string( buf ); |
|
|
SQLHANDLE hstmt2 = NULL; |
|
|
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt2 ) ) == SQL_SUCCESS ) { |
|
|
SQLExecDirect( hstmt2, (SQLCHAR*)sql.c_str(), sql.length() ); |
|
|
SQLFreeHandle( SQL_HANDLE_STMT, hstmt2 ); |
|
|
} |
|
|
string s( "SQLExecDirect in insertAccount sql=" ); |
|
|
s += string( sql ); |
|
|
setLastErrorString( s.c_str( ) ); |
|
|
ret = RES_DB_QUERY_ERROR; |
|
| 1187 |
} |
} |
|
SQLFreeHandle( SQL_HANDLE_STMT, hstmt ); |
|
|
}else{ |
|
|
setLastErrorString( "SQLAllocHandle(SQL_HANDLE_STMT,...) in insertAccount" ); |
|
|
ret = RES_ERROR; |
|
| 1188 |
} |
} |
|
|
|
| 1189 |
return ret; |
return ret; |
| 1190 |
} |
} |
| 1191 |
|
|
| 1507 |
}else{ |
}else{ |
| 1508 |
string s( "SQLAllocHandle(SQL_HANDLE_STMT,...) in dumpUids" ); |
string s( "SQLAllocHandle(SQL_HANDLE_STMT,...) in dumpUids" ); |
| 1509 |
s += odbcDiagString( SQL_HANDLE_DBC, hdbc, sqlcode ); |
s += odbcDiagString( SQL_HANDLE_DBC, hdbc, sqlcode ); |
|
s += string( ", sql=" ) + string( sql ); |
|
| 1510 |
setLastErrorString( s.c_str( ) ); |
setLastErrorString( s.c_str( ) ); |
| 1511 |
#ifdef USE_SYSLOG |
#ifdef USE_SYSLOG |
| 1512 |
syslog( LOG_DEBUG, "dumpUids %s", getLastErrorString( ) ); |
syslog( LOG_DEBUG, "dumpUids %s", getLastErrorString( ) ); |
| 1629 |
} |
} |
| 1630 |
}else{ |
}else{ |
| 1631 |
string s( "SQLAllocHandle in getGroupsByUid " ); |
string s( "SQLAllocHandle in getGroupsByUid " ); |
| 1632 |
s += odbcDiagString( SQL_HANDLE_STMT, hstmt, sqlcode ); |
s += odbcDiagString( SQL_HANDLE_DBC, hdbc, sqlcode ); |
|
s += string( ", sql=" ) + string( sql ); |
|
| 1633 |
ret = RES_DB_QUERY_ERROR; |
ret = RES_DB_QUERY_ERROR; |
| 1634 |
} |
} |
| 1635 |
}else{ |
}else{ |
| 1811 |
* |
* |
| 1812 |
* グループ所属ユーザ削除. |
* グループ所属ユーザ削除. |
| 1813 |
* グループに所属するユーザを,グループから削除する. |
* グループに所属するユーザを,グループから削除する. |
| 1814 |
|
* デフォルトグループからは削除できない |
| 1815 |
* |
* |
| 1816 |
* @param sid セッションID |
* @param sid セッションID |
| 1817 |
* @param gid どのグループから削除するかを指定するグループID |
* @param gid どのグループから削除するかを指定するグループID |
| 1821 |
* @return RES_NO_SUCH_USER |
* @return RES_NO_SUCH_USER |
| 1822 |
* @return RES_NO_SUCH_GROUP |
* @return RES_NO_SUCH_GROUP |
| 1823 |
* @return RES_DB_QUERY_ERROR |
* @return RES_DB_QUERY_ERROR |
| 1824 |
* @return RES_OK; |
* @return RES_OK |
| 1825 |
|
* @return RES_ERROR |
| 1826 |
* |
* |
| 1827 |
*/ |
*/ |
| 1828 |
result_t deleteMember( sessionid_t sid, groupid_t gid, userid_t uid ) |
result_t deleteMember( sessionid_t sid, groupid_t gid, userid_t uid ) |
| 1829 |
{ |
{ |
| 1830 |
|
if( gid == DEFAULT_PLATFORM_GROUP_ID ) return RES_ERROR; |
| 1831 |
|
return deleteMemberNoLimit( sid, gid, uid ); |
| 1832 |
|
} |
| 1833 |
|
|
| 1834 |
|
/** |
| 1835 |
|
* |
| 1836 |
|
* グループ所属ユーザ削除. |
| 1837 |
|
* グループに所属するユーザを,グループから削除する. |
| 1838 |
|
* デフォルトグループからも削除できる点が,deleteMemberと異なる |
| 1839 |
|
* |
| 1840 |
|
* @param sid セッションID |
| 1841 |
|
* @param gid どのグループから削除するかを指定するグループID |
| 1842 |
|
* @param uid 削除対象のユーザのID |
| 1843 |
|
* @return RES_DB_NOT_INITIALIZED |
| 1844 |
|
* @return RES_NO_SUCH_SESSION |
| 1845 |
|
* @return RES_NO_SUCH_USER |
| 1846 |
|
* @return RES_NO_SUCH_GROUP |
| 1847 |
|
* @return RES_DB_QUERY_ERROR |
| 1848 |
|
* @return RES_OK |
| 1849 |
|
* @return RES_ERROR |
| 1850 |
|
* |
| 1851 |
|
*/ |
| 1852 |
|
static result_t deleteMemberNoLimit( sessionid_t sid, groupid_t gid, userid_t uid ) |
| 1853 |
|
{ |
| 1854 |
if( hdbc == NULL ) return RES_DB_NOT_INITIALIZED; |
if( hdbc == NULL ) return RES_DB_NOT_INITIALIZED; |
| 1855 |
if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION; |
if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION; |
| 1856 |
if( !uidExists( uid ) ) return RES_NO_SUCH_USER; //uidの存在をチェック |
if( !uidExists( uid ) ) return RES_NO_SUCH_USER; //uidの存在をチェック |
| 2339 |
}else{ |
}else{ |
| 2340 |
string s( "SQLAllocHandle(SQL_HANDLE_STMT,...) in getGroups" ); |
string s( "SQLAllocHandle(SQL_HANDLE_STMT,...) in getGroups" ); |
| 2341 |
s += odbcDiagString( SQL_HANDLE_DBC, hdbc, sqlcode ); |
s += odbcDiagString( SQL_HANDLE_DBC, hdbc, sqlcode ); |
|
s += string( ", sql=" ) + string( sql ); |
|
| 2342 |
setLastErrorString( s.c_str( ) ); |
setLastErrorString( s.c_str( ) ); |
| 2343 |
#ifdef USE_SYSLOG |
#ifdef USE_SYSLOG |
| 2344 |
syslog( LOG_DEBUG, "getGroups %s", getLastErrorString( ) ); |
syslog( LOG_DEBUG, "getGroups %s", getLastErrorString( ) ); |
| 2626 |
* |
* |
| 2627 |
* @param sid セッションID |
* @param sid セッションID |
| 2628 |
* @param ppsession sessionid_t*を受け取るためのポインタ。 |
* @param ppsession sessionid_t*を受け取るためのポインタ。 |
| 2629 |
* @return RES_OK 成功。freeResult(*ppsession)が必要。<br> |
* @return RES_OK 成功。freeSession(*ppsession)が必要。<br> |
| 2630 |
* @return RES_NO_SUCH_SESSION<br> |
* @return RES_NO_SUCH_SESSION<br> |
| 2631 |
* @return RES_DB_QUERY_ERROR<br> |
* @return RES_DB_QUERY_ERROR<br> |
| 2632 |
* @return RES_DB_NOT_INITIALIZED |
* @return RES_DB_NOT_INITIALIZED |
| 2635 |
result_t getSession( sessionid_t sid, const session_t** ppsession ) |
result_t getSession( sessionid_t sid, const session_t** ppsession ) |
| 2636 |
{ |
{ |
| 2637 |
if( hdbc == NULL ) return RES_DB_NOT_INITIALIZED; |
if( hdbc == NULL ) return RES_DB_NOT_INITIALIZED; |
| 2638 |
|
if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION; |
| 2639 |
|
|
| 2640 |
result_t ret = RES_ERROR; |
result_t ret = RES_ERROR; |
| 2641 |
string sql; |
string sql; |
| 2642 |
|
SQLHANDLE hstmt = NULL; |
| 2643 |
|
SQLRETURN sqlcode; |
| 2644 |
|
|
| 2645 |
|
sql = "SELECT sid, uid, unix_timestamp(timestamp) from " + dbprefix + |
| 2646 |
|
"_vpaccount_session where sid=" + unsignedIntToString((unsigned int)sid); |
| 2647 |
|
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) { |
| 2648 |
|
if( ( sqlcode = SQLExecDirect( hstmt, (SQLCHAR*)sql.c_str(), sql.length() ) ) == SQL_SUCCESS ){ |
| 2649 |
|
userid_t uid = 0; |
| 2650 |
|
SQLINTEGER cbUid = 0; |
| 2651 |
|
unsigned long date = 0; |
| 2652 |
|
SQLINTEGER cbDate = 0; |
| 2653 |
|
SQLBindCol( hstmt, 2, SQL_C_ULONG, &uid, 0, &cbUid ); |
| 2654 |
|
SQLBindCol( hstmt, 3, SQL_C_ULONG, &date, 0, &cbDate ); |
| 2655 |
|
if( ( sqlcode = SQLFetch( hstmt ) ) == SQL_SUCCESS ){ |
| 2656 |
|
session_t *p = new session[ 1 ]; |
| 2657 |
|
p->setSessionID( sid ); |
| 2658 |
|
p->setUID( uid ); |
| 2659 |
|
p->setDate( date ); |
| 2660 |
|
*ppsession = p; |
| 2661 |
|
ret = RES_OK; |
| 2662 |
|
}else{ |
| 2663 |
|
string s( "SQLFetch in getSession " ); |
| 2664 |
|
s += odbcDiagString( SQL_HANDLE_STMT, hstmt, sqlcode ); |
| 2665 |
|
setLastErrorString( s.c_str( ) ); |
| 2666 |
|
ret = RES_ERROR; |
| 2667 |
|
} |
| 2668 |
|
}else { |
| 2669 |
|
string s( "SQLExecDirect in getSession " ); |
| 2670 |
|
s += odbcDiagString( SQL_HANDLE_STMT, hstmt, sqlcode ); |
| 2671 |
|
s += ", sql="; |
| 2672 |
|
s += string( sql ); |
| 2673 |
|
setLastErrorString( s.c_str( ) ); |
| 2674 |
|
ret = RES_DB_QUERY_ERROR; |
| 2675 |
|
} |
| 2676 |
|
}else{ |
| 2677 |
|
string s( "SQLAllocHandle(SQL_HANDLE_STMT,...) in getSession" ); |
| 2678 |
|
s += odbcDiagString( SQL_HANDLE_DBC, hdbc, sqlcode ); |
| 2679 |
|
setLastErrorString( s.c_str( ) ); |
| 2680 |
|
ret = RES_DB_QUERY_ERROR; |
| 2681 |
|
} |
| 2682 |
|
return ret; |
| 2683 |
|
|
| 2684 |
/* |
/* |
| 2685 |
sql = "SELECT sid, uid, unix_timestamp(timestamp) from " + dbprefix + |
sql = "SELECT sid, uid, unix_timestamp(timestamp) from " + dbprefix + |
| 2705 |
}else{ |
}else{ |
| 2706 |
ret = RES_DB_QUERY_ERROR; |
ret = RES_DB_QUERY_ERROR; |
| 2707 |
} |
} |
|
*/ |
|
| 2708 |
return ret; |
return ret; |
| 2709 |
|
*/ |
| 2710 |
} |
} |
| 2711 |
|
|
| 2712 |
/** |
/** |
| 2724 |
|
|
| 2725 |
bool ret = false; |
bool ret = false; |
| 2726 |
string sql; |
string sql; |
|
char buf[ 12 ]; |
|
|
snprintf( buf, 12, "%d", sid ); |
|
| 2727 |
SQLRETURN sqlcode; |
SQLRETURN sqlcode; |
| 2728 |
SQLHANDLE hstmt = NULL; |
SQLHANDLE hstmt = NULL; |
| 2729 |
|
|
| 2730 |
#ifdef USE_SYSLOG |
#ifdef USE_SYSLOG |
| 2731 |
openlog( "commonal", LOG_ODELAY, LOG_USER ); |
openlog( "commonal", LOG_ODELAY, LOG_USER ); |
| 2732 |
#endif |
#endif |
| 2733 |
sql = "SELECT * FROM " + dbprefix + "_vpaccount_session WHERE sid=" + string( buf ); |
sql = "SELECT * FROM " + dbprefix + "_vpaccount_session WHERE sid=" + unsignedIntToString( sid ); |
| 2734 |
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) { |
if( ( sqlcode = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &hstmt ) ) == SQL_SUCCESS ) { |
| 2735 |
if( ( sqlcode = SQLExecDirect( hstmt, (SQLCHAR*)sql.c_str(), sql.length() ) ) == SQL_SUCCESS ){ |
if( ( sqlcode = SQLExecDirect( hstmt, (SQLCHAR*)sql.c_str(), sql.length() ) ) == SQL_SUCCESS ){ |
| 2736 |
if( ( sqlcode = SQLFetch( hstmt ) ) == SQL_SUCCESS ){ |
if( ( sqlcode = SQLFetch( hstmt ) ) == SQL_SUCCESS ){ |
| 2762 |
}else{ |
}else{ |
| 2763 |
string s( "SQLAllocHandle(SQL_HANDLE_STMT,...) in isValidSessionID " ); |
string s( "SQLAllocHandle(SQL_HANDLE_STMT,...) in isValidSessionID " ); |
| 2764 |
s += odbcDiagString( SQL_HANDLE_DBC, hdbc, sqlcode ); |
s += odbcDiagString( SQL_HANDLE_DBC, hdbc, sqlcode ); |
|
s += string( ", sql=" ) + string( sql ); |
|
| 2765 |
setLastErrorString( s.c_str( ) ); |
setLastErrorString( s.c_str( ) ); |
| 2766 |
#ifdef USE_SYSLOG |
#ifdef USE_SYSLOG |
| 2767 |
syslog( LOG_DEBUG, "isValidSessionID %s", getLastErrorString( ) ); |
syslog( LOG_DEBUG, "isValidSessionID %s", getLastErrorString( ) ); |