Changes in / [3f81999:2e44b1f]
- Files:
-
- 3 deleted
- 39 edited
Legend:
- Unmodified
- Added
- Removed
-
Makefile
r3f81999 r2e44b1f 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 otr.hquery.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 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 otr.o22 objects += unix.o conf.o log.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.txt97 96 install -m 0644 bitlbee.conf $(DESTDIR)$(ETCDIR)/bitlbee.conf 98 97 99 98 uninstall-etc: 100 99 rm -f $(DESTDIR)$(ETCDIR)/motd.txt 101 rm -f $(DESTDIR)$(ETCDIR)/welcome.txt102 100 rm -f $(DESTDIR)$(ETCDIR)/bitlbee.conf 103 101 -rmdir $(DESTDIR)$(ETCDIR) -
bitlbee.conf
r3f81999 r2e44b1f 86 86 # MotdFile = /etc/bitlbee/motd.txt 87 87 88 ## WelcomeFile89 ##90 ## Specify an alternative file for the welcome message displayed when joining the91 ## control channel. Default value depends on the --etcdir argument to configure.92 ##93 # WelcomeFile = /etc/bitlbee/welcome.txt94 95 88 ## ConfigDir 96 89 ## -
bitlbee.h
r3f81999 r2e44b1f 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 0x050133 30 34 31 /* Depend on Windows 2000 for now since we need getaddrinfo() */ … … 141 138 #include "misc.h" 142 139 #include "proxy.h" 143 #include "otr.h"144 140 145 141 typedef struct global { … … 153 149 char *helpfile; 154 150 int restart; 155 OtrlMessageAppOps otr_ops; /* collects interface functions required by OTR */156 151 } global_t; 157 152 -
conf.c
r3f81999 r2e44b1f 60 60 conf->pidfile = g_strdup( PIDFILE ); 61 61 conf->motdfile = g_strdup( ETCDIR "/motd.txt" ); 62 conf->welcomefile = g_strdup( ETCDIR "/welcome.txt" );63 62 conf->ping_interval = 180; 64 63 conf->ping_timeout = 300; … … 249 248 g_free( conf->motdfile ); 250 249 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 );256 250 } 257 251 else if( g_strcasecmp( ini->key, "account_storage" ) == 0 ) -
conf.h
r3f81999 r2e44b1f 45 45 char *pidfile; 46 46 char *motdfile; 47 char *welcomefile;48 47 char *primary_storage; 49 48 char **migrate_storage; -
configure
r3f81999 r2e44b1f 31 31 gcov=0 32 32 plugins=1 33 otr=auto34 33 35 34 events=glib … … 72 71 --gcov=0/1 Disable/enable test coverage reporting $gcov 73 72 --plugins=0/1 Disable/enable plugins support $plugins 74 --otr=0/1 Disable/enable OTR encryption support $otr75 73 76 74 --events=... Event handler (glib, libevent) $events … … 413 411 fi 414 412 415 otrprefix=""416 for i in / /usr /usr/local; do417 if [ -f ${i}/lib/libotr.a ]; then418 otrprefix=${i}419 break420 fi421 done422 if [ "$otr" = "auto" ]; then423 if [ -n "$otrprefix" ]; then424 otr=1425 else426 otr=0427 fi428 fi429 if [ "$otr" = 1 ]; then430 echo '#define WITH_OTR' >> config.h431 echo "EFLAGS+=-L${otrprefix}/lib -lotr" >> Makefile.settings432 echo "CFLAGS+=-I${otrprefix}/include" >> Makefile.settings433 else434 echo '#undef WITH_OTR' >> config.h435 fi436 437 413 echo 438 414 if [ -z "$BITLBEE_VERSION" -a -d .bzr ] && type bzr > /dev/null 2> /dev/null; then … … 560 536 fi 561 537 562 if [ "$otr" = "1" ]; then563 echo ' Off-the-Record (OTR) Messaging enabled.'564 else565 echo ' Off-the-Record (OTR) Messaging disabled.'566 fi567 568 538 echo ' Using event handler: '$events 569 539 echo ' Using SSL library: '$ssl -
doc/README
r3f81999 r2e44b1f 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 the71 configure script finds libotr in one of the usual places. You can pass72 --otr=1 or --otr=0 to force it on or off, respectively.73 69 74 70 These days, MSN Messenger clients have to connect to the MS Passport servers … … 147 143 148 144 149 A NOTE ON PASSWORDENCRYPTION150 ==================== =========145 A NOTE ON ENCRYPTION 146 ==================== 151 147 152 148 There used to be a note here about the simple obfuscation method used to -
doc/user-guide/commands.xml
r3f81999 r2e44b1f 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>478 329 479 330 <bitlbee-command name="set"> … … 644 495 </bitlbee-setting> 645 496 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 657 497 <bitlbee-setting name="debug" type="boolean" scope="global"> 658 498 <default>false</default> … … 721 561 </bitlbee-setting> 722 562 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 739 563 <bitlbee-setting name="lcnicks" type="boolean" scope="global"> 740 564 <default>true</default> … … 759 583 </bitlbee-setting> 760 584 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 811 585 <bitlbee-setting name="nick" type="string" scope="chat"> 812 586 … … 814 588 <para> 815 589 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. 816 605 </para> 817 606 </description> … … 1007 796 </para> 1008 797 </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 1025 798 </bitlbee-setting> 1026 799 -
ipc.c
r3f81999 r2e44b1f 33 33 34 34 GSList *child_list = NULL; 35 static char *statefile = NULL;36 35 37 36 static void ipc_master_cmd_client( irc_t *data, char **cmd ) … … 63 62 } 64 63 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 else 77 { 78 ipc_to_children_str( "OPERMSG :The DEAF command only works in " 79 "normal daemon mode. Try DIE instead." ); 80 } 81 } 82 65 83 void ipc_master_cmd_rehash( irc_t *data, char **cmd ) 66 84 { … … 98 116 { "hello", 0, ipc_master_cmd_client, 0 }, 99 117 { "die", 0, ipc_master_cmd_die, 0 }, 118 { "deaf", 0, ipc_master_cmd_deaf, 0 }, 100 119 { "wallops", 1, NULL, IPC_CMD_TO_CHILDREN }, 101 120 { "wall", 1, NULL, IPC_CMD_TO_CHILDREN }, … … 441 460 } 442 461 462 #ifndef _WIN32 443 463 char *ipc_master_save_state() 444 464 { … … 481 501 } 482 502 483 void ipc_master_set_statefile( char *fn )484 {485 statefile = g_strdup( fn );486 }487 488 503 489 504 static gboolean new_ipc_client( gpointer data, gint serversock, b_input_condition cond ) … … 506 521 } 507 522 508 #ifndef _WIN32509 523 int ipc_master_listen_socket() 510 524 { … … 543 557 } 544 558 #else 559 int ipc_master_listen_socket() 560 { 545 561 /* FIXME: Open named pipe \\.\BITLBEE */ 562 return 0; 563 } 546 564 #endif 547 565 548 int ipc_master_load_state( )566 int ipc_master_load_state( char *statefile ) 549 567 { 550 568 struct bitlbee_child *child; … … 554 572 if( statefile == NULL ) 555 573 return 0; 574 556 575 fp = fopen( statefile, "r" ); 557 576 unlink( statefile ); /* Why do it later? :-) */ -
ipc.h
r3f81999 r2e44b1f 58 58 59 59 char *ipc_master_save_state(); 60 void ipc_master_set_statefile( char *fn ); 61 int ipc_master_load_state(); 60 int ipc_master_load_state( char *statefile ); 62 61 int ipc_master_listen_socket(); 63 62 -
irc.c
r3f81999 r2e44b1f 29 29 #include "crypting.h" 30 30 #include "ipc.h" 31 #include <sys/types.h>32 #include <sys/wait.h>33 31 34 32 static gboolean irc_userping( gpointer _irc, int fd, b_input_condition cond ); 35 static void irc_welcome( irc_t* irc );36 33 37 34 GSList *irc_connection_list = NULL; … … 145 142 146 143 irc_connection_list = g_slist_append( irc_connection_list, irc ); 147 148 144 145 s = set_add( &irc->set, "away_devoice", "true", set_eval_away_devoice, irc ); 149 146 s = set_add( &irc->set, "auto_connect", "true", set_eval_bool, irc ); 150 147 s = set_add( &irc->set, "auto_reconnect", "false", set_eval_bool, irc ); … … 153 150 s = set_add( &irc->set, "buddy_sendbuffer_delay", "200", set_eval_int, irc ); 154 151 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 );156 152 s = set_add( &irc->set, "debug", "false", set_eval_bool, irc ); 157 153 s = set_add( &irc->set, "default_target", "root", NULL, irc ); 158 154 s = set_add( &irc->set, "display_namechanges", "false", set_eval_bool, irc ); 159 155 s = set_add( &irc->set, "handle_unknown", "root", NULL, irc ); 160 s = set_add( &irc->set, "halfop_buddies", "encrypted", set_eval_halfop_buddies, irc );161 156 s = set_add( &irc->set, "lcnicks", "true", set_eval_bool, 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 ); 157 s = set_add( &irc->set, "ops", "both", set_eval_ops, irc ); 165 158 s = set_add( &irc->set, "password", NULL, set_eval_password, irc ); 166 159 s->flags |= SET_NULL_OK; … … 173 166 s = set_add( &irc->set, "to_char", ": ", set_eval_to_char, irc ); 174 167 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);176 168 177 169 conf_loaddefaults( irc ); 178 179 irc->otr = otr_new(); 180 170 181 171 /* Evaluator sets the iconv/oconv structures. */ 182 172 set_eval_charset( set_find( &irc->set, "charset" ), set_getstr( &irc->set, "charset" ) ); … … 330 320 331 321 g_free( irc->last_target ); 332 333 otr_free(irc->otr);334 322 335 323 g_free( irc ); 336 324 337 325 if( global.conf->runmode == RUNMODE_INETD || 338 326 global.conf->runmode == RUNMODE_FORKDAEMON || … … 703 691 } 704 692 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 else736 return none;737 }738 739 693 void irc_names( irc_t *irc, char *channel ) 740 694 { … … 742 696 char namelist[385] = ""; 743 697 struct groupchat *c = NULL; 698 char *ops = set_getstr( &irc->set, "ops" ); 744 699 745 700 /* RFCs say there is no error reply allowed on NAMES, so when the … … 756 711 } 757 712 758 strcat( namelist, user_mode_prefix(irc, u) ); 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 759 719 strcat( namelist, u->nick ); 760 720 strcat( namelist, " " ); … … 767 727 /* root and the user aren't in the channel userlist but should 768 728 show up in /NAMES, so list them first: */ 769 sprintf( namelist, "%s%s %s%s ", s et_getbool(&irc->set, "op_root") ? "@" : "", irc->mynick,770 s et_getbool(&irc->set, "op_user") ? "@" : "", irc->nick );729 sprintf( namelist, "%s%s %s%s ", strcmp( ops, "root" ) == 0 || strcmp( ops, "both" ) ? "@" : "", irc->mynick, 730 strcmp( ops, "user" ) == 0 || strcmp( ops, "both" ) ? "@" : "", irc->nick ); 771 731 772 732 for( l = c->in_room; l; l = l->next ) if( ( u = user_findhandle( c->ic, l->data ) ) ) … … 778 738 } 779 739 780 strcat( namelist, user_mode_prefix(irc, u) );781 740 strcat( namelist, u->nick ); 782 741 strcat( namelist, " " ); … … 820 779 irc_reply( irc, 3, ":%s", IRCD_INFO ); 821 780 irc_reply( irc, 4, "%s %s %s %s", irc->myhost, BITLBEE_VERSION, UMODES UMODES_PRIV, CMODES ); 822 irc_reply( irc, 5, "PREFIX=(o hv)@%%+ CHANTYPES=%s CHANMODES=,,,%s NICKLEN=%d NETWORK=BitlBee "781 irc_reply( irc, 5, "PREFIX=(ov)@+ CHANTYPES=%s CHANMODES=,,,%s NICKLEN=%d NETWORK=BitlBee " 823 782 "CASEMAPPING=rfc1459 MAXTARGETS=1 WATCH=128 :are supported by this server", 824 783 CTYPES, CMODES, MAX_NICK_LENGTH - 1 ); … … 826 785 irc->umode[0] = '\0'; 827 786 irc_umode_set( irc, "+" UMODE, 1 ); 828 u = user_add( irc, irc->mynick ); 787 788 u = user_add( irc, irc->mynick ); 829 789 u->host = g_strdup( irc->myhost ); 830 790 u->realname = g_strdup( ROOT_FN ); … … 848 808 irc_spawn( irc, u ); 849 809 850 irc_welcome( irc ); 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." ); 851 816 852 817 if( global.conf->runmode == RUNMODE_FORKDAEMON || global.conf->runmode == RUNMODE_DAEMON ) … … 863 828 root_command( irc, send_cmd ); 864 829 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 else885 {886 char linebuf[380];887 888 while( fgets( linebuf, 380, f ) )889 {890 irc_usermsg( irc, linebuf );891 }892 893 fclose( f );894 830 } 895 831 } -
irc.h
r3f81999 r2e44b1f 27 27 #define _IRC_H 28 28 29 #include "otr.h"30 31 29 #define IRC_MAX_LINE 512 32 #define IRC_MAX_ARGS 1630 #define IRC_MAX_ARGS 8 33 31 34 32 #define IRC_LOGIN_TIMEOUT 60 … … 96 94 gint w_watch_source_id; 97 95 gint ping_source_id; 98 99 otr_t *otr; /* OTR state and book keeping */100 96 } irc_t; 101 97 -
irc_commands.c
r3f81999 r2e44b1f 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 }, 610 611 { "wallops", 1, NULL, IRC_CMD_OPER_ONLY | IRC_CMD_TO_MASTER }, 611 612 { "wall", 1, NULL, IRC_CMD_OPER_ONLY | IRC_CMD_TO_MASTER }, -
lib/misc.c
r3f81999 r2e44b1f 88 88 { "gt", ">" }, 89 89 { "amp", "&" }, 90 { "apos", "'" },91 90 { "quot", "\"" }, 92 91 { "aacute", "á" }, … … 120 119 char *s = out, *cs; 121 120 int i, matched; 122 int taglen;123 121 124 122 memset( out, 0, strlen( in ) + 1 ); … … 137 135 in ++; 138 136 139 taglen = in-cs-1; /* not <0 because the above loop runs at least once */140 137 if( *in ) 141 138 { 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 ) 139 if( g_strncasecmp( cs+1, "br", 2) == 0 ) 151 140 *(s++) = '\n'; 152 141 in ++; -
lib/ssl_bogus.c
r3f81999 r2e44b1f 27 27 28 28 int ssl_errno; 29 30 void ssl_init( void )31 {32 }33 29 34 30 void *ssl_connect( char *host, int port, ssl_input_function func, gpointer data ) … … 70 66 return 0; 71 67 } 72 73 int ssl_pending( void *conn )74 {75 return 0;76 } -
lib/ssl_client.h
r3f81999 r2e44b1f 47 47 48 48 49 /* Perform any global initialization the SSL library might need. */50 G_MODULE_EXPORT void ssl_init( void );51 52 49 /* Connect to host:port, call the given function when the connection is 53 50 ready to be used for SSL traffic. This is all done asynchronously, no -
lib/ssl_gnutls.c
r3f81999 r2e44b1f 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 }69 62 70 63 void *ssl_connect( char *host, int port, ssl_input_function func, gpointer data ) … … 129 122 if( !initialized ) 130 123 { 131 ssl_init(); 124 gnutls_global_init(); 125 initialized = TRUE; 126 atexit( gnutls_global_deinit ); 132 127 } 133 128 -
lib/ssl_nss.c
r3f81999 r2e44b1f 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 101 93 void *ssl_connect( char *host, int port, ssl_input_function func, gpointer data ) 102 94 { … … 115 107 if( !initialized ) 116 108 { 117 ssl_init(); 109 PR_Init( PR_SYSTEM_THREAD, PR_PRIORITY_NORMAL, 1); 110 NSS_NoDB_Init(NULL); 111 NSS_SetDomesticPolicy(); 118 112 } 119 113 -
lib/ssl_openssl.c
r3f81999 r2e44b1f 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 }64 58 65 59 void *ssl_connect( char *host, int port, ssl_input_function func, gpointer data ) … … 121 115 if( !initialized ) 122 116 { 123 ssl_init(); 117 initialized = TRUE; 118 SSLeay_add_ssl_algorithms(); 124 119 } 125 120 -
log.c
r3f81999 r2e44b1f 30 30 static log_t logoutput; 31 31 32 static void log_null(int level, c onst char *logmessage);33 static void log_irc(int level, c onst char *logmessage);34 static void log_syslog(int level, c onst char *logmessage);35 static void log_console(int level, c onst char *logmessage);32 static void log_null(int level, char *logmessage); 33 static void log_irc(int level, char *logmessage); 34 static void log_syslog(int level, char *logmessage); 35 static void log_console(int level, char *logmessage); 36 36 37 37 void log_init(void) { … … 97 97 } 98 98 99 void log_message(int level, c onst char *message, ... ) {99 void log_message(int level, char *message, ... ) { 100 100 101 101 va_list ap; … … 122 122 } 123 123 124 void log_error(c onst char *functionname) {124 void log_error(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 onst char *message) {130 static void log_null(int level, char *message) { 131 131 return; 132 132 } 133 133 134 static void log_irc(int level, c onst char *message) {134 static void log_irc(int level, 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 onst char *message) {149 static void log_syslog(int level, 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 onst char *message) {163 static void log_console(int level, char *message) { 164 164 if(level == LOGLVL_ERROR) 165 165 fprintf(stderr, "Error: %s\n", message); -
log.h
r3f81999 r2e44b1f 44 44 45 45 typedef struct log_t { 46 void (*error)(int level, c onst char *logmessage);47 void (*warning)(int level, c onst char *logmessage);48 void (*informational)(int level, c onst char *logmessage);46 void (*error)(int level, char *logmessage); 47 void (*warning)(int level, char *logmessage); 48 void (*informational)(int level, char *logmessage); 49 49 #ifdef DEBUG 50 void (*debug)(int level, c onst char *logmessage);50 void (*debug)(int level, 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 onst char *message, ...) G_GNUC_PRINTF( 2, 3 );57 void log_error(c onst char *functionname);56 void log_message(int level, char *message, ...) G_GNUC_PRINTF( 2, 3 ); 57 void log_error(char *functionname); 58 58 59 59 #endif -
protocols/jabber/jabber.c
r3f81999 r2e44b1f 528 528 529 529 ret->name = "jabber"; 530 ret->mms = 0; /* no limit */531 530 ret->login = jabber_login; 532 531 ret->init = jabber_init; -
protocols/msn/msn.c
r3f81999 r2e44b1f 317 317 318 318 ret->name = "msn"; 319 ret->mms = 1409; /* this guess taken from libotr UPGRADING file */320 319 ret->login = msn_login; 321 320 ret->init = msn_init; -
protocols/msn/ns.c
r3f81999 r2e44b1f 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; 295 md->grouplist = g_new0( char *, md->groupcount ); 296 } 297 280 298 md->buddycount = atoi( cmd[3] ); 281 md->groupcount = atoi( cmd[4] );282 if( md->groupcount > 0 )283 md->grouplist = g_new0( char *, md->groupcount );284 285 299 if( !*cmd[3] || md->buddycount == 0 ) 286 300 msn_logged_in( ic ); … … 665 679 imcb_log( ic, "INBOX contains %s new messages, plus %s messages in other folders.", inbox, folders ); 666 680 } 681 682 g_free( inbox ); 683 g_free( folders ); 667 684 } 668 685 else if( g_strncasecmp( ct, "text/x-msmsgsemailnotification", 30 ) == 0 ) -
protocols/nogaim.c
r3f81999 r2e44b1f 661 661 662 662 /* LISPy... */ 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 */ 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 */ 666 667 { 667 668 char *from; … … 676 677 ic->irc->myhost ); 677 678 } 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 } 679 irc_write( ic->irc, ":%s MODE %s %cv %s", from, ic->irc->channel, 680 u->away?'-':'+', u->nick ); 690 681 g_free( from ); 691 682 } … … 697 688 char *wrapped; 698 689 user_t *u; 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 690 707 691 u = user_findhandle( ic, handle ); 692 708 693 if( !u ) 709 694 { … … 715 700 imcb_log( ic, "Ignoring message from unknown handle %s", handle ); 716 701 717 g_free(msg);718 702 return; 719 703 } … … 748 732 irc_msgfrom( irc, u->nick, wrapped ); 749 733 g_free( wrapped ); 750 g_free( msg );751 734 } 752 735 … … 989 972 990 973 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 else 999 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 991 1034 /* The plan is to not allow straight calls to prpl functions anymore, but do 992 1035 them all from some wrappers. We'll start to define some down here: */ … … 1002 1045 msg = buf; 1003 1046 } 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); 1047 1048 st = ic->acc->prpl->buddy_msg( ic, handle, msg, flags ); 1049 g_free( buf ); 1050 1009 1051 return st; 1010 1052 } -
protocols/nogaim.h
r3f81999 r2e44b1f 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;138 134 139 135 /* Added this one to be able to add per-account settings, don't think … … 328 324 329 325 /* Misc. stuff */ 326 char *set_eval_away_devoice( set_t *set, char *value ); 330 327 gboolean auto_reconnect( gpointer data, gint fd, b_input_condition cond ); 331 328 void cancel_auto_reconnect( struct account *a ); -
protocols/oscar/oscar.c
r3f81999 r2e44b1f 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 */2670 2669 ret->away_states = oscar_away_states; 2671 2670 ret->init = oscar_init; -
protocols/yahoo/libyahoo2.c
r3f81999 r2e44b1f 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)73 71 #endif 74 72 -
protocols/yahoo/yahoo.c
r3f81999 r2e44b1f 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 */372 371 ret->init = byahoo_init; 373 372 -
protocols/yahoo/yahoo_httplib.c
r3f81999 r2e44b1f 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)55 53 # define snprintf _snprintf 56 54 #endif -
query.c
r3f81999 r2e44b1f 103 103 int count = 0; 104 104 105 if(!ic)106 return;107 108 105 q = irc->queries; 109 106 def = query_default( irc ); … … 148 145 else 149 146 irc_usermsg( irc, "Accepted: %s", q->question ); 150 if( q->yes ) 151 q->yes( q->data ); 147 q->yes( q->data ); 152 148 } 153 149 else … … 157 153 else 158 154 irc_usermsg( irc, "Rejected: %s", q->question ); 159 if( q->no ) 160 q->no( q->data ); 155 q->no( q->data ); 161 156 } 162 157 q->data = NULL; -
root_commands.c
r3f81999 r2e44b1f 29 29 #include "bitlbee.h" 30 30 #include "help.h" 31 #include "otr.h"32 31 33 32 #include <string.h> … … 408 407 409 408 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 }414 409 } 415 410 else if( g_strcasecmp( cmd[1], "del" ) == 0 ) … … 1214 1209 { "qlist", 0, cmd_qlist, 0 }, 1215 1210 { "join_chat", 2, cmd_join_chat, 0 }, 1216 { "otr", 1, cmd_otr, 0 },1217 1211 { "chat", 1, cmd_chat, 0 }, 1218 1212 { NULL } -
set.c
r3f81999 r2e44b1f 225 225 } 226 226 227 char * set_eval_op_root( set_t *set, char*value )227 char *set_eval_ops( set_t *set, char *value ) 228 228 { 229 229 irc_t *irc = set->data; 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; 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 ); 268 243 else 269 244 return SET_INVALID; 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 245 359 246 return value; 360 247 } 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
r3f81999 r2e44b1f 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_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 ); 102 char *set_eval_ops( set_t *set, char *value ); 108 103 109 104 #endif /* __SET_H__ */ -
sock.h
r3f81999 r2e44b1f 16 16 #else 17 17 # include <winsock2.h> 18 # ifndef _MSC_VER 19 # include <ws2tcpip.h> 20 # endif 18 # include <ws2tcpip.h> 21 19 # if !defined(BITLBEE_CORE) && defined(_MSC_VER) 22 20 # pragma comment(lib,"bitlbee.lib") 23 21 # endif 24 22 # 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 _umask28 # define mode_t int29 23 # define sock_make_nonblocking(fd) { int non_block = 1; ioctlsocket(fd, FIONBIO, &non_block); } 30 24 # define sock_make_blocking(fd) { int non_block = 0; ioctlsocket(fd, FIONBIO, &non_block); } -
storage.c
r3f81999 r2e44b1f 29 29 #include "bitlbee.h" 30 30 #include "crypting.h" 31 #include "otr.h"32 31 33 32 extern storage_t storage_text; … … 117 116 118 117 status = st->load(irc, password); 119 if (status == STORAGE_OK) { 120 otr_load(irc); 118 if (status == STORAGE_OK) 121 119 return status; 122 }120 123 121 if (status != STORAGE_NO_SUCH_USER) 124 122 return status; … … 141 139 return STORAGE_NO_SUCH_USER; 142 140 } 143 144 otr_save(irc); 141 145 142 st = ((storage_t *)global.storage->data)->save(irc, overwrite); 146 143 … … 168 165 ret = status; 169 166 } 170 if (ret == STORAGE_OK) {171 otr_remove(nick);172 }173 167 174 168 return ret; … … 184 178 storage_t *primary_storage = gl->data; 185 179 irc_t *irc; 186 180 187 181 /* First, try to rename in the current write backend, assuming onick 188 182 * is stored there */ 189 183 status = primary_storage->rename(onick, nnick, password); 190 if (status != STORAGE_NO_SUCH_USER) { 191 otr_rename(onick, nnick); 184 if (status != STORAGE_NO_SUCH_USER) 192 185 return status; 193 }194 186 195 187 /* Try to load from a migration backend and save to the current backend. … … 215 207 216 208 storage_remove(onick, password); 217 otr_rename(onick, nnick);218 209 219 210 return STORAGE_OK; -
storage_text.c
r3f81999 r2e44b1f 27 27 #include "bitlbee.h" 28 28 #include "crypting.h" 29 #ifdef _WIN32 30 # define umask _umask 31 # define mode_t int 32 #endif 33 34 #ifndef F_OK 35 #define F_OK 0 36 #endif 29 37 30 38 static void text_init (void) -
unix.c
r3f81999 r2e44b1f 27 27 #include "commands.h" 28 28 #include "crypting.h" 29 #include "otr.h"30 29 #include "protocols/nogaim.h" 31 30 #include "help.h" 32 31 #include "ipc.h" 33 #include "lib/ssl_client.h"34 32 #include <signal.h> 35 33 #include <unistd.h> … … 56 54 b_main_init(); 57 55 nogaim_init(); 58 /* Ugly Note: libotr and gnutls both use libgcrypt. libgcrypt59 has a process-global config state whose initialization happpens60 twice if libotr and gnutls are used together. libotr installs custom61 memory management functions for libgcrypt while our gnutls module62 uses the defaults. Therefore we initialize OTR after SSL. *sigh* */63 ssl_init();64 otr_init();65 56 66 57 srand( time( NULL ) ^ getpid() ); … … 223 214 return( (double) time->tv_sec + (double) time->tv_usec / 1000000 ); 224 215 } 216 217 -
user.h
r3f81999 r2e44b1f 37 37 char is_private; 38 38 char online; 39 char encrypted;40 39 41 40 char *handle;
Note: See TracChangeset
for help on using the changeset viewer.