Develop and Download Open Source Software

Browse CVS Repository

Contents of /xoonips/AL/commonal.cc

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


Revision 1.11 - (show annotations) (download) (as text)
Fri Nov 26 08:16:26 2004 UTC (19 years, 4 months ago) by aga
Branch: MAIN
Changes since 1.10: +9 -6 lines
File MIME type: text/x-c++src
。ヲgetSession, loginUser, createSession, freeResult(const session_t*) ス、タオ.

1 /*
2 *
3 * $Revision: 1.10 $
4 * $Log: commonal.cc,v $
5 * Revision 1.10 2004/11/26 07:57:42 youi
6 * updateAccount, deleteAccount繧貞ョ夂セゥ.
7 * mysql_query螟ア謨玲凾縺ッstderr縺ク繧ィ繝ゥ繝シ繧ウ繝シ繝峨→繧ィ繝ゥ繝シ繝。繝?そ繝シ繧ク繧貞?蜉?
8 *
9 * Revision 1.9 2004/11/26 07:38:02 aga
10 * 繝サFAILUE -> FAILURE.
11 *
12 * Revision 1.8 2004/11/26 06:36:55 aga
13 * 繝サcreateSession, getSession 繧剃ス懈?.
14 *
15 * Revision 1.7 2004/11/26 04:51:47 youi
16 * dbprefix繧貞ョ夂セゥ縺励◆.
17 * insertAccount繧貞ョ夂セゥ縺励◆.
18 * isValidSessionID繧貞ョ夂セゥ縺励◆.
19 *
20 * Revision 1.6 2004/11/26 04:35:55 aga
21 * 繝サloginUser(), logoutUser()繧剃ス懈?.
22 *
23 * Revision 1.5 2004/11/26 01:08:25 aga
24 * 繝サaddSlashes()菴懈?.
25 *
26 * Revision 1.4 2004/11/25 12:14:29 youi
27 * getUid縺ョ蜃ヲ逅?r螳夂セゥ縺励◆.
28 *
29 * Revision 1.3 2004/11/25 11:13:59 youi
30 * getLastErrorString/setLastErrorString繧貞ョ夂セゥ.
31 *
32 * Revision 1.2 2004/11/25 08:55:19 youi
33 * 蠑墓焚縺ョ蝙九r菫ョ豁」.
34 * freeResult繧定ソス蜉?.
35 *
36 * Revision 1.1 2004/11/25 05:14:58 youi
37 * initial version
38 *
39 *
40 */
41 #include <stdio.h>
42 #include <stdlib.h>
43 #include <string.h>
44 #include <mysql.h>
45 #include <errmsg.h>
46 #include <string>
47 using namespace std;
48
49 #include "common.h"
50 #include "account.h"
51 #include "group.h"
52 #include "session.h"
53 #include "criteria.h"
54 #include "commonal.h"
55
56
57 static MYSQL* mysql = NULL; //!< MySQL縺ョ繝上Φ繝峨Ν
58 static string dbprefix; //!< XOOPS繝??繧ソ繝吶?繧ケ繝??繝悶Ν縺ョPREFIX
59
60 /**
61 *
62 * php縺ョaddslashes縺ィ蜷後§縲?/span>
63 *
64 * @param addslashes縺吶∋縺肴枚蟄怜?縲?ULL謖?ョ壻ク榊庄縲?/span>
65 * @return addslashes縺輔l縺滓枚蟄怜?
66 */
67 string addSlashes( const char *str )
68 {
69 int len = strlen(str);
70 char *buf = new char[len*2+1];
71 int bufLen = mysql_real_escape_string( mysql, buf, str, len );
72 string s( buf, bufLen );
73 return s;
74 }
75
76
77 /**
78 *
79 * 繝??繧ソ繝吶?繧ケ縺ョ蛻晄悄蛹?/span>
80 *
81 * @param host 繝??繧ソ繝吶?繧ケ縺ョ繝帙せ繝亥錐
82 * @param user 繝??繧ソ繝吶?繧ケ縺ォ繧「繧ッ繧サ繧ケ縺吶k繝ヲ繝シ繧カ蜷?/span>
83 * @param password 荳願ィ倥Θ繝シ繧カ縺ョ繝代せ繝ッ繝シ繝?/span>
84 * @param dbname 繝??繧ソ繝吶?繧ケ縺ョ蜷榊燕
85 * @param prefix XOOPS繝??繧ソ繝吶?繧ケ繝??繝悶Ν縺ョPREFIX
86 * @return result_t
87 * @refer result_t
88 */
89 result_t initializeDB( const char* host, const char* user, const char* password, const char* dbname, const char* prefix )
90 {
91 // 譌「縺ォ謗・邯壻クュ縺ェ繧峨?∽ク?譌ヲ蛻?妙
92 if ( mysql != NULL )
93 mysql_close( mysql );
94
95 dbprefix = prefix;
96
97 // 蛻晄悄蛹悶→謗・邯?/span>
98 mysql = mysql_init(NULL);
99 if ( mysql == NULL ){
100 return RES_DB_INITIALIZE_ERROR;
101 }
102 char *unix_socket = NULL; // ?
103 uint flag = 0; // ?
104 if ( NULL == mysql_real_connect( mysql, host, user, password, dbname, 3306, unix_socket, flag ) ){
105 return RES_DB_CONNECT_ERROR;
106 }
107
108 return RES_OK;
109 }
110
111
112 /**
113 *
114 * Platform繝ヲ繝シ繧カ謇ソ隱咲憾諷句叙蠕?/span>
115 *
116 * @param
117 * @return
118 *
119 */
120 bool isActivated( sessionid_t sid, userid_t uid )
121 {
122 return false;
123 }
124
125 /**
126 *
127 * Platform繝ヲ繝シ繧カ謇ソ隱咲憾諷句、画峩
128 *
129 * @param
130 * @return
131 *
132 */
133 result_t activate( sessionid_t sid, userid_t uid, bool activate )
134 {
135 return RES_ERROR;
136 }
137
138 /**
139 *
140 * 繧「繧ォ繧ヲ繝ウ繝域焚
141 *
142 * @param
143 * @return
144 *
145 */
146 int getAccountCount( sessionid_t sid )
147 {
148 return 0;
149 }
150
151 /**
152 *
153 * 繧「繧ォ繧ヲ繝ウ繝亥炎髯、
154 *
155 * @param
156 * @return RES_OK | RES_NO_SUCH_SESSION | RES_DB_QUERY_ERROR
157 *
158 */
159 result_t deleteAccount( sessionid_t sid, userid_t uid )
160 {
161 if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION;
162
163 string sql;
164 sql = "DELETE FROM " + dbprefix + "_users ";
165 sql += "WHERE uid = " + string( unsignedIntToString( uid ) );
166 if( mysql_query( mysql, sql.c_str( ) ) ){
167 fprintf( stderr, "%d %s\n", mysql_errno(mysql), mysql_error(mysql) );
168 return RES_DB_QUERY_ERROR;
169 }
170
171 sql = "DELETE FROM " + dbprefix + "_vpaccount_users ";
172 sql += "WHERE uid = " + string( unsignedIntToString( uid ) );
173 if( mysql_query( mysql, sql.c_str( ) ) ){
174 fprintf( stderr, "%d %s\n", mysql_errno(mysql), mysql_error(mysql) );
175 return RES_DB_QUERY_ERROR;
176 }
177
178 return RES_OK;
179 }
180
181 /**
182 *
183 * 繧「繧ォ繧ヲ繝ウ繝域ュ蝣ア蜿門セ?/span>
184 *
185 * @param
186 * @return
187 *
188 */
189 result_t getAccount( sessionid_t sid, userid_t uid, const account_t** )
190 {
191 return RES_ERROR;
192 }
193
194 /**
195 *
196 * 繧「繧ォ繧ヲ繝ウ繝域ュ蝣ア蜿門セ?/span>
197 *
198 * @param
199 * @return
200 *
201 */
202 result_t getAccounts( sessionid_t sid, const userid_t* uids, int uidsLen, const criteria_t* cri, const account_t** accounts, int* accountsLen )
203 {
204 return RES_ERROR;
205 }
206
207 /**
208 *
209 * 繧「繧ォ繧ヲ繝ウ繝育匳骭イ
210 *
211 * @param sid 繧サ繝?す繝ァ繝ウ
212 * @param account 逋サ骭イ縺吶k繧「繧ォ繧ヲ繝ウ繝域ュ蝣ア
213 * @return RES_OK | RES_NO_SUCH_SESSION | RES_DB_QUERY_ERROR | RES_ERROR
214 *
215 */
216 result_t insertAccount( sessionid_t sid, const account_t* account )
217 {
218 if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION;
219
220 string sql;
221 string tmp;
222 char buf[ 12 ];
223
224 //xoops縺ョ繝ヲ繝シ繧カ繝??繝悶Ν縺ォ譖ク縺崎セシ繧?
225 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 (";
226 sql += "'" + string( addSlashes( account -> getUname( ) ) ) + "', ";
227 sql += "'" + string( addSlashes( account -> getName( ) ) ) + "', ";
228 sql += "'" + string( addSlashes( account -> getEmail( ) ) ) + "', ";
229 sql += "'" + string( addSlashes( account -> getURL( ) ) ) + "', ";
230 sql += "'" + string( addSlashes( account -> getUserAvatar( ) ) ) + "', ";
231 snprintf( buf, 12, "%d", time( NULL ) );
232 sql += string( buf ) + ", ";
233 sql += "'" + string( addSlashes( account -> getUserIcq( ) ) ) + "', ";
234 sql += "'" + string( addSlashes( account -> getUserFrom( ) ) ) + "', ";
235 sql += "'" + string( addSlashes( account -> getUserSig( ) ) ) + "', ";
236 snprintf( buf, 12, "%d", account -> getUserViewemail( ) );
237 sql += string( buf ) + ", ";
238 sql += "'" + string( addSlashes( account -> getActkey( ) ) ) + "', ";
239 sql += "'" + string( addSlashes( account -> getUserAim( ) ) ) + "', ";
240 sql += "'" + string( addSlashes( account -> getUserYim( ) ) ) + "', ";
241 sql += "'" + string( addSlashes( account -> getUserMsnm( ) ) ) + "', ";
242 sql += "'" + string( addSlashes( account -> getPass( ) ) ) + "', ";
243 snprintf( buf, 12, "%d", account -> getPosts( ) );
244 sql += string( buf ) + ", ";
245 snprintf( buf, 12, "%d", account -> getAttachsig( ) );
246 sql += string( buf ) + ", ";
247 snprintf( buf, 12, "%d", account -> getRank( ) );
248 sql += string( buf ) + ", ";
249 snprintf( buf, 12, "%d", account -> getLevel( ) );
250 sql += string( buf ) + ", ";
251 sql += "'" + string( addSlashes( account -> getTheme( ) ) ) + "', ";
252 snprintf( buf, 12, "%lf", account -> getTimezoneOffset( ) );
253 sql += string( buf ) + ", ";
254 sql += "0, "; //last login
255 sql += "'" + string( addSlashes( account -> getUmode( ) ) ) + "', ";
256 snprintf( buf, 12, "%d", account -> getUorder( ) );
257 sql += string( buf ) + ", ";
258 snprintf( buf, 12, "%d", account -> getNotifyMethod( ) );
259 sql += string( buf ) + ", ";
260 snprintf( buf, 12, "%d", account -> getNotifyMode( ) );
261 sql += string( buf ) + ", ";
262 sql += "'" + string( addSlashes( account -> getUserOcc( ) ) ) + "', ";
263 sql += "'" + string( addSlashes( account -> getBio( ) ) ) + "', ";
264 sql += "'" + string( addSlashes( account -> getUserIntrest( ) ) ) + "', ";
265 snprintf( buf, 12, "%d", account -> getUserMailok( ) );
266 sql += string( buf ) + ")";
267 if( mysql_query( mysql, sql.c_str( ) ) ){
268 fprintf( stderr, "%s\n", sql.c_str( ) );
269 fprintf( stderr, "%d %s\n", mysql_errno(mysql), mysql_error(mysql) );
270 return RES_DB_QUERY_ERROR;
271 }
272
273 //繝ヲ繝シ繧カID繧貞叙蠕励☆繧?/span>
274 userid_t uid;
275 if( getUid( account -> getUname( ), &uid ) != RES_OK ){
276 return RES_ERROR;
277 }
278
279 //vpaccount縺ョ繝ヲ繝シ繧カ繝??繝悶Ν縺ォ谿九j縺ョ諠??ア繧呈嶌縺崎セシ繧?
280 sql = "INSERT INTO " + dbprefix + "_vpaccount_users (uid, activate, address, institute, tel, organization, country, zipcode, fax, base_url, notice_mail, notice_mail_since) VALUES (";
281 snprintf( buf, 12, "%d", uid );
282 sql += string( buf ) + ", ";
283 if( account -> getActivate() ){
284 sql += "1, ";
285 }else{
286 sql += "0, ";
287 }
288 sql += "'" + string( addSlashes( account -> getAddress() ) ) + "', ";
289 sql += "'" + string( addSlashes( account -> getInstitute() ) ) + "', ";
290 sql += "'" + string( addSlashes( account -> getTel() ) ) + "', ";
291 sql += "'" + string( addSlashes( account -> getOrganization() ) ) + "', ";
292 sql += "'" + string( addSlashes( account -> getCountry() ) ) + "', ";
293 sql += "'" + string( addSlashes( account -> getZipcode() ) ) + "', ";
294 sql += "'" + string( addSlashes( account -> getFax() ) ) + "', ";
295 sql += "'" + string( addSlashes( account -> getBaseURL() ) ) + "', ";
296 snprintf( buf, 12, "%d", account -> getNoticeMail( ) );
297 sql += string( buf ) + ", ";
298 snprintf( buf, 12, "%d", account -> getNoticeMailSince( ) );
299 sql += string( buf ) + ")";
300 if( mysql_query( mysql, sql.c_str( ) ) ){
301 fprintf( stderr, "%s\n", sql.c_str( ) );
302 fprintf( stderr, "%d %s\n", mysql_errno(mysql), mysql_error(mysql) );
303 //xoops_users縺クinsert縺励◆繝ャ繧ウ繝シ繝峨r蜑企勁縺吶k
304 sql = "DELETE FROM " + dbprefix + "_users where uid=";
305 snprintf( buf, 12, "%d", uid );
306 sql += string( buf );
307 mysql_query( mysql, sql.c_str( ) );
308 return RES_DB_QUERY_ERROR;
309 }
310
311 return RES_OK;
312 }
313
314 /**
315 *
316 * 繧「繧ォ繧ヲ繝ウ繝亥、画峩
317 *
318 * @param
319 * @return RES_OK | RES_NO_SUCH_SESSION | RES_DB_QUERY_ERROR
320 *
321 */
322 result_t updateAccount( sessionid_t sid, const account_t* account )
323 {
324 if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION;
325
326 string sql;
327 string tmp;
328 char buf[ 12 ];
329
330 //xoops縺ョ繝ヲ繝シ繧カ繝??繝悶Ν縺ォ譖ク縺崎セシ繧?
331 sql = "UPDATE " + dbprefix + "_users SET ";
332 sql += "uname='" + string( addSlashes( account -> getUname( ) ) ) + "', ";
333 sql += "name='" + string( addSlashes( account -> getName( ) ) ) + "', ";
334 sql += "email='" + string( addSlashes( account -> getEmail( ) ) ) + "', ";
335 sql += "url='" + string( addSlashes( account -> getURL( ) ) ) + "', ";
336 sql += "user_avatar='" + string( addSlashes( account -> getUserAvatar( ) ) ) + "', ";
337 sql += "user_regdate=" + string( intToString( account -> getUserRegdate( ) ) ) + ", ";
338 sql += "user_icq='" + string( addSlashes( account -> getUserIcq( ) ) ) + "', ";
339 sql += "user_from='" + string( addSlashes( account -> getUserFrom( ) ) ) + "', ";
340 sql += "user_sig='" + string( addSlashes( account -> getUserSig( ) ) ) + "', ";
341 sql += "user_viewemail=" + string( intToString( account -> getUserViewemail( ) ) ) + ", ";
342 sql += "actkey='" + string( addSlashes( account -> getActkey( ) ) ) + "', ";
343 sql += "user_aim='" + string( addSlashes( account -> getUserAim( ) ) ) + "', ";
344 sql += "user_yim='" + string( addSlashes( account -> getUserYim( ) ) ) + "', ";
345 sql += "user_msnm='" + string( addSlashes( account -> getUserMsnm( ) ) ) + "', ";
346 sql += "pass='" + string( account -> getPass( ) ) + "', ";
347 sql += "posts=" + string( intToString( account -> getPosts( ) ) ) + ", ";
348 sql += "attachsig=" + string( intToString( account -> getAttachsig( ) ) ) + ", ";
349 sql += "rank=" + string( intToString( account -> getRank( ) ) ) + ", ";
350 sql += "level=" + string( intToString( account -> getLevel( ) ) ) + ", ";
351 sql += "theme='" + string( addSlashes( account -> getTheme( ) ) ) + "', ";
352 snprintf( buf, 12, "%.2f", account -> getTimezoneOffset( ) );
353 sql += "timezone_offset=" + string( buf ) + ", ";
354 sql += "last_login=" + string( unsignedIntToString( account -> getLastLogin( ) ) ) + ", ";
355 sql += "umode='" + string( account -> getUmode( ) ) + "', ";
356 sql += "uorder=" + string( intToString( account -> getUorder( ) ) ) + ", ";
357 sql += "notify_method=" + string( intToString( account -> getNotifyMethod( ) ) ) + ", ";
358 sql += "notify_mode=" + string( intToString( account -> getNotifyMode( ) ) ) + ", ";
359 sql += "user_occ='" + string( addSlashes( account -> getUserOcc( ) ) ) + "', ";
360 sql += "bio='" + string( addSlashes( account -> getBio( ) ) ) + "', ";
361 sql += "user_intrest='" + string( addSlashes( account -> getUserIntrest( ) ) ) + "', ";
362 sql += "user_mailok=" + string( intToString( account -> getUserMailok( ) ) );
363 sql += " WHERE uid = " + string( intToString( account -> getUID( ) ) );
364
365 if( mysql_query( mysql, sql.c_str( ) ) ){
366 fprintf( stderr, "%s\n", sql.c_str( ) );
367 fprintf( stderr, "%d %s\n", mysql_errno(mysql), mysql_error(mysql) );
368 return RES_DB_QUERY_ERROR;
369 }
370
371 //vpaccount縺ョ繝ヲ繝シ繧カ繝??繝悶Ν縺ォ谿九j縺ョ諠??ア繧剃ク頑嶌縺阪☆繧?/span>
372 sql = "UPDATE " + dbprefix + "_vpaccount_users SET ";
373 sql += "activate=";
374 if( account -> getActivate() ){
375 sql += "1, ";
376 }else{
377 sql += "0, ";
378 }
379 sql += "address='" + string( addSlashes( account -> getAddress() ) ) + "', ";
380 sql += "institute='" + string( addSlashes( account -> getInstitute() ) ) + "', ";
381 sql += "tel='" + string( addSlashes( account -> getTel() ) ) + "', ";
382 sql += "organization='" + string( addSlashes( account -> getOrganization() ) ) + "', ";
383 sql += "country='" + string( addSlashes( account -> getCountry() ) ) + "', ";
384 sql += "zipcode='" + string( addSlashes( account -> getZipcode() ) ) + "', ";
385 sql += "fax='" + string( addSlashes( account -> getFax() ) ) + "', ";
386 sql += "base_url='" + string( addSlashes( account -> getBaseURL() ) ) + "', ";
387 sql += "notice_mail=" + string( intToString( account -> getNoticeMail( ) ) ) + ", ";
388 sql += "notice_mail_since=" + string( intToString( account -> getNoticeMailSince( ) ) );
389 sql += " WHERE uid = " + string( intToString( account -> getUID( ) ) );
390
391 if( mysql_query( mysql, sql.c_str( ) ) ){
392 fprintf( stderr, "%s\n", sql.c_str( ) );
393 fprintf( stderr, "%d %s\n", mysql_errno(mysql), mysql_error(mysql) );
394 return RES_DB_QUERY_ERROR;
395 }
396
397 return RES_OK;
398 }
399
400 /**
401 *
402 * 繝ヲ繝シ繧カID荳?隕ァ
403 *
404 * @param
405 * @return
406 *
407 */
408 result_t dumpUids( sessionid_t sid, const criteria_t* cri, userid_t** uids, int* uidsLen )
409 {
410 return RES_ERROR;
411 }
412
413 /**
414 *
415 * 繧ー繝ォ繝シ繝玲焚
416 *
417 * @param
418 * @return
419 *
420 */
421 int getGroupCount( sessionid_t sid )
422 {
423 return 0;
424 }
425
426 /**
427 *
428 * 謇?螻槭げ繝ォ繝シ繝嶺ク?隕ァ蜿門セ?/span>
429 *
430 * @param
431 * @return
432 *
433 */
434 result_t getGroupsByUid( sessionid_t sid, userid_t uid, const criteria_t* cri, groupid_t** gids, int* gidsLen )
435 {
436 return RES_ERROR;
437 }
438
439 /**
440 *
441 * 繧ー繝ォ繝シ繝礼ョ。逅?ィゥ髯仙撫蜷医○
442 *
443 * @param
444 * @return
445 *
446 */
447 bool isGroupAdmin( sessionid_t sid, groupid_t gid, userid_t uid )
448 {
449 return RES_ERROR;
450 }
451
452 /**
453 *
454 * 繧ー繝ォ繝シ繝悠D荳?隕ァ
455 *
456 * @param
457 * @return
458 *
459 */
460 result_t dumpGids( sessionid_t sid, const criteria_t* cri, groupid_t** gids, int* gidsLen )
461 {
462 return RES_ERROR;
463 }
464
465 /**
466 *
467 * 繧ー繝ォ繝シ繝礼ョ。逅???D蜿門セ?/span>
468 *
469 * @param
470 * @return
471 *
472 */
473 result_t dumpGroupAdmins( sessionid_t sid, groupid_t gid, const criteria_t* cri, userid_t** uids, int* uidsLen )
474 {
475 return RES_ERROR;
476 }
477
478 /**
479 *
480 * 繧ー繝ォ繝シ繝玲園螻槭Θ繝シ繧カ蜑企勁
481 *
482 * @param
483 * @return
484 *
485 */
486 result_t deleteMember( sessionid_t sid, groupid_t gid, userid_t uid )
487 {
488 return RES_ERROR;
489 }
490
491 /**
492 *
493 * 繧ー繝ォ繝シ繝玲園螻槭Θ繝シ繧カ霑ス蜉?
494 *
495 * @param
496 * @return
497 *
498 */
499 result_t insertMember( sessionid_t sid, groupid_t gid, userid_t uid )
500 {
501 return RES_ERROR;
502 }
503
504 /**
505 *
506 * 繧ー繝ォ繝シ繝玲園螻槭Θ繝シ繧カ蜿門セ?/span>
507 *
508 * @param
509 * @return
510 *
511 */
512 result_t getMembers( sessionid_t sid, groupid_t gid, const criteria_t* cri, userid_t** uids, int* uidsLen )
513 {
514 return RES_ERROR;
515 }
516
517 /**
518 *
519 * 繧ー繝ォ繝シ繝励?蜑企勁
520 *
521 * @param
522 * @return
523 *
524 */
525 result_t deleteGroup( sessionid_t sid, groupid_t gid )
526 {
527 return RES_ERROR;
528 }
529
530 /**
531 *
532 * 繧ー繝ォ繝シ繝励?逋サ骭イ
533 *
534 * @param
535 * @return
536 *
537 */
538 result_t insertGroup( sessionid_t sid, const group_t* group )
539 {
540 return RES_ERROR;
541 }
542
543 /**
544 *
545 * 繧ー繝ォ繝シ繝励?螟画峩
546 *
547 * @param
548 * @return
549 *
550 */
551 result_t updateGroup( sessionid_t sid, const group_t* group )
552 {
553 return RES_ERROR;
554 }
555
556 /**
557 *
558 * 繧ー繝ォ繝シ繝玲ュ蝣ア蜿門セ?/span>
559 *
560 * @param
561 * @return
562 *
563 */
564 result_t getGroup( sessionid_t sid, groupid_t gid, const group_t** group )
565 {
566 return RES_ERROR;
567 }
568
569 /**
570 *
571 * 繧ー繝ォ繝シ繝玲ュ蝣ア蜿門セ?/span>
572 *
573 * @param
574 * @return
575 *
576 */
577 result_t getGroups( sessionid_t sid, groupid_t* gids, int gidsLen, const criteria_t* cri, const group_t** groups, int* groupsLen )
578 {
579 return RES_ERROR;
580 }
581
582 /**
583 *
584 * 繝「繝?Ξ繝シ繧ソ讓ゥ髯仙撫蜷医○
585 *
586 * @param
587 * @return
588 *
589 */
590 bool isModerator( sessionid_t sid, userid_t uid )
591 {
592 return RES_ERROR;
593 }
594
595 /**
596 *
597 * 繝ヲ繝シ繧カID蜿門セ?/span>
598 *
599 * @param uname ID繧貞叙蠕励@縺溘>繝ヲ繝シ繧カ繝シ蜷?/span>
600 * @param uid ID繧剃サ」蜈・縺励◆縺?、画焚縺ョ繝昴う繝ウ繧ソ
601 * @return RES_ERROR | RES_OK
602 * @refer result_t
603 *
604 */
605 result_t getUid( const char* uname, userid_t* uid )
606 {
607 string sql;
608
609 if( uname == NULL ) return RES_ERROR;
610
611 string uname2 = addSlashes( uname );
612 sql = "SELECT uid FROM " + dbprefix + "_users WHERE uname='" + uname2 + "';";
613 if( mysql_query( mysql, sql.c_str( ) ) ){
614 fprintf( stderr, "%d %s\n", mysql_errno(mysql), mysql_error(mysql) );
615 return RES_DB_QUERY_ERROR;
616 }
617 MYSQL_RES* result = mysql_store_result( mysql ) ;
618 MYSQL_ROW row = mysql_fetch_row(result);
619 if( row ){
620 *uid = atoi( row[0] );
621 mysql_free_result( result );
622 return RES_OK;
623 }else{
624 mysql_free_result( result );
625 return RES_NO_SUCH_USER;
626 }
627 }
628
629 /**
630 *
631 * 繧サ繝?す繝ァ繝ウ繧剃ス懈?縺踊oops_vpaccount_session縺ォ譖ク縺崎セシ繧?縲 sessionid_t繧痴ession縺ォ霑斐☆縲?/span>
632 *
633 * @param uid xoops_users縺ョuid
634 * @param remoteHost remote ip (host order)
635 * @param session sessionid_t繧貞女縺大叙繧九◆繧√?繝昴う繝ウ繧ソ縲?/span>
636 * @return RES_OK 謌仙粥
637 * @return RES_DB_QUERY_ERROR DB蝠上>蜷医o縺帑クュ縺ョ繧ィ繝ゥ繝シ
638 */
639 static result_t addSession( userid_t uid, unsigned long remoteHost, sessionid_t* session )
640 {
641 result_t ret;
642 string sql = "INSERT INTO " + dbprefix + "_vpaccount_session (uid,remote_host) values (" +
643 unsignedIntToString(uid) + "," + unsignedIntToString((unsigned int)remoteHost) + ")";
644 if ( 0 == mysql_query( mysql, sql.c_str() ) ){
645 *session = (int)mysql_insert_id(mysql);
646 ret = RES_OK;
647 }
648 else {
649 ret = RES_DB_QUERY_ERROR;
650 }
651 return ret;
652 }
653
654
655 /**
656 *
657 * 繝ュ繧ー繧、繝ウ隱崎ィシ縺ィ繧サ繝?す繝ァ繝ウ菴懈?
658 *
659 * @param uname 繝ュ繧ー繧、繝ウ蜷?/span>
660 * @param passwd 繝代せ繝ッ繝シ繝?/span>
661 * @param session sessionid_t繧貞女縺大叙繧九◆繧√?繝昴う繝ウ繧ソ縲?/span>
662 * @return RES_OK 繝ュ繧ー繧、繝ウ謌仙粥縲Tession縺ォsessionid_t繧呈嶌縺崎セシ繧薙□縲?/span>
663 * @return RES_LOGIN_FAILURE uname縺セ縺溘?passwd縺檎焚蟶ク
664 * @return RES_DB_QUERY_ERROR DB蝠上>蜷医o縺帑クュ縺ョ繧ィ繝ゥ繝シ
665 *
666 */
667 result_t loginUser(const char* uname, const char* passwd, sessionid_t* session )
668 {
669 result_t ret;
670 string sql;
671
672 // uname, passwd -> uid
673 string escUname = addSlashes( uname );
674 string escPasswd = addSlashes( passwd );
675 sql = "SELECT uid FROM " + dbprefix + "_users WHERE uname='" + escUname + "' and pass=md5('" + escPasswd + "')";
676 if( 0 == mysql_query( mysql, sql.c_str( ) ) ){
677 MYSQL_RES* result = mysql_store_result( mysql );
678 if( result ){
679 MYSQL_ROW row = mysql_fetch_row(result);
680 if( row ){
681 userid_t uid = atoi(row[0]);
682 ret = addSession( uid, 0, session );
683 }else{
684 ret = RES_LOGIN_FAILURE;
685 }
686 mysql_free_result( result );
687 }else {
688 ret = RES_DB_QUERY_ERROR;
689 }
690 }else{
691 ret = RES_DB_QUERY_ERROR;
692 }
693
694 return ret;
695 }
696
697 /**
698 *
699 * 繝ュ繧ー繧「繧ヲ繝医→繧サ繝?す繝ァ繝ウ邨ゆコ?/span>
700 *
701 * @param sid session id
702 * @return 縺ェ縺?/span>
703 *
704 */
705 void logoutUser( sessionid_t sid )
706 {
707 result_t ret;
708 string sql;
709
710 sql = "DELETE FROM " + dbprefix + "_vpaccount_session WHERE sid=" + intToString((int)sid);
711 if ( 0 == mysql_query( mysql, sql.c_str() ) ){
712 if ( mysql_affected_rows(mysql) == 1 ){
713 // 繝ュ繧ー繧「繧ヲ繝医@縺?/span>
714 }
715 else {
716 // sid縺檎┌蜉ケ
717 }
718 }
719 else {
720 // DB蝠上>蜷医o縺帑クュ縺ョ繧ィ繝ゥ繝シ
721 }
722 }
723
724 /**
725 *
726 * 繧サ繝?す繝ァ繝ウ縺ョ菴懈?.<br>
727 * XOOPS縺ョsession繝??繝悶Ν縺ォ險倬鹸縺輔l縺殱ess_id縺ィ蠑墓焚sessionid縺檎ュ峨@縺代l
728 * 縺ー?茎ession_t繧剃ス懈?縺吶k縲?/span>
729 * 繝??繧ソ繝吶?繧ケ縺ォ繧サ繝?す繝ァ繝ウ縺ィ蠑墓焚縺ョ諠??ア繧定ィ倬鹸縺吶k
730 *
731 * @param sessionid xoops縺ョsession_id
732 * @param uid xoops_users縺ョuid
733 * @param remoteHost remote ip (host order)
734 * @param session sessionid_t繧貞女縺大叙繧九◆繧√?繝昴う繝ウ繧ソ縲?/span>
735 * @return RES_OK
736 * @return RES_ERROR
737 * @return RES_DB_QUERY_ERROR
738 *
739 */
740 result_t createSession( const char* sessionid, userid_t uid, unsigned long remoteHost, sessionid_t* session )
741 {
742 result_t ret;
743 string sql;
744
745 string escSessionid = addSlashes(sessionid);
746 sql = "SELECT sess_id from " + dbprefix + "_session where sess_id='" + escSessionid + "'";
747 if( 0 == mysql_query( mysql, sql.c_str( ) ) ){
748 MYSQL_RES* result = mysql_store_result( mysql );
749 if( result ){
750 MYSQL_ROW row = mysql_fetch_row(result);
751 if( row ){
752 ret = addSession( uid, remoteHost, session );
753 }else{
754 ret = RES_ERROR;
755 }
756 mysql_free_result( result );
757 }else {
758 ret = RES_DB_QUERY_ERROR;
759 }
760 }else{
761 ret = RES_DB_QUERY_ERROR;
762 }
763
764 return ret;
765 }
766
767 /**
768 *
769 * 繧サ繝?す繝ァ繝ウ縺ョ隧ウ邏ー繧痴ession_t縺ァ蜿門セ励☆繧?<br>
770 *
771 * @param sess_id
772 * @param session
773 * @return
774 *
775 */
776 result_t getSession( sessionid_t sess_id, const session_t** ppsession )
777 {
778 result_t ret;
779 string sql;
780
781 sql = "SELECT sid, uid, unix_timestamp(timestamp), remote_host from " + dbprefix +
782 "_vpaccount_session where sid=" + unsignedIntToString((unsigned int)sess_id);
783 if( 0 == mysql_query( mysql, sql.c_str( ) ) ){
784 MYSQL_RES* result = mysql_store_result( mysql );
785 if( result ){
786 MYSQL_ROW row = mysql_fetch_row(result);
787 if( row ){
788 session_t *p = new session[1];
789 p->setSessionID(sess_id);
790 p->setUserID(atoi(row[1]));
791 p->setDate(atoi(row[2]));
792 p->setRemoteHost(atoi(row[3]));
793 *ppsession = p;
794 ret = RES_OK;
795 }else{
796 ret = RES_NO_SUCH_SESSION;
797 }
798 mysql_free_result( result );
799 }else {
800 ret = RES_DB_QUERY_ERROR;
801 }
802 }else{
803 ret = RES_DB_QUERY_ERROR;
804 }
805
806 return ret;
807 }
808
809 /**
810 *
811 * 繧サ繝?す繝ァ繝ウ縺ョ豁」蠖捺?ァ繧偵メ繧ァ繝?け縺吶k.
812 *
813 * @param sid 繝√ぉ繝?け縺励◆縺гession
814 * @return true 豁」蠖?/span>
815 * @return false 荳肴ュ」
816 *
817 */
818 bool isValidSessionID( sessionid_t sid )
819 {
820 string sql;
821 string sidstr;
822 char buf[ 12 ];
823 snprintf( buf, 12, "%d", sid );
824
825 sql = "SELECT * FROM " + dbprefix + "_vpaccount_session WHERE sid=" + string( buf );
826 if( mysql_query( mysql, sql.c_str( ) ) ){
827 return false;
828 }
829 MYSQL_RES* result = mysql_store_result( mysql ) ;
830 MYSQL_ROW row = mysql_fetch_row(result);
831 if( row ){
832 return true;
833 }else{
834 return false;
835 }
836 }
837
838 void freeResult( account_t* ptr ){ delete[] ptr; }
839
840 void freeResult( group_t* ptr ){ delete[] ptr; }
841
842 void freeResult( const session_t* ptr ){ delete[] ptr; }
843
844 void freeResult( int* ptr ){ delete[] ptr; }
845
846 static string errstr;
847 const char* getLastErrorString()
848 {
849 return errstr.c_str( );
850 }
851
852 void setLastErrorString( const char* str )
853 {
854 errstr = str;
855 }

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