]> git.ipfire.org Git - thirdparty/rspamd.git/commitdiff
[Fix] Do not do `lstat` when we are creating file
authorVsevolod Stakhov <vsevolod@rspamd.com>
Mon, 27 Feb 2023 10:44:22 +0000 (10:44 +0000)
committerVsevolod Stakhov <vsevolod@rspamd.com>
Mon, 27 Feb 2023 10:44:22 +0000 (10:44 +0000)
src/libutil/util.c

index bc62bb9193bbd162f4bad151c99d877c96fad418..915d77222c808e4a1de02f5a55795cc6bb07c8de 100644 (file)
@@ -1872,21 +1872,23 @@ rspamd_file_xopen (const char *fname, int oflags, guint mode,
        struct stat sb;
        int fd, flags = oflags;
 
-       if (lstat (fname, &sb) == -1) {
+       if (!(oflags & O_CREAT)) {
+               if (lstat(fname, &sb) == -1) {
 
-               if (errno != ENOENT) {
-                       return (-1);
+                       if (errno != ENOENT) {
+                               return (-1);
+                       }
                }
-       }
-       else if (!S_ISREG (sb.st_mode)) {
-               if (S_ISLNK (sb.st_mode)) {
-                       if (!allow_symlink) {
+               else if (!S_ISREG (sb.st_mode)) {
+                       if (S_ISLNK (sb.st_mode)) {
+                               if (!allow_symlink) {
+                                       return -1;
+                               }
+                       }
+                       else {
                                return -1;
                        }
                }
-               else {
-                       return -1;
-               }
        }
 
 #ifdef HAVE_OCLOEXEC