Changes in / [9e768da:673a54c]
- Files:
-
- 3 added
- 40 edited
Legend:
- Unmodified
- Added
- Removed
-
Makefile
r9e768da r673a54c 11 11 # Program variables 12 12 objects = account.o bitlbee.o chat.o crypting.o help.o ipc.o irc.o irc_commands.o nick.o query.o root_commands.o set.o storage.o $(STORAGE_OBJS) user.o 13 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/sha1.h lib/ssl_client.h lib/url.h protocols/nogaim.h13 headers = account.h bitlbee.h commands.h conf.h config.h crypting.h help.h ipc.h irc.h log.h nick.h otr.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/sha1.h lib/ssl_client.h lib/url.h protocols/nogaim.h 14 14 subdirs = lib protocols 15 15 … … 20 20 OUTFILE=bitlbee.exe 21 21 else 22 objects += unix.o conf.o log.o 22 objects += unix.o conf.o log.o otr.o 23 23 OUTFILE=bitlbee 24 24 endif … … 94 94 mkdir -p $(DESTDIR)$(ETCDIR) 95 95 install -m 0644 motd.txt $(DESTDIR)$(ETCDIR)/motd.txt 96 install -m 0644 welcome.txt $(DESTDIR)$(ETCDIR)/welcome.txt 96 97 install -m 0644 bitlbee.conf $(DESTDIR)$(ETCDIR)/bitlbee.conf 97 98 98 99 uninstall-etc: 99 100 rm -f $(DESTDIR)$(ETCDIR)/motd.txt 101 rm -f $(DESTDIR)$(ETCDIR)/welcome.txt 100 102 rm -f $(DESTDIR)$(ETCDIR)/bitlbee.conf 101 103 -rmdir $(DESTDIR)$(ETCDIR) -
bitlbee.conf
r9e768da r673a54c 86 86 # MotdFile = /etc/bitlbee/motd.txt 87 87 88 ## WelcomeFile 89 ## 90 ## Specify an alternative file for the welcome message displayed when joining the 91 ## control channel. Default value depends on the --etcdir argument to configure. 92 ## 93 # WelcomeFile = /etc/bitlbee/welcome.txt 94 88 95 ## ConfigDir 89 96 ## -
bitlbee.h
r9e768da r673a54c 28 28 29 29 #define _GNU_SOURCE /* Stupid GNU :-P */ 30 31 /* Depend on Windows 2000 for now since we need getaddrinfo() */ 32 #define _WIN32_WINNT 0x0501 30 33 31 34 /* Depend on Windows 2000 for now since we need getaddrinfo() */ … … 138 141 #include "misc.h" 139 142 #include "proxy.h" 143 #include "otr.h" 140 144 141 145 typedef struct global { … … 149 153 char *helpfile; 150 154 int restart; 155 OtrlMessageAppOps otr_ops; /* collects interface functions required by OTR */ 151 156 } global_t; 152 157 -
conf.c
r9e768da r673a54c 60 60 conf->pidfile = g_strdup( PIDFILE ); 61 61 conf->motdfile = g_strdup( ETCDIR "/motd.txt" ); 62 conf->welcomefile = g_strdup( ETCDIR "/welcome.txt" ); 62 63 conf->ping_interval = 180; 63 64 conf->ping_timeout = 300; … … 248 249 g_free( conf->motdfile ); 249 250 conf->motdfile = g_strdup( ini->value ); 251 } 252 else if( g_strcasecmp( ini->key, "welcomefile" ) == 0 ) 253 { 254 g_free( conf->welcomefile ); 255 conf->welcomefile = g_strdup( ini->value ); 250 256 } 251 257 else if( g_strcasecmp( ini->key, "account_storage" ) == 0 ) -
conf.h
r9e768da r673a54c 45 45 char *pidfile; 46 46 char *motdfile; 47 char *welcomefile; 47 48 char *primary_storage; 48 49 char **migrate_storage; -
configure
r9e768da r673a54c 31 31 gcov=0 32 32 plugins=1 33 otr=auto 33 34 34 35 events=glib … … 71 72 --gcov=0/1 Disable/enable test coverage reporting $gcov 72 73 --plugins=0/1 Disable/enable plugins support $plugins 74 --otr=0/1 Disable/enable OTR encryption support $otr 73 75 74 76 --events=... Event handler (glib, libevent) $events … … 411 413 fi 412 414 415 otrprefix="" 416 for i in / /usr /usr/local; do 417 if [ -f ${i}/lib/libotr.a ]; then 418 otrprefix=${i} 419 break 420 fi 421 done 422 if [ "$otr" = "auto" ]; then 423 if [ -n "$otrprefix" ]; then 424 otr=1 425 else 426 otr=0 427 fi 428 fi 429 if [ "$otr" = 1 ]; then 430 echo '#define WITH_OTR' >> config.h 431 echo "EFLAGS+=-L${otrprefix}/lib -lotr" >> Makefile.settings 432 echo "CFLAGS+=-I${otrprefix}/include" >> Makefile.settings 433 else 434 echo '#undef WITH_OTR' >> config.h 435 fi 436 413 437 echo 414 438 if [ -z "$BITLBEE_VERSION" -a -d .bzr ] && type bzr > /dev/null 2> /dev/null; then … … 536 560 fi 537 561 562 if [ "$otr" = "1" ]; then 563 echo ' Off-the-Record (OTR) Messaging enabled.' 564 else 565 echo ' Off-the-Record (OTR) Messaging disabled.' 566 fi 567 538 568 echo ' Using event handler: '$events 539 569 echo ' Using SSL library: '$ssl -
doc/README
r9e768da r673a54c 67 67 BitlBee's only real dependency is GLib. This is available on virtually every 68 68 platform. Any recent version of GLib (2.4 or higher) will work. 69 70 Off-the-Record encryption support will be included by default if the 71 configure script finds libotr in one of the usual places. You can pass 72 --otr=1 or --otr=0 to force it on or off, respectively. 69 73 70 74 These days, MSN Messenger clients have to connect to the MS Passport servers … … 143 147 144 148 145 A NOTE ON ENCRYPTION146 ==================== 149 A NOTE ON PASSWORD ENCRYPTION 150 ============================= 147 151 148 152 There used to be a note here about the simple obfuscation method used to -
doc/user-guide/commands.xml
r9e768da r673a54c 323 323 </description> 324 324 </bitlbee-command> 325 326 <bitlbee-command name="otr"> 327 <short-description>Off-the-Record encryption control</short-description> 328 <syntax>otr <subcommand> [<arguments>]</syntax> 329 330 <description> 331 332 <para> 333 Available subcommands: connect, disconnect, smp, trust, info, keygen, and forget. See <emphasis>help otr <subcommand></emphasis> for more information. 334 </para> 335 336 </description> 337 338 <bitlbee-command name="connect"> 339 <syntax>otr connect <nick></syntax> 340 341 <description> 342 343 <para> 344 Attempts to establish an encrypted connection with the specified user by sending a magic string. 345 </para> 346 347 </description> 348 349 </bitlbee-command> 350 351 <bitlbee-command name="disconnect"> 352 <syntax>otr disconnect <nick></syntax> 353 354 <description> 355 356 <para> 357 Resets the connection with the specified user to cleartext. 358 </para> 359 360 </description> 361 362 </bitlbee-command> 363 364 <bitlbee-command name="smp"> 365 <syntax>otr smp <nick> <secret></syntax> 366 367 <description> 368 369 <para> 370 Attempts to authenticate the given user's active fingerprint via the Socialist Millionaires' Protocol. 371 </para> 372 373 <para> 374 If an SMP challenge has already been received from the given user, responds with the specified secret. Otherwise, a challenge for the secret will be sent. If the protocol succeeds (i.e. both parties gave the same secret), the fingerprint will be trusted. 375 </para> 376 377 </description> 378 379 </bitlbee-command> 380 381 <bitlbee-command name="trust"> 382 <syntax>otr trust <nick> <fp1> <fp2> <fp3> <fp4> <fp5></syntax> 383 384 <description> 385 386 <para> 387 Manually affirms trust in the specified fingerprint, given as five blocks of precisely eight (hexadecimal) digits each. 388 </para> 389 390 </description> 391 392 </bitlbee-command> 393 394 <bitlbee-command name="info"> 395 <syntax>otr info</syntax> 396 <syntax>otr info <nick></syntax> 397 398 <description> 399 400 <para> 401 Shows information about the OTR state. The first form lists our private keys and current OTR contexts. The second form displays information about the connection with a given user, including the list of their known fingerprints. 402 </para> 403 404 </description> 405 406 </bitlbee-command> 407 408 <bitlbee-command name="keygen"> 409 <syntax>otr keygen <account-no></syntax> 410 411 <description> 412 413 <para> 414 Generates a new OTR private key for the given account. 415 </para> 416 417 </description> 418 419 </bitlbee-command> 420 421 <bitlbee-command name="forget"> 422 <syntax>otr forget <thing> <arguments></syntax> 423 424 <description> 425 426 <para> 427 Forgets some part of our OTR userstate. Available things: fingerprint, context, and key. See <emphasis>help otr forget <thing></emphasis> for more information. 428 </para> 429 430 </description> 431 432 <bitlbee-command name="fingerprint"> 433 <syntax>otr forget fingerprint <nick> <fingerprint></syntax> 434 435 <description> 436 437 <para> 438 Drops the specified fingerprint from the given user's OTR connection context. It is allowed to specify only a (unique) prefix of the desired fingerprint. 439 </para> 440 441 </description> 442 443 </bitlbee-command> 444 445 <bitlbee-command name="context"> 446 <syntax>otr forget context <nick></syntax> 447 448 <description> 449 450 <para> 451 Forgets the entire OTR context associated with the given user. This includes current message and protocol states, as well as any fingerprints for that user. 452 </para> 453 454 </description> 455 456 </bitlbee-command> 457 458 <bitlbee-command name="key"> 459 <syntax>otr forget key <fingerprint></syntax> 460 461 <description> 462 463 <para> 464 Forgets an OTR private key matching the specified fingerprint. It is allowed to specify only a (unique) prefix of the fingerprint. 465 </para> 466 467 </description> 468 469 </bitlbee-command> 470 471 </bitlbee-command> 472 473 </bitlbee-command> 325 474 326 475 <bitlbee-command name="set"> … … 491 640 </bitlbee-setting> 492 641 642 <bitlbee-setting name="color_encrypted" type="boolean" scope="global"> 643 <default>true</default> 644 645 <description> 646 <para> 647 If set to true, BitlBee will color incoming encrypted messages according to their fingerprint trust level: untrusted=red, trusted=green. 648 </para> 649 </description> 650 651 </bitlbee-setting> 652 493 653 <bitlbee-setting name="debug" type="boolean" scope="global"> 494 654 <default>false</default> … … 557 717 </bitlbee-setting> 558 718 719 <bitlbee-setting name="halfop_buddies" type="string" scope="global"> 720 <default>encrypted</default> 721 <possible-values>encrypted, trusted, notaway, false</possible-values> 722 723 <description> 724 <para> 725 Specifies under which circumstances BitlBee should give the "halfop" mode flag (+h) to buddies. 726 </para> 727 728 <para> 729 If "false", the flag is never set. On "notaway", the flag is removed for users marked as "away" and set for all others. On "encrypted", the flag is set for users with whom we have an encrypted connection. On "trusted", it is set only for encrypted connections using a trusted key. 730 </para> 731 </description> 732 733 </bitlbee-setting> 734 559 735 <bitlbee-setting name="lcnicks" type="boolean" scope="global"> 560 736 <default>true</default> … … 579 755 </bitlbee-setting> 580 756 757 <bitlbee-setting name="op_buddies" type="string" scope="global"> 758 <default>trusted</default> 759 <possible-values>encrypted, trusted, notaway, false</possible-values> 760 761 <description> 762 <para> 763 Specifies under which circumstances BitlBee should give the "op" mode flag (+o) to buddies. 764 </para> 765 766 <para> 767 If "false", the flag is never set. On "notaway", the flag is removed for users marked as "away" and set for all others. On "encrypted", the flag is set for users with whom we have an encrypted connection. On "trusted", it is set only for encrypted connections using a trusted key. 768 </para> 769 </description> 770 771 </bitlbee-setting> 772 773 <bitlbee-setting name="op_root" type="bool" scope="global"> 774 <default>true</default> 775 776 <description> 777 <para> 778 Some people prefer themself and root to have operator status in &bitlbee, other people don't. You can set the desired state for root using this setting. 779 </para> 780 </description> 781 </bitlbee-setting> 782 783 <bitlbee-setting name="op_user" type="bool" scope="global"> 784 <default>true</default> 785 786 <description> 787 <para> 788 Some people prefer themself and root to have operator status in &bitlbee, other people don't. You can set the desired state for yourself using this setting. 789 </para> 790 </description> 791 </bitlbee-setting> 792 793 <bitlbee-setting name="otr_policy" type="string" scope="global"> 794 <default>opportunistic</default> 795 <possible-values>never, opportunistic, manual, always</possible-values> 796 797 <description> 798 <para> 799 This setting controls the policy for establishing Off-the-Record connections. 800 </para> 801 <para> 802 A value of "never" effectively disables the OTR subsystem. In "opportunistic" mode, a magic whitespace pattern will be appended to the first message sent to any user. If the peer is also running opportunistic OTR, an encrypted connection will be set up automatically. On "manual", on the other hand, OTR connections must be established explicitly using <emphasis>otr connect</emphasis>. Finally, the setting "always" enforces encrypted communication by causing BitlBee to refuse to send any cleartext messages at all. 803 </para> 804 </description> 805 </bitlbee-setting> 806 581 807 <bitlbee-setting name="nick" type="string" scope="chat"> 582 808 … … 584 810 <para> 585 811 You can use this option to set your nickname in a chatroom. You won't see this nickname yourself, but other people in the room will. By default, BitlBee will use your username as the chatroom nickname. 586 </para>587 </description>588 </bitlbee-setting>589 590 <bitlbee-setting name="ops" type="string" scope="global">591 <default>both</default>592 <possible-values>both, root, user, none</possible-values>593 594 <description>595 <para>596 Some people prefer themself and root to have operator status in &bitlbee, other people don't. You can change these states using this setting.597 </para>598 599 <para>600 The value "both" means both user and root get ops. "root" means, well, just root. "user" means just the user. "none" means nobody will get operator status.601 812 </para> 602 813 </description> … … 792 1003 </para> 793 1004 </description> 1005 </bitlbee-setting> 1006 1007 <bitlbee-setting name="voice_buddies" type="string" scope="global"> 1008 <default>trusted</default> 1009 <possible-values>encrypted, trusted, notaway, false</possible-values> 1010 1011 <description> 1012 <para> 1013 Specifies under which circumstances BitlBee should give the "voice" mode flag (+v) to buddies. 1014 </para> 1015 1016 <para> 1017 If "false", the flag is never set. On "notaway", the flag is removed for users marked as "away" and set for all others. On "encrypted", the flag is set for users with whom we have an encrypted connection. On "trusted", it is set only for encrypted connections using a trusted key. 1018 </para> 1019 </description> 1020 794 1021 </bitlbee-setting> 795 1022 -
ipc.c
r9e768da r673a54c 33 33 34 34 GSList *child_list = NULL; 35 static char *statefile = NULL; 35 36 36 37 static void ipc_master_cmd_client( irc_t *data, char **cmd ) … … 62 63 } 63 64 64 static void ipc_master_cmd_deaf( irc_t *data, char **cmd )65 {66 if( global.conf->runmode == RUNMODE_DAEMON )67 {68 b_event_remove( global.listen_watch_source_id );69 close( global.listen_socket );70 71 global.listen_socket = global.listen_watch_source_id = -1;72 73 ipc_to_children_str( "OPERMSG :Closed listening socket, waiting "74 "for all users to disconnect." );75 }76 else77 {78 ipc_to_children_str( "OPERMSG :The DEAF command only works in "79 "normal daemon mode. Try DIE instead." );80 }81 }82 83 65 void ipc_master_cmd_rehash( irc_t *data, char **cmd ) 84 66 { … … 116 98 { "hello", 0, ipc_master_cmd_client, 0 }, 117 99 { "die", 0, ipc_master_cmd_die, 0 }, 118 { "deaf", 0, ipc_master_cmd_deaf, 0 },119 100 { "wallops", 1, NULL, IPC_CMD_TO_CHILDREN }, 120 101 { "wall", 1, NULL, IPC_CMD_TO_CHILDREN }, … … 460 441 } 461 442 462 #ifndef _WIN32463 443 char *ipc_master_save_state() 464 444 { … … 501 481 } 502 482 483 void ipc_master_set_statefile( char *fn ) 484 { 485 statefile = g_strdup( fn ); 486 } 487 503 488 504 489 static gboolean new_ipc_client( gpointer data, gint serversock, b_input_condition cond ) … … 521 506 } 522 507 508 #ifndef _WIN32 523 509 int ipc_master_listen_socket() 524 510 { … … 557 543 } 558 544 #else 559 int ipc_master_listen_socket()560 {561 545 /* FIXME: Open named pipe \\.\BITLBEE */ 562 return 0;563 }564 546 #endif 565 547 566 int ipc_master_load_state( char *statefile)548 int ipc_master_load_state() 567 549 { 568 550 struct bitlbee_child *child; … … 572 554 if( statefile == NULL ) 573 555 return 0; 574 575 556 fp = fopen( statefile, "r" ); 576 557 unlink( statefile ); /* Why do it later? :-) */ -
ipc.h
r9e768da r673a54c 58 58 59 59 char *ipc_master_save_state(); 60 int ipc_master_load_state( char *statefile ); 60 void ipc_master_set_statefile( char *fn ); 61 int ipc_master_load_state(); 61 62 int ipc_master_listen_socket(); 62 63 -
irc.c
r9e768da r673a54c 29 29 #include "crypting.h" 30 30 #include "ipc.h" 31 #include <sys/types.h> 32 #include <sys/wait.h> 31 33 32 34 static gboolean irc_userping( gpointer _irc, int fd, b_input_condition cond ); 35 static void irc_welcome( irc_t* irc ); 33 36 34 37 GSList *irc_connection_list = NULL; … … 142 145 143 146 irc_connection_list = g_slist_append( irc_connection_list, irc ); 144 145 s = set_add( &irc->set, "away_devoice", "true", set_eval_away_devoice, irc );147 148 146 149 s = set_add( &irc->set, "auto_connect", "true", set_eval_bool, irc ); 147 150 s = set_add( &irc->set, "auto_reconnect", "false", set_eval_bool, irc ); … … 150 153 s = set_add( &irc->set, "buddy_sendbuffer_delay", "200", set_eval_int, irc ); 151 154 s = set_add( &irc->set, "charset", "utf-8", set_eval_charset, irc ); 155 s = set_add( &irc->set, "color_encrypted", "true", set_eval_bool, irc ); 152 156 s = set_add( &irc->set, "debug", "false", set_eval_bool, irc ); 153 157 s = set_add( &irc->set, "default_target", "root", NULL, irc ); 154 158 s = set_add( &irc->set, "display_namechanges", "false", set_eval_bool, irc ); 155 159 s = set_add( &irc->set, "handle_unknown", "root", NULL, irc ); 160 s = set_add( &irc->set, "halfop_buddies", "encrypted", set_eval_halfop_buddies, irc ); 156 161 s = set_add( &irc->set, "lcnicks", "true", set_eval_bool, irc ); 157 s = set_add( &irc->set, "ops", "both", set_eval_ops, irc ); 162 s = set_add( &irc->set, "op_buddies", "trusted", set_eval_op_buddies, irc ); 163 s = set_add( &irc->set, "op_root", "true", set_eval_op_root, irc ); 164 s = set_add( &irc->set, "otr_policy", "oppurtunistic", set_eval_otr_policy, irc ); 158 165 s = set_add( &irc->set, "password", NULL, set_eval_password, irc ); 159 166 s->flags |= SET_NULL_OK; … … 166 173 s = set_add( &irc->set, "to_char", ": ", set_eval_to_char, irc ); 167 174 s = set_add( &irc->set, "typing_notice", "false", set_eval_bool, irc ); 175 s = set_add( &irc->set, "voice_buddies", "notaway", set_eval_voice_buddies, irc); 168 176 169 177 conf_loaddefaults( irc ); 170 178 179 irc->otr = otr_new(); 180 171 181 /* Evaluator sets the iconv/oconv structures. */ 172 182 set_eval_charset( set_find( &irc->set, "charset" ), set_getstr( &irc->set, "charset" ) ); … … 320 330 321 331 g_free( irc->last_target ); 332 333 otr_free(irc->otr); 322 334 323 335 g_free( irc ); 324 336 325 337 if( global.conf->runmode == RUNMODE_INETD || 326 338 global.conf->runmode == RUNMODE_FORKDAEMON || … … 691 703 } 692 704 705 const char *user_mode_prefix( irc_t *irc, user_t *u ) 706 { 707 static char op[] = "@"; 708 static char halfop[] = "%"; 709 static char voice[] = "+"; 710 static char none[] = ""; 711 712 int or = set_getbool(&irc->set, "op_root"); 713 int ou = set_getbool(&irc->set, "op_user"); 714 char *ob = set_getstr(&irc->set, "op_buddies"); 715 char *hb = set_getstr(&irc->set, "halfop_buddies"); 716 char *vb = set_getstr(&irc->set, "voice_buddies"); 717 718 if( (!strcmp(u->nick, irc->mynick) && or) || 719 (!strcmp(u->nick, irc->nick) && ou) || 720 (!u->away && !strcmp(ob, "notaway")) || 721 (u->encrypted && !strcmp(ob, "encrypted")) || 722 (u->encrypted>1 && !strcmp(ob, "trusted")) 723 ) 724 return op; 725 else if( (!u->away && !strcmp(hb, "notaway")) || 726 (u->encrypted && !strcmp(hb, "encrypted")) || 727 (u->encrypted>1 && !strcmp(hb, "trusted")) 728 ) 729 return halfop; 730 else if( (!u->away && !strcmp(vb, "notaway")) || 731 (u->encrypted && !strcmp(vb, "encrypted")) || 732 (u->encrypted>1 && !strcmp(vb, "trusted")) 733 ) 734 return voice; 735 else 736 return none; 737 } 738 693 739 void irc_names( irc_t *irc, char *channel ) 694 740 { … … 696 742 char namelist[385] = ""; 697 743 struct groupchat *c = NULL; 698 char *ops = set_getstr( &irc->set, "ops" );699 744 700 745 /* RFCs say there is no error reply allowed on NAMES, so when the … … 711 756 } 712 757 713 if( u->ic && !u->away && set_getbool( &irc->set, "away_devoice" ) ) 714 strcat( namelist, "+" ); 715 else if( ( strcmp( u->nick, irc->mynick ) == 0 && ( strcmp( ops, "root" ) == 0 || strcmp( ops, "both" ) == 0 ) ) || 716 ( strcmp( u->nick, irc->nick ) == 0 && ( strcmp( ops, "user" ) == 0 || strcmp( ops, "both" ) == 0 ) ) ) 717 strcat( namelist, "@" ); 718 758 strcat( namelist, user_mode_prefix(irc, u) ); 719 759 strcat( namelist, u->nick ); 720 760 strcat( namelist, " " ); … … 727 767 /* root and the user aren't in the channel userlist but should 728 768 show up in /NAMES, so list them first: */ 729 sprintf( namelist, "%s%s %s%s ", s trcmp( ops, "root" ) == 0 || strcmp( ops, "both") ? "@" : "", irc->mynick,730 s trcmp( ops, "user" ) == 0 || strcmp( ops, "both") ? "@" : "", irc->nick );769 sprintf( namelist, "%s%s %s%s ", set_getbool(&irc->set, "op_root") ? "@" : "", irc->mynick, 770 set_getbool(&irc->set, "op_user") ? "@" : "", irc->nick ); 731 771 732 772 for( l = c->in_room; l; l = l->next ) if( ( u = user_findhandle( c->ic, l->data ) ) ) … … 738 778 } 739 779 780 strcat( namelist, user_mode_prefix(irc, u) ); 740 781 strcat( namelist, u->nick ); 741 782 strcat( namelist, " " ); … … 779 820 irc_reply( irc, 3, ":%s", IRCD_INFO ); 780 821 irc_reply( irc, 4, "%s %s %s %s", irc->myhost, BITLBEE_VERSION, UMODES UMODES_PRIV, CMODES ); 781 irc_reply( irc, 5, "PREFIX=(o v)@+ CHANTYPES=%s CHANMODES=,,,%s NICKLEN=%d NETWORK=BitlBee "822 irc_reply( irc, 5, "PREFIX=(ohv)@%%+ CHANTYPES=%s CHANMODES=,,,%s NICKLEN=%d NETWORK=BitlBee " 782 823 "CASEMAPPING=rfc1459 MAXTARGETS=1 WATCH=128 :are supported by this server", 783 824 CTYPES, CMODES, MAX_NICK_LENGTH - 1 ); … … 785 826 irc->umode[0] = '\0'; 786 827 irc_umode_set( irc, "+" UMODE, 1 ); 787 788 u = user_add( irc, irc->mynick ); 828 u = user_add( irc, irc->mynick ); 789 829 u->host = g_strdup( irc->myhost ); 790 830 u->realname = g_strdup( ROOT_FN ); … … 808 848 irc_spawn( irc, u ); 809 849 810 irc_usermsg( irc, "Welcome to the BitlBee gateway!\n\n" 811 "If you've never used BitlBee before, please do read the help " 812 "information using the \x02help\x02 command. Lots of FAQs are " 813 "answered there.\n" 814 "If you already have an account on this server, just use the " 815 "\x02identify\x02 command to identify yourself." ); 850 irc_welcome( irc ); 816 851 817 852 if( global.conf->runmode == RUNMODE_FORKDAEMON || global.conf->runmode == RUNMODE_DAEMON ) … … 828 863 root_command( irc, send_cmd ); 829 864 g_free( send_cmd[1] ); 865 } 866 } 867 868 static void irc_welcome( irc_t *irc ) 869 { 870 FILE *f; 871 872 f = fopen( global.conf->welcomefile, "r" ); 873 if( !f ) 874 { 875 irc_usermsg( irc, "Welcome to the BitlBee gateway!\n\n" 876 "If you've never used BitlBee before, please do read the help " 877 "information using the \x02help\x02 command. Lots of FAQs are " 878 "answered there.\n" 879 "OTR users please note: Private key files are owned by the user " 880 "BitlBee is running as.\n" 881 "If you already have an account on this server, just use the " 882 "\x02identify\x02 command to identify yourself." ); 883 } 884 else 885 { 886 char linebuf[380]; 887 888 while( fgets( linebuf, 380, f ) ) 889 { 890 irc_usermsg( irc, linebuf ); 891 } 892 893 fclose( f ); 830 894 } 831 895 } -
irc.h
r9e768da r673a54c 27 27 #define _IRC_H 28 28 29 #include "otr.h" 30 29 31 #define IRC_MAX_LINE 512 30 #define IRC_MAX_ARGS 832 #define IRC_MAX_ARGS 16 31 33 32 34 #define IRC_LOGIN_TIMEOUT 60 … … 94 96 gint w_watch_source_id; 95 97 gint ping_source_id; 98 99 otr_t *otr; /* OTR state and book keeping */ 96 100 } irc_t; 97 101 -
irc_commands.c
r9e768da r673a54c 608 608 { "completions", 0, irc_cmd_completions, IRC_CMD_LOGGED_IN }, 609 609 { "die", 0, NULL, IRC_CMD_OPER_ONLY | IRC_CMD_TO_MASTER }, 610 { "deaf", 0, NULL, IRC_CMD_OPER_ONLY | IRC_CMD_TO_MASTER },611 610 { "wallops", 1, NULL, IRC_CMD_OPER_ONLY | IRC_CMD_TO_MASTER }, 612 611 { "wall", 1, NULL, IRC_CMD_OPER_ONLY | IRC_CMD_TO_MASTER }, -
lib/misc.c
r9e768da r673a54c 88 88 { "gt", ">" }, 89 89 { "amp", "&" }, 90 { "apos", "'" }, 90 91 { "quot", "\"" }, 91 92 { "aacute", "á" }, … … 119 120 char *s = out, *cs; 120 121 int i, matched; 122 int taglen; 121 123 122 124 memset( out, 0, strlen( in ) + 1 ); … … 135 137 in ++; 136 138 139 taglen = in-cs-1; /* not <0 because the above loop runs at least once */ 137 140 if( *in ) 138 141 { 139 if( g_strncasecmp( cs+1, "br", 2) == 0 ) 142 if( g_strncasecmp( cs+1, "b", taglen) == 0 ) 143 *(s++) = '\x02'; 144 else if( g_strncasecmp( cs+1, "/b", taglen) == 0 ) 145 *(s++) = '\x02'; 146 else if( g_strncasecmp( cs+1, "i", taglen) == 0 ) 147 *(s++) = '\x1f'; 148 else if( g_strncasecmp( cs+1, "/i", taglen) == 0 ) 149 *(s++) = '\x1f'; 150 else if( g_strncasecmp( cs+1, "br", 2) == 0 ) 140 151 *(s++) = '\n'; 141 152 in ++; -
lib/ssl_bogus.c
r9e768da r673a54c 27 27 28 28 int ssl_errno; 29 30 void ssl_init( void ) 31 { 32 } 29 33 30 34 void *ssl_connect( char *host, int port, ssl_input_function func, gpointer data ) … … 66 70 return 0; 67 71 } 72 73 int ssl_pending( void *conn ) 74 { 75 return 0; 76 } -
lib/ssl_client.h
r9e768da r673a54c 47 47 48 48 49 /* Perform any global initialization the SSL library might need. */ 50 G_MODULE_EXPORT void ssl_init( void ); 51 49 52 /* Connect to host:port, call the given function when the connection is 50 53 ready to be used for SSL traffic. This is all done asynchronously, no -
lib/ssl_gnutls.c
r9e768da r673a54c 60 60 static gboolean ssl_handshake( gpointer data, gint source, b_input_condition cond ); 61 61 62 63 void ssl_init( void ) 64 { 65 gnutls_global_init(); 66 initialized = TRUE; 67 atexit( gnutls_global_deinit ); 68 } 62 69 63 70 void *ssl_connect( char *host, int port, ssl_input_function func, gpointer data ) … … 122 129 if( !initialized ) 123 130 { 124 gnutls_global_init(); 125 initialized = TRUE; 126 atexit( gnutls_global_deinit ); 131 ssl_init(); 127 132 } 128 133 -
lib/ssl_nss.c
r9e768da r673a54c 91 91 92 92 93 void ssl_init( void ) 94 { 95 PR_Init( PR_SYSTEM_THREAD, PR_PRIORITY_NORMAL, 1); 96 NSS_NoDB_Init(NULL); 97 NSS_SetDomesticPolicy(); 98 initialized = TRUE; 99 } 100 93 101 void *ssl_connect( char *host, int port, ssl_input_function func, gpointer data ) 94 102 { … … 107 115 if( !initialized ) 108 116 { 109 PR_Init( PR_SYSTEM_THREAD, PR_PRIORITY_NORMAL, 1); 110 NSS_NoDB_Init(NULL); 111 NSS_SetDomesticPolicy(); 117 ssl_init(); 112 118 } 113 119 -
lib/ssl_openssl.c
r9e768da r673a54c 56 56 static gboolean ssl_handshake( gpointer data, gint source, b_input_condition cond ); 57 57 58 59 void ssl_init( void ) 60 { 61 initialized = TRUE; 62 SSLeay_add_ssl_algorithms(); 63 } 58 64 59 65 void *ssl_connect( char *host, int port, ssl_input_function func, gpointer data ) … … 115 121 if( !initialized ) 116 122 { 117 initialized = TRUE; 118 SSLeay_add_ssl_algorithms(); 123 ssl_init(); 119 124 } 120 125 -
log.c
r9e768da r673a54c 30 30 static log_t logoutput; 31 31 32 static void log_null(int level, c har *logmessage);33 static void log_irc(int level, c har *logmessage);34 static void log_syslog(int level, c har *logmessage);35 static void log_console(int level, c har *logmessage);32 static void log_null(int level, const char *logmessage); 33 static void log_irc(int level, const char *logmessage); 34 static void log_syslog(int level, const char *logmessage); 35 static void log_console(int level, const char *logmessage); 36 36 37 37 void log_init(void) { … … 97 97 } 98 98 99 void log_message(int level, c har *message, ... ) {99 void log_message(int level, const char *message, ... ) { 100 100 101 101 va_list ap; … … 122 122 } 123 123 124 void log_error(c har *functionname) {124 void log_error(const char *functionname) { 125 125 log_message(LOGLVL_ERROR, "%s: %s", functionname, strerror(errno)); 126 126 … … 128 128 } 129 129 130 static void log_null(int level, c har *message) {130 static void log_null(int level, const char *message) { 131 131 return; 132 132 } 133 133 134 static void log_irc(int level, c har *message) {134 static void log_irc(int level, const char *message) { 135 135 if(level == LOGLVL_ERROR) 136 136 irc_write_all(1, "ERROR :Error: %s", message); … … 147 147 } 148 148 149 static void log_syslog(int level, c har *message) {149 static void log_syslog(int level, const char *message) { 150 150 if(level == LOGLVL_ERROR) 151 151 syslog(LOG_ERR, "%s", message); … … 161 161 } 162 162 163 static void log_console(int level, c har *message) {163 static void log_console(int level, const char *message) { 164 164 if(level == LOGLVL_ERROR) 165 165 fprintf(stderr, "Error: %s\n", message); -
log.h
r9e768da r673a54c 44 44 45 45 typedef struct log_t { 46 void (*error)(int level, c har *logmessage);47 void (*warning)(int level, c har *logmessage);48 void (*informational)(int level, c har *logmessage);46 void (*error)(int level, const char *logmessage); 47 void (*warning)(int level, const char *logmessage); 48 void (*informational)(int level, const char *logmessage); 49 49 #ifdef DEBUG 50 void (*debug)(int level, c har *logmessage);50 void (*debug)(int level, const char *logmessage); 51 51 #endif 52 52 } log_t; … … 54 54 void log_init(void); 55 55 void log_link(int level, int output); 56 void log_message(int level, c har *message, ...) G_GNUC_PRINTF( 2, 3 );57 void log_error(c har *functionname);56 void log_message(int level, const char *message, ...) G_GNUC_PRINTF( 2, 3 ); 57 void log_error(const char *functionname); 58 58 59 59 #endif -
protocols/jabber/jabber.c
r9e768da r673a54c 528 528 529 529 ret->name = "jabber"; 530 ret->mms = 0; /* no limit */ 530 531 ret->login = jabber_login; 531 532 ret->init = jabber_init; -
protocols/msn/msn.c
r9e768da r673a54c 317 317 318 318 ret->name = "msn"; 319 ret->mms = 1409; /* this guess taken from libotr UPGRADING file */ 319 320 ret->login = msn_login; 320 321 ret->init = msn_init; -
protocols/msn/ns.c
r9e768da r673a54c 278 278 if( num_parts == 5 ) 279 279 { 280 int i, groupcount; 281 282 groupcount = atoi( cmd[4] ); 283 if( groupcount > 0 ) 284 { 285 /* valgrind says this is leaking memory, I'm guessing 286 that this happens during server redirects. */ 287 if( md->grouplist ) 288 { 289 for( i = 0; i < md->groupcount; i ++ ) 290 g_free( md->grouplist[i] ); 291 g_free( md->grouplist ); 292 } 293 294 md->groupcount = groupcount; 280 md->buddycount = atoi( cmd[3] ); 281 md->groupcount = atoi( cmd[4] ); 282 if( md->groupcount > 0 ) 295 283 md->grouplist = g_new0( char *, md->groupcount ); 296 } 297 298 md->buddycount = atoi( cmd[3] ); 284 299 285 if( !*cmd[3] || md->buddycount == 0 ) 300 286 msn_logged_in( ic ); … … 679 665 imcb_log( ic, "INBOX contains %s new messages, plus %s messages in other folders.", inbox, folders ); 680 666 } 681 682 g_free( inbox );683 g_free( folders );684 667 } 685 668 else if( g_strncasecmp( ct, "text/x-msmsgsemailnotification", 30 ) == 0 ) -
protocols/nogaim.c
r9e768da r673a54c 624 624 625 625 /* LISPy... */ 626 if( ( set_getbool( &ic->irc->set, "away_devoice" ) ) && /* Don't do a thing when user doesn't want it */ 627 ( u->online ) && /* Don't touch offline people */ 628 ( ( ( u->online != oo ) && !u->away ) || /* Voice joining people */ 629 ( ( u->online == oo ) && ( oa == !u->away ) ) ) ) /* (De)voice people changing state */ 626 if( ( u->online ) && /* Don't touch offline people */ 627 ( ( ( u->online != oo ) && !u->away ) || /* Do joining people */ 628 ( ( u->online == oo ) && ( oa == !u->away ) ) ) ) /* Do people changing state */ 630 629 { 631 630 char *from; … … 640 639 ic->irc->myhost ); 641 640 } 642 irc_write( ic->irc, ":%s MODE %s %cv %s", from, ic->irc->channel, 643 u->away?'-':'+', u->nick ); 641 if(!strcmp(set_getstr(&ic->irc->set, "voice_buddies"), "notaway")) { 642 irc_write( ic->irc, ":%s MODE %s %cv %s", from, ic->irc->channel, 643 u->away?'-':'+', u->nick ); 644 } 645 if(!strcmp(set_getstr(&ic->irc->set, "halfop_buddies"), "notaway")) { 646 irc_write( ic->irc, ":%s MODE %s %ch %s", from, ic->irc->channel, 647 u->away?'-':'+', u->nick ); 648 } 649 if(!strcmp(set_getstr(&ic->irc->set, "op_buddies"), "notaway")) { 650 irc_write( ic->irc, ":%s MODE %s %co %s", from, ic->irc->channel, 651 u->away?'-':'+', u->nick ); 652 } 644 653 g_free( from ); 645 654 } … … 651 660 char *wrapped; 652 661 user_t *u; 653 662 663 /* pass the message through OTR */ 664 msg = otr_handle_message(ic, handle, msg); 665 if(!msg) { 666 /* this was an internal OTR protocol message */ 667 return; 668 } 669 654 670 u = user_findhandle( ic, handle ); 655 656 671 if( !u ) 657 672 { … … 663 678 imcb_log( ic, "Ignoring message from unknown handle %s", handle ); 664 679 680 g_free(msg); 665 681 return; 666 682 } … … 695 711 irc_msgfrom( irc, u->nick, wrapped ); 696 712 g_free( wrapped ); 713 g_free( msg ); 697 714 } 698 715 … … 935 952 936 953 937 /* Misc. BitlBee stuff which shouldn't really be here */938 939 char *set_eval_away_devoice( set_t *set, char *value )940 {941 irc_t *irc = set->data;942 int st;943 944 if( !is_bool( value ) )945 return SET_INVALID;946 947 st = bool2int( value );948 949 /* Horror.... */950 951 if( st != set_getbool( &irc->set, "away_devoice" ) )952 {953 char list[80] = "";954 user_t *u = irc->users;955 int i = 0, count = 0;956 char pm;957 char v[80];958 959 if( st )960 pm = '+';961 else962 pm = '-';963 964 while( u )965 {966 if( u->ic && u->online && !u->away )967 {968 if( ( strlen( list ) + strlen( u->nick ) ) >= 79 )969 {970 for( i = 0; i < count; v[i++] = 'v' ); v[i] = 0;971 irc_write( irc, ":%s MODE %s %c%s%s",972 irc->myhost,973 irc->channel, pm, v, list );974 975 *list = 0;976 count = 0;977 }978 979 sprintf( list + strlen( list ), " %s", u->nick );980 count ++;981 }982 u = u->next;983 }984 985 /* $v = 'v' x $i */986 for( i = 0; i < count; v[i++] = 'v' ); v[i] = 0;987 irc_write( irc, ":%s MODE %s %c%s%s", irc->myhost,988 irc->channel, pm, v, list );989 }990 991 return value;992 }993 994 995 996 997 954 /* The plan is to not allow straight calls to prpl functions anymore, but do 998 955 them all from some wrappers. We'll start to define some down here: */ … … 1008 965 msg = buf; 1009 966 } 1010 1011 st = ic->acc->prpl->buddy_msg( ic, handle, msg, flags ); 1012 g_free( buf ); 1013 967 968 /* if compiled without otr support, this just calls the prpl buddy_msg */ 969 st = otr_send_message(ic, handle, msg, flags); 970 971 g_free(buf); 1014 972 return st; 1015 973 } -
protocols/nogaim.h
r9e768da r673a54c 132 132 * - The user sees this name ie. when imcb_log() is used. */ 133 133 const char *name; 134 /* Maximum Message Size of this protocol. 135 * - Introduced for OTR, in order to fragment large protocol messages. 136 * - 0 means "unlimited". */ 137 unsigned int mms; 134 138 135 139 /* Added this one to be able to add per-account settings, don't think … … 313 317 314 318 /* Misc. stuff */ 315 char *set_eval_away_devoice( set_t *set, char *value );316 319 gboolean auto_reconnect( gpointer data, gint fd, b_input_condition cond ); 317 320 void cancel_auto_reconnect( struct account *a ); -
protocols/oscar/oscar.c
r9e768da r673a54c 2667 2667 struct prpl *ret = g_new0(struct prpl, 1); 2668 2668 ret->name = "oscar"; 2669 ret->mms = 2343; /* this guess taken from libotr UPGRADING file */ 2669 2670 ret->away_states = oscar_away_states; 2670 2671 ret->init = oscar_init; -
protocols/yahoo/libyahoo2.c
r9e768da r673a54c 69 69 #ifdef __MINGW32__ 70 70 # include <winsock2.h> 71 # define write(a,b,c) send(a,b,c,0) 72 # define read(a,b,c) recv(a,b,c,0) 71 73 #endif 72 74 -
protocols/yahoo/yahoo.c
r9e768da r673a54c 352 352 struct prpl *ret = g_new0(struct prpl, 1); 353 353 ret->name = "yahoo"; 354 ret->mms = 832; /* this guess taken from libotr UPGRADING file */ 354 355 ret->init = byahoo_init; 355 356 -
protocols/yahoo/yahoo_httplib.c
r9e768da r673a54c 51 51 #ifdef __MINGW32__ 52 52 # include <winsock2.h> 53 # define write(a,b,c) send(a,b,c,0) 54 # define read(a,b,c) recv(a,b,c,0) 53 55 # define snprintf _snprintf 54 56 #endif -
query.c
r9e768da r673a54c 103 103 int count = 0; 104 104 105 if(!ic) 106 return; 107 105 108 q = irc->queries; 106 109 def = query_default( irc ); … … 145 148 else 146 149 irc_usermsg( irc, "Accepted: %s", q->question ); 147 q->yes( q->data ); 150 if( q->yes ) 151 q->yes( q->data ); 148 152 } 149 153 else … … 153 157 else 154 158 irc_usermsg( irc, "Rejected: %s", q->question ); 155 q->no( q->data ); 159 if( q->no ) 160 q->no( q->data ); 156 161 } 157 162 q->data = NULL; -
root_commands.c
r9e768da r673a54c 29 29 #include "bitlbee.h" 30 30 #include "help.h" 31 #include "otr.h" 31 32 32 33 #include <string.h> … … 407 408 408 409 irc_usermsg( irc, "Account successfully added" ); 410 411 if(otr_check_for_key(a)) { 412 irc_usermsg(irc, "otr: you will be notified when it completes"); 413 } 409 414 } 410 415 else if( g_strcasecmp( cmd[1], "del" ) == 0 ) … … 1207 1212 { "qlist", 0, cmd_qlist, 0 }, 1208 1213 { "join_chat", 2, cmd_join_chat, 0 }, 1214 { "otr", 1, cmd_otr, 0 }, 1209 1215 { "chat", 1, cmd_chat, 0 }, 1210 1216 { NULL } -
set.c
r9e768da r673a54c 225 225 } 226 226 227 char *set_eval_ops( set_t *set, char *value )227 char* set_eval_op_root( set_t *set, char* value ) 228 228 { 229 229 irc_t *irc = set->data; 230 231 if( g_strcasecmp( value, "user" ) == 0 ) 232 irc_write( irc, ":%s!%s@%s MODE %s %s %s %s", irc->mynick, irc->mynick, irc->myhost, 233 irc->channel, "+o-o", irc->nick, irc->mynick ); 234 else if( g_strcasecmp( value, "root" ) == 0 ) 235 irc_write( irc, ":%s!%s@%s MODE %s %s %s %s", irc->mynick, irc->mynick, irc->myhost, 236 irc->channel, "-o+o", irc->nick, irc->mynick ); 237 else if( g_strcasecmp( value, "both" ) == 0 ) 238 irc_write( irc, ":%s!%s@%s MODE %s %s %s %s", irc->mynick, irc->mynick, irc->myhost, 239 irc->channel, "+oo", irc->nick, irc->mynick ); 240 else if( g_strcasecmp( value, "none" ) == 0 ) 241 irc_write( irc, ":%s!%s@%s MODE %s %s %s %s", irc->mynick, irc->mynick, irc->myhost, 242 irc->channel, "-oo", irc->nick, irc->mynick ); 230 char* ret = set_eval_bool(set, value); 231 int b = bool2int(ret); 232 233 irc_write( irc, ":%s!%s@%s MODE %s %s %s", irc->mynick, irc->mynick, irc->myhost, 234 irc->channel, b?"+o":"-o", irc->mynick); 235 236 return ret; 237 } 238 239 char* set_eval_op_user( set_t *set, char* value ) 240 { 241 irc_t *irc = set->data; 242 char* ret = set_eval_bool(set, value); 243 int b = bool2int(ret); 244 245 irc_write( irc, ":%s!%s@%s MODE %s %s %s", irc->mynick, irc->mynick, irc->myhost, 246 irc->channel, b?"+o":"-o", irc->nick); 247 248 return ret; 249 } 250 251 /* generalized version of set_eval_op/voice_buddies */ 252 char *set_eval_mode_buddies( set_t *set, char *value, char modeflag ) 253 { 254 irc_t *irc = set->data; 255 char op[64], deop[64]; 256 int nop=0, ndeop=0; 257 user_t *u; 258 int mode; 259 260 if(!strcmp(value, "false")) 261 mode=0; 262 else if(!strcmp(value, "encrypted")) 263 mode=1; 264 else if(!strcmp(value, "trusted")) 265 mode=2; 266 else if(!strcmp(value, "notaway")) 267 mode=3; 243 268 else 244 269 return SET_INVALID; 245 270 271 /* sorry for calling them op/deop - too lazy for search+replace :P */ 272 op[0]='\0'; 273 deop[0]='\0'; 274 for(u=irc->users; u; u=u->next) { 275 /* we're only concerned with online buddies */ 276 if(!u->ic || !u->online) 277 continue; 278 279 /* just in case... */ 280 if(strlen(u->nick) >= 64) 281 continue; 282 283 /* dump out ops/deops when the corresponding name list fills up */ 284 if(strlen(op)+strlen(u->nick)+2 > 64) { 285 char *flags = g_strnfill(nop, modeflag); 286 irc_write( irc, ":%s!%s@%s MODE %s +%s%s", irc->mynick, irc->mynick, irc->myhost, 287 irc->channel, flags, op ); 288 op[0]='\0'; 289 nop=0; 290 g_free(flags); 291 } 292 if(strlen(deop)+strlen(u->nick)+2 > 64) { 293 char *flags = g_strnfill(ndeop, modeflag); 294 irc_write( irc, ":%s!%s@%s MODE %s -%s%s", irc->mynick, irc->mynick, irc->myhost, 295 irc->channel, flags, deop ); 296 deop[0]='\0'; 297 ndeop=0; 298 g_free(flags); 299 } 300 301 switch(mode) { 302 /* "false" */ 303 case 0: 304 g_strlcat(deop, " ", 64); 305 g_strlcat(deop, u->nick, 64); 306 ndeop++; 307 break; 308 /* "encrypted" */ 309 case 1: 310 if(u->encrypted) { 311 g_strlcat(op, " ", 64); 312 g_strlcat(op, u->nick, 64); 313 nop++; 314 } else { 315 g_strlcat(deop, " ", 64); 316 g_strlcat(deop, u->nick, 64); 317 ndeop++; 318 } 319 break; 320 /* "trusted" */ 321 case 2: 322 if(u->encrypted > 1) { 323 g_strlcat(op, " ", 64); 324 g_strlcat(op, u->nick, 64); 325 nop++; 326 } else { 327 g_strlcat(deop, " ", 64); 328 g_strlcat(deop, u->nick, 64); 329 ndeop++; 330 } 331 break; 332 /* "notaway" */ 333 case 3: 334 if(u->away) { 335 g_strlcat(deop, " ", 64); 336 g_strlcat(deop, u->nick, 64); 337 ndeop++; 338 } else { 339 g_strlcat(op, " ", 64); 340 g_strlcat(op, u->nick, 64); 341 nop++; 342 } 343 } 344 } 345 /* dump anything left in op/deop lists */ 346 if(*op) { 347 char *flags = g_strnfill(nop, modeflag); 348 irc_write( irc, ":%s!%s@%s MODE %s +%s%s", irc->mynick, irc->mynick, irc->myhost, 349 irc->channel, flags, op ); 350 g_free(flags); 351 } 352 if(*deop) { 353 char *flags = g_strnfill(ndeop, modeflag); 354 irc_write( irc, ":%s!%s@%s MODE %s -%s%s", irc->mynick, irc->mynick, irc->myhost, 355 irc->channel, flags, deop ); 356 g_free(flags); 357 } 358 246 359 return value; 247 360 } 361 362 char *set_eval_op_buddies( set_t *set, char *value ) 363 { 364 return set_eval_mode_buddies(set, value, 'o'); 365 } 366 367 char *set_eval_halfop_buddies( set_t *set, char *value ) 368 { 369 return set_eval_mode_buddies(set, value, 'h'); 370 } 371 372 char *set_eval_voice_buddies( set_t *set, char *value ) 373 { 374 return set_eval_mode_buddies(set, value, 'v'); 375 } 376 377 /* possible values: never, opportunistic, manual, always */ 378 char *set_eval_otr_policy( set_t *set, char *value ) 379 { 380 if ( !strcmp(value, "never") ) 381 return value; 382 if ( !strcmp(value, "opportunistic") ) 383 return value; 384 if ( !strcmp(value, "manual") ) 385 return value; 386 if ( !strcmp(value, "always") ) 387 return value; 388 return NULL; 389 } 390 -
set.h
r9e768da r673a54c 100 100 /* Some not very generic evaluators that really shouldn't be here... */ 101 101 char *set_eval_to_char( set_t *set, char *value ); 102 char *set_eval_ops( set_t *set, char *value ); 102 char *set_eval_op_root( set_t *set, char *value ); 103 char *set_eval_op_user( set_t *set, char *value ); 104 char *set_eval_op_buddies( set_t *set, char *value ); 105 char *set_eval_halfop_buddies( set_t *set, char *value ); 106 char *set_eval_voice_buddies( set_t *set, char *value ); 107 char *set_eval_otr_policy( set_t *set, char *value ); 103 108 104 109 #endif /* __SET_H__ */ -
sock.h
r9e768da r673a54c 16 16 #else 17 17 # include <winsock2.h> 18 # include <ws2tcpip.h> 18 # ifndef _MSC_VER 19 # include <ws2tcpip.h> 20 # endif 19 21 # if !defined(BITLBEE_CORE) && defined(_MSC_VER) 20 22 # pragma comment(lib,"bitlbee.lib") 21 23 # endif 22 24 # include <io.h> 25 # define read(a,b,c) recv(a,b,c,0) 26 # define write(a,b,c) send(a,b,c,0) 27 # define umask _umask 28 # define mode_t int 23 29 # define sock_make_nonblocking(fd) { int non_block = 1; ioctlsocket(fd, FIONBIO, &non_block); } 24 30 # define sock_make_blocking(fd) { int non_block = 0; ioctlsocket(fd, FIONBIO, &non_block); } -
storage.c
r9e768da r673a54c 29 29 #include "bitlbee.h" 30 30 #include "crypting.h" 31 #include "otr.h" 31 32 32 33 extern storage_t storage_text; … … 116 117 117 118 status = st->load(irc, password); 118 if (status == STORAGE_OK) 119 if (status == STORAGE_OK) { 120 otr_load(irc); 119 121 return status; 120 122 } 121 123 if (status != STORAGE_NO_SUCH_USER) 122 124 return status; … … 139 141 return STORAGE_NO_SUCH_USER; 140 142 } 141 143 144 otr_save(irc); 142 145 st = ((storage_t *)global.storage->data)->save(irc, overwrite); 143 146 … … 165 168 ret = status; 166 169 } 170 if (ret == STORAGE_OK) { 171 otr_remove(nick); 172 } 167 173 168 174 return ret; … … 178 184 storage_t *primary_storage = gl->data; 179 185 irc_t *irc; 180 186 181 187 /* First, try to rename in the current write backend, assuming onick 182 188 * is stored there */ 183 189 status = primary_storage->rename(onick, nnick, password); 184 if (status != STORAGE_NO_SUCH_USER) 190 if (status != STORAGE_NO_SUCH_USER) { 191 otr_rename(onick, nnick); 185 192 return status; 193 } 186 194 187 195 /* Try to load from a migration backend and save to the current backend. … … 207 215 208 216 storage_remove(onick, password); 217 otr_rename(onick, nnick); 209 218 210 219 return STORAGE_OK; -
storage_text.c
r9e768da r673a54c 27 27 #include "bitlbee.h" 28 28 #include "crypting.h" 29 #ifdef _WIN3230 # define umask _umask31 # define mode_t int32 #endif33 34 #ifndef F_OK35 #define F_OK 036 #endif37 29 38 30 static void text_init (void) -
unix.c
r9e768da r673a54c 27 27 #include "commands.h" 28 28 #include "crypting.h" 29 #include "otr.h" 29 30 #include "protocols/nogaim.h" 30 31 #include "help.h" 31 32 #include "ipc.h" 33 #include "lib/ssl_client.h" 32 34 #include <signal.h> 33 35 #include <unistd.h> … … 54 56 b_main_init(); 55 57 nogaim_init(); 58 /* Ugly Note: libotr and gnutls both use libgcrypt. libgcrypt 59 has a process-global config state whose initialization happpens 60 twice if libotr and gnutls are used together. libotr installs custom 61 memory management functions for libgcrypt while our gnutls module 62 uses the defaults. Therefore we initialize OTR after SSL. *sigh* */ 63 ssl_init(); 64 otr_init(); 56 65 57 66 srand( time( NULL ) ^ getpid() ); … … 214 223 return( (double) time->tv_sec + (double) time->tv_usec / 1000000 ); 215 224 } 216 217 -
user.c
r9e768da r673a54c 141 141 } 142 142 143 user_t *user_findhandle( struct im_connection *ic, c har *handle )143 user_t *user_findhandle( struct im_connection *ic, const char *handle ) 144 144 { 145 145 user_t *u; -
user.h
r9e768da r673a54c 37 37 char is_private; 38 38 char online; 39 char encrypted; 39 40 40 41 char *handle; … … 56 57 int user_del( irc_t *irc, char *nick ); 57 58 G_MODULE_EXPORT user_t *user_find( irc_t *irc, char *nick ); 58 G_MODULE_EXPORT user_t *user_findhandle( struct im_connection *ic, c har *handle );59 G_MODULE_EXPORT user_t *user_findhandle( struct im_connection *ic, const char *handle ); 59 60 void user_rename( irc_t *irc, char *oldnick, char *newnick ); 60 61
Note: See TracChangeset
for help on using the changeset viewer.