Develop and Download Open Source Software

Browse CVS Repository

Diff of /xoonips/AL/commonal.cc

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph | View Patch Patch

revision 1.34 by aga, Tue Dec 28 04:38:14 2004 UTC revision 1.35 by youi, Thu Jan 6 07:20:17 2005 UTC
# Line 2  Line 2 
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   *   *
# Line 137  Line 145 
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
# Line 151  typedef int my_socket; Line 156  typedef int my_socket;
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>
# Line 173  static SQLHANDLE hdbc = NULL; Line 176  static SQLHANDLE hdbc = NULL;
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  {  {
# Line 388  static bool uidExists( userid_t uid ) Line 392  static bool uidExists( userid_t uid )
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      }      }
# Line 656  int getAccountCount( sessionid_t sid ) Line 660  int getAccountCount( sessionid_t sid )
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
# Line 670  result_t deleteAccount( sessionid_t sid, Line 676  result_t deleteAccount( sessionid_t sid,
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 ) {
# Line 702  result_t deleteAccount( sessionid_t sid, Line 726  result_t deleteAccount( sessionid_t sid,
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 ) {
# Line 892  result_t getAccounts( sessionid_t sid, c Line 917  result_t getAccounts( sessionid_t sid, c
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( ) );
# Line 908  result_t getAccounts( sessionid_t sid, c Line 932  result_t getAccounts( sessionid_t sid, c
932  /**  /**
933   *   *
934   * アカウント登録.   * アカウント登録.
935     *
936   * ユーザ情報をデータベースに登録します.   * ユーザ情報をデータベースに登録します.
937   * 登録したユーザ情報に対応するユーザIDをuidに格納します.   * 登録したユーザ情報に対応するユーザIDをuidに格納します.
938   *   *
939   * @param sid セッション   * @param sid セッション
940   * @param account 登録するアカウント情報   * @param account 登録するアカウント情報
# Line 931  result_t insertAccount( sessionid_t sid, Line 956  result_t insertAccount( sessionid_t sid,
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;
# Line 1059  result_t insertAccount( sessionid_t sid, Line 1090  result_t insertAccount( sessionid_t sid,
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, &notice_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, &notice_mail_since, 0, &cbNotice_mail_since);                  SQLBindParameter(hstmt, 11, SQL_PARAM_INPUT, SQL_C_SSHORT, SQL_INTEGER, 0, 0, &notice_mail, 0, &cbNotice_mail);
1124                    SQLBindParameter(hstmt, 12, SQL_PARAM_INPUT, SQL_C_SSHORT, SQL_INTEGER, 0, 0, &notice_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    
# Line 1461  result_t dumpUids( sessionid_t sid, crit Line 1507  result_t dumpUids( sessionid_t sid, crit
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( ) );
# Line 1584  result_t getGroupsByUid( sessionid_t sid Line 1629  result_t getGroupsByUid( sessionid_t sid
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{
# Line 1767  result_t dumpGroupAdmins( sessionid_t si Line 1811  result_t dumpGroupAdmins( sessionid_t si
1811   *   *
1812   * グループ所属ユーザ削除.   * グループ所属ユーザ削除.
1813   * グループに所属するユーザを,グループから削除する.   * グループに所属するユーザを,グループから削除する.
1814     * デフォルトグループからは削除できない
1815   *   *
1816   * @param sid セッションID   * @param sid セッションID
1817   * @param gid どのグループから削除するかを指定するグループID   * @param gid どのグループから削除するかを指定するグループID
# Line 1776  result_t dumpGroupAdmins( sessionid_t si Line 1821  result_t dumpGroupAdmins( sessionid_t si
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の存在をチェック
# Line 2269  result_t getGroups( sessionid_t sid, gro Line 2339  result_t getGroups( sessionid_t sid, gro
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( ) );
# Line 2557  result_t createSession( const char* sess Line 2626  result_t createSession( const char* sess
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
# Line 2566  result_t createSession( const char* sess Line 2635  result_t createSession( const char* sess
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 +
# Line 2594  result_t getSession( sessionid_t sid, co Line 2705  result_t getSession( sessionid_t sid, co
2705      }else{      }else{
2706          ret = RES_DB_QUERY_ERROR;          ret = RES_DB_QUERY_ERROR;
2707      }      }
 */  
2708      return ret;      return ret;
2709    */
2710  }  }
2711    
2712  /**  /**
# Line 2613  bool isValidSessionID( sessionid_t sid ) Line 2724  bool isValidSessionID( sessionid_t sid )
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 ){
# Line 2653  bool isValidSessionID( sessionid_t sid ) Line 2762  bool isValidSessionID( sessionid_t sid )
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( ) );

Legend:
Removed from v.1.34  
changed lines
  Added in v.1.35

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26