ssh-keygen -R is case-sensitive, but should not be

Ángel González keisial at gmail.com
Sat Apr 16 09:28:00 AEST 2016


On 16/04/16 00:32, Griff Miller II wrote:
> Here is a better patch. Somehow I pasted an older version of my edits:

Hello Griff

Thanks for your patch. That will surely help the maintainers.
Here are a few comments from my part:

> -------------------------------------------------------
> % diff ./match.c /home/millerig/osrc/openssh-7.2p2/match.c
> 121a122
I'd have prefered an unified diff :)


>> 	char *low_string = 0;
I know that the C standard guarantees that it has the exact
same semantic, but please, if you are initializing a pointer, use NULL.

(PS: there's exactly an instance of that in openssh code at 
server_input_hostkeys_prove, that should be changed, too)

There's a memory leak on line 147 when a subpattern is too long.


> 156,159c157,168
> <  		if (match_pattern(string, sub)) {
> <  			if (negated)
> <  				return -1;		/* Negative */
> <  			else
> ---
>> 		if (dolower) {
By performing the lowercase here, you are doing a free() + malloc() + 
tolower() copying of the string per subpattern.
Just move the lowercasing code before the for.

>> 			u_int j;
>> 			if (low_string) free(low_string);
Which then makes this innecessary.

>> 			low_string = malloc(strlen(string) + 1);
Use xmalloc() here

>> 			for (j = 0; j<  strlen(string); ++j) low_string[j] = tolower(string[j]);
I'd recommend breaking this in two lines.

The compiler will probably figure out that strlen() can be called only 
once, instead of creating O(n²) code,
but this is equivalent to «for (j = 0; string[j]; …»

>> 			low_string[j] = 0;
Similar to the above NULL issue: low_string is a char*, so -although 
equivalent- it's generally better to use '\0'.

>> 		}
>> 		if (match_pattern((dolower ? low_string : string), sub)) {
>> 			if (negated) {
>> 				got_positive = -1;		/* Negative */
>> 				break;
>> 			} else
> 165,166c174,175
> <  	* Return success if got a positive match.  If there was a negative
> <  	* match, we have already returned -1 and never get here.
> ---
>> 	* Return success if there was a positive match;
>> 	 * return -1 if there was a negative match.
> 167a177
>> 	if (low_string) free(low_string);
Useless if

Best regards



More information about the openssh-unix-dev mailing list