On Tue, Apr 10, 2001 at 01:48:13PM -0500, John R. Jackson wrote:
> 
> I'm not sure why you asked about /etc/mtab.  While it has the right
> value, we don't look at it in Amanda (which might be the real problem).
> We look at /proc/mounts (which has the wrong /dev value) and MNTTAB,
> which is /etc/fstab (which **really** has the wrong /dev value :-).

I misread the code.

> Maybe we need to look in a third place?
> 
> Did you maybe go ahead and create /dev/root and /dev/rroot and that's
> why it works for you?

I have /dev/hda1 in /etc/fstab.

> >... we can't check permission on amname_to_dirname(), we
> >should check permission of the device.
> 
> I agree we should try to properly pre-diagnose a permissions problem
> dump will have.  I just don't see it happening unless we (hard code)
> add /etc/mtab to the list of places to try and look (in addition to the
> other changes you and Alexandre have made to p2).

Try this patch, It look at MOUNTED before MNTTAB.

Jean-Louis
-- 
Jean-Louis Martineau             email: [EMAIL PROTECTED] 
Departement IRO, Universite de Montreal
C.P. 6128, Succ. CENTRE-VILLE    Tel: (514) 343-6111 ext. 3529
Montreal, Canada, H3C 3J7        Fax: (514) 343-5834
--- client-src/getfsent.h.orig  Mon Apr  9 19:26:48 2001
+++ client-src/getfsent.h       Mon Apr  9 19:20:46 2001
@@ -54,7 +54,7 @@
 void close_fstab P((void));
 
 int get_fstab_nextentry P((generic_fsent_t *fsent));
-int search_fstab P((char *name, generic_fsent_t *fsent));
+int search_fstab P((char *name, generic_fsent_t *fsent, int check_dev));
 int is_local_fstype P((generic_fsent_t *fsent));
 
 char *amname_to_devname P((char *str));
--- client-src/getfsent.c.orig  Mon Apr  9 19:26:42 2001
+++ client-src/getfsent.c       Tue Apr 10 16:01:28 2001
@@ -144,24 +144,29 @@
 #include <mntent.h>
 
 static FILE *fstabf1 = NULL;           /* /proc/mounts */
-static FILE *fstabf2 = NULL;           /* MNTTAB */
+static FILE *fstabf2 = NULL;           /* MOUNTED */
+static FILE *fstabf3 = NULL;           /* MNTTAB */
 
 int open_fstab()
 {
     close_fstab();
 #if defined(HAVE_SETMNTENT)
     fstabf1 = setmntent("/proc/mounts", "r");
-    fstabf2 = setmntent(MNTTAB, "r");
+# if defined(MOUNTED)
+    fstabf2 = setmntent(MOUNTED, "r");
+# endif
+    fstabf3 = setmntent(MNTTAB, "r");
 #else
-    fstabf2 = fopen(MNTTAB, "r");
+    fstabf3 = fopen(MNTTAB, "r");
 #endif
-    return (fstabf1 != NULL || fstabf2 != NULL);
+    return (fstabf1 != NULL || fstabf2 != NULL || fstabf3 != NULL);
 }
 
 void close_fstab()
 {
     afclose(fstabf1);
     afclose(fstabf2);
+    afclose(fstabf3);
 }
 
 int get_fstab_nextentry(fsent)
@@ -181,6 +186,12 @@
            afclose(fstabf2);
        }
     }
+    if(!sys_fsent && fstabf3) {
+       sys_fsent = getmntent(fstabf3);
+       if(!sys_fsent) {
+           afclose(fstabf3);
+       }
+    }
     if(!sys_fsent) {
        return 0;
     }
@@ -427,9 +438,10 @@
   return 0;
 }
 
-int search_fstab(name, fsent)
+int search_fstab(name, fsent, check_dev)
      char *name;
      generic_fsent_t *fsent;
+     int check_dev;
 {
   struct stat stats[3];
   char *fullname = NULL;
@@ -476,8 +488,8 @@
     if(fsent->fsname != NULL) {
       sfs = stat(fsent->fsname, &fsstat);
       sfsr = stat((rdev = dev2rdev(fsent->fsname)), &fsrstat);
-      /* We don't want to `continue;' even if both sfs and sfsr are
-        -1, because, if we get here, at least smnt is not -1.  */
+      if(check_dev == 1 && sfs == -1 && sfsr == -1)
+       continue;
     }
 
     if((fsent->mntdir != NULL &&
@@ -520,8 +532,9 @@
 {
     generic_fsent_t fsent;
 
-    if(search_fstab(str, &fsent))
-      if (fsent.fsname != NULL)
+    if(search_fstab(str, &fsent, 1) && fsent.fsname != NULL)
+       str = fsent.fsname;
+    else if(search_fstab(str, &fsent, 0) && fsent.fsname != NULL)
        str = fsent.fsname;
 
     return dev2rdev(str);
@@ -532,8 +545,9 @@
 {
     generic_fsent_t fsent;
 
-    if(search_fstab(str, &fsent))
-      if (fsent.mntdir != NULL)
+    if(search_fstab(str, &fsent, 1) && fsent.mntdir != NULL)
+       str = fsent.mntdir;
+    else if(search_fstab(str, &fsent, 0) && fsent.mntdir != NULL)
        str = fsent.mntdir;
 
     return stralloc(str);
@@ -544,7 +558,7 @@
 {
     generic_fsent_t fsent;
 
-    if (!search_fstab(str, &fsent))
+    if (!search_fstab(str, &fsent, 1) && !search_fstab(str, &fsent, 0))
       return stralloc("");
 
     return stralloc(fsent.fstype);
@@ -603,7 +617,7 @@
     close_fstab();
 
     name = newstralloc(name, "/usr");
-    if(search_fstab(name, &fsent)) {
+    if(search_fstab(name, &fsent, 1) || search_fstab(name, &fsent, 0)) {
        printf("Found %s mount for %s:\n",
               is_local_fstype(&fsent)? "local" : "remote", name);
        print_entry(&fsent);
@@ -612,7 +626,7 @@
        printf("Mount for %s not found\n", name);
 
     name = newstralloc(name, "/");
-    if(search_fstab(name, &fsent)) {
+    if(search_fstab(name, &fsent, 1) || search_fstab(name, &fsent, 0)) {
        printf("Found %s mount for %s:\n",
               is_local_fstype(&fsent)? "local" : "remote", name);
        print_entry(&fsent);

Reply via email to