Fix mosquitto_passwd segfault on corrupt file.

Thanks to srasku-ge.

Closes #1207
pull/1203/head
Roger A. Light 7 years ago
parent 43c159b9a5
commit 42732f4cca

@ -18,6 +18,7 @@ Broker features:
- Drop support for TLS v1.0.
- Add support for Automotive DLT logging.
- Disallow writing to $ topics where appropriate.
- Fix mosquitto_passwd crashing on corrupt password file. Closes #1207.
Client library features:
- Add mosquitto_subscribe_multiple() for sending subscriptions to multiple

@ -204,10 +204,17 @@ int delete_pwuser(FILE *fptr, FILE *ftmp, const char *username)
char buf[MAX_BUFFER_LEN];
char lbuf[MAX_BUFFER_LEN], *token;
bool found = false;
int line = 0;
while(!feof(fptr) && fgets(buf, MAX_BUFFER_LEN, fptr)){
line++;
memcpy(lbuf, buf, MAX_BUFFER_LEN);
token = strtok(lbuf, ":");
if(!token){
fprintf(stderr, "Error: Corrupt password file at line %d.\n", line);
return 1;
}
if(strcmp(username, token)){
fprintf(ftmp, "%s", buf);
}else{
@ -253,10 +260,17 @@ int update_pwuser(FILE *fptr, FILE *ftmp, const char *username, const char *pass
char lbuf[MAX_BUFFER_LEN], *token;
bool found = false;
int rc = 1;
int line = 0;
while(!feof(fptr) && fgets(buf, MAX_BUFFER_LEN, fptr)){
line++;
memcpy(lbuf, buf, MAX_BUFFER_LEN);
token = strtok(lbuf, ":");
if(!token){
fprintf(stderr, "Error: Corrupt password file at line %d.\n", line);
return 1;
}
if(strcmp(username, token)){
fprintf(ftmp, "%s", buf);
}else{

Loading…
Cancel
Save