X-Git-Url: https://arthur.barton.de/cgi-bin/gitweb.cgi?p=ngircd-alex.git;a=blobdiff_plain;f=src%2Fngircd%2Fclass.c;h=b2b1aa357c13a9470e29076a43406bef1fa70461;hp=0a8ae2414f17145c2c8a67bf4a3949fd68cd8a66;hb=139f5961a078dfd23a469d98c3942f42595854aa;hpb=eba95bb0d240aa3c8791cb6eb830ced5023db0b0 diff --git a/src/ngircd/class.c b/src/ngircd/class.c index 0a8ae241..b2b1aa35 100644 --- a/src/ngircd/class.c +++ b/src/ngircd/class.c @@ -33,8 +33,6 @@ struct list_head My_Classes[CLASS_COUNT]; -char Reject_Reason[COMMAND_LEN]; - GLOBAL void Class_Init(void) { @@ -49,32 +47,29 @@ Class_Exit(void) for (i = 0; i < CLASS_COUNT; Lists_Free(&My_Classes[i++])); } -GLOBAL char * -Class_GetMemberReason(const int Class, CLIENT *Client) +GLOBAL bool +Class_GetMemberReason(const int Class, CLIENT *Client, char *reason, size_t len) { - char *reason; + char str[COMMAND_LEN] = "listed"; assert(Class < CLASS_COUNT); assert(Client != NULL); - reason = Lists_CheckReason(&My_Classes[Class], Client); - if (!reason) - return NULL; - - if (!*reason) - reason = "listed"; + if (!Lists_CheckReason(&My_Classes[Class], Client, str, sizeof(str))) + return false; switch(Class) { case CLASS_GLINE: - snprintf(Reject_Reason, sizeof(Reject_Reason), - "\"%s\" (G-Line)", reason); - return Reject_Reason; + snprintf(reason, len, "\"%s\" (G-Line)", str); + break; case CLASS_KLINE: - snprintf(Reject_Reason, sizeof(Reject_Reason), - "\"%s\" (K-Line)", reason); - return Reject_Reason; + snprintf(reason, len, "\"%s\" (K-Line)", str); + break; + default: + snprintf(reason, len, "%s", str); + break; } - return reason; + return true; } /** @@ -88,15 +83,13 @@ Class_GetMemberReason(const int Class, CLIENT *Client) GLOBAL bool Class_HandleServerBans(CLIENT *Client) { - char *rejectptr; + char reject[COMMAND_LEN]; assert(Client != NULL); - rejectptr = Class_GetMemberReason(CLASS_GLINE, Client); - if (!rejectptr) - rejectptr = Class_GetMemberReason(CLASS_KLINE, Client); - if (rejectptr) { - Client_Reject(Client, rejectptr, true); + if (Class_GetMemberReason(CLASS_GLINE, Client, reject, sizeof(reject)) || + Class_GetMemberReason(CLASS_KLINE, Client, reject, sizeof(reject))) { + Client_Reject(Client, reject, true); return DISCONNECTED; } @@ -105,23 +98,30 @@ Class_HandleServerBans(CLIENT *Client) GLOBAL bool -Class_AddMask(const int Class, const char *Mask, time_t ValidUntil, +Class_AddMask(const int Class, const char *Pattern, time_t ValidUntil, const char *Reason) { + char mask[MASK_LEN]; + assert(Class < CLASS_COUNT); - assert(Mask != NULL); + assert(Pattern != NULL); assert(Reason != NULL); - return Lists_Add(&My_Classes[Class], Mask, ValidUntil, Reason); + Lists_MakeMask(Pattern, mask, sizeof(mask)); + return Lists_Add(&My_Classes[Class], mask, + ValidUntil, Reason); } GLOBAL void -Class_DeleteMask(const int Class, const char *Mask) +Class_DeleteMask(const int Class, const char *Pattern) { + char mask[MASK_LEN]; + assert(Class < CLASS_COUNT); - assert(Mask != NULL); + assert(Pattern != NULL); - Lists_Del(&My_Classes[Class], Mask); + Lists_MakeMask(Pattern, mask, sizeof(mask)); + Lists_Del(&My_Classes[Class], mask); } GLOBAL struct list_head *