提交 44b94875 编写于 作者: R Roger A. Light

mosquitto_passwd uses mkstemp() for backup files.

上级 9bb80585
...@@ -29,6 +29,9 @@ Clients: ...@@ -29,6 +29,9 @@ Clients:
- Fix incorrect topic-alias property value in mosquitto_sub json output. - Fix incorrect topic-alias property value in mosquitto_sub json output.
- Fix confusing message on TLS certificate verification. Closes #2746. - Fix confusing message on TLS certificate verification. Closes #2746.
Apps:
- mosquitto_passwd uses mkstemp() for backup files.
2.0.15 - 2022-08-16 2.0.15 - 2022-08-16
=================== ===================
......
...@@ -370,15 +370,27 @@ static int copy_contents(FILE *src, FILE *dest) ...@@ -370,15 +370,27 @@ static int copy_contents(FILE *src, FILE *dest)
return 0; return 0;
} }
static int create_backup(const char *backup_file, FILE *fptr) static int create_backup(char *backup_file, FILE *fptr)
{ {
FILE *fbackup; FILE *fbackup;
#ifdef WIN32
fbackup = mosquitto__fopen(backup_file, "wt", true); fbackup = mosquitto__fopen(backup_file, "wt", true);
#else
int fd;
umask(077);
fd = mkstemp(backup_file);
if(fd < 0){
fprintf(stderr, "Error creating backup password file \"%s\", not continuing.\n", backup_file);
return 1;
}
fbackup = fdopen(fd, "wt");
#endif
if(!fbackup){ if(!fbackup){
fprintf(stderr, "Error creating backup password file \"%s\", not continuing.\n", backup_file); fprintf(stderr, "Error creating backup password file \"%s\", not continuing.\n", backup_file);
return 1; return 1;
} }
if(copy_contents(fptr, fbackup)){ if(copy_contents(fptr, fbackup)){
fprintf(stderr, "Error copying data to backup password file \"%s\", not continuing.\n", backup_file); fprintf(stderr, "Error copying data to backup password file \"%s\", not continuing.\n", backup_file);
fclose(fbackup); fclose(fbackup);
...@@ -617,13 +629,13 @@ int main(int argc, char *argv[]) ...@@ -617,13 +629,13 @@ int main(int argc, char *argv[])
return 1; return 1;
} }
backup_file = malloc((size_t)strlen(password_file)+5); backup_file = malloc((size_t)strlen(password_file)+strlen(".backup.XXXXXX"));
if(!backup_file){ if(!backup_file){
fprintf(stderr, "Error: Out of memory.\n"); fprintf(stderr, "Error: Out of memory.\n");
free(password_file); free(password_file);
return 1; return 1;
} }
snprintf(backup_file, strlen(password_file)+5, "%s.tmp", password_file); snprintf(backup_file, strlen(password_file)+5, "%s.backup.XXXXXX", password_file);
free(password_file); free(password_file);
password_file = NULL; password_file = NULL;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册