X-Git-Url: https://git.decadent.org.uk/gitweb/?p=nfs-utils.git;a=blobdiff_plain;f=utils%2Fmountd%2Frmtab.c;h=844de511f48b07d76baac5b0b828b9e5520af33f;hp=0a4ed4c6b1b09269978c0462a0f67354f163b756;hb=18fc7a86a2a1213762cc4107565903127efadafc;hpb=e85f72300043f96e3f352d9c8f93243d4d0a52dc diff --git a/utils/mountd/rmtab.c b/utils/mountd/rmtab.c index 0a4ed4c..844de51 100644 --- a/utils/mountd/rmtab.c +++ b/utils/mountd/rmtab.c @@ -29,33 +29,24 @@ 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;