Changeset 238f828


Ignore:
Timestamp:
2005-12-26T14:42:54Z (14 years ago)
Author:
Wilmer van der Gaast <wilmer@…>
Branches:
master
Children:
e4d6271
Parents:
d25f6fc
Message:

Fixed that security hole, and added mode +R (don't know if that's the right one).
Now to add the actual oper features (and IPC). :-)

Files:
3 edited

Legend:

Unmodified
Added
Removed
  • commands.c

    rd25f6fc r238f828  
    9797        case STORAGE_OK:
    9898                irc_usermsg( irc, "Password accepted" );
     99                irc_umode_set( irc, "+R", 1 );
    99100                break;
    100101        default:
     
    122123                case STORAGE_OK:
    123124                        irc->status = USTATUS_IDENTIFIED;
     125                        irc_umode_set( irc, "+R", 1 );
    124126                        break;
    125127
     
    146148        case STORAGE_OK:
    147149                irc_setpass( irc, NULL );
     150                irc->status = USTATUS_LOGGED_IN;
     151                irc_umode_set( irc, "-R", 1 );
    148152                irc_usermsg( irc, "Account `%s' removed", irc->nick );
    149153                return( 0 );
  • irc.c

    rd25f6fc r238f828  
    506506                        irc_reply( irc, 461, "%s :Need more parameters", cmd[0] );
    507507                else if( strcmp( cmd[2], global.conf->oper_pass ) == 0 )
    508                         irc_umode_set( irc, irc->nick, "+o" );
     508                        irc_umode_set( irc, "+o", 1 );
    509509                // else
    510510                        /* FIXME/TODO: Find out which reply to send now. */
     
    533533                        {
    534534                                if( cmd[2] )
    535                                         irc_umode_set( irc, irc->nick, cmd[2] );
     535                                        irc_umode_set( irc, cmd[2], 0 );
    536536                        }
    537537                        else
     
    10841084        irc_reply( irc,   2, ":Host %s is running BitlBee " BITLBEE_VERSION " " ARCH "/" CPU ".", irc->myhost );
    10851085        irc_reply( irc,   3, ":%s", IRCD_INFO );
    1086         irc_reply( irc,   4, "%s %s %s %s", irc->myhost, BITLBEE_VERSION, UMODES, CMODES );
     1086        irc_reply( irc,   4, "%s %s %s %s", irc->myhost, BITLBEE_VERSION, UMODES UMODES_PRIV, CMODES );
    10871087        irc_reply( irc,   5, "PREFIX=(ov)@+ CHANTYPES=#& CHANMODES=,,,%s NICKLEN=%d NETWORK=BitlBee CASEMAPPING=rfc1459 MAXTARGETS=1 WATCH=128 :are supported by this server", CMODES, MAX_NICK_LENGTH - 1 );
    10881088        irc_motd( irc );
    1089         irc_umode_set( irc, irc->myhost, "+" UMODE );
     1089        irc_umode_set( irc, "+" UMODE, 1 );
    10901090
    10911091        u = user_add( irc, irc->mynick );
     
    12141214
    12151215
    1216 void irc_umode_set( irc_t *irc, char *who, char *s )
    1217 {
     1216void irc_umode_set( irc_t *irc, char *s, int allow_priv )
     1217{
     1218        /* allow_priv: Set to 0 if s contains user input, 1 if you want
     1219           to set a "privileged" mode (+o, +R, etc). */
    12181220        char m[256], st = 1, *t;
    12191221        int i;
     
    12281230                if( *t == '+' || *t == '-' )
    12291231                        st = *t == '+';
    1230                 else
     1232                else if( st == 0 || ( strchr( UMODES, *t ) || ( allow_priv && strchr( UMODES_PRIV, *t ) ) ) )
    12311233                        m[(int)*t] = st;
    12321234        }
     
    12351237       
    12361238        for( i = 0; i < 256 && strlen( irc->umode ) < ( sizeof( irc->umode ) - 1 ); i ++ )
    1237                 if( m[i] && strchr( UMODES, i ) )
     1239                if( m[i] )
    12381240                        irc->umode[strlen(irc->umode)] = i;
    12391241       
  • irc.h

    rd25f6fc r238f828  
    4040#define FLOOD_SEND_MAXBUFFER (1024*20)
    4141
    42 #define UMODES "aiso"
     42#define UMODES "ias"
     43#define UMODES_PRIV "Ro"
    4344#define CMODES "nt"
    4445#define CMODE "t"
     
    127128void irc_names( irc_t *irc, char *channel );
    128129void irc_topic( irc_t *irc, char *channel );
    129 void irc_umode_set( irc_t *irc, char *who, char *s );
     130void irc_umode_set( irc_t *irc, char *s, int allow_priv );
    130131void irc_who( irc_t *irc, char *channel );
    131132void irc_spawn( irc_t *irc, user_t *u );
Note: See TracChangeset for help on using the changeset viewer.