]> git.decadent.org.uk Git - nfs-utils.git/blobdiff - utils/mountd/rmtab.c
Open channel files O_WRONLY, and improve mountlist support.
[nfs-utils.git] / utils / mountd / rmtab.c
index 0a4ed4c6b1b09269978c0462a0f67354f163b756..844de511f48b07d76baac5b0b828b9e5520af33f 100644 (file)
 static int 
 slink_safe_rename(const char * oldpath, const char * newpath)
 {
-  int r;
-  struct stat s;
-  char slink_path[PATH_MAX];
-  char real_newpath = newpath;
-
-  if((lstat(newpath, &s) == 0) && (S_ISLNK(s.st_mode))) {
-
-    /* New path is a symbolic link, do not destroy but follow */
-
-    if((r = readlink(newpath, slink_path, PATH_MAX))==-1) {
-
-      return -1;
-
-    }
-
-    slink_path[ (r < PATH_MAX) ? (r + 1) : (PATH_MAX - 1)] = '\0';
-
-    real_newpath = slink_path;
-
-  }
-
-  return rename(oldpath, real_newpath);
+       int r;
+       struct stat s;
+       char slink_path[PATH_MAX];
+       const char *real_newpath = newpath;
+
+       if ((lstat(newpath, &s) == 0) && S_ISLNK(s.st_mode)) {
+               /* New path is a symbolic link, do not destroy but follow */
+               if ((r = readlink(newpath, slink_path, PATH_MAX - 1)) == -1)
+                       return -1;
+               slink_path[r] = '\0';
+               real_newpath = slink_path;
+       }
 
-}/* static int slink_safe_rename() */
+       return rename(oldpath, real_newpath);
+}
 
 void
-mountlist_add(nfs_export *exp, const char *path)
+mountlist_add(char *host, const char *path)
 {
        struct rmtabent xe;
        struct rmtabent *rep;
@@ -67,7 +58,7 @@ mountlist_add(nfs_export *exp, const char *path)
        setrmtabent("r+");
        while ((rep = getrmtabent(1, &pos)) != NULL) {
                if (strcmp (rep->r_client,
-                           exp->m_client->m_hostname) == 0
+                           host) == 0
                    && strcmp(rep->r_path, path) == 0) {
                        rep->r_count++;
                        putrmtabent(rep, &pos);
@@ -77,7 +68,7 @@ mountlist_add(nfs_export *exp, const char *path)
                }
        }
        endrmtabent();
-       strncpy(xe.r_client, exp->m_client->m_hostname,
+       strncpy(xe.r_client, host,
                sizeof (xe.r_client) - 1);
        xe.r_client [sizeof (xe.r_client) - 1] = '\0';
        strncpy(xe.r_path, path, sizeof (xe.r_path) - 1);
@@ -91,11 +82,10 @@ mountlist_add(nfs_export *exp, const char *path)
 }
 
 void
-mountlist_del(nfs_export *exp, const char *path)
+mountlist_del(char *hname, const char *path)
 {
        struct rmtabent *rep;
        FILE            *fp;
-       char            *hname = exp->m_client->m_hostname;
        int             lockid;
        int             match;