mirror of
				https://github.com/osmarks/ngircd.git
				synced 2025-10-31 14:02:59 +00:00 
			
		
		
		
	Fix NAMES/WHO response when client has multi-prefix
This has been fixed by commit 16f94546 "Fix NAMES response when
client has multi-prefix" in the master branch, fix it in this patch
series, too.
			
			
This commit is contained in:
		| @@ -807,8 +807,18 @@ who_flags_status(const char *client_modes) | |||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * Return channel user mode prefix(es). | ||||||
|  |  * | ||||||
|  |  * @param Client The client requesting the mode prefixes. | ||||||
|  |  * @param chan_user_modes String with channel user modes. | ||||||
|  |  * @param str String buffer to which the prefix(es) will be appended. | ||||||
|  |  * @param len Size of "str" buffer. | ||||||
|  |  * @return Pointer to "str". | ||||||
|  |  */ | ||||||
| static char * | static char * | ||||||
| who_flags_qualifier(CLIENT *Client, const char *chan_user_modes, char *str, size_t len) | who_flags_qualifier(CLIENT *Client, const char *chan_user_modes, | ||||||
|  | 		    char *str, size_t len) | ||||||
| { | { | ||||||
| 	assert(Client != NULL); | 	assert(Client != NULL); | ||||||
|  |  | ||||||
| @@ -856,7 +866,6 @@ IRC_WHO_Channel(CLIENT *Client, CHANNEL *Chan, bool OnlyOps) | |||||||
| 	bool is_visible, is_member, is_ircop; | 	bool is_visible, is_member, is_ircop; | ||||||
| 	CL2CHAN *cl2chan; | 	CL2CHAN *cl2chan; | ||||||
| 	const char *client_modes; | 	const char *client_modes; | ||||||
| 	const char *chan_user_modes; |  | ||||||
| 	char flags[10]; | 	char flags[10]; | ||||||
| 	CLIENT *c; | 	CLIENT *c; | ||||||
| 	int count = 0; | 	int count = 0; | ||||||
| @@ -888,8 +897,8 @@ IRC_WHO_Channel(CLIENT *Client, CHANNEL *Chan, bool OnlyOps) | |||||||
| 			if (is_ircop) | 			if (is_ircop) | ||||||
| 				strlcat(flags, "*", sizeof(flags)); | 				strlcat(flags, "*", sizeof(flags)); | ||||||
|  |  | ||||||
| 			chan_user_modes = Channel_UserModes(Chan, c); | 			who_flags_qualifier(Client, Channel_UserModes(Chan, c), | ||||||
| 			who_flags_qualifier(c, chan_user_modes, flags, sizeof(flags)); | 					    flags, sizeof(flags)); | ||||||
|  |  | ||||||
| 			if (!write_whoreply(Client, c, Channel_Name(Chan), | 			if (!write_whoreply(Client, c, Channel_Name(Chan), | ||||||
| 					    flags)) | 					    flags)) | ||||||
| @@ -1105,7 +1114,8 @@ IRC_WHOIS_SendReply(CLIENT *Client, CLIENT *from, CLIENT *c) | |||||||
| 		if (str[strlen(str) - 1] != ':') | 		if (str[strlen(str) - 1] != ':') | ||||||
| 			strlcat(str, " ", sizeof(str)); | 			strlcat(str, " ", sizeof(str)); | ||||||
|  |  | ||||||
| 		who_flags_qualifier(c, Channel_UserModes(chan, c), str, sizeof(str)); | 		who_flags_qualifier(Client, Channel_UserModes(chan, c), | ||||||
|  | 				    str, sizeof(str)); | ||||||
| 		strlcat(str, Channel_Name(chan), sizeof(str)); | 		strlcat(str, Channel_Name(chan), sizeof(str)); | ||||||
|  |  | ||||||
| 		if (strlen(str) > (LINE_LEN - CHANNEL_NAME_LEN - 4)) { | 		if (strlen(str) > (LINE_LEN - CHANNEL_NAME_LEN - 4)) { | ||||||
| @@ -1610,7 +1620,8 @@ IRC_Send_NAMES(CLIENT * Client, CHANNEL * Chan) | |||||||
| 			if (str[strlen(str) - 1] != ':') | 			if (str[strlen(str) - 1] != ':') | ||||||
| 				strlcat(str, " ", sizeof(str)); | 				strlcat(str, " ", sizeof(str)); | ||||||
|  |  | ||||||
| 			who_flags_qualifier(cl,	Channel_UserModes(Chan, cl), str, sizeof(str)); | 			who_flags_qualifier(Client, Channel_UserModes(Chan, cl), | ||||||
|  | 					    str, sizeof(str)); | ||||||
| 			strlcat(str, Client_ID(cl), sizeof(str)); | 			strlcat(str, Client_ID(cl), sizeof(str)); | ||||||
|  |  | ||||||
| 			if (strlen(str) > (LINE_LEN - CLIENT_NICK_LEN - 4)) { | 			if (strlen(str) > (LINE_LEN - CLIENT_NICK_LEN - 4)) { | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Alexander Barton
					Alexander Barton