File netatalk-CVE-2022-22995.patch of Package netatalk.31057

Index: netatalk-3.1.0/etc/afpd/desktop.c
===================================================================
--- netatalk-3.1.0.orig/etc/afpd/desktop.c
+++ netatalk-3.1.0/etc/afpd/desktop.c
@@ -12,8 +12,10 @@
 #endif /* HAVE_CONFIG_H */
 
 #include <stdio.h>
+#include <stdlib.h>
 #include <string.h>
 #include <ctype.h>
+#include <sys/stat.h>
 
 #include <errno.h>
 
@@ -196,7 +198,6 @@ static void create_appledesktop_folder(c
 {
     bstring olddtpath = NULL, dtpath = NULL;
     struct stat st;
-    char *cmd_argv[4];
 
     olddtpath = bfromcstr(vol->v_path);
     bcatcstr(olddtpath, "/" APPLEDESKTOP);
@@ -204,27 +205,24 @@ static void create_appledesktop_folder(c
     dtpath = bfromcstr(vol->v_dbpath);
     bcatcstr(dtpath, "/" APPLEDESKTOP);
 
-    if (lstat(cfrombstr(dtpath), &st) != 0) {
-
-        become_root();
+    become_root();
 
-        if (lstat(cfrombstr(olddtpath), &st) == 0) {
-            cmd_argv[0] = "mv";
-            cmd_argv[1] = bdata(olddtpath);
-            cmd_argv[2] = bdata(dtpath);
-            cmd_argv[3] = NULL;
-            if (run_cmd("mv", cmd_argv) != 0) {
-                LOG(log_error, logtype_afpd, "moving .AppleDesktop from \"%s\" to \"%s\" failed",
+    if (lstat(cfrombstr(dtpath), &st) != 0) {
+        if ((lstat(cfrombstr(olddtpath), &st) == 0) && (S_ISDIR(st.st_mode) != 0)) {
+	    if (rename(bdata(olddtpath), bdata(dtpath)) != 0) {
+                LOG(log_error, logtype_afpd, "moving .AppleDesktop from \"%s\" failed; creating new dir \"%s\"",
                     bdata(olddtpath), bdata(dtpath));
                 mkdir(cfrombstr(dtpath), 0777);
             }
         } else {
+            LOG(log_debug, logtype_afpd, "no valid .AppleDesktop dir found; creating new dir \"%s\"",
+                bdata(dtpath));
             mkdir(cfrombstr(dtpath), 0777);
         }
-
-        unbecome_root();
     }
 
+    unbecome_root();
+
     bdestroy(dtpath);
     bdestroy(olddtpath);
 }
openSUSE Build Service is sponsored by