Fix password input when MAX_BUFFER_LEN is not 1024 in mosquitto_passwd.c

Signed-off-by: Christian von Arnim <christian.vonarnim@gmail.com>
This commit is contained in:
Christian von Arnim 2019-05-01 09:56:55 +02:00
parent 42fb2f5538
commit 324ed6be76
No known key found for this signature in database
GPG Key ID: 9A2235280DE78C51

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);