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.10 - (show annotations) (download) (as text)
Fri Nov 26 07:57:42 2004 UTC (19 years, 4 months ago) by youi
Branch: MAIN
Changes since 1.9: +118 -17 lines
File MIME type: text/x-c++src
updateAccount, deleteAccountを定義.
mysql_query失敗時はstderrへエラーコードとエラーメッセージを出力.

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

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