Develop and Download Open Source Software

Browse CVS Repository

Annotation of /xoonips/AL/commonal.cc

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


Revision 1.10 - (hide 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 youi 1.1 /*
2     *
3 youi 1.10 * $Revision: 1.9 $
4 youi 1.2 * $Log: commonal.cc,v $
5 youi 1.10 * Revision 1.9 2004/11/26 07:38:02 aga
6     * ??AILUE -> FAILURE.
7     *
8 aga 1.9 * Revision 1.8 2004/11/26 06:36:55 aga
9     * ??reateSession, getSession ??篏???.
10     *
11 aga 1.8 * Revision 1.7 2004/11/26 04:51:47 youi
12     * dbprefix??絎?臂?????.
13     * insertAccount??絎?臂?????.
14     * isValidSessionID??絎?臂?????.
15     *
16 youi 1.7 * Revision 1.6 2004/11/26 04:35:55 aga
17     * ??oginUser(), logoutUser()??篏???.
18     *
19 aga 1.6 * Revision 1.5 2004/11/26 01:08:25 aga
20     * ??ddSlashes()篏???.
21     *
22 aga 1.5 * Revision 1.4 2004/11/25 12:14:29 youi
23     * getUid????????絎?臂?????.
24     *
25 youi 1.4 * Revision 1.3 2004/11/25 11:13:59 youi
26     * getLastErrorString/setLastErrorString??絎?臂?
27     *
28 youi 1.3 * Revision 1.2 2004/11/25 08:55:19 youi
29     * 綣??違??????篆??.
30     * freeResult??菴遵??.
31     *
32 youi 1.2 * Revision 1.1 2004/11/25 05:14:58 youi
33     * initial version
34     *
35 youi 1.1 *
36     */
37     #include <stdio.h>
38 aga 1.6 #include <stdlib.h>
39 youi 1.1 #include <string.h>
40     #include <mysql.h>
41 youi 1.10 #include <errmsg.h>
42 youi 1.3 #include <string>
43 youi 1.7 using namespace std;
44 youi 1.1
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 youi 1.7
53 youi 1.1 static MYSQL* mysql = NULL; //!< MySQL????潟????/span>
54 youi 1.7 static string dbprefix; //!< XOOPS???若?帥???若?鴻???若??????REFIX
55 aga 1.5
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 youi 1.1
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 youi 1.7 dbprefix = prefix;
92    
93 youi 1.1 // ????????・膓?
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 youi 1.2 return RES_OK;
105 youi 1.1 }
106    
107    
108     /**
109     *
110     * Platform???若?倶?粋??倶????緇?
111     *
112     * @param
113     * @return
114     *
115     */
116 youi 1.2 bool isActivated( sessionid_t sid, userid_t uid )
117 youi 1.1 {
118     return false;
119     }
120    
121     /**
122     *
123     * Platform???若?倶?粋??倶??紊???/span>
124     *
125     * @param
126     * @return
127     *
128     */
129 youi 1.2 result_t activate( sessionid_t sid, userid_t uid, bool activate )
130 youi 1.1 {
131     return RES_ERROR;
132     }
133    
134     /**
135     *
136     * ?≪?????潟????/span>
137     *
138     * @param
139     * @return
140     *
141     */
142 youi 1.2 int getAccountCount( sessionid_t sid )
143 youi 1.1 {
144     return 0;
145     }
146    
147     /**
148     *
149     * ?≪?????潟??????/span>
150     *
151     * @param
152 youi 1.10 * @return RES_OK | RES_NO_SUCH_SESSION | RES_DB_QUERY_ERROR
153 youi 1.1 *
154     */
155 youi 1.2 result_t deleteAccount( sessionid_t sid, userid_t uid )
156 youi 1.1 {
157 youi 1.10 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 youi 1.1 }
176    
177     /**
178     *
179     * ?≪?????潟?????怨??
180     *
181     * @param
182     * @return
183     *
184     */
185 youi 1.2 result_t getAccount( sessionid_t sid, userid_t uid, const account_t** )
186 youi 1.1 {
187     return RES_ERROR;
188     }
189    
190     /**
191     *
192     * ?≪?????潟?????怨??
193     *
194     * @param
195     * @return
196     *
197     */
198 youi 1.2 result_t getAccounts( sessionid_t sid, const userid_t* uids, int uidsLen, const criteria_t* cri, const account_t** accounts, int* accountsLen )
199 youi 1.1 {
200     return RES_ERROR;
201     }
202    
203     /**
204     *
205     * ?≪?????潟???脂??/span>
206     *
207 youi 1.7 * @param sid ?祉???激?с??/span>
208 youi 1.10 * @param account ?脂?蚊?????≪?????潟??????/span>
209     * @return RES_OK | RES_NO_SUCH_SESSION | RES_DB_QUERY_ERROR | RES_ERROR
210 youi 1.1 *
211     */
212 youi 1.2 result_t insertAccount( sessionid_t sid, const account_t* account )
213 youi 1.1 {
214 youi 1.10 if( !isValidSessionID( sid ) ) return RES_NO_SUCH_SESSION;
215    
216 youi 1.7 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 youi 1.10 fprintf( stderr, "%s\n", sql.c_str( ) );
265     fprintf( stderr, "%d %s\n", mysql_errno(mysql), mysql_error(mysql) );
266 youi 1.7 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 youi 1.10 sql = "INSERT INTO " + dbprefix + "_vpaccount_users (uid, activate, address, institute, tel, organization, country, zipcode, fax, base_url, notice_mail, notice_mail_since) VALUES (";
277 youi 1.7 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 youi 1.10 fprintf( stderr, "%s\n", sql.c_str( ) );
298     fprintf( stderr, "%d %s\n", mysql_errno(mysql), mysql_error(mysql) );
299 youi 1.7 //xoops_users??nsert???????潟?若???????ゃ????
300     sql = "DELETE FROM " + dbprefix + "_users where uid=";
301     snprintf( buf, 12, "%d", uid );
302     sql += string( buf );
303 youi 1.10 mysql_query( mysql, sql.c_str( ) );
304 youi 1.7 return RES_DB_QUERY_ERROR;
305     }
306    
307     return RES_OK;
308 youi 1.1 }
309    
310     /**
311     *
312     * ?≪?????潟??紊???/span>
313     *
314     * @param
315 youi 1.10 * @return RES_OK | RES_NO_SUCH_SESSION | RES_DB_QUERY_ERROR
316 youi 1.1 *
317     */
318 youi 1.2 result_t updateAccount( sessionid_t sid, const account_t* account )
319 youi 1.1 {
320 youi 1.10 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 youi 1.1 }
395    
396     /**
397     *
398     * ???若??D筝?荀?/span>
399     *
400     * @param
401     * @return
402     *
403     */
404 youi 1.2 result_t dumpUids( sessionid_t sid, const criteria_t* cri, userid_t** uids, int* uidsLen )
405 youi 1.1 {
406     return RES_ERROR;
407     }
408    
409     /**
410     *
411     * ?違???若????/span>
412     *
413     * @param
414     * @return
415     *
416     */
417 youi 1.2 int getGroupCount( sessionid_t sid )
418 youi 1.1 {
419     return 0;
420     }
421    
422     /**
423     *
424     * ??絮??違???若??筝?荀у??
425     *
426     * @param
427     * @return
428     *
429     */
430 youi 1.2 result_t getGroupsByUid( sessionid_t sid, userid_t uid, const criteria_t* cri, groupid_t** gids, int* gidsLen )
431 youi 1.1 {
432     return RES_ERROR;
433     }
434    
435     /**
436     *
437     * ?違???若??膊∞??罔????????
438     *
439     * @param
440     * @return
441     *
442     */
443 youi 1.2 bool isGroupAdmin( sessionid_t sid, groupid_t gid, userid_t uid )
444 youi 1.1 {
445     return RES_ERROR;
446     }
447    
448     /**
449     *
450     * ?違???若??ID筝?荀?/span>
451     *
452     * @param
453     * @return
454     *
455     */
456 youi 1.2 result_t dumpGids( sessionid_t sid, const criteria_t* cri, groupid_t** gids, int* gidsLen )
457 youi 1.1 {
458     return RES_ERROR;
459     }
460    
461     /**
462     *
463     * ?違???若??膊∞????ID??緇?
464     *
465     * @param
466     * @return
467     *
468     */
469 youi 1.2 result_t dumpGroupAdmins( sessionid_t sid, groupid_t gid, const criteria_t* cri, userid_t** uids, int* uidsLen )
470 youi 1.1 {
471     return RES_ERROR;
472     }
473    
474     /**
475     *
476     * ?違???若????絮????若?九????/span>
477     *
478     * @param
479     * @return
480     *
481     */
482 youi 1.2 result_t deleteMember( sessionid_t sid, groupid_t gid, userid_t uid )
483 youi 1.1 {
484     return RES_ERROR;
485     }
486    
487     /**
488     *
489     * ?違???若????絮????若?区申??
490     *
491     * @param
492     * @return
493     *
494     */
495 youi 1.2 result_t insertMember( sessionid_t sid, groupid_t gid, userid_t uid )
496 youi 1.1 {
497     return RES_ERROR;
498     }
499    
500     /**
501     *
502     * ?違???若????絮????若?九??
503     *
504     * @param
505     * @return
506     *
507     */
508 youi 1.2 result_t getMembers( sessionid_t sid, groupid_t gid, const criteria_t* cri, userid_t** uids, int* uidsLen )
509 youi 1.1 {
510     return RES_ERROR;
511     }
512    
513     /**
514     *
515     * ?違???若????????/span>
516     *
517     * @param
518     * @return
519     *
520     */
521 youi 1.2 result_t deleteGroup( sessionid_t sid, groupid_t gid )
522 youi 1.1 {
523     return RES_ERROR;
524     }
525    
526     /**
527     *
528     * ?違???若?????脂??/span>
529     *
530     * @param
531     * @return
532     *
533     */
534 youi 1.2 result_t insertGroup( sessionid_t sid, const group_t* group )
535 youi 1.1 {
536     return RES_ERROR;
537     }
538    
539     /**
540     *
541     * ?違???若???????/span>
542     *
543     * @param
544     * @return
545     *
546     */
547 youi 1.2 result_t updateGroup( sessionid_t sid, const group_t* group )
548 youi 1.1 {
549     return RES_ERROR;
550     }
551    
552     /**
553     *
554     * ?違???若?????怨??
555     *
556     * @param
557     * @return
558     *
559     */
560 youi 1.2 result_t getGroup( sessionid_t sid, groupid_t gid, const group_t** group )
561 youi 1.1 {
562     return RES_ERROR;
563     }
564    
565     /**
566     *
567     * ?違???若?????怨??
568     *
569     * @param
570     * @return
571     *
572     */
573 youi 1.2 result_t getGroups( sessionid_t sid, groupid_t* gids, int gidsLen, const criteria_t* cri, const group_t** groups, int* groupsLen )
574 youi 1.1 {
575     return RES_ERROR;
576     }
577    
578     /**
579     *
580     * ?≪?????若?炊┤???????
581     *
582     * @param
583     * @return
584     *
585     */
586 youi 1.2 bool isModerator( sessionid_t sid, userid_t uid )
587 youi 1.1 {
588     return RES_ERROR;
589     }
590    
591     /**
592     *
593     * ???若??D??緇?
594     *
595 youi 1.7 * @param uname ID????緇??????????若?吟?弱??
596     * @param uid ID??篁e?ャ??????紊??違?????ゃ?潟??/span>
597     * @return RES_ERROR | RES_OK
598     * @refer result_t
599 youi 1.1 *
600     */
601 youi 1.2 result_t getUid( const char* uname, userid_t* uid )
602 youi 1.1 {
603 youi 1.4 string sql;
604    
605 youi 1.7 if( uname == NULL ) return RES_ERROR;
606    
607     string uname2 = addSlashes( uname );
608 youi 1.10 sql = "SELECT uid FROM " + dbprefix + "_users WHERE uname='" + uname2 + "';";
609 youi 1.4 if( mysql_query( mysql, sql.c_str( ) ) ){
610 youi 1.10 fprintf( stderr, "%d %s\n", mysql_errno(mysql), mysql_error(mysql) );
611 youi 1.4 return RES_DB_QUERY_ERROR;
612     }
613 youi 1.10 MYSQL_RES* result = mysql_store_result( mysql ) ;
614 youi 1.4 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 youi 1.1 }
624    
625     /**
626     *
627 aga 1.8 * ?祉???激?с?潟??篏?????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 youi 1.1 * ???違?ゃ?活?荐若???祉???激?с?割???
654     *
655 aga 1.6 * @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 youi 1.1 *
662     */
663 aga 1.6 result_t loginUser(const char* uname, const char* passwd, sessionid_t* session )
664 youi 1.1 {
665 aga 1.6 result_t ret;
666     string sql;
667    
668     // uname, passwd -> uid
669     string escUname = addSlashes( uname );
670     string escPasswd = addSlashes( passwd );
671 youi 1.10 sql = "SELECT uid FROM " + dbprefix + "_users WHERE uname='" + escUname + "' and pass=md5('" + escPasswd + "')";
672 aga 1.6 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 aga 1.8 userid_t uid = atoi(row[0]);
678     ret = addSession( uid, 0, session );
679 aga 1.6 }else{
680 aga 1.9 ret = RES_LOGIN_FAILURE;
681 aga 1.6 }
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 youi 1.1 }
692    
693     /**
694     *
695     * ???違?≪???????祉???激?с?括?篋?
696     *
697 aga 1.6 * @param sid session id
698     * @return ????
699 youi 1.1 *
700     */
701 youi 1.10 void logoutUser( sessionid_t sid )
702     {
703 aga 1.6 result_t ret;
704     string sql;
705 youi 1.10
706 aga 1.6 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 youi 1.1
720     /**
721     *
722     * ?祉???激?с?潟?????.<br>
723     * XOOPS??ession???若????????蚊??????sess_id?????essionid??膈???????
724     * ?逸?session_t??篏?????????
725 youi 1.2 * ???若?帥???若?鴻???祉???激?с?潟????違?????宴??荐??蚊????
726 youi 1.1 *
727 aga 1.8 * @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 youi 1.1 *
735     */
736 aga 1.8 result_t createSession( const char* sessionid, userid_t uid, unsigned long remoteHost, sessionid_t* session )
737 youi 1.1 {
738 aga 1.8 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 youi 1.1 return RES_ERROR;
762     }
763    
764     /**
765     *
766     * ?祉???激?с?潟???膣違??session_t?у??????.<br>
767     *
768 aga 1.8 * @param sess_id
769     * @param session
770 youi 1.1 * @return
771     *
772     */
773 aga 1.8 result_t getSession( sessionid_t sess_id, const session_t** ppsession )
774 youi 1.1 {
775 aga 1.8 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 youi 1.1 return RES_ERROR;
804     }
805 youi 1.2
806 youi 1.7 /**
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 youi 1.10 sql = "SELECT * FROM " + dbprefix + "_vpaccount_session WHERE sid=" + string( buf );
823 youi 1.7 if( mysql_query( mysql, sql.c_str( ) ) ){
824     return false;
825     }
826 youi 1.10 MYSQL_RES* result = mysql_store_result( mysql ) ;
827 youi 1.7 MYSQL_ROW row = mysql_fetch_row(result);
828     if( row ){
829     return true;
830     }else{
831     return false;
832     }
833     }
834    
835 youi 1.2 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 youi 1.3 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