Vous n'êtes pas identifié(e).

Top posteurs

Statistiques

Partenaires

  • eXolia Hosting
  • Eggdrop.fr

#1 08/06/2014 17:00:41

XemnOf
Nouveau IRCzien
Inscription : 08/06/2014
Messages : 1

Service CS6.0

Bonjour,

J'utilise le CS6.0 sur mon IRCU et je rencontre quelques petits soucis en ce qui concerne le CS6.0.
Je m'explique, j'ai activé le Modadmin PROTECT pour moi. Il s'avère que même avec la protection activée, le CS me kick, Ban et KickBan hors qu'il ne devrait pas ( surtout que je suis CSAdmin et IrcOp ).
Est-ce qu'il y aurait une personne connaissant le C C++ et qui pourrait éventuellement m'aider a debug le CS6.0 ?
Je mets le code kick ban ( kickban.c ) et si une personne pouvait jeter un oeil.
Merci d'avance


Code: C
 
/* CS6 - Channel Services src/kickban.c
 * CS5.0, CS5.1 and CS6.0 Copyright © 1998-1999 Chris Birch(IRCore)
 */
 
#include <bot.h>
 
void kick_ban(char *who, char *rest)
{
   struct userinfo *tmp, *usertmp, *admn, *admntmp;
   struct regsinfo *regs;
   struct nickinfo *tmp1, *tmp4;
   struct chaninfo *tmp2;
   struct authinfo *admnauth, *userauth, *tmp3;
   char *nick = NULL, *level = NULL, *chan = NULL, *tlevel = NULL, *nnwho = NULL, *uhost = NULL;
   char test[10000], *therest = NULL, newban[1000], *nwho = NULL, *banmask = NULL, *waste = NULL, *tnick = NULL, *helpname = NULL;
 
   char *foobar = NULL, test2[1000], *testtime = NULL;
 
   test[0]='\0';
   newban[0]='\0';
   nwho = nick2num(who);
   strcpy(test, rest);
   chan = strtok(test, " ");
   if(chan_check(chan, who) == -1) return;
   if(check(chan, who) == -1) return;
   admn = return_userinfo(who, csadminchan);
   tmp = return_userinfo(who, chan);
   helpname = get_command_name("kickban");
   if(level = strchr(rest, ' '))
   {
      *level++ = '\0';
      tlevel = strtok(NULL, " ");
      if(is_num(tlevel))
      {
	 if(nick = strchr(level, ' '))
	 {
	    *nick++ = '\0';
	    tnick = strtok(NULL, " ");
	    if(strchr(tnick, '!') || strchr(tnick, '@'))
	    {
	       do_help(who, helpname);
	       return;
	    }
	    if(!strcasecmp(nick, bot.nick))
	    {
	       send_to_server(":%s NOTICE %s : Now you went and did it, I'm leaving and not coming back\n", bot.nick, nwho);
	       send_to_server(":%s PART %s\n", bot.nick, chan);
	       return;
	    }
	    if(therest = strchr(nick, ' ')) *therest++ = '\0';
	    else
	       therest = NULL;
	    if(uhost = getuserhost(nick));
	    if(uhost == NULL)
	    {
	       send_to_server(":%s NOTICE %s : User is not currently online\n", bot.nick, nwho);
	       return;
	    }
	    banmask = get_ban_mask(uhost);
	    if(therest != NULL)
	       sprintf(newban, "%s %s %s %s", chan, level, banmask, therest);
	    else
	       sprintf(newban, "%s %s %s", chan, level, banmask);
	    usertmp = return_userinfo(banmask, chan);
	    admntmp = return_userinfo(banmask, csadminchan);
	    userauth = return_authinfo(chan, nick);
	    admnauth = return_authinfo(csadminchan, nick);
	    if(admntmp != NULL && admntmp->protect && admnauth != NULL && strcasecmp(who, bot.nick))
	    {
	       send_to_server(":%s NOTICE %s : Ce mask correspond à un Admin protégé \n\n", bot.nick, nwho);
	       return;
	    }
	    else if(usertmp != NULL && usertmp->protect && userauth != NULL && strcasecmp(who, bot.nick))
	    {
	       send_to_server(":%s NOTICE %s : Ce mask correspond à un user protégé \n", bot.nick, nwho);   
	       return;
	    }
	    ban(who, newban);
	    nnwho=nick2num(nick);
 
	    if (therest != NULL)
	    {
	       strcpy(test2, therest);
	       testtime = strtok(test2, " ");
	       if(strchr(testtime, ':'))
	       {
		  if(foobar = strchr(therest, ' ')) *foobar++ = '\0';
		  send_to_server(":%s KICK %s %s :%s\n", bot.nick, chan, nnwho, foobar);
	       }
	       else
	       {
		  send_to_server(":%s KICK %s %s :%s\n", bot.nick, chan, nnwho, therest);
	       }
	    }
	    else
	    {
	       send_to_server(":%s KICK %s %s :%s\n", bot.nick, chan, nnwho, reason);
	    }
	    tmp1 = nickhead;
	    while(tmp1 != NULL)
	    {
	       tmp2 = tmp1->chanhead;
	       while(tmp2 != NULL)
	       {
		  if(!strcasecmp(chan, tmp2->channel))
		  {
		     tmp3 = return_authinfo(chan, tmp1->nick);
		     if(tmp3 != NULL && tmp2->is_ops)
			send_to_server(":%s NOTICE %s : IriX a kickban %s de %s ( %s [%s])\n", bot.nick, tmp1->numeric, nick, chan, reason, who);
		  }
		  tmp2 = tmp2->next;
	       }
	       tmp1 = tmp1->next;
	    }
	 }
	 else
	 {
	    do_help(who, helpname);
	    return;
	 }
      }
      else
      {
	 if(strchr(tlevel, '!') || strchr(tlevel, '@'))
	 {
	    do_help(who, helpname);
	    return;
	 }
	 if(therest = strchr(level, ' ')) *therest++ = '\0';
	 else
	    therest = NULL;
	 if(!strcasecmp(level, bot.nick))
	 {
	    send_to_server(":%s NOTICE %s : Now you went and did it, I'm leaving and not coming back\n", bot.nick, nwho);
	    send_to_server(":%s PART %s\n", bot.nick, chan);
	    return;
	 }
	 if(uhost = getuserhost(level));
	 if(uhost == NULL)
	 {
	    send_to_server(":%s NOTICE %s : User is not currently online\n", bot.nick, nwho);
	    return;
	 }
	 banmask = get_ban_mask(uhost);
	 if(therest != NULL)
	    sprintf(newban, "%s %s %s", chan, banmask, therest);
	 else
	    sprintf(newban, "%s %s", chan, banmask);
	 usertmp = return_userinfo(banmask, chan);
	 admntmp = return_userinfo(banmask, csadminchan);
	 userauth = return_authinfo(chan, level);
	 admnauth = return_authinfo(csadminchan, level);
	 if(admntmp != NULL && admntmp->protect && admnauth != NULL && strcasecmp(who, bot.nick))
	 {  
	    send_to_server(":%s NOTICE %s : Ce mask correspond à un Admin protégé \n", bot.nick, nwho);
	    return;
	 }	   
	 else if(usertmp != NULL && usertmp->protect && userauth != NULL && strcasecmp(who, bot.nick))
	 {  
	    send_to_server(":%s NOTICE %s : Ce mask correspond à un user protégé \n", bot.nick, nwho);                        
	    return;
	 }
	 ban(who, newban);
	 nnwho=nick2num(level);
	 if (therest != NULL)
	 {
	    strcpy(test2, therest);
	    testtime = strtok(test2, " ");
	    if(strchr(testtime, ':'))
	    {
	       if(foobar = strchr(therest, ' ')) *foobar++ = '\0';
	       send_to_server(":%s KICK %s %s :%s\n", bot.nick, chan, nnwho, foobar);
	    }
	    else
	    {
	       send_to_server(":%s KICK %s %s :%s\n", bot.nick, chan, nnwho, therest);
	    }
	 }
	 else
	 {
	    send_to_server(":%s KICK %s %s :%s\n", bot.nick, chan, nnwho, reason);
	 }
	 tmp1 = nickhead;
	 while(tmp1 != NULL)
	 {
	    tmp2 = tmp1->chanhead;
	    while(tmp2 != NULL)
	    {
	       if(!strcasecmp(chan, tmp2->channel))
	       {
		  tmp3 = return_authinfo(chan, tmp1->nick);
		  if(tmp3 != NULL && tmp2->is_ops)
		     send_to_server(":%s NOTICE %s : X has kickbanned %s from %s ( %s [%s])\n", bot.nick, tmp1->numeric, level, chan, reason, who);
	       }
	       tmp2 = tmp2->next;
	    }
	    tmp1 = tmp1->next;
	 }
      }
   }
   else
   {
      do_help(who, helpname);
      return;
   }
}
 
 

