Do not fail password check if shadow password does not exist -
fall back to ordinary one Reduced usage of functions returning datain static buffers. (mostly passwd/group/shadow related): function old new delta correct_password 143 193 +50 sulogin_main 490 533 +43 adduser_main 732 774 +42 passwd_main 1875 1915 +40 addgroup_main 330 365 +35 bb_internal_getspnam 38 - -38 bb_internal_fgetpwent 38 - -38 bb_internal_fgetgrent 38 - -38 static.resultbuf 168 88 -80 static.buffer 1872 1104 -768 ------------------------------------------------------------------------------ (add/remove: 0/3 grow/shrink: 5/2 up/down: 210/-962) Total: -752 bytes
This commit is contained in:
		@@ -342,15 +342,18 @@ static void username_tab_completion(char *ud, char *with_shash_flg)
 | 
			
		||||
		}
 | 
			
		||||
	} else {
 | 
			
		||||
		/* "~[^/]*" */
 | 
			
		||||
		setpwent();
 | 
			
		||||
		/* Using _r function to avoid pulling in static buffers */
 | 
			
		||||
		char line_buff[PWD_BUFFER_SIZE];
 | 
			
		||||
		struct passwd pwd;
 | 
			
		||||
		struct passwd *result;
 | 
			
		||||
 | 
			
		||||
		while ((entry = getpwent()) != NULL) {
 | 
			
		||||
		setpwent();
 | 
			
		||||
		while (!getpwent_r(&pwd, line_buff, sizeof(line_buff), &result)) {
 | 
			
		||||
			/* Null usernames should result in all users as possible completions. */
 | 
			
		||||
			if ( /*!userlen || */ !strncmp(ud, entry->pw_name, userlen)) {
 | 
			
		||||
				add_match(xasprintf("~%s/", entry->pw_name));
 | 
			
		||||
			if (/*!userlen || */ strncmp(ud, pwd.pw_name, userlen) == 0) {
 | 
			
		||||
				add_match(xasprintf("~%s/", pwd.pw_name));
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		endpwent();
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user