Changes in / [f9928cb:5f8ab6a9]
- Files:
-
- 3 added
- 39 edited
Legend:
- Unmodified
- Added
- Removed
-
Makefile
rf9928cb r5f8ab6a9 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
rf9928cb r5f8ab6a9 85 85 # MotdFile = /etc/bitlbee/motd.txt 86 86 87 ## WelcomeFile 88 ## 89 ## Specify an alternative file for the welcome message displayed when joining the 90 ## control channel. Default value depends on the --etcdir argument to configure. 91 ## 92 # WelcomeFile = /etc/bitlbee/welcome.txt 93 87 94 ## ConfigDir 88 95 ## -
bitlbee.h
rf9928cb r5f8ab6a9 30 30 #define _GNU_SOURCE /* Stupid GNU :-P */ 31 31 #endif 32 33 /* Depend on Windows 2000 for now since we need getaddrinfo() */ 34 #define _WIN32_WINNT 0x0501 32 35 33 36 /* Depend on Windows 2000 for now since we need getaddrinfo() */ … … 139 142 #include "misc.h" 140 143 #include "proxy.h" 144 #include "otr.h" 141 145 142 146 typedef struct global { … … 150 154 char *helpfile; 151 155 int restart; 156 OtrlMessageAppOps otr_ops; /* collects interface functions required by OTR */ 152 157 } global_t; 153 158 -
conf.c
rf9928cb r5f8ab6a9 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; … … 250 251 g_free( conf->motdfile ); 251 252 conf->motdfile = g_strdup( ini->value ); 253 } 254 else if( g_strcasecmp( ini->key, "welcomefile" ) == 0 ) 255 { 256 g_free( conf->welcomefile ); 257 conf->welcomefile = g_strdup( ini->value ); 252 258 } 253 259 else if( g_strcasecmp( ini->key, "account_storage" ) == 0 ) -
conf.h
rf9928cb r5f8ab6a9 45 45 char *pidfile; 46 46 char *motdfile; 47 char *welcomefile; 47 48 char *primary_storage; 48 49 char **migrate_storage; -
configure
rf9928cb r5f8ab6a9 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 … … 444 446 fi 445 447 448 otrprefix="" 449 for i in / /usr /usr/local; do 450 if [ -f ${i}/lib/libotr.a ]; then 451 otrprefix=${i} 452 break 453 fi 454 done 455 if [ "$otr" = "auto" ]; then 456 if [ -n "$otrprefix" ]; then 457 otr=1 458 else 459 otr=0 460 fi 461 fi 462 if [ "$otr" = 1 ]; then 463 echo '#define WITH_OTR' >> config.h 464 echo "EFLAGS+=-L${otrprefix}/lib -lotr" >> Makefile.settings 465 echo "CFLAGS+=-I${otrprefix}/include" >> Makefile.settings 466 else 467 echo '#undef WITH_OTR' >> config.h 468 fi 469 446 470 if [ ! -e doc/user-guide/help.txt ] && ! type xmlto > /dev/null 2> /dev/null; then 447 471 echo … … 576 600 fi 577 601 602 if [ "$otr" = "1" ]; then 603 echo ' Off-the-Record (OTR) Messaging enabled.' 604 else 605 echo ' Off-the-Record (OTR) Messaging disabled.' 606 fi 607 578 608 echo ' Using event handler: '$events 579 609 echo ' Using SSL library: '$ssl -
doc/README
rf9928cb r5f8ab6a9 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
rf9928cb r5f8ab6a9 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"> … … 511 660 </bitlbee-setting> 512 661 662 <bitlbee-setting name="color_encrypted" type="boolean" scope="global"> 663 <default>true</default> 664 665 <description> 666 <para> 667 If set to true, BitlBee will color incoming encrypted messages according to their fingerprint trust level: untrusted=red, trusted=green. 668 </para> 669 </description> 670 671 </bitlbee-setting> 672 513 673 <bitlbee-setting name="debug" type="boolean" scope="global"> 514 674 <default>false</default> … … 577 737 </bitlbee-setting> 578 738 739 <bitlbee-setting name="halfop_buddies" type="string" scope="global"> 740 <default>encrypted</default> 741 <possible-values>encrypted, trusted, notaway, false</possible-values> 742 743 <description> 744 <para> 745 Specifies under which circumstances BitlBee should give the "halfop" mode flag (+h) to buddies. 746 </para> 747 748 <para> 749 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. 750 </para> 751 </description> 752 753 </bitlbee-setting> 754 579 755 <bitlbee-setting name="lcnicks" type="boolean" scope="global"> 580 756 <default>true</default> … … 597 773 </description> 598 774 775 </bitlbee-setting> 776 777 <bitlbee-setting name="op_buddies" type="string" scope="global"> 778 <default>trusted</default> 779 <possible-values>encrypted, trusted, notaway, false</possible-values> 780 781 <description> 782 <para> 783 Specifies under which circumstances BitlBee should give the "op" mode flag (+o) to buddies. 784 </para> 785 786 <para> 787 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. 788 </para> 789 </description> 790 791 </bitlbee-setting> 792 793 <bitlbee-setting name="op_root" type="bool" scope="global"> 794 <default>true</default> 795 796 <description> 797 <para> 798 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. 799 </para> 800 </description> 801 </bitlbee-setting> 802 803 <bitlbee-setting name="op_user" type="bool" scope="global"> 804 <default>true</default> 805 806 <description> 807 <para> 808 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. 809 </para> 810 </description> 811 </bitlbee-setting> 812 813 <bitlbee-setting name="otr_policy" type="string" scope="global"> 814 <default>opportunistic</default> 815 <possible-values>never, opportunistic, manual, always</possible-values> 816 817 <description> 818 <para> 819 This setting controls the policy for establishing Off-the-Record connections. 820 </para> 821 <para> 822 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. 823 </para> 824 </description> 599 825 </bitlbee-setting> 600 826 … … 843 1069 </para> 844 1070 </description> 1071 </bitlbee-setting> 1072 1073 <bitlbee-setting name="voice_buddies" type="string" scope="global"> 1074 <default>trusted</default> 1075 <possible-values>encrypted, trusted, notaway, false</possible-values> 1076 1077 <description> 1078 <para> 1079 Specifies under which circumstances BitlBee should give the "voice" mode flag (+v) to buddies. 1080 </para> 1081 1082 <para> 1083 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. 1084 </para> 1085 </description> 1086 845 1087 </bitlbee-setting> 846 1088 -
ipc.c
rf9928cb r5f8ab6a9 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
rf9928cb r5f8ab6a9 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
rf9928cb r5f8ab6a9 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; … … 161 164 162 165 irc_connection_list = g_slist_append( irc_connection_list, irc ); 166 163 167 164 168 s = set_add( &irc->set, "away", NULL, set_eval_away_status, irc ); 165 169 s->flags |= SET_NULL_OK; 166 s = set_add( &irc->set, "away_devoice", "true", set_eval_away_devoice, irc );167 170 s = set_add( &irc->set, "auto_connect", "true", set_eval_bool, irc ); 168 171 s = set_add( &irc->set, "auto_reconnect", "true", set_eval_bool, irc ); … … 171 174 s = set_add( &irc->set, "buddy_sendbuffer_delay", "200", set_eval_int, irc ); 172 175 s = set_add( &irc->set, "charset", "utf-8", set_eval_charset, irc ); 176 s = set_add( &irc->set, "color_encrypted", "true", set_eval_bool, irc ); 173 177 s = set_add( &irc->set, "debug", "false", set_eval_bool, irc ); 174 178 s = set_add( &irc->set, "default_target", "root", NULL, irc ); 175 179 s = set_add( &irc->set, "display_namechanges", "false", set_eval_bool, irc ); 176 180 s = set_add( &irc->set, "handle_unknown", "root", NULL, irc ); 181 s = set_add( &irc->set, "halfop_buddies", "encrypted", set_eval_halfop_buddies, irc ); 177 182 s = set_add( &irc->set, "lcnicks", "true", set_eval_bool, irc ); 178 s = set_add( &irc->set, "ops", "both", set_eval_ops, irc ); 183 s = set_add( &irc->set, "op_buddies", "trusted", set_eval_op_buddies, irc ); 184 s = set_add( &irc->set, "op_root", "true", set_eval_op_root, irc ); 185 s = set_add( &irc->set, "otr_policy", "oppurtunistic", set_eval_otr_policy, irc ); 179 186 s = set_add( &irc->set, "password", NULL, set_eval_password, irc ); 180 187 s->flags |= SET_NULL_OK; … … 184 191 s = set_add( &irc->set, "save_on_quit", "true", set_eval_bool, irc ); 185 192 s = set_add( &irc->set, "simulate_netsplit", "true", set_eval_bool, irc ); 186 s = set_add( &irc->set, "status", NULL, set_eval_away_status, irc );187 s->flags |= SET_NULL_OK;188 193 s = set_add( &irc->set, "strip_html", "true", NULL, irc ); 189 194 s = set_add( &irc->set, "to_char", ": ", set_eval_to_char, irc ); 190 195 s = set_add( &irc->set, "typing_notice", "false", set_eval_bool, irc ); 196 s = set_add( &irc->set, "voice_buddies", "notaway", set_eval_voice_buddies, irc); 191 197 192 198 conf_loaddefaults( irc ); 193 199 200 irc->otr = otr_new(); 201 194 202 /* Evaluator sets the iconv/oconv structures. */ 195 203 set_eval_charset( set_find( &irc->set, "charset" ), set_getstr( &irc->set, "charset" ) ); … … 343 351 344 352 g_free( irc->last_target ); 353 354 otr_free(irc->otr); 345 355 346 356 g_free( irc ); 347 357 348 358 if( global.conf->runmode == RUNMODE_INETD || 349 359 global.conf->runmode == RUNMODE_FORKDAEMON || … … 714 724 } 715 725 726 const char *user_mode_prefix( irc_t *irc, user_t *u ) 727 { 728 static char op[] = "@"; 729 static char halfop[] = "%"; 730 static char voice[] = "+"; 731 static char none[] = ""; 732 733 int or = set_getbool(&irc->set, "op_root"); 734 int ou = set_getbool(&irc->set, "op_user"); 735 char *ob = set_getstr(&irc->set, "op_buddies"); 736 char *hb = set_getstr(&irc->set, "halfop_buddies"); 737 char *vb = set_getstr(&irc->set, "voice_buddies"); 738 739 if( (!strcmp(u->nick, irc->mynick) && or) || 740 (!strcmp(u->nick, irc->nick) && ou) || 741 (!u->away && !strcmp(ob, "notaway")) || 742 (u->encrypted && !strcmp(ob, "encrypted")) || 743 (u->encrypted>1 && !strcmp(ob, "trusted")) 744 ) 745 return op; 746 else if( (!u->away && !strcmp(hb, "notaway")) || 747 (u->encrypted && !strcmp(hb, "encrypted")) || 748 (u->encrypted>1 && !strcmp(hb, "trusted")) 749 ) 750 return halfop; 751 else if( (!u->away && !strcmp(vb, "notaway")) || 752 (u->encrypted && !strcmp(vb, "encrypted")) || 753 (u->encrypted>1 && !strcmp(vb, "trusted")) 754 ) 755 return voice; 756 else 757 return none; 758 } 759 716 760 void irc_names( irc_t *irc, char *channel ) 717 761 { … … 719 763 char namelist[385] = ""; 720 764 struct groupchat *c = NULL; 721 char *ops = set_getstr( &irc->set, "ops" );722 765 723 766 /* RFCs say there is no error reply allowed on NAMES, so when the … … 734 777 } 735 778 736 if( u->ic && !u->away && set_getbool( &irc->set, "away_devoice" ) ) 737 strcat( namelist, "+" ); 738 else if( ( strcmp( u->nick, irc->mynick ) == 0 && ( strcmp( ops, "root" ) == 0 || strcmp( ops, "both" ) == 0 ) ) || 739 ( strcmp( u->nick, irc->nick ) == 0 && ( strcmp( ops, "user" ) == 0 || strcmp( ops, "both" ) == 0 ) ) ) 740 strcat( namelist, "@" ); 741 779 strcat( namelist, user_mode_prefix(irc, u) ); 742 780 strcat( namelist, u->nick ); 743 781 strcat( namelist, " " ); … … 750 788 /* root and the user aren't in the channel userlist but should 751 789 show up in /NAMES, so list them first: */ 752 sprintf( namelist, "%s%s %s%s ", s trcmp( ops, "root" ) == 0 || strcmp( ops, "both") ? "@" : "", irc->mynick,753 s trcmp( ops, "user" ) == 0 || strcmp( ops, "both") ? "@" : "", irc->nick );790 sprintf( namelist, "%s%s %s%s ", set_getbool(&irc->set, "op_root") ? "@" : "", irc->mynick, 791 set_getbool(&irc->set, "op_user") ? "@" : "", irc->nick ); 754 792 755 793 for( l = c->in_room; l; l = l->next ) if( ( u = user_findhandle( c->ic, l->data ) ) ) … … 761 799 } 762 800 801 strcat( namelist, user_mode_prefix(irc, u) ); 763 802 strcat( namelist, u->nick ); 764 803 strcat( namelist, " " ); … … 802 841 irc_reply( irc, 3, ":%s", IRCD_INFO ); 803 842 irc_reply( irc, 4, "%s %s %s %s", irc->myhost, BITLBEE_VERSION, UMODES UMODES_PRIV, CMODES ); 804 irc_reply( irc, 5, "PREFIX=(o v)@+ CHANTYPES=%s CHANMODES=,,,%s NICKLEN=%d NETWORK=BitlBee "843 irc_reply( irc, 5, "PREFIX=(ohv)@%%+ CHANTYPES=%s CHANMODES=,,,%s NICKLEN=%d NETWORK=BitlBee " 805 844 "CASEMAPPING=rfc1459 MAXTARGETS=1 WATCH=128 :are supported by this server", 806 845 CTYPES, CMODES, MAX_NICK_LENGTH - 1 ); … … 808 847 irc->umode[0] = '\0'; 809 848 irc_umode_set( irc, "+" UMODE, 1 ); 810 811 u = user_add( irc, irc->mynick ); 849 u = user_add( irc, irc->mynick ); 812 850 u->host = g_strdup( irc->myhost ); 813 851 u->realname = g_strdup( ROOT_FN ); … … 831 869 irc_spawn( irc, u ); 832 870 833 irc_usermsg( irc, "Welcome to the BitlBee gateway!\n\n" 834 "If you've never used BitlBee before, please do read the help " 835 "information using the \x02help\x02 command. Lots of FAQs are " 836 "answered there.\n" 837 "If you already have an account on this server, just use the " 838 "\x02identify\x02 command to identify yourself." ); 871 irc_welcome( irc ); 839 872 840 873 if( global.conf->runmode == RUNMODE_FORKDAEMON || global.conf->runmode == RUNMODE_DAEMON ) … … 851 884 root_command( irc, send_cmd ); 852 885 g_free( send_cmd[1] ); 886 } 887 } 888 889 static void irc_welcome( irc_t *irc ) 890 { 891 FILE *f; 892 893 f = fopen( global.conf->welcomefile, "r" ); 894 if( !f ) 895 { 896 irc_usermsg( irc, "Welcome to the BitlBee gateway!\n\n" 897 "If you've never used BitlBee before, please do read the help " 898 "information using the \x02help\x02 command. Lots of FAQs are " 899 "answered there.\n" 900 "OTR users please note: Private key files are owned by the user " 901 "BitlBee is running as.\n" 902 "If you already have an account on this server, just use the " 903 "\x02identify\x02 command to identify yourself." ); 904 } 905 else 906 { 907 char linebuf[380]; 908 909 while( fgets( linebuf, 380, f ) ) 910 { 911 irc_usermsg( irc, linebuf ); 912 } 913 914 fclose( f ); 853 915 } 854 916 } -
irc.h
rf9928cb r5f8ab6a9 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
rf9928cb r5f8ab6a9 604 604 { "completions", 0, irc_cmd_completions, IRC_CMD_LOGGED_IN }, 605 605 { "die", 0, NULL, IRC_CMD_OPER_ONLY | IRC_CMD_TO_MASTER }, 606 { "deaf", 0, NULL, IRC_CMD_OPER_ONLY | IRC_CMD_TO_MASTER },607 606 { "wallops", 1, NULL, IRC_CMD_OPER_ONLY | IRC_CMD_TO_MASTER }, 608 607 { "wall", 1, NULL, IRC_CMD_OPER_ONLY | IRC_CMD_TO_MASTER }, -
lib/misc.c
rf9928cb r5f8ab6a9 122 122 char *s = out, *cs; 123 123 int i, matched; 124 int taglen; 124 125 125 126 memset( out, 0, strlen( in ) + 1 ); … … 138 139 in ++; 139 140 141 taglen = in-cs-1; /* not <0 because the above loop runs at least once */ 140 142 if( *in ) 141 143 { 142 if( g_strncasecmp( cs+1, "br", 2) == 0 ) 144 if( g_strncasecmp( cs+1, "b", taglen) == 0 ) 145 *(s++) = '\x02'; 146 else if( g_strncasecmp( cs+1, "/b", taglen) == 0 ) 147 *(s++) = '\x02'; 148 else if( g_strncasecmp( cs+1, "i", taglen) == 0 ) 149 *(s++) = '\x1f'; 150 else if( g_strncasecmp( cs+1, "/i", taglen) == 0 ) 151 *(s++) = '\x1f'; 152 else if( g_strncasecmp( cs+1, "br", 2) == 0 ) 143 153 *(s++) = '\n'; 144 154 in ++; -
lib/ssl_bogus.c
rf9928cb r5f8ab6a9 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
rf9928cb r5f8ab6a9 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
rf9928cb r5f8ab6a9 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
rf9928cb r5f8ab6a9 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
rf9928cb r5f8ab6a9 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
rf9928cb r5f8ab6a9 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
rf9928cb r5f8ab6a9 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
rf9928cb r5f8ab6a9 532 532 533 533 ret->name = "jabber"; 534 ret->mms = 0; /* no limit */ 534 535 ret->login = jabber_login; 535 536 ret->init = jabber_init; -
protocols/msn/msn.c
rf9928cb r5f8ab6a9 319 319 320 320 ret->name = "msn"; 321 ret->mms = 1409; /* this guess taken from libotr UPGRADING file */ 321 322 ret->login = msn_login; 322 323 ret->init = msn_init; -
protocols/msn/ns.c
rf9928cb r5f8ab6a9 285 285 if( num_parts == 5 ) 286 286 { 287 int i, groupcount; 288 289 groupcount = atoi( cmd[4] ); 290 if( groupcount > 0 ) 291 { 292 /* valgrind says this is leaking memory, I'm guessing 293 that this happens during server redirects. */ 294 if( md->grouplist ) 295 { 296 for( i = 0; i < md->groupcount; i ++ ) 297 g_free( md->grouplist[i] ); 298 g_free( md->grouplist ); 299 } 300 301 md->groupcount = groupcount; 287 md->buddycount = atoi( cmd[3] ); 288 md->groupcount = atoi( cmd[4] ); 289 if( md->groupcount > 0 ) 302 290 md->grouplist = g_new0( char *, md->groupcount ); 303 } 304 305 md->buddycount = atoi( cmd[3] ); 291 306 292 if( !*cmd[3] || md->buddycount == 0 ) 307 293 msn_logged_in( ic ); -
protocols/nogaim.c
rf9928cb r5f8ab6a9 693 693 694 694 /* LISPy... */ 695 if( ( set_getbool( &ic->irc->set, "away_devoice" ) ) && /* Don't do a thing when user doesn't want it */ 696 ( u->online ) && /* Don't touch offline people */ 697 ( ( ( u->online != oo ) && !u->away ) || /* Voice joining people */ 698 ( ( u->online == oo ) && ( oa == !u->away ) ) ) ) /* (De)voice people changing state */ 695 if( ( u->online ) && /* Don't touch offline people */ 696 ( ( ( u->online != oo ) && !u->away ) || /* Do joining people */ 697 ( ( u->online == oo ) && ( oa == !u->away ) ) ) ) /* Do people changing state */ 699 698 { 700 699 char *from; … … 709 708 ic->irc->myhost ); 710 709 } 711 irc_write( ic->irc, ":%s MODE %s %cv %s", from, ic->irc->channel, 712 u->away?'-':'+', u->nick ); 710 if(!strcmp(set_getstr(&ic->irc->set, "voice_buddies"), "notaway")) { 711 irc_write( ic->irc, ":%s MODE %s %cv %s", from, ic->irc->channel, 712 u->away?'-':'+', u->nick ); 713 } 714 if(!strcmp(set_getstr(&ic->irc->set, "halfop_buddies"), "notaway")) { 715 irc_write( ic->irc, ":%s MODE %s %ch %s", from, ic->irc->channel, 716 u->away?'-':'+', u->nick ); 717 } 718 if(!strcmp(set_getstr(&ic->irc->set, "op_buddies"), "notaway")) { 719 irc_write( ic->irc, ":%s MODE %s %co %s", from, ic->irc->channel, 720 u->away?'-':'+', u->nick ); 721 } 713 722 g_free( from ); 714 723 } … … 720 729 char *wrapped; 721 730 user_t *u; 722 731 732 /* pass the message through OTR */ 733 msg = otr_handle_message(ic, handle, msg); 734 if(!msg) { 735 /* this was an internal OTR protocol message */ 736 return; 737 } 738 723 739 u = user_findhandle( ic, handle ); 724 725 740 if( !u ) 726 741 { … … 732 747 imcb_log( ic, "Ignoring message from unknown handle %s", handle ); 733 748 749 g_free(msg); 734 750 return; 735 751 } … … 764 780 irc_msgfrom( irc, u->nick, wrapped ); 765 781 g_free( wrapped ); 782 g_free( msg ); 766 783 } 767 784 … … 1004 1021 1005 1022 1006 /* Misc. BitlBee stuff which shouldn't really be here */1007 1008 char *set_eval_away_devoice( set_t *set, char *value )1009 {1010 irc_t *irc = set->data;1011 int st;1012 1013 if( !is_bool( value ) )1014 return SET_INVALID;1015 1016 st = bool2int( value );1017 1018 /* Horror.... */1019 1020 if( st != set_getbool( &irc->set, "away_devoice" ) )1021 {1022 char list[80] = "";1023 user_t *u = irc->users;1024 int i = 0, count = 0;1025 char pm;1026 char v[80];1027 1028 if( st )1029 pm = '+';1030 else1031 pm = '-';1032 1033 while( u )1034 {1035 if( u->ic && u->online && !u->away )1036 {1037 if( ( strlen( list ) + strlen( u->nick ) ) >= 79 )1038 {1039 for( i = 0; i < count; v[i++] = 'v' ); v[i] = 0;1040 irc_write( irc, ":%s MODE %s %c%s%s",1041 irc->myhost,1042 irc->channel, pm, v, list );1043 1044 *list = 0;1045 count = 0;1046 }1047 1048 sprintf( list + strlen( list ), " %s", u->nick );1049 count ++;1050 }1051 u = u->next;1052 }1053 1054 /* $v = 'v' x $i */1055 for( i = 0; i < count; v[i++] = 'v' ); v[i] = 0;1056 irc_write( irc, ":%s MODE %s %c%s%s", irc->myhost,1057 irc->channel, pm, v, list );1058 }1059 1060 return value;1061 }1062 1063 1064 1065 1066 1023 /* The plan is to not allow straight calls to prpl functions anymore, but do 1067 1024 them all from some wrappers. We'll start to define some down here: */ … … 1077 1034 msg = buf; 1078 1035 } 1079 1080 st = ic->acc->prpl->buddy_msg( ic, handle, msg, flags ); 1081 g_free( buf ); 1082 1036 1037 /* if compiled without otr support, this just calls the prpl buddy_msg */ 1038 st = otr_send_message(ic, handle, msg, flags); 1039 1040 g_free(buf); 1083 1041 return st; 1084 1042 } -
protocols/nogaim.h
rf9928cb r5f8ab6a9 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
rf9928cb r5f8ab6a9 2674 2674 struct prpl *ret = g_new0(struct prpl, 1); 2675 2675 ret->name = "oscar"; 2676 ret->mms = 2343; /* this guess taken from libotr UPGRADING file */ 2676 2677 ret->away_states = oscar_away_states; 2677 2678 ret->init = oscar_init; -
protocols/yahoo/libyahoo2.c
rf9928cb r5f8ab6a9 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
rf9928cb r5f8ab6a9 350 350 struct prpl *ret = g_new0(struct prpl, 1); 351 351 ret->name = "yahoo"; 352 ret->mms = 832; /* this guess taken from libotr UPGRADING file */ 352 353 ret->init = byahoo_init; 353 354 -
protocols/yahoo/yahoo_httplib.c
rf9928cb r5f8ab6a9 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
rf9928cb r5f8ab6a9 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
rf9928cb r5f8ab6a9 29 29 #include "bitlbee.h" 30 30 #include "help.h" 31 #include "otr.h" 31 32 #include "chat.h" 32 33 … … 414 415 415 416 irc_usermsg( irc, "Account successfully added" ); 417 418 if(otr_check_for_key(a)) { 419 irc_usermsg(irc, "otr: you will be notified when it completes"); 420 } 416 421 } 417 422 else if( g_strcasecmp( cmd[1], "del" ) == 0 ) … … 1148 1153 { "qlist", 0, cmd_qlist, 0 }, 1149 1154 { "join_chat", 2, cmd_join_chat, 0 }, 1155 { "otr", 1, cmd_otr, 0 }, 1150 1156 { "chat", 1, cmd_chat, 0 }, 1151 1157 { NULL } -
set.c
rf9928cb r5f8ab6a9 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
rf9928cb r5f8ab6a9 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
rf9928cb r5f8ab6a9 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
rf9928cb r5f8ab6a9 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
rf9928cb r5f8ab6a9 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
rf9928cb r5f8ab6a9 29 29 #include "base64.h" 30 30 #include "commands.h" 31 #include "crypting.h" 32 #include "otr.h" 31 33 #include "protocols/nogaim.h" 32 34 #include "help.h" 33 35 #include "ipc.h" 36 #include "lib/ssl_client.h" 34 37 #include "md5.h" 35 38 #include "misc.h" … … 63 66 b_main_init(); 64 67 nogaim_init(); 68 /* Ugly Note: libotr and gnutls both use libgcrypt. libgcrypt 69 has a process-global config state whose initialization happpens 70 twice if libotr and gnutls are used together. libotr installs custom 71 memory management functions for libgcrypt while our gnutls module 72 uses the defaults. Therefore we initialize OTR after SSL. *sigh* */ 73 ssl_init(); 74 otr_init(); 65 75 66 76 srand( time( NULL ) ^ getpid() ); -
user.h
rf9928cb r5f8ab6a9 38 38 char is_private; 39 39 char online; 40 char encrypted; 40 41 41 42 char *handle;
Note: See TracChangeset
for help on using the changeset viewer.