Changes in / [2e44b1f:3f81999]
- Files:
-
- 3 added
- 39 edited
Legend:
- Unmodified
- Added
- Removed
-
Makefile
r2e44b1f r3f81999 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
r2e44b1f r3f81999 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
r2e44b1f r3f81999 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
r2e44b1f r3f81999 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
r2e44b1f r3f81999 45 45 char *pidfile; 46 46 char *motdfile; 47 char *welcomefile; 47 48 char *primary_storage; 48 49 char **migrate_storage; -
configure
r2e44b1f r3f81999 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
r2e44b1f r3f81999 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
r2e44b1f r3f81999 327 327 </description> 328 328 </bitlbee-command> 329 330 <bitlbee-command name="otr"> 331 <short-description>Off-the-Record encryption control</short-description> 332 <syntax>otr <subcommand> [<arguments>]</syntax> 333 334 <description> 335 336 <para> 337 Available subcommands: connect, disconnect, smp, trust, info, keygen, and forget. See <emphasis>help otr <subcommand></emphasis> for more information. 338 </para> 339 340 </description> 341 342 <bitlbee-command name="connect"> 343 <syntax>otr connect <nick></syntax> 344 345 <description> 346 347 <para> 348 Attempts to establish an encrypted connection with the specified user by sending a magic string. 349 </para> 350 351 </description> 352 353 </bitlbee-command> 354 355 <bitlbee-command name="disconnect"> 356 <syntax>otr disconnect <nick></syntax> 357 358 <description> 359 360 <para> 361 Resets the connection with the specified user to cleartext. 362 </para> 363 364 </description> 365 366 </bitlbee-command> 367 368 <bitlbee-command name="smp"> 369 <syntax>otr smp <nick> <secret></syntax> 370 371 <description> 372 373 <para> 374 Attempts to authenticate the given user's active fingerprint via the Socialist Millionaires' Protocol. 375 </para> 376 377 <para> 378 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. 379 </para> 380 381 </description> 382 383 </bitlbee-command> 384 385 <bitlbee-command name="trust"> 386 <syntax>otr trust <nick> <fp1> <fp2> <fp3> <fp4> <fp5></syntax> 387 388 <description> 389 390 <para> 391 Manually affirms trust in the specified fingerprint, given as five blocks of precisely eight (hexadecimal) digits each. 392 </para> 393 394 </description> 395 396 </bitlbee-command> 397 398 <bitlbee-command name="info"> 399 <syntax>otr info</syntax> 400 <syntax>otr info <nick></syntax> 401 402 <description> 403 404 <para> 405 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. 406 </para> 407 408 </description> 409 410 </bitlbee-command> 411 412 <bitlbee-command name="keygen"> 413 <syntax>otr keygen <account-no></syntax> 414 415 <description> 416 417 <para> 418 Generates a new OTR private key for the given account. 419 </para> 420 421 </description> 422 423 </bitlbee-command> 424 425 <bitlbee-command name="forget"> 426 <syntax>otr forget <thing> <arguments></syntax> 427 428 <description> 429 430 <para> 431 Forgets some part of our OTR userstate. Available things: fingerprint, context, and key. See <emphasis>help otr forget <thing></emphasis> for more information. 432 </para> 433 434 </description> 435 436 <bitlbee-command name="fingerprint"> 437 <syntax>otr forget fingerprint <nick> <fingerprint></syntax> 438 439 <description> 440 441 <para> 442 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. 443 </para> 444 445 </description> 446 447 </bitlbee-command> 448 449 <bitlbee-command name="context"> 450 <syntax>otr forget context <nick></syntax> 451 452 <description> 453 454 <para> 455 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. 456 </para> 457 458 </description> 459 460 </bitlbee-command> 461 462 <bitlbee-command name="key"> 463 <syntax>otr forget key <fingerprint></syntax> 464 465 <description> 466 467 <para> 468 Forgets an OTR private key matching the specified fingerprint. It is allowed to specify only a (unique) prefix of the fingerprint. 469 </para> 470 471 </description> 472 473 </bitlbee-command> 474 475 </bitlbee-command> 476 477 </bitlbee-command> 329 478 330 479 <bitlbee-command name="set"> … … 495 644 </bitlbee-setting> 496 645 646 <bitlbee-setting name="color_encrypted" type="boolean" scope="global"> 647 <default>true</default> 648 649 <description> 650 <para> 651 If set to true, BitlBee will color incoming encrypted messages according to their fingerprint trust level: untrusted=red, trusted=green. 652 </para> 653 </description> 654 655 </bitlbee-setting> 656 497 657 <bitlbee-setting name="debug" type="boolean" scope="global"> 498 658 <default>false</default> … … 561 721 </bitlbee-setting> 562 722 723 <bitlbee-setting name="halfop_buddies" type="string" scope="global"> 724 <default>encrypted</default> 725 <possible-values>encrypted, trusted, notaway, false</possible-values> 726 727 <description> 728 <para> 729 Specifies under which circumstances BitlBee should give the "halfop" mode flag (+h) to buddies. 730 </para> 731 732 <para> 733 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. 734 </para> 735 </description> 736 737 </bitlbee-setting> 738 563 739 <bitlbee-setting name="lcnicks" type="boolean" scope="global"> 564 740 <default>true</default> … … 583 759 </bitlbee-setting> 584 760 761 <bitlbee-setting name="op_buddies" type="string" scope="global"> 762 <default>trusted</default> 763 <possible-values>encrypted, trusted, notaway, false</possible-values> 764 765 <description> 766 <para> 767 Specifies under which circumstances BitlBee should give the "op" mode flag (+o) to buddies. 768 </para> 769 770 <para> 771 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. 772 </para> 773 </description> 774 775 </bitlbee-setting> 776 777 <bitlbee-setting name="op_root" type="bool" scope="global"> 778 <default>true</default> 779 780 <description> 781 <para> 782 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. 783 </para> 784 </description> 785 </bitlbee-setting> 786 787 <bitlbee-setting name="op_user" type="bool" scope="global"> 788 <default>true</default> 789 790 <description> 791 <para> 792 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. 793 </para> 794 </description> 795 </bitlbee-setting> 796 797 <bitlbee-setting name="otr_policy" type="string" scope="global"> 798 <default>opportunistic</default> 799 <possible-values>never, opportunistic, manual, always</possible-values> 800 801 <description> 802 <para> 803 This setting controls the policy for establishing Off-the-Record connections. 804 </para> 805 <para> 806 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. 807 </para> 808 </description> 809 </bitlbee-setting> 810 585 811 <bitlbee-setting name="nick" type="string" scope="chat"> 586 812 … … 588 814 <para> 589 815 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. 590 </para>591 </description>592 </bitlbee-setting>593 594 <bitlbee-setting name="ops" type="string" scope="global">595 <default>both</default>596 <possible-values>both, root, user, none</possible-values>597 598 <description>599 <para>600 Some people prefer themself and root to have operator status in &bitlbee, other people don't. You can change these states using this setting.601 </para>602 603 <para>604 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.605 816 </para> 606 817 </description> … … 796 1007 </para> 797 1008 </description> 1009 </bitlbee-setting> 1010 1011 <bitlbee-setting name="voice_buddies" type="string" scope="global"> 1012 <default>trusted</default> 1013 <possible-values>encrypted, trusted, notaway, false</possible-values> 1014 1015 <description> 1016 <para> 1017 Specifies under which circumstances BitlBee should give the "voice" mode flag (+v) to buddies. 1018 </para> 1019 1020 <para> 1021 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. 1022 </para> 1023 </description> 1024 798 1025 </bitlbee-setting> 799 1026 -
ipc.c
r2e44b1f r3f81999 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
r2e44b1f r3f81999 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
r2e44b1f r3f81999 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
r2e44b1f r3f81999 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
r2e44b1f r3f81999 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
r2e44b1f r3f81999 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
r2e44b1f r3f81999 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
r2e44b1f r3f81999 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
r2e44b1f r3f81999 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
r2e44b1f r3f81999 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
r2e44b1f r3f81999 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
r2e44b1f r3f81999 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
r2e44b1f r3f81999 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
r2e44b1f r3f81999 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
r2e44b1f r3f81999 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
r2e44b1f r3f81999 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
r2e44b1f r3f81999 661 661 662 662 /* LISPy... */ 663 if( ( set_getbool( &ic->irc->set, "away_devoice" ) ) && /* Don't do a thing when user doesn't want it */ 664 ( u->online ) && /* Don't touch offline people */ 665 ( ( ( u->online != oo ) && !u->away ) || /* Voice joining people */ 666 ( ( u->online == oo ) && ( oa == !u->away ) ) ) ) /* (De)voice people changing state */ 663 if( ( u->online ) && /* Don't touch offline people */ 664 ( ( ( u->online != oo ) && !u->away ) || /* Do joining people */ 665 ( ( u->online == oo ) && ( oa == !u->away ) ) ) ) /* Do people changing state */ 667 666 { 668 667 char *from; … … 677 676 ic->irc->myhost ); 678 677 } 679 irc_write( ic->irc, ":%s MODE %s %cv %s", from, ic->irc->channel, 680 u->away?'-':'+', u->nick ); 678 if(!strcmp(set_getstr(&ic->irc->set, "voice_buddies"), "notaway")) { 679 irc_write( ic->irc, ":%s MODE %s %cv %s", from, ic->irc->channel, 680 u->away?'-':'+', u->nick ); 681 } 682 if(!strcmp(set_getstr(&ic->irc->set, "halfop_buddies"), "notaway")) { 683 irc_write( ic->irc, ":%s MODE %s %ch %s", from, ic->irc->channel, 684 u->away?'-':'+', u->nick ); 685 } 686 if(!strcmp(set_getstr(&ic->irc->set, "op_buddies"), "notaway")) { 687 irc_write( ic->irc, ":%s MODE %s %co %s", from, ic->irc->channel, 688 u->away?'-':'+', u->nick ); 689 } 681 690 g_free( from ); 682 691 } … … 688 697 char *wrapped; 689 698 user_t *u; 690 699 700 /* pass the message through OTR */ 701 msg = otr_handle_message(ic, handle, msg); 702 if(!msg) { 703 /* this was an internal OTR protocol message */ 704 return; 705 } 706 691 707 u = user_findhandle( ic, handle ); 692 693 708 if( !u ) 694 709 { … … 700 715 imcb_log( ic, "Ignoring message from unknown handle %s", handle ); 701 716 717 g_free(msg); 702 718 return; 703 719 } … … 732 748 irc_msgfrom( irc, u->nick, wrapped ); 733 749 g_free( wrapped ); 750 g_free( msg ); 734 751 } 735 752 … … 972 989 973 990 974 /* Misc. BitlBee stuff which shouldn't really be here */975 976 char *set_eval_away_devoice( set_t *set, char *value )977 {978 irc_t *irc = set->data;979 int st;980 981 if( !is_bool( value ) )982 return SET_INVALID;983 984 st = bool2int( value );985 986 /* Horror.... */987 988 if( st != set_getbool( &irc->set, "away_devoice" ) )989 {990 char list[80] = "";991 user_t *u = irc->users;992 int i = 0, count = 0;993 char pm;994 char v[80];995 996 if( st )997 pm = '+';998 else999 pm = '-';1000 1001 while( u )1002 {1003 if( u->ic && u->online && !u->away )1004 {1005 if( ( strlen( list ) + strlen( u->nick ) ) >= 79 )1006 {1007 for( i = 0; i < count; v[i++] = 'v' ); v[i] = 0;1008 irc_write( irc, ":%s MODE %s %c%s%s",1009 irc->myhost,1010 irc->channel, pm, v, list );1011 1012 *list = 0;1013 count = 0;1014 }1015 1016 sprintf( list + strlen( list ), " %s", u->nick );1017 count ++;1018 }1019 u = u->next;1020 }1021 1022 /* $v = 'v' x $i */1023 for( i = 0; i < count; v[i++] = 'v' ); v[i] = 0;1024 irc_write( irc, ":%s MODE %s %c%s%s", irc->myhost,1025 irc->channel, pm, v, list );1026 }1027 1028 return value;1029 }1030 1031 1032 1033 1034 991 /* The plan is to not allow straight calls to prpl functions anymore, but do 1035 992 them all from some wrappers. We'll start to define some down here: */ … … 1045 1002 msg = buf; 1046 1003 } 1047 1048 st = ic->acc->prpl->buddy_msg( ic, handle, msg, flags ); 1049 g_free( buf ); 1050 1004 1005 /* if compiled without otr support, this just calls the prpl buddy_msg */ 1006 st = otr_send_message(ic, handle, msg, flags); 1007 1008 g_free(buf); 1051 1009 return st; 1052 1010 } -
protocols/nogaim.h
r2e44b1f r3f81999 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 … … 324 328 325 329 /* Misc. stuff */ 326 char *set_eval_away_devoice( set_t *set, char *value );327 330 gboolean auto_reconnect( gpointer data, gint fd, b_input_condition cond ); 328 331 void cancel_auto_reconnect( struct account *a ); -
protocols/oscar/oscar.c
r2e44b1f r3f81999 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
r2e44b1f r3f81999 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
r2e44b1f r3f81999 369 369 struct prpl *ret = g_new0(struct prpl, 1); 370 370 ret->name = "yahoo"; 371 ret->mms = 832; /* this guess taken from libotr UPGRADING file */ 371 372 ret->init = byahoo_init; 372 373 -
protocols/yahoo/yahoo_httplib.c
r2e44b1f r3f81999 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
r2e44b1f r3f81999 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
r2e44b1f r3f81999 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 ) … … 1209 1214 { "qlist", 0, cmd_qlist, 0 }, 1210 1215 { "join_chat", 2, cmd_join_chat, 0 }, 1216 { "otr", 1, cmd_otr, 0 }, 1211 1217 { "chat", 1, cmd_chat, 0 }, 1212 1218 { NULL } -
set.c
r2e44b1f r3f81999 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
r2e44b1f r3f81999 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
r2e44b1f r3f81999 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
r2e44b1f r3f81999 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
r2e44b1f r3f81999 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
r2e44b1f r3f81999 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.h
r2e44b1f r3f81999 37 37 char is_private; 38 38 char online; 39 char encrypted; 39 40 40 41 char *handle;
Note: See TracChangeset
for help on using the changeset viewer.