Correct handling of colons in SASL PLAIN
Only the first colon should be replaced with a null byte. Ported from pounce.
This commit is contained in:
		
							parent
							
								
									be9bffdf49
								
							
						
					
					
						commit
						506c5ad906
					
				
							
								
								
									
										12
									
								
								handle.c
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								handle.c
									
									
									
									
									
								
							@ -208,13 +208,13 @@ static void handleAuthenticate(struct Message *msg) {
 | 
				
			|||||||
		return;
 | 
							return;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	byte buf[299];
 | 
						byte buf[299] = {0};
 | 
				
			||||||
	size_t len = 1 + strlen(self.plain);
 | 
						size_t len = 1 + strlen(self.plain);
 | 
				
			||||||
	if (sizeof(buf) < len) errx(EX_CONFIG, "SASL PLAIN is too long");
 | 
						if (sizeof(buf) < len) errx(EX_USAGE, "SASL PLAIN is too long");
 | 
				
			||||||
	buf[0] = 0;
 | 
						memcpy(&buf[1], self.plain, len - 1);
 | 
				
			||||||
	for (size_t i = 0; self.plain[i]; ++i) {
 | 
						byte *sep = memchr(buf, ':', len);
 | 
				
			||||||
		buf[1 + i] = (self.plain[i] == ':' ? 0 : self.plain[i]);
 | 
						if (!sep) errx(EX_USAGE, "SASL PLAIN missing colon");
 | 
				
			||||||
	}
 | 
						*sep = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	char b64[BASE64_SIZE(sizeof(buf))];
 | 
						char b64[BASE64_SIZE(sizeof(buf))];
 | 
				
			||||||
	base64(b64, buf, len);
 | 
						base64(b64, buf, len);
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user