Changes in / [82135c7:eda54e4]
- Files:
-
- 3 added
- 2 deleted
- 20 edited
Legend:
- Unmodified
- Added
- Removed
-
Makefile
r82135c7 reda54e4 11 11 # Program variables 12 12 objects = account.o bitlbee.o conf.o crypting.o help.o ipc.o irc.o irc_commands.o log.o nick.o query.o root_commands.o set.o storage.o $(STORAGE_OBJS) unix.o user.o 13 headers = account.h bitlbee.h commands.h conf.h config.h crypting.h help.h i ni.h ipc.h irc.h log.h nick.h query.h set.h sock.h storage.h url.h user.h protocols/http_client.h protocols/md5.h protocols/nogaim.h protocols/proxy.h protocols/sha.h protocols/ssl_client.h13 headers = account.h bitlbee.h commands.h conf.h config.h crypting.h help.h ipc.h irc.h log.h nick.h query.h set.h sock.h storage.h user.h lib/events.h lib/http_client.h lib/ini.h lib/md5.h lib/misc.h lib/proxy.h lib/sha.h lib/ssl_client.h lib/url.h protocols/nogaim.h 14 14 subdirs = lib protocols 15 15 -
configure
r82135c7 reda54e4 29 29 strip=1 30 30 gcov=0 31 plugins=1 31 32 ipv6=1 32 33 … … 69 70 --strip=0/1 Disable/enable binary stripping $strip 70 71 --gcov=0/1 Disable/enable test coverage reporting $gcov 72 --plugins=0/1 Disable/enable plugins support $plugins 71 73 72 74 --ipv6=0/1 IPv6 socket support $ipv6 73 74 --ldap=0/1/auto LDAP support $ldap75 75 76 76 --events=... Event handler (glib, libevent) $events … … 140 140 141 141 if [ "$debug" = "1" ]; then 142 echo 'CFLAGS=-g' >> Makefile.settings142 [ -z "$CFLAGS" ] && CFLAGS=-g 143 143 echo 'DEBUG=1' >> Makefile.settings 144 144 echo '#define DEBUG' >> config.h 145 145 else 146 echo 'CFLAGS=-O3' >> Makefile.settings 147 fi 148 146 [ -z "$CFLAGS" ] && CFLAGS=-O3 147 fi 148 149 echo CFLAGS=$CFLAGS >> Makefile.settings 149 150 echo CFLAGS+=-I`pwd` -I`pwd`/lib -I`pwd`/protocols -I. >> Makefile.settings 150 151 … … 385 386 fi 386 387 388 if [ "$plugins" = 0 ]; then 389 echo '#undef WITH_PLUGINS' >> config.h 390 else 391 echo '#define WITH_PLUGINS' >> config.h 392 fi 393 387 394 echo 388 395 if [ -z "$BITLBEE_VERSION" -a -d .bzr ] && type bzr > /dev/null 2> /dev/null; then -
doc/CHANGES
r82135c7 reda54e4 1 Version 1. 1dev:1 Version 1.2: 2 2 - First BitlBee development/testing RELEASE. This should be quite stable 3 3 though (and for most people more stable than 1.0.x). It just has a couple … … 65 65 resources available for that buddy. (Of course this only works if the 66 66 buddy is in your contact list.) 67 68 Finished ??? 69 70 Version 1.0.4: 71 - Removed sethostent(), which causes problems for many people, especially on 72 *BSD. This is basically the reason for this release. 73 - "allow" command actually displays the allow list, not the block list. 74 - Yahoo away state/msg fix. 75 - Don't display "Gender: Male" by default if nothing's filled in (OSCAR 76 "info" command) 77 - Fixed account cleanup (possible infinite loop) in irc_free(). 78 - Fixed configdir error message to not always display the compile-time 79 setting. 80 81 Finished 20 Aug 2007 67 82 68 83 Version 1.0.3: -
doc/user-guide/commands.xml
r82135c7 reda54e4 596 596 </bitlbee-setting> 597 597 598 <bitlbee-setting name="simulate_netsplit" type="boolean" scope="global"> 599 <default>true</default> 600 601 <description> 602 <para> 603 Some IRC clients parse quit messages sent by the IRC server to see if someone really left or just disappeared because of a netsplit. By default, BitlBee tries to simulate netsplit-like quit messages to keep the control channel window clean. If you don't like this (or if your IRC client doesn't support this) you can disable this setting. 604 </para> 605 </description> 606 </bitlbee-setting> 607 598 608 <bitlbee-setting name="ssl" type="boolean" scope="account"> 599 609 <default>false</default> -
irc.c
r82135c7 reda54e4 132 132 set_add( &irc->set, "buddy_sendbuffer", "false", set_eval_bool, irc ); 133 133 set_add( &irc->set, "buddy_sendbuffer_delay", "200", set_eval_int, irc ); 134 set_add( &irc->set, "charset", " iso8859-1", set_eval_charset, irc );134 set_add( &irc->set, "charset", "utf-8", set_eval_charset, irc ); 135 135 set_add( &irc->set, "debug", "false", set_eval_bool, irc ); 136 136 set_add( &irc->set, "default_target", "root", NULL, irc ); … … 143 143 set_add( &irc->set, "query_order", "lifo", NULL, irc ); 144 144 set_add( &irc->set, "save_on_quit", "true", set_eval_bool, irc ); 145 set_add( &irc->set, "simulate_netsplit", "true", set_eval_bool, irc ); 145 146 set_add( &irc->set, "strip_html", "true", NULL, irc ); 146 147 set_add( &irc->set, "to_char", ": ", set_eval_to_char, irc ); … … 910 911 char reason[128]; 911 912 912 if( u->ic && u->ic->flags & OPT_LOGGING_OUT )913 if( u->ic && u->ic->flags & OPT_LOGGING_OUT && set_getbool( &irc->set, "simulate_netsplit" ) ) 913 914 { 914 915 if( u->ic->acc->server ) -
lib/Makefile
r82135c7 reda54e4 10 10 11 11 # [SH] Program variables 12 objects = base64.o $(EVENT_HANDLER) http_client.o ini.o md5.o misc.o proxy.o rc4.o sha.o $(SSL_CLIENT) url.o12 objects = arc.o base64.o $(EVENT_HANDLER) http_client.o ini.o md5.o misc.o proxy.o sha.o $(SSL_CLIENT) url.o 13 13 14 14 CFLAGS += -Wall -
lib/base64.c
r82135c7 reda54e4 31 31 char *tobase64(const char *text) 32 32 { 33 return base64_encode( text, strlen(text));33 return base64_encode((const unsigned char *)text, strlen(text)); 34 34 } 35 35 36 char *base64_encode(const char *in, int len)36 char *base64_encode(const unsigned char *in, int len) 37 37 { 38 38 char *out; -
lib/base64.h
r82135c7 reda54e4 27 27 28 28 G_MODULE_EXPORT char *tobase64( const char *text ); 29 G_MODULE_EXPORT char *base64_encode( const char *in, int len );29 G_MODULE_EXPORT char *base64_encode( const unsigned char *in, int len ); 30 30 G_MODULE_EXPORT int base64_encode_real( const unsigned char *in, int inlen, unsigned char *out, const char *b64digits ); 31 31 G_MODULE_EXPORT char *frombase64( const char *in ); -
lib/misc.c
r82135c7 reda54e4 545 545 return reply; 546 546 } 547 548 /* Word wrapping. Yes, I know this isn't UTF-8 clean. I'm willing to take the risk. */ 549 char *word_wrap( char *msg, int line_len ) 550 { 551 GString *ret = g_string_sized_new( strlen( msg ) + 16 ); 552 553 while( strlen( msg ) > line_len ) 554 { 555 int i; 556 557 /* First try to find out if there's a newline already. Don't 558 want to add more splits than necessary. */ 559 for( i = line_len; i > 0 && msg[i] != '\n'; i -- ); 560 if( msg[i] == '\n' ) 561 { 562 g_string_append_len( ret, msg, i + 1 ); 563 msg += i + 1; 564 continue; 565 } 566 567 for( i = line_len; i > 0; i -- ) 568 { 569 if( msg[i] == '-' ) 570 { 571 g_string_append_len( ret, msg, i + 1 ); 572 g_string_append_c( ret, '\n' ); 573 msg += i + 1; 574 break; 575 } 576 else if( msg[i] == ' ' ) 577 { 578 g_string_append_len( ret, msg, i ); 579 g_string_append_c( ret, '\n' ); 580 msg += i + 1; 581 break; 582 } 583 } 584 if( i == 0 ) 585 { 586 g_string_append_len( ret, msg, line_len ); 587 g_string_append_c( ret, '\n' ); 588 msg += line_len; 589 } 590 } 591 g_string_append( ret, msg ); 592 593 return g_string_free( ret, FALSE ); 594 } -
lib/misc.h
r82135c7 reda54e4 64 64 G_MODULE_EXPORT struct ns_srv_reply *srv_lookup( char *service, char *protocol, char *domain ); 65 65 66 G_MODULE_EXPORT char *word_wrap( char *msg, int line_len ); 67 66 68 #endif -
lib/ssl_bogus.c
r82135c7 reda54e4 52 52 } 53 53 54 void *ssl_starttls( int fd, ssl_input_function func, gpointer data ) 55 { 56 return NULL; 57 } 58 54 59 b_input_condition ssl_getdirection( void *conn ) 55 60 { -
protocols/jabber/sasl.c
r82135c7 reda54e4 89 89 strcpy( s + 1, jd->username ); 90 90 strcpy( s + 2 + strlen( jd->username ), ic->acc->pass ); 91 reply->text = base64_encode( s, len );91 reply->text = base64_encode( (unsigned char *)s, len ); 92 92 reply->text_len = strlen( reply->text ); 93 93 g_free( s ); … … 185 185 struct jabber_data *jd = ic->proto_data; 186 186 struct xt_node *reply = NULL; 187 char *nonce = NULL, *realm = NULL, *cnonce = NULL, cnonce_bin[30]; 187 char *nonce = NULL, *realm = NULL, *cnonce = NULL; 188 unsigned char cnonce_bin[30]; 188 189 char *digest_uri = NULL; 189 190 char *dec = NULL; … … 216 217 realm = g_strdup( jd->server ); 217 218 218 random_bytes( (unsigned char *)cnonce_bin, sizeof( cnonce_bin ) );219 random_bytes( cnonce_bin, sizeof( cnonce_bin ) ); 219 220 cnonce = base64_encode( cnonce_bin, sizeof( cnonce_bin ) ); 220 221 digest_uri = g_strdup_printf( "%s/%s", "xmpp", jd->server ); -
protocols/nogaim.c
r82135c7 reda54e4 48 48 49 49 if(!mod) { 50 log_message(LOGLVL_ERROR, "Can't find `%s', not loading ", path);50 log_message(LOGLVL_ERROR, "Can't find `%s', not loading (%s)\n", path, g_module_error()); 51 51 return FALSE; 52 52 } … … 608 608 ( ( u->online == oo ) && ( oa == !u->away ) ) ) ) /* (De)voice people changing state */ 609 609 { 610 irc_write( ic->irc, ":%s MODE %s %cv %s", ic->irc->myhost, 611 ic->irc->channel, u->away?'-':'+', u->nick ); 610 char *from; 611 612 if( set_getbool( &ic->irc->set, "simulate_netsplit" ) ) 613 { 614 from = g_strdup( ic->irc->myhost ); 615 } 616 else 617 { 618 from = g_strdup_printf( "%s!%s@%s", ic->irc->mynick, ic->irc->mynick, 619 ic->irc->myhost ); 620 } 621 irc_write( ic->irc, ":%s MODE %s %cv %s", from, ic->irc->channel, 622 u->away?'-':'+', u->nick ); 623 g_free( from ); 612 624 } 613 625 } … … 616 628 { 617 629 irc_t *irc = ic->irc; 630 char *wrapped; 618 631 user_t *u; 619 632 … … 658 671 strip_html( msg ); 659 672 660 while( strlen( msg ) > 425 ) 661 { 662 char tmp, *nl; 663 664 tmp = msg[425]; 665 msg[425] = 0; 666 667 /* If there's a newline/space in this string, split up there, 668 looks a bit prettier. */ 669 if( ( nl = strrchr( msg, '\n' ) ) || ( nl = strrchr( msg, ' ' ) ) ) 670 { 671 msg[425] = tmp; 672 tmp = *nl; 673 *nl = 0; 674 } 675 676 irc_msgfrom( irc, u->nick, msg ); 677 678 /* Move on. */ 679 if( nl ) 680 { 681 *nl = tmp; 682 msg = nl + 1; 683 } 684 else 685 { 686 msg[425] = tmp; 687 msg += 425; 688 } 689 } 690 irc_msgfrom( irc, u->nick, msg ); 673 wrapped = word_wrap( msg, 425 ); 674 irc_msgfrom( irc, u->nick, wrapped ); 675 g_free( wrapped ); 691 676 } 692 677 … … 750 735 { 751 736 struct im_connection *ic = c->ic; 737 char *wrapped; 752 738 user_t *u; 753 739 … … 762 748 strip_html( msg ); 763 749 750 wrapped = word_wrap( msg, 425 ); 764 751 if( c && u ) 765 irc_privmsg( ic->irc, u, "PRIVMSG", c->channel, "", msg ); 752 { 753 irc_privmsg( ic->irc, u, "PRIVMSG", c->channel, "", wrapped ); 754 } 766 755 else 767 imcb_log( ic, "Message from/to conversation %s@0x%x (unknown conv/user): %s", who, (int) c, msg ); 756 { 757 imcb_log( ic, "Message from/to conversation %s@0x%x (unknown conv/user): %s", who, (int) c, wrapped ); 758 } 759 g_free( wrapped ); 768 760 } 769 761 -
protocols/nogaim.h
r82135c7 reda54e4 98 98 struct im_connection *ic; 99 99 100 /* stuff used just for chat */ 101 /* The in_room variable is a list of handles (not nicks!), kind of 102 * "nick list". This is how you can check who is in the group chat 103 * already, for example to avoid adding somebody two times. */ 100 104 GList *in_room; 101 105 GList *ignored; … … 103 107 struct groupchat *next; 104 108 char *channel; 109 /* The title variable contains the ID you gave when you created the 110 * chat using imcb_chat_new(). */ 105 111 char *title; 106 112 char joined; 113 /* This is for you, you can add your own structure here to extend this 114 * structure for your protocol's needs. */ 107 115 void *data; 108 116 }; … … 123 131 struct prpl { 124 132 int options; 133 /* You should set this to the name of your protocol. 134 * - The user sees this name ie. when imcb_log() is used. */ 125 135 const char *name; 126 136 127 137 /* Added this one to be able to add per-account settings, don't think 128 it should be used for anything else. */ 138 * it should be used for anything else. You are supposed to use the 139 * set_add() function to add new settings. */ 129 140 void (* init) (account_t *); 130 /* These should all be pretty obvious. */ 141 /* The typical usage of the login() function: 142 * - Create an im_connection using imcb_new() from the account_t parameter. 143 * - Initialize your myproto_data struct - you should store all your protocol-specific data there. 144 * - Save your custom structure to im_connection->proto_data. 145 * - Use proxy_connect() to connect to the server. 146 */ 131 147 void (* login) (account_t *); 148 /* Implementing this function is optional. */ 132 149 void (* keepalive) (struct im_connection *); 150 /* In this function you should: 151 * - Tell the server about you are logging out. 152 * - g_free() your myproto_data struct as BitlBee does not know how to 153 * properly do so. 154 */ 133 155 void (* logout) (struct im_connection *); 134 156 157 /* This function is called when the user wants to send a message to a handle. 158 * - 'to' is a handle, not a nick 159 * - 'flags' may be ignored 160 */ 135 161 int (* buddy_msg) (struct im_connection *, char *to, char *message, int flags); 162 /* This function is called then the user uses the /away IRC command. 163 * - 'state' contains the away reason. 164 * - 'message' may be ignored if your protocol does not support it. 165 */ 136 166 void (* set_away) (struct im_connection *, char *state, char *message); 167 /* Implementing this function is optional. */ 137 168 void (* get_away) (struct im_connection *, char *who); 169 /* Implementing this function is optional. */ 138 170 int (* send_typing) (struct im_connection *, char *who, int flags); 139 171 140 /* For now BitlBee doesn't really handle groups, just set it to NULL. */ 172 /* 'name' is a handle to add/remove. For now BitlBee doesn't really 173 * handle groups, just set it to NULL, so you can ignore that 174 * parameter. */ 141 175 void (* add_buddy) (struct im_connection *, char *name, char *group); 142 176 void (* remove_buddy) (struct im_connection *, char *name, char *group); 143 177 144 /* Block list stuff. */178 /* Block list stuff. Implementing these are optional. */ 145 179 void (* add_permit) (struct im_connection *, char *who); 146 180 void (* add_deny) (struct im_connection *, char *who); … … 151 185 152 186 /* Request profile info. Free-formatted stuff, the IM module gives back 153 this info via imcb_log(). */187 this info via imcb_log(). Implementing these are optional. */ 154 188 void (* get_info) (struct im_connection *, char *who); 155 189 void (* set_my_name) (struct im_connection *, char *name); … … 157 191 158 192 /* Group chat stuff. */ 193 /* This is called when the user uses the /invite IRC command. 194 * - 'who' may be ignored 195 * - 'message' is a handle to invite 196 */ 159 197 void (* chat_invite) (struct groupchat *, char *who, char *message); 198 /* This is called when the user uses the /part IRC command in a group 199 * chat. You just should tell the user about it, nothing more. */ 160 200 void (* chat_leave) (struct groupchat *); 201 /* This is called when the user sends a message to the groupchat. 202 * 'flags' may be ignored. */ 161 203 void (* chat_msg) (struct groupchat *, char *message, int flags); 204 /* This is called when the user uses the /join #nick IRC command. 205 * - 'who' is the handle of the nick 206 */ 162 207 struct groupchat * 163 208 (* chat_with) (struct im_connection *, char *who); 209 /* This is used when the user uses the /join #channel IRC command. If 210 * your protocol does not support publicly named group chats, then do 211 * not implement this. */ 164 212 struct groupchat * 165 213 (* chat_join) (struct im_connection *, char *room, char *nick, char *password); 166 214 215 /* You can tell what away states your protocol supports, so that 216 * BitlBee will try to map the IRC away reasons to them, or use 217 * GAIM_AWAY_CUSTOM when calling skype_set_away(). */ 167 218 GList *(* away_states)(struct im_connection *ic); 168 219 169 /* Mainly for AOL, since they think "Bung hole" == "Bu ngho le". *sigh* */ 220 /* Mainly for AOL, since they think "Bung hole" == "Bu ngho le". *sigh* 221 * - Most protocols will just want to set this to g_strcasecmp().*/ 170 222 int (* handle_cmp) (const char *who1, const char *who2); 171 223 }; … … 175 227 G_MODULE_EXPORT GSList *get_connections(); 176 228 G_MODULE_EXPORT struct prpl *find_protocol( const char *name ); 229 /* When registering a new protocol, you should allocate space for a new prpl 230 * struct, initialize it (set the function pointers to point to your 231 * functions), finally call this function. */ 177 232 G_MODULE_EXPORT void register_protocol( struct prpl * ); 178 233 179 234 /* Connection management. */ 235 /* You will need this function in prpl->login() to get an im_connection from 236 * the account_t parameter. */ 180 237 G_MODULE_EXPORT struct im_connection *imcb_new( account_t *acc ); 181 238 G_MODULE_EXPORT void imcb_free( struct im_connection *ic ); 239 /* Once you're connected, you should call this function, so that the user will 240 * see the success. */ 182 241 G_MODULE_EXPORT void imcb_connected( struct im_connection *ic ); 242 /* This can be used to disconnect when something went wrong (ie. read error 243 * from the server). You probably want to set the second parameter to TRUE. */ 183 244 G_MODULE_EXPORT void imc_logout( struct im_connection *ic, int allow_reconnect ); 184 245 185 246 /* Communicating with the user. */ 247 /* A printf()-like function to tell the user anything you want. */ 186 248 G_MODULE_EXPORT void imcb_log( struct im_connection *ic, char *format, ... ) G_GNUC_PRINTF( 2, 3 ); 249 /* To tell the user an error, ie. before logging out when an error occurs. */ 187 250 G_MODULE_EXPORT void imcb_error( struct im_connection *ic, char *format, ... ) G_GNUC_PRINTF( 2, 3 ); 251 /* To ask a your about something. 252 * - 'msg' is the question. 253 * - 'data' can be your custom struct - it will be passed to the callbacks. 254 * - 'doit' or 'dont' will be called depending of the answer of the user. 255 */ 188 256 G_MODULE_EXPORT void imcb_ask( struct im_connection *ic, char *msg, void *data, void *doit, void *dont ); 189 257 G_MODULE_EXPORT void imcb_ask_add( struct im_connection *ic, char *handle, const char *realname ); 190 258 191 259 /* Buddy management */ 260 /* This function should be called for each handle which are visible to the 261 * user, usually after a login, or if the user added a buddy and the IM 262 * server confirms that the add was successful. Don't forget to do this! */ 192 263 G_MODULE_EXPORT void imcb_add_buddy( struct im_connection *ic, char *handle, char *group ); 193 264 G_MODULE_EXPORT void imcb_remove_buddy( struct im_connection *ic, char *handle, char *group ); … … 197 268 198 269 /* Buddy activity */ 270 /* To manipulate the status of a handle. 271 * - flags can be |='d with OPT_* constants. You will need at least: 272 * OPT_LOGGED_IN and OPT_AWAY. 273 * - 'state' and 'message' can be NULL */ 199 274 G_MODULE_EXPORT void imcb_buddy_status( struct im_connection *ic, const char *handle, int flags, const char *state, const char *message ); 200 275 /* Not implemented yet! */ G_MODULE_EXPORT void imcb_buddy_times( struct im_connection *ic, const char *handle, time_t login, time_t idle ); 276 /* Call when a handle says something. 'flags' and 'sent_at may be just 0. */ 201 277 G_MODULE_EXPORT void imcb_buddy_msg( struct im_connection *ic, char *handle, char *msg, u_int32_t flags, time_t sent_at ); 202 278 G_MODULE_EXPORT void imcb_buddy_typing( struct im_connection *ic, char *handle, u_int32_t flags ); … … 205 281 /* Groupchats */ 206 282 G_MODULE_EXPORT void imcb_chat_invited( struct im_connection *ic, char *handle, char *who, char *msg, GList *data ); 283 /* These two functions are to create a group chat. 284 * - imcb_chat_new(): the 'handle' parameter identifies the chat, like the 285 * channel name on IRC. 286 * - After you have a groupchat pointer, you should add the handles, finally 287 * the user her/himself. At that point the group chat will be visible to the 288 * user, too. */ 207 289 G_MODULE_EXPORT struct groupchat *imcb_chat_new( struct im_connection *ic, char *handle ); 208 290 G_MODULE_EXPORT void imcb_chat_add_buddy( struct groupchat *b, char *handle ); 291 /* To remove a handle from a group chat. Reason can be NULL. */ 209 292 G_MODULE_EXPORT void imcb_chat_remove_buddy( struct groupchat *b, char *handle, char *reason ); 293 /* To tell BitlBee 'who' said 'msg' in 'c'. 'flags' and 'sent_at' can be 0. */ 210 294 G_MODULE_EXPORT void imcb_chat_msg( struct groupchat *c, char *who, char *msg, u_int32_t flags, time_t sent_at ); 211 295 G_MODULE_EXPORT void imcb_chat_free( struct groupchat *c ); -
root_commands.c
r82135c7 reda54e4 383 383 } 384 384 385 if( cmd[3] )385 if( cmd[3] && set_name ) 386 386 { 387 387 set_t *s = set_find( &a->set, set_name ); -
storage_xml.c
r82135c7 reda54e4 27 27 #include "bitlbee.h" 28 28 #include "base64.h" 29 #include " rc4.h"29 #include "arc.h" 30 30 #include "md5.h" 31 31 … … 132 132 { 133 133 char *protocol, *handle, *server, *password = NULL, *autoconnect; 134 char *pass_b64 = NULL, *pass_rc4 = NULL; 134 char *pass_b64 = NULL; 135 unsigned char *pass_cr = NULL; 135 136 int pass_len; 136 137 struct prpl *prpl = NULL; … … 151 152 g_set_error( error, G_MARKUP_ERROR, G_MARKUP_ERROR_INVALID_CONTENT, 152 153 "Unknown protocol: %s", protocol ); 153 else if( ( pass_len = base64_decode( pass_b64, (unsigned char**) &pass_rc4 ) ) && 154 rc4_decode( (unsigned char*) pass_rc4, pass_len, 155 (unsigned char**) &password, xd->given_pass ) ) 154 else if( ( pass_len = base64_decode( pass_b64, (unsigned char**) &pass_cr ) ) && 155 arc_decode( pass_cr, pass_len, &password, xd->given_pass ) ) 156 156 { 157 157 xd->current_account = account_add( irc, prpl, handle, password ); … … 169 169 } 170 170 171 g_free( pass_ rc4);171 g_free( pass_cr ); 172 172 g_free( password ); 173 173 } … … 410 410 md5_finish( &md5_state, pass_md5 ); 411 411 /* Save the hash in base64-encoded form. */ 412 pass_buf = base64_encode( (char*)pass_md5, 21 );412 pass_buf = base64_encode( pass_md5, 21 ); 413 413 414 414 if( !xml_printf( fd, 0, "<user nick=\"%s\" password=\"%s\" version=\"%d\">\n", irc->nick, pass_buf, XML_FORMAT_VERSION ) ) … … 424 424 for( acc = irc->accounts; acc; acc = acc->next ) 425 425 { 426 char *pass_rc4, *pass_b64; 426 unsigned char *pass_cr; 427 char *pass_b64; 427 428 int pass_len; 428 429 429 pass_len = rc4_encode( (unsigned char*) acc->pass, strlen( acc->pass ), (unsigned char**) &pass_rc4, irc->password );430 pass_b64 = base64_encode( pass_ rc4, pass_len );431 g_free( pass_ rc4);430 pass_len = arc_encode( acc->pass, strlen( acc->pass ), (unsigned char**) &pass_cr, irc->password ); 431 pass_b64 = base64_encode( pass_cr, pass_len ); 432 g_free( pass_cr ); 432 433 433 434 if( !xml_printf( fd, 1, "<account protocol=\"%s\" handle=\"%s\" password=\"%s\" autoconnect=\"%d\"", acc->prpl->name, acc->user, pass_b64, acc->auto_connect ) ) -
tests/Makefile
r82135c7 reda54e4 13 13 main_objs = account.o bitlbee.o conf.o crypting.o help.o ipc.o irc.o irc_commands.o log.o nick.o query.o root_commands.o set.o storage.o storage_xml.o storage_text.o user.o 14 14 15 test_objs = check.o check_util.o check_nick.o check_md5.o check_ irc.o check_help.o check_user.o check_crypting.o check_set.o15 test_objs = check.o check_util.o check_nick.o check_md5.o check_arc.o check_irc.o check_help.o check_user.o check_crypting.o check_set.o 16 16 17 17 check: $(test_objs) $(addprefix ../, $(main_objs)) ../protocols/protocols.o ../lib/lib.o -
tests/check.c
r82135c7 reda54e4 47 47 /* From check_md5.c */ 48 48 Suite *md5_suite(void); 49 50 /* From check_arc.c */ 51 Suite *arc_suite(void); 49 52 50 53 /* From check_irc.c */ … … 102 105 srunner_add_suite(sr, nick_suite()); 103 106 srunner_add_suite(sr, md5_suite()); 107 srunner_add_suite(sr, arc_suite()); 104 108 srunner_add_suite(sr, irc_suite()); 105 109 srunner_add_suite(sr, help_suite()); -
tests/check_util.c
r82135c7 reda54e4 104 104 END_TEST 105 105 106 struct 107 { 108 char *orig; 109 int line_len; 110 char *wrapped; 111 } word_wrap_tests[] = { 112 { 113 "Line-wrapping is not as easy as it seems?", 114 16, 115 "Line-wrapping is\nnot as easy as\nit seems?" 116 }, 117 { 118 "Line-wrapping is not as easy as it seems?", 119 8, 120 "Line-\nwrapping\nis not\nas easy\nas it\nseems?" 121 }, 122 { 123 "Line-wrapping is\nnot as easy as it seems?", 124 8, 125 "Line-\nwrapping\nis\nnot as\neasy as\nit\nseems?" 126 }, 127 { 128 "a aa aaa aaaa aaaaa aaaaaa aaaaaaa aaaaaaaa", 129 5, 130 "a aa\naaa\naaaa\naaaaa\naaaaa\na\naaaaa\naa\naaaaa\naaa", 131 }, 132 { 133 "aaaaaaaa aaaaaaa aaaaaa aaaaa aaaa aaa aa a", 134 5, 135 "aaaaa\naaa\naaaaa\naa\naaaaa\na\naaaaa\naaaa\naaa\naa a", 136 }, 137 { 138 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", 139 5, 140 "aaaaa\naaaaa\naaaaa\naaaaa\naaaaa\naaaaa\naaaaa\na", 141 }, 142 { 143 NULL 144 } 145 }; 146 147 START_TEST(test_word_wrap) 148 int i; 149 150 for( i = 0; word_wrap_tests[i].orig && *word_wrap_tests[i].orig; i ++ ) 151 { 152 char *wrapped = word_wrap( word_wrap_tests[i].orig, word_wrap_tests[i].line_len ); 153 154 fail_unless( strcmp( word_wrap_tests[i].wrapped, wrapped ) == 0, 155 "%s (line_len = %d) should wrap to `%s', not to `%s'", 156 word_wrap_tests[i].orig, word_wrap_tests[i].line_len, 157 word_wrap_tests[i].wrapped, wrapped ); 158 159 g_free( wrapped ); 160 } 161 END_TEST 162 106 163 Suite *util_suite (void) 107 164 { … … 116 173 tcase_add_test (tc_core, test_set_url_username); 117 174 tcase_add_test (tc_core, test_set_url_username_pwd); 175 tcase_add_test (tc_core, test_word_wrap); 118 176 return s; 119 177 } -
unix.c
r82135c7 reda54e4 47 47 memset( &global, 0, sizeof( global_t ) ); 48 48 49 b_main_init();50 49 log_init(); 51 nogaim_init();52 53 srand( time( NULL ) ^ getpid() );54 55 50 CONF_FILE = g_strdup( CONF_FILE_DEF ); 56 global.helpfile = g_strdup( HELP_FILE );57 58 51 global.conf = conf_load( argc, argv ); 59 52 if( global.conf == NULL ) 60 53 return( 1 ); 54 55 b_main_init(); 56 nogaim_init(); 57 58 srand( time( NULL ) ^ getpid() ); 59 global.helpfile = g_strdup( HELP_FILE ); 61 60 62 61 if( global.conf->runmode == RUNMODE_INETD )
Note: See TracChangeset
for help on using the changeset viewer.