summaryrefslogtreecommitdiffstats
path: root/src/firejail/util.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/firejail/util.c')
-rw-r--r--src/firejail/util.c19
1 files changed, 14 insertions, 5 deletions
diff --git a/src/firejail/util.c b/src/firejail/util.c
index 4d1c94c25..559f7ee48 100644
--- a/src/firejail/util.c
+++ b/src/firejail/util.c
@@ -747,7 +747,7 @@ uid_t pid_get_uid(pid_t pid) {
747} 747}
748 748
749 749
750void invalid_filename(const char *fname) { 750void invalid_filename(const char *fname, int globbing) {
751// EUID_ASSERT(); 751// EUID_ASSERT();
752 assert(fname); 752 assert(fname);
753 const char *ptr = fname; 753 const char *ptr = fname;
@@ -763,10 +763,19 @@ void invalid_filename(const char *fname) {
763 return; 763 return;
764 764
765 int len = strlen(ptr); 765 int len = strlen(ptr);
766 // file globbing ('*') is allowed 766
767 if (strcspn(ptr, "\\&!?\"'<>%^(){}[];,") != (size_t)len) { 767 if (globbing) {
768 fprintf(stderr, "Error: \"%s\" is an invalid filename\n", ptr); 768 // file globbing ('*?[]') is allowed
769 exit(1); 769 if (strcspn(ptr, "\\&!\"'<>%^(){};,") != (size_t)len) {
770 fprintf(stderr, "Error: \"%s\" is an invalid filename\n", ptr);
771 exit(1);
772 }
773 }
774 else {
775 if (strcspn(ptr, "\\&!?\"'<>%^(){};,*[]") != (size_t)len) {
776 fprintf(stderr, "Error: \"%s\" is an invalid filename\n", ptr);
777 exit(1);
778 }
770 } 779 }
771} 780}
772 781