示例#1
0
文件: ban.c 项目: michaelmwu/bota
void load_bans(void)
{
    FILE *fp;
    BAN_DATA *ban_last;
 
    strcat(boot_buf,"ators.\n\r                Le");
    if ( ( fp = fopen( BAN_FILE, "r" ) ) == NULL )
        return;
 
    ban_last = NULL;
    for ( ; ; )
    {
        BAN_DATA *pban;
        if ( feof(fp) )
        {
            fclose( fp );
            return;
        }
 
        pban = new_ban();
 
        pban->name = str_dup(fread_word(fp));
	pban->level = fread_number(fp);
	pban->ban_flags = fread_flag(fp);
	fread_to_eol(fp);

        if (ban_list == NULL)
	    ban_list = pban;
	else
	    ban_last->next = pban;
	ban_last = pban;
    }
}
示例#2
0
文件: ban.c 项目: michaelmwu/bota
void auto_ban_ip(int site)
{

    char name [ MAX_STRING_LENGTH ];
    BAN_DATA *pban;

    int decA = ( site >> 24 ) & 0xFF;
    int decB = ( site >> 16 ) & 0xFF;
    int decC = ( site >>  8 ) & 0xFF;
    int decD = ( site       ) & 0xFF;

    if(decA == 127 && decB == 0 && decB == 0 && decD == 1)
    {
        return; /* Localhost is OK for right now */
    }

    sprintf(name,"%d.%d.%d.", decA, decB, decC);

    pban = new_ban();
    pban->name = str_dup(name);
    pban->level = 105;

    SET_BIT(pban->ban_flags,BAN_SUFFIX);
    SET_BIT(pban->ban_flags,BAN_PERMANENT);

    pban->next  = ban_list;
    ban_list    = pban;
    save_bans();
    log_f("%s has been automatically banned.\n\r",pban->name);

    return;
}
示例#3
0
/**
 * Handle a player ban request.
 *
 * @param data the request packet
 * @param len the length of data
 * @param cli_addr the address of the sender
 * @param cli_len the length of cli_addr
 */
void *c_req_ban(char *data, unsigned int len, struct player *pl)
{
	uint32_t ban_id;
	struct player *target;
	char *reason, *ptr;
	uint16_t duration;
	struct server *s = pl->in_chan->in_server;

	ptr = data + 24;
	ban_id = ru32(&ptr);
	duration = ru16(&ptr);

	target = get_player_by_public_id(s, ban_id);

	if (target != NULL) {
		send_acknowledge(pl);		/* ACK */
		if(player_has_privilege(pl, SP_ADM_BAN_IP, target->in_chan)) {
			reason = rstaticstring(29, &ptr);
			add_ban(s, new_ban(0, target->cli_addr->sin_addr, reason));
			logger(LOG_INFO, "Reason for banning player %s : %s", target->name, reason);
			s_notify_ban(pl, target, duration, reason);
			remove_player(s, target);
			free(reason);
		}
	}
	return NULL;
}
示例#4
0
/*
 * Loads the ban file from the system directory.
 */
void load_bans(void)
{
    FILE *fp;
    BAN_DATA *ban_last;

    if ((fp = fopen(BAN_FILE, "r")) == NULL)
    {
        global.last_boot_result = MISSING;
        log_string("STATUS: No ban file available to load in the system directory.");
        return;
    }

    ban_last = NULL;
    for (;;)
    {
        BAN_DATA *pban;
        if (feof(fp))
        {
            if (global.last_boot_result == UNKNOWN)
            {
                global.last_boot_result = SUCCESS;
            }

            fclose(fp);
            return;
        }

        pban = new_ban();

        pban->name = str_dup(fread_word(fp));
        pban->level = fread_number(fp);
        pban->ban_flags = fread_flag(fp);
        fread_to_eol(fp);

        if (ban_list == NULL)
        {
            ban_list = pban;
        }
        else
        {
            ban_last->next = pban;
        }
        ban_last = pban;
    }

    if (global.last_boot_result == UNKNOWN)
        global.last_boot_result = SUCCESS;

} // end load_bans
示例#5
0
文件: ban.c 项目: KillerMud/Source
void load_bans( void )
{
    FILE * fp;
    BAN_DATA *ban_last;
    char * site;

    if ( ( fp = fopen( BAN_FILE, "r" ) ) == NULL )
        return ;

    ban_last = NULL;
    for ( ; ; )
    {
        BAN_DATA *pban;
        if ( feof( fp ) )
        {
            fclose( fp );
            return ;
        }

        pban = new_ban();

        site = fread_word( fp );
        if ( !str_cmp( site, "#" ) )
        {
            fclose( fp );
            return ;
        }

        pban->site = str_dup( site );
        pban->ban_flags = fread_flag( fp );
        pban->person = str_dup( fread_word( fp ) );
        pban->date_stamp = fread_long_number( fp );
        pban->period = fread_number( fp );
        pban->reason = fread_string_eol( fp );

        if ( pban->period > 0 && pban->date_stamp + ( pban->period * 24 * 3600 ) <= current_time )
        {
            free_ban( pban );
            continue;
        }

        if ( ban_list == NULL )
            ban_list = pban;
        else
            ban_last->next = pban;
        ban_last = pban;
    }
}
示例#6
0
/**
 * Handles a request to add an IP ban.
 *
 * @param data the request packet
 * @param len the length of data
 * @param cli_addr the address of the sender
 * @param cli_len the length of cli_addr
 */
