mirror of
https://gitea.psi.ch/ELOG/elog.git
synced 2026-09-08 17:13:56 +00:00
Prevent attachment files from being overwritten
This commit is contained in:
parent
d9d1f5b54b
commit
283534d97d
53
src/elogd.c
53
src/elogd.c
@ -4574,8 +4574,8 @@ int el_retrieve(LOGBOOK *lbs, int message_id, char *date, char attr_list[MAX_N_A
|
|||||||
|
|
||||||
int el_submit_attachment(LOGBOOK *lbs, const char *afilename, const char *buffer, int buffer_size,
|
int el_submit_attachment(LOGBOOK *lbs, const char *afilename, const char *buffer, int buffer_size,
|
||||||
char *full_name) {
|
char *full_name) {
|
||||||
char file_name[MAX_PATH_LENGTH], ext_file_name[
|
char file_name[MAX_PATH_LENGTH], ext_file_name[MAX_PATH_LENGTH + 100], str[MAX_PATH_LENGTH],
|
||||||
MAX_PATH_LENGTH + 100], str[MAX_PATH_LENGTH], *p, subdir[MAX_PATH_LENGTH];
|
*p, subdir[MAX_PATH_LENGTH], path_name[MAX_PATH_LENGTH];
|
||||||
int fh;
|
int fh;
|
||||||
time_t now;
|
time_t now;
|
||||||
struct tm tms;
|
struct tm tms;
|
||||||
@ -4604,23 +4604,44 @@ int el_submit_attachment(LOGBOOK *lbs, const char *afilename, const char *buffer
|
|||||||
tms.tm_mday, tms.tm_hour, tms.tm_min, tms.tm_sec, file_name);
|
tms.tm_mday, tms.tm_hour, tms.tm_min, tms.tm_sec, file_name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
strlcpy(path_name, lbs->data_dir, sizeof(str));
|
||||||
|
generate_subdir_name(ext_file_name, subdir, sizeof(subdir));
|
||||||
|
strlcat(path_name, subdir, sizeof(str));
|
||||||
|
if (strlen(path_name) > 0 && path_name[strlen(path_name) - 1] == DIR_SEPARATOR)
|
||||||
|
path_name[strlen(path_name) - 1] = 0;
|
||||||
|
|
||||||
|
#ifdef OS_WINNT
|
||||||
|
mkdir(path_name);
|
||||||
|
#else
|
||||||
|
mkdir(path_name, 0755);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
strlcat(path_name, DIR_SEPARATOR_STR, sizeof(path_name));
|
||||||
|
|
||||||
|
|
||||||
|
/* test if file exists */
|
||||||
|
do {
|
||||||
|
strlcpy(str, path_name, sizeof(str));
|
||||||
|
strlcat(str, ext_file_name, sizeof(path_name));
|
||||||
|
|
||||||
|
fh = open(str, O_RDONLY, 0644);
|
||||||
|
if (fh > 0) {
|
||||||
|
close(fh);
|
||||||
|
strlcpy(str, ext_file_name, sizeof(str));
|
||||||
|
if (strchr(str, '.')) {
|
||||||
|
*strchr(str, '.') = 0;
|
||||||
|
strlcat(str, "_1", sizeof(str));
|
||||||
|
strlcat(str, strchr(ext_file_name, '.'), sizeof(str));
|
||||||
|
strlcpy(ext_file_name, str, sizeof(ext_file_name));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} while (fh > 0);
|
||||||
|
|
||||||
if (full_name)
|
if (full_name)
|
||||||
strlcpy(full_name, ext_file_name, MAX_PATH_LENGTH);
|
strlcpy(full_name, ext_file_name, MAX_PATH_LENGTH);
|
||||||
|
|
||||||
strlcpy(str, lbs->data_dir, sizeof(str));
|
strlcpy(str, path_name, sizeof(str));
|
||||||
generate_subdir_name(ext_file_name, subdir, sizeof(subdir));
|
strlcat(str, ext_file_name, sizeof(path_name));
|
||||||
strlcat(str, subdir, sizeof(str));
|
|
||||||
if (strlen(str) > 0 && str[strlen(str) - 1] == DIR_SEPARATOR)
|
|
||||||
str[strlen(str) - 1] = 0;
|
|
||||||
|
|
||||||
#ifdef OS_WINNT
|
|
||||||
mkdir(str);
|
|
||||||
#else
|
|
||||||
mkdir(str, 0755);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
strlcat(str, DIR_SEPARATOR_STR, sizeof(str));
|
|
||||||
strlcat(str, ext_file_name, sizeof(str));
|
|
||||||
|
|
||||||
/* save attachment */
|
/* save attachment */
|
||||||
fh = open(str, O_CREAT | O_RDWR | O_BINARY, 0644);
|
fh = open(str, O_CREAT | O_RDWR | O_BINARY, 0644);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user