Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • irc.c

    r823de9d re1720ce  
    2929#include "crypting.h"
    3030#include "ipc.h"
    31 #include <sys/types.h>
    32 #include <sys/wait.h>
    3331
    3432static gboolean irc_userping( gpointer _irc, int fd, b_input_condition cond );
    35 static void irc_welcome( irc_t* irc );
    3633
    3734GSList *irc_connection_list = NULL;
     
    145142
    146143        irc_connection_list = g_slist_append( irc_connection_list, irc );
    147 
     144       
     145        s = set_add( &irc->set, "away_devoice", "true",  set_eval_away_devoice, irc );
    148146        s = set_add( &irc->set, "auto_connect", "true", set_eval_bool, irc );
    149147        s = set_add( &irc->set, "auto_reconnect", "false", set_eval_bool, irc );
     
    152150        s = set_add( &irc->set, "buddy_sendbuffer_delay", "200", set_eval_int, irc );
    153151        s = set_add( &irc->set, "charset", "utf-8", set_eval_charset, irc );
    154         s = set_add( &irc->set, "color_encrypted", "true", set_eval_bool, irc );
    155152        s = set_add( &irc->set, "debug", "false", set_eval_bool, irc );
    156153        s = set_add( &irc->set, "default_target", "root", NULL, irc );
    157154        s = set_add( &irc->set, "display_namechanges", "false", set_eval_bool, irc );
    158155        s = set_add( &irc->set, "handle_unknown", "root", NULL, irc );
    159         s = set_add( &irc->set, "halfop_buddies", "encrypted", set_eval_halfop_buddies, irc );
    160156        s = set_add( &irc->set, "lcnicks", "true", set_eval_bool, irc );
    161         s = set_add( &irc->set, "op_buddies", "trusted", set_eval_op_buddies, irc );
    162         s = set_add( &irc->set, "op_root", "true", set_eval_op_root, irc );
    163         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 );
    164158        s = set_add( &irc->set, "password", NULL, set_eval_password, irc );
    165159        s->flags |= SET_NULL_OK;
     
    172166        s = set_add( &irc->set, "to_char", ": ", set_eval_to_char, irc );
    173167        s = set_add( &irc->set, "typing_notice", "false", set_eval_bool, irc );
    174         s = set_add( &irc->set, "voice_buddies", "notaway", set_eval_voice_buddies, irc);
    175168       
    176169        conf_loaddefaults( irc );
    177 
    178         irc->otr = otr_new();
    179 
     170       
    180171        /* Evaluator sets the iconv/oconv structures. */
    181172        set_eval_charset( set_find( &irc->set, "charset" ), set_getstr( &irc->set, "charset" ) );
     
    329320       
    330321        g_free( irc->last_target );
    331 
    332         otr_free(irc->otr);
    333322       
    334323        g_free( irc );
    335 
     324       
    336325        if( global.conf->runmode == RUNMODE_INETD ||
    337326            global.conf->runmode == RUNMODE_FORKDAEMON ||
     
    418407                        }
    419408                       
    420                         if( lines[i] )
    421                         {
    422                                 if( ( cmd = irc_parse_line( lines[i] ) ) == NULL )
    423                                         continue;
     409                        if( lines[i] && ( cmd = irc_parse_line( lines[i] ) ) )
     410                        {
    424411                                irc_exec( irc, cmd );
    425412                                g_free( cmd );
     
    496483        if( line[0] == ':' )
    497484        {
    498                 for( i = 0; line[i] != ' '; i ++ );
     485                for( i = 0; line[i] && line[i] != ' '; i ++ );
    499486                line = line + i;
    500487        }
     
    704691}
    705692
    706 const char *user_mode_prefix( irc_t *irc, user_t *u )
    707 {
    708         static char op[] = "@";
    709         static char halfop[] = "%";
    710         static char voice[] = "+";
    711         static char none[] = "";
    712 
    713         int or = set_getbool(&irc->set, "op_root");
    714         int ou = set_getbool(&irc->set, "op_user");
    715         char *ob = set_getstr(&irc->set, "op_buddies");
    716         char *hb = set_getstr(&irc->set, "halfop_buddies");
    717         char *vb = set_getstr(&irc->set, "voice_buddies");
    718 
    719         if( (!strcmp(u->nick, irc->mynick) && or) ||
    720             (!strcmp(u->nick, irc->nick) && ou) ||
    721         (!u->away && !strcmp(ob, "notaway")) ||
    722         (u->encrypted && !strcmp(ob, "encrypted")) ||
    723         (u->encrypted>1 && !strcmp(ob, "trusted"))
    724       )
    725                 return op;
    726         else if( (!u->away && !strcmp(hb, "notaway")) ||
    727              (u->encrypted && !strcmp(hb, "encrypted")) ||
    728              (u->encrypted>1 && !strcmp(hb, "trusted"))
    729                )
    730                 return halfop;
    731         else if( (!u->away && !strcmp(vb, "notaway")) ||
    732              (u->encrypted && !strcmp(vb, "encrypted")) ||
    733              (u->encrypted>1 && !strcmp(vb, "trusted"))
    734                )
    735                 return voice;
    736         else
    737                 return none;
    738 }
    739                        
    740693void irc_names( irc_t *irc, char *channel )
    741694{
     
    743696        char namelist[385] = "";
    744697        struct groupchat *c = NULL;
     698        char *ops = set_getstr( &irc->set, "ops" );
    745699       
    746700        /* RFCs say there is no error reply allowed on NAMES, so when the
     
    757711                        }
    758712                       
    759                         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                       
    760719                        strcat( namelist, u->nick );
    761720                        strcat( namelist, " " );
     
    768727                /* root and the user aren't in the channel userlist but should
    769728                   show up in /NAMES, so list them first: */
    770                 sprintf( namelist, "%s%s %s%s ", set_getbool(&irc->set, "op_root") ? "@" : "", irc->mynick,
    771                                                  set_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 );
    772731               
    773732                for( l = c->in_room; l; l = l->next ) if( ( u = user_findhandle( c->ic, l->data ) ) )
     
    779738                        }
    780739                       
    781                         strcat( namelist, user_mode_prefix(irc, u) );
    782740                        strcat( namelist, u->nick );
    783741                        strcat( namelist, " " );
     
    821779        irc_reply( irc,   3, ":%s", IRCD_INFO );
    822780        irc_reply( irc,   4, "%s %s %s %s", irc->myhost, BITLBEE_VERSION, UMODES UMODES_PRIV, CMODES );
    823         irc_reply( irc,   5, "PREFIX=(ohv)@%%+ CHANTYPES=#& CHANMODES=,,,%s NICKLEN=%d NETWORK=BitlBee CASEMAPPING=rfc1459 MAXTARGETS=1 WATCH=128 :are supported by this server", CMODES, MAX_NICK_LENGTH - 1 );
     781        irc_reply( irc,   5, "PREFIX=(ov)@+ CHANTYPES=%s CHANMODES=,,,%s NICKLEN=%d NETWORK=BitlBee "
     782                             "CASEMAPPING=rfc1459 MAXTARGETS=1 WATCH=128 :are supported by this server",
     783                             CTYPES, CMODES, MAX_NICK_LENGTH - 1 );
    824784        irc_motd( irc );
    825785        irc->umode[0] = '\0';
    826786        irc_umode_set( irc, "+" UMODE, 1 );
    827 u = user_add( irc, irc->mynick );
     787
     788        u = user_add( irc, irc->mynick );
    828789        u->host = g_strdup( irc->myhost );
    829790        u->realname = g_strdup( ROOT_FN );
     
    847808        irc_spawn( irc, u );
    848809       
    849         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." );
    850816       
    851817        if( global.conf->runmode == RUNMODE_FORKDAEMON || global.conf->runmode == RUNMODE_DAEMON )
     
    862828                root_command( irc, send_cmd );
    863829                g_free( send_cmd[1] );
    864         }
    865 }
    866 
    867 static void irc_welcome( irc_t *irc )
    868 {
    869         FILE *f;
    870        
    871         f = fopen( global.conf->welcomefile, "r" );
    872         if( !f )
    873         {
    874                 irc_usermsg( irc, "Welcome to the BitlBee gateway!\n\n"
    875                                   "If you've never used BitlBee before, please do read the help "
    876                                   "information using the \x02help\x02 command. Lots of FAQs are "
    877                                   "answered there.\n"
    878                                   "OTR users please note: Private key files are owned by the user "
    879                                   "BitlBee is running as.\n"
    880                                   "If you already have an account on this server, just use the "
    881                                   "\x02identify\x02 command to identify yourself." );
    882         }
    883         else
    884         {
    885                 char linebuf[380];
    886                
    887                 while( fgets( linebuf, 380, f ) )
    888                 {
    889                         irc_usermsg( irc, linebuf );
    890                 }
    891                
    892                 fclose( f );
    893830        }
    894831}
     
    10851022        user_t *u = NULL;
    10861023       
    1087         if( *nick == '#' || *nick == '&' )
     1024        if( strchr( CTYPES, *nick ) )
    10881025        {
    10891026                if( !( c = irc_chat_by_channel( irc, nick ) ) )
Note: See TracChangeset for help on using the changeset viewer.