void *c_req_ip_ban(char *data, unsigned int len, struct player *pl)
{
	struct in_addr ip;
	uint16_t duration;
	struct server *s = pl->in_chan->in_server;
	char *ptr;

	if(player_has_privilege(pl, SP_ADM_BAN_IP, NULL)) {
		send_acknowledge(pl);		/* ACK */
		ptr = data + 24;
		duration = ru16(&ptr);
		inet_aton(ptr, &ip);
		add_ban(s, new_ban(duration, ip, "IP BAN"));
	}
	return NULL;
}
示例#7
0
文件: ban.c 项目: KillerMud/Source
void ban_site( CHAR_DATA *ch, char *argument )
{
	char date[ 50 ];
	struct tm *btime;
    char buf[ MAX_STRING_LENGTH ], buf2[ MAX_STRING_LENGTH ], buf3[ MAX_STRING_LENGTH ];
    char arg1[ MAX_INPUT_LENGTH ], arg2[ MAX_INPUT_LENGTH ], arg3[ MAX_INPUT_LENGTH ];
    char *name;
    BUFFER *buffer;
    BAN_DATA *pban, *prev;
    bool prefix = FALSE, suffix = FALSE;
    int type;

    argument = one_argument( argument, arg1 );
    argument = one_argument( argument, arg2 );
    argument = one_argument( argument, arg3 );

    if ( arg1[ 0 ] == '\0' )
    {
        if ( ban_list == NULL )
        {
            send_to_char( "Nie ma ¿adnych banów.\n\r", ch );
            return ;
        }
        buffer = new_buf();

        add_buf( buffer, "{CAdres                                       Kto        Typ{x\n\r" );
        for ( pban = ban_list;pban != NULL;pban = pban->next )
        {
            sprintf( buf2, "%s%s%s",
                     IS_SET( pban->ban_flags, BAN_PREFIX ) ? "*" : "",
                     pban->site,
                     IS_SET( pban->ban_flags, BAN_SUFFIX ) ? "*" : "" );

            btime = localtime( &pban->date_stamp );
            strftime( date, 20, "%d-%m-%Y %H:%M:%S", btime );

            if ( pban->period <= 0 )
                sprintf( buf3, "od %s na sta³e", date );
            else if ( pban->period == 1 )
                sprintf( buf3, "od %s na 1 dzieñ", date );
            else
                sprintf( buf3, "od %s na %d dni", date, pban->period );

            sprintf( buf, "{Y%-40s{x    %-10s %-7s\n\r{CCzas{x: %s\n\r{CPowód{x: %s\n\r",
                     buf2, pban->person,
                     IS_SET( pban->ban_flags, BAN_NEWBIES ) ? "newbies" :
                     IS_SET( pban->ban_flags, BAN_PERMIT ) ? "permit" :
                     IS_SET( pban->ban_flags, BAN_ALL ) ? "all"	: "",
                     buf3,
                     IS_NULLSTR(pban->reason) ? "nie podano" : pban->reason );
            add_buf( buffer, buf );
            if ( pban->next )
            add_buf( buffer, "\n\r" );
        }

        add_buf( buffer, "\n\rDodanie nowego bana:\n\r" );
        add_buf( buffer, "permban [*]<adres>[*] all|newbies|permit <ile dni> [<powod>]\n\r" );
        add_buf( buffer, "- podanie 0 przy liczbie dni oznacza ban na sta³e\n\r" );
        page_to_char( buf_string( buffer ), ch );
        free_buf( buffer );
        return ;
    }

    /* find out what type of ban */
    if ( !str_prefix( arg2, "permit" ) )
        type = BAN_PERMIT;
    else if ( !str_prefix( arg2, "newbies" ) )
        type = BAN_NEWBIES;
    else if ( !str_prefix( arg2, "all" ) )
        type = BAN_ALL;
    else
    {
        send_to_char( "Dopuszczalne typy bana to: all, newbies, permit.\n\r", ch );
        return ;
    }

    name = arg1;

    if ( name[ 0 ] == '*' )
    {
        prefix = TRUE;
        name++;
    }

    if ( name[ strlen( name ) - 1 ] == '*' )
    {
        suffix = TRUE;
        name[ strlen( name ) - 1 ] = '\0';
    }

    if ( strlen( name ) == 0 )
    {
        send_to_char( "Nie poda³e¶ adresu do zbanowania.\n\r", ch );
        return ;
    }

    if ( arg3[0] == '\0' || !is_number( arg3 ) )
    {
        send_to_char( "Podaj liczbê dni przez jak± ma trwaæ ban (0 - ca³y czas).\n\r", ch );
        return;
    }

    prev = NULL;
    for ( pban = ban_list; pban != NULL; prev = pban, pban = pban->next )
    {
        if ( !str_cmp( name, pban->site ) )
        {
            if ( prev == NULL )
                ban_list = pban->next;
            else
                prev->next = pban->next;
            free_ban( pban );
        }
    }

    pban = new_ban();
    pban->site   = str_dup( name );
    pban->person = str_dup( ch->name );
    pban->date_stamp = current_time;
    pban->period = UMAX( 0, atoi( arg3 ) );
    pban->reason = str_dup( argument );

    /* set ban type */
    pban->ban_flags = type;

    if ( prefix )
        SET_BIT( pban->ban_flags, BAN_PREFIX );
    if ( suffix )
        SET_BIT( pban->ban_flags, BAN_SUFFIX );

    pban->next = ban_list;
    ban_list = pban;
    save_bans();
    sprintf( buf, "Adres %s zosta³ dodany do listy banów.\n\r", pban->site );
    send_to_char( buf, ch );
    return ;
}
示例#8
0
文件: ban.c 项目: michaelmwu/bota
void ban_site(CHAR_DATA *ch, char *argument, bool fPerm)
{
    char buf[MAX_STRING_LENGTH],buf2[MAX_STRING_LENGTH];
    char arg1[MAX_INPUT_LENGTH], arg2[MAX_INPUT_LENGTH];
    char *name;
    BUFFER *buffer;
    BAN_DATA *pban, *prev;
    bool prefix = FALSE,suffix = FALSE;
    int type;

    argument = one_argument(argument,arg1);
    argument = one_argument(argument,arg2);

    if ( arg1[0] == '\0' )
    {
	if (ban_list == NULL)
	{
	    send_to_char("No sites banned at this time.\n\r",ch);
	    return;
  	}
	buffer = new_buf();

        add_buf(buffer,"Banned sites  level  type     status\n\r");
        for (pban = ban_list;pban != NULL;pban = pban->next)
        {
	    sprintf(buf2,"%s%s%s",
		IS_SET(pban->ban_flags,BAN_PREFIX) ? "*" : "",
		pban->name,
		IS_SET(pban->ban_flags,BAN_SUFFIX) ? "*" : "");
	    sprintf(buf,"%-12s    %-3d  %-7s  %s\n\r",
		buf2, pban->level,
		IS_SET(pban->ban_flags,BAN_NEWBIES) ? "newbies" :
		IS_SET(pban->ban_flags,BAN_MULTI)   ? "multi" :
		IS_SET(pban->ban_flags,BAN_PERMIT)  ? "permit"  :
		IS_SET(pban->ban_flags,BAN_ALL)     ? "all"	: "",
	    	IS_SET(pban->ban_flags,BAN_PERMANENT) ? "perm" : "temp");
	    add_buf(buffer,buf);
        }

        page_to_char( buf_string(buffer), ch );
	free_buf(buffer);
        return;
    }

    /* find out what type of ban */
    if (arg2[0] == '\0' || !str_prefix(arg2,"all"))
	type = BAN_ALL;
    else if (!str_prefix(arg2,"newbies"))
	type = BAN_NEWBIES;
    else if (!str_prefix(arg2,"multi"))
	type = BAN_MULTI;
    else if (!str_prefix(arg2,"permit"))
	type = BAN_PERMIT;
    else
    {
	send_to_char("Acceptable ban types are all, newbies, and permit, and multi.\n\r",
	    ch); 
	return;
    }

    name = arg1;

    if (name[0] == '*')
    {
	prefix = TRUE;
	name++;
    }

    if (name[strlen(name) - 1] == '*')
    {
	suffix = TRUE;
	name[strlen(name) - 1] = '\0';
    }

    if (strlen(name) == 0)
    {
	send_to_char("You have to ban SOMETHING.\n\r",ch);
	return;
    }

    prev = NULL;
    for ( pban = ban_list; pban != NULL; prev = pban, pban = pban->next )
    {
        if (!str_cmp(name,pban->name))
        {
	    if (pban->level > get_trust(ch))
	    {
            	send_to_char( "That ban was set by a higher power.\n\r", ch );
            	return;
	    }
	    else
	    {
		if (prev == NULL)
		    ban_list = pban->next;
		else
		    prev->next = pban->next;
		free_ban(pban);
	    }
        }
    }

    pban = new_ban();
    pban->name = str_dup(name);
    pban->level = get_trust(ch);

    /* set ban type */
    pban->ban_flags = type;

    if (prefix)
	SET_BIT(pban->ban_flags,BAN_PREFIX);
    if (suffix)
	SET_BIT(pban->ban_flags,BAN_SUFFIX);
    if (fPerm)
	SET_BIT(pban->ban_flags,BAN_PERMANENT);

    pban->next  = ban_list;
    ban_list    = pban;
    save_bans();
    sprintf(buf,"%s has been banned.\n\r",pban->name);
    send_to_char( buf, ch );
    return;
}