Merge pull request #1254 from ccvca/fix_passwd_len

Fix password input when MAX_BUFFER_LEN is not 1024 in mosquitto_passwd.c
This commit is contained in:
Roger Light 2019-08-01 10:18:34 +01:00 committed by GitHub
commit 07d2504bf5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -339,13 +339,15 @@ int gets_quiet(char *s, int len)
#endif #endif
} }
int get_password(char *password, int len) int get_password(char *password, size_t len)
{ {
char pw1[MAX_BUFFER_LEN], pw2[MAX_BUFFER_LEN]; char pw1[MAX_BUFFER_LEN], pw2[MAX_BUFFER_LEN];
size_t minLen;
minLen = len < MAX_BUFFER_LEN ? len : MAX_BUFFER_LEN;
printf("Password: "); printf("Password: ");
fflush(stdout); fflush(stdout);
if(gets_quiet(pw1, MAX_BUFFER_LEN)){ if(gets_quiet(pw1, minLen)){
fprintf(stderr, "Error: Empty password.\n"); fprintf(stderr, "Error: Empty password.\n");
return 1; return 1;
} }
@ -353,7 +355,7 @@ int get_password(char *password, int len)
printf("Reenter password: "); printf("Reenter password: ");
fflush(stdout); fflush(stdout);
if(gets_quiet(pw2, MAX_BUFFER_LEN)){ if(gets_quiet(pw2, minLen)){
fprintf(stderr, "Error: Empty password.\n"); fprintf(stderr, "Error: Empty password.\n");
return 1; return 1;
} }
@ -364,7 +366,7 @@ int get_password(char *password, int len)
return 1; return 1;
} }
strncpy(password, pw1, len); strncpy(password, pw1, minLen);
return 0; return 0;
} }
@ -526,7 +528,7 @@ int main(int argc, char *argv[])
#endif #endif
if(create_new){ if(create_new){
rc = get_password(password, 1024); rc = get_password(password, MAX_BUFFER_LEN);
if(rc){ if(rc){
free(password_file); free(password_file);
return rc; return rc;
@ -581,7 +583,7 @@ int main(int argc, char *argv[])
/* Update password for individual user */ /* Update password for individual user */
rc = update_pwuser(fptr, ftmp, username, password_cmd); rc = update_pwuser(fptr, ftmp, username, password_cmd);
}else{ }else{
rc = get_password(password, 1024); rc = get_password(password, MAX_BUFFER_LEN);
if(rc){ if(rc){
fclose(fptr); fclose(fptr);
fclose(ftmp); fclose(ftmp);