Hors ligne

#2 09/06/2014 20:18:13

Harakiri
Administrateur
Lieu : Paris
Inscription : 02/07/2011
Messages : 260

Re : Service CS6.0

Salut,

Tout d'abord, sache que je ne connais pas très bien ce service et que mes remarques ne découlent que de la lecture du bout de code que tu as montré.
C'est un peu difficile de «debugger» quoi que ce soit sans le reste du code (qui est évidemment trop long pour être posté ici).
Dans la fonction que tu as donné, il semble qu'il y ait bien une vérification du statut de l'utilisateur qui est la cible du kick.

Je parle de ces lignes-là :

Code: C
 
if(admntmp != NULL && admntmp->protect && admnauth != NULL && strcasecmp(who, bot.nick))
 {  
    send_to_server(":%s NOTICE %s : Ce mask correspond à un Admin protégé \n", bot.nick, nwho);
    return;
 }	   
else if(usertmp != NULL && usertmp->protect && userauth != NULL && strcasecmp(who, bot.nick))
 {  
    send_to_server(":%s NOTICE %s : Ce mask correspond à un user protégé \n", bot.nick, nwho);                        
    return;
 }
 

En voyant ça, on peut donc se dire que le problème vient du fait que tu ne sois probablement pas bien authentifié ou qu'il y a un problème dans ta configuration.
On voit en tout cas qu'il faut non seulement que le statut soit attribué à l'utilisateur, mais aussi (avec la variable admnauth) authentifié. Vérifie donc que tout va bien de ce côté.

J'ose imaginer que tu as vérifié cela avant de poster.. Je pense que pour continuer il est préférable que tu passes sur IRC. On pourrait essayer de voir ensemble ce qui fonctionne bien et ce qui fonctionne moins bien pour avoir des pistes. smile
Si tu veux continuer sur ce fil, il faudrait un peu plus de détails sur ta configuration (fichiers de conf qui sont impliqués), que tu nous dises s'il y a des erreurs ou des warnings lorsque tu lances le service ou que le kick est effectué et ce genre de choses.
Enfin, en tout cas, comme ça, je pense que c'est assez difficile de se prononcer.


EOF

Hors ligne

Pied de page des forums

500002 visites ( 230 aujourd'hui ) 6 visiteurs en ligne
Copyright © 2004 - 2013 IRCz