windows-shell-add-symlink-20080206
authorJeffrey Altman <jaltman@secure-endpoints.com>
Wed, 6 Feb 2008 17:53:12 +0000 (17:53 +0000)
committerJeffrey Altman <jaltman@secure-endpoints.com>
Wed, 6 Feb 2008 17:53:12 +0000 (17:53 +0000)
LICENSE MIT

No longer attempt to validate the target of the symlink.
There is no method of doing so reliably.

src/WINNT/client_exp/gui2fs.cpp
src/WINNT/client_exp/make_symbolic_link_dlg.cpp

index baceca8..3bfc1b8 100644 (file)
@@ -1998,7 +1998,7 @@ BOOL GetTokenInfo(CStringArray& tokenInfo)
     return TRUE;
 }
 
-UINT MakeSymbolicLink(const char *strName, const char *strDir)
+UINT MakeSymbolicLink(const char *strName, const char *strTarget)
 {
     struct ViceIoctl blob;
     char space[MAXSIZE];
@@ -2009,45 +2009,20 @@ UINT MakeSymbolicLink(const char *strName, const char *strDir)
     HOURGLASS hourglass;
     static char message[2048];
 
-    strcpy(path, strDir);
+    strcpy(path, strName);
     parent = Parent(path);
 
-    sprintf(message,"MakeSymbolicLink: path = %s parent = %s\n",path,parent);
+    sprintf(message,"MakeSymbolicLink: name = %s target = %s parent = %s\n",strName,strTarget, parent);
     OutputDebugString(message);
 
-    /*lets confirm its a good symlink*/
-    if (!IsPathInAfs(path)) {
-       const char * nbname = NetbiosName();
-       int len = strlen(nbname);
-
-       if (parent[0] == '\\' && parent[1] == '\\' &&
-           parent[len+2] == '\\' &&
-           parent[len+3] == '\0' &&
-           !strnicmp(nbname,&parent[2],len))
-       {
-           sprintf(path,"%sall\\%s", parent, &strDir[strlen(parent)]);
-           parent = Parent(path);
-           sprintf(message,"MakeSymbolicLink: new path = %s parent = %s\n",path,parent);
-           OutputDebugString(message);
-
-           if (!IsPathInAfs(parent)) {
-               ShowMessageBox(IDS_MAKE_LNK_NOT_AFS_ERROR, MB_ICONERROR, IDS_MAKE_LNK_NOT_AFS_ERROR);
-               return TRUE;
-           }
-       } else {
-           ShowMessageBox(IDS_MAKE_LNK_NOT_AFS_ERROR, MB_ICONERROR, IDS_MAKE_LNK_NOT_AFS_ERROR);
-           return TRUE;
-       }
-    }
-
     if ( IsFreelanceRoot(parent) && !IsAdmin() ) {
        ShowMessageBox(IDS_NOT_AFS_CLIENT_ADMIN_ERROR, MB_ICONERROR, IDS_NOT_AFS_CLIENT_ADMIN_ERROR);
        return FALSE;
     }
 
-    LPTSTR lpsz = new TCHAR[strlen(strDir)+1];
+    LPTSTR lpsz = new TCHAR[strlen(strTarget)+1];
     _tcscpy(lpsz, strName);
-    strcpy(space, strDir);
+    strcpy(space, strTarget);
     blob.out_size = 0;
     blob.in_size = 1 + strlen(space);
     blob.in = space;
index 19db550..376da86 100644 (file)
@@ -69,37 +69,37 @@ END_MESSAGE_MAP()
 
 void CMakeSymbolicLinkDlg::OnOK() 
 {
-       char space[64];
-       UINT code;
-       int i;
-       UpdateData(TRUE);
-       CString strName;
-       CString strDir;
-       m_Name.GetWindowText(strName);
-       m_Dir.GetWindowText(strDir);
+    char space[64];
+    UINT code;
+    int i;
+    UpdateData(TRUE);
+    CString strName;
+    CString strTarget;
+    m_Name.GetWindowText(strName);
+    m_Dir.GetWindowText(strTarget);
     if (!IsPathInAfs(m_sBase)) {
-               MessageBeep((UINT)-1);
-               strDir+=" - Path is not in AFS directory";
-               AfxMessageBox(strDir,MB_OK);
-               return;
-       } 
-       if (m_sBase.GetLength()>MAX_PATH-2)
-       {
-               MessageBeep((UINT)-1);
-               ShowMessageBox(IDS_CURRENT_DIRECTORY_PATH_TOO_LONG,MB_OK,IDS_CURRENT_DIRECTORY_PATH_TOO_LONG);
-       }
-       if (!SetCurrentDirectory(m_sBase))
-       {
-               MessageBeep((UINT)-1);
-               ShowMessageBox(IDS_UNABLE_TO_SET_CURRENT_DIRECTORY,MB_OK,IDS_UNABLE_TO_SET_CURRENT_DIRECTORY);
-               return;
-       }
-       if ((code=MakeSymbolicLink(strName,strDir))!=0){
-               MessageBeep((UINT)-1);
-               ShowMessageBox(IDS_UNABLE_TO_CREATE_SYMBOLIC_LINK,MB_OK,IDS_UNABLE_TO_CREATE_SYMBOLIC_LINK,code);
-               return;
-       }
-       CDialog::OnOK();
+        MessageBeep((UINT)-1);
+        strTarget+=" - Path is not in AFS directory";
+        AfxMessageBox(strTarget,MB_OK);
+        return;
+    } 
+    if (m_sBase.GetLength()>MAX_PATH-2)
+    {
+        MessageBeep((UINT)-1);
+        ShowMessageBox(IDS_CURRENT_DIRECTORY_PATH_TOO_LONG,MB_OK,IDS_CURRENT_DIRECTORY_PATH_TOO_LONG);
+    }
+    if (!SetCurrentDirectory(m_sBase))
+    {
+        MessageBeep((UINT)-1);
+        ShowMessageBox(IDS_UNABLE_TO_SET_CURRENT_DIRECTORY,MB_OK,IDS_UNABLE_TO_SET_CURRENT_DIRECTORY);
+        return;
+    }
+    if ((code=MakeSymbolicLink(strName,strTarget))!=0){
+        MessageBeep((UINT)-1);
+        ShowMessageBox(IDS_UNABLE_TO_CREATE_SYMBOLIC_LINK,MB_OK,IDS_UNABLE_TO_CREATE_SYMBOLIC_LINK,code);
+        return;
+    }
+    CDialog::OnOK();
 }
 /*
 void CMakeSymbolicLinkDlg::OnChangeName()