r10693: Fix bug #3129, reported by Adam Porter <sambabugzilla@alphapapa.net>.
authorJeremy Allison <jra@samba.org>
Mon, 3 Oct 2005 18:14:09 +0000 (18:14 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 16:04:50 +0000 (11:04 -0500)
Rotten error message caused hours of wasted time.
Jeremy.

source/smbd/service.c

index d330e847e2e6e837add42375413e15448cb455e5..52f9229ee1c7f59c877cc8a4e77c3de61d0581ab 100644 (file)
@@ -272,6 +272,7 @@ static connection_struct *make_connection_snum(int snum, user_struct *vuser,
        SMB_STRUCT_STAT st;
        fstring user;
        fstring dev;
+       int ret;
 
        *user = 0;
        fstrcpy(dev, pdev);
@@ -554,7 +555,6 @@ static connection_struct *make_connection_snum(int snum, user_struct *vuser,
        /* Preexecs are done here as they might make the dir we are to ChDir to below */
        /* execute any "root preexec = " line */
        if (*lp_rootpreexec(snum)) {
-               int ret;
                pstring cmd;
                pstrcpy(cmd,lp_rootpreexec(snum));
                standard_sub_conn(conn,cmd,sizeof(cmd));
@@ -584,7 +584,6 @@ static connection_struct *make_connection_snum(int snum, user_struct *vuser,
        /* Preexecs are done here as they might make the dir we are to ChDir to below */
        /* execute any "preexec = " line */
        if (*lp_preexec(snum)) {
-               int ret;
                pstring cmd;
                pstrcpy(cmd,lp_preexec(snum));
                standard_sub_conn(conn,cmd,sizeof(cmd));
@@ -629,8 +628,13 @@ static connection_struct *make_connection_snum(int snum, user_struct *vuser,
           check during individual operations. To match this behaviour
           I have disabled this chdir check (tridge) */
        /* the alternative is just to check the directory exists */
-       if (SMB_VFS_STAT(conn, conn->connectpath, &st) != 0 || !S_ISDIR(st.st_mode)) {
-               DEBUG(0,("'%s' does not exist or is not a directory, when connecting to [%s]\n", conn->connectpath, lp_servicename(snum)));
+       if ((ret = SMB_VFS_STAT(conn, conn->connectpath, &st)) != 0 || !S_ISDIR(st.st_mode)) {
+               if (ret == 0 && !S_ISDIR(st.st_mode)) {
+                       DEBUG(0,("'%s' is not a directory, when connecting to [%s]\n", conn->connectpath, lp_servicename(snum)));
+               } else {
+                       DEBUG(0,("'%s' does not exist or permission denied when connecting to [%s] "
+                               "Error was %s\n", conn->connectpath, lp_servicename(snum), strerror(errno) ));
+               }
                change_to_root_user();
                /* Call VFS disconnect hook */    
                SMB_VFS_DISCONNECT(conn);