X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=util-linux%2Fnfsmount.c;h=cd722acc34f2c6eb895e429edc642dca45b3f84c;hb=081df62b921cf17f1d4c4e0214abfa273c92cfde;hp=d661a99a42c0f750590fc58b769df2c18ce036e2;hpb=59ab025363d884deb2013dcaae6c968585a6ec72;p=oweals%2Fbusybox.git diff --git a/util-linux/nfsmount.c b/util-linux/nfsmount.c index d661a99a4..cd722acc3 100644 --- a/util-linux/nfsmount.c +++ b/util-linux/nfsmount.c @@ -33,25 +33,25 @@ * nfsmount.c,v 1.1.1.1 1993/11/18 08:40:51 jrs Exp */ -#include "busybox.h" -#undef FALSE -#undef TRUE #include #include #include #include #include -#include -#include -#include #include -#include +#include #include #include #include - -#include "nfsmount.h" +#include +#include "busybox.h" +#undef TRUE +#undef FALSE +#include +#include +#include #include /* For the kernels nfs stuff */ +#include "nfsmount.h" #ifndef NFS_FHSIZE static const int NFS_FHSIZE = 32; @@ -93,7 +93,9 @@ static const int MS_NODIRATIME = 2048; /* Do not update directory access time * so it is easiest to ignore the kernel altogether (at compile time). */ -static const int NFS_MOUNT_VERSION = 4; +/* NOTE: Do not make this into a 'static const int' because the pre-processor + * needs to test this value in some #if statements. */ +#define NFS_MOUNT_VERSION 4 struct nfs2_fh { char data[32]; @@ -155,7 +157,7 @@ static const int NFS_MOUNT_NONLM = 0x0200; /* 3 */ #define HAVE_personality #define HAVE_tm_gmtoff -static char *nfs_strerror(int stat); +static char *nfs_strerror(int status); #define MAKE_VERSION(p,q,r) (65536*(p) + 256*(q) + (r)) #define MAX_NFSPROT ((nfs_mount_version >= 4) ? 3 : 2) @@ -181,7 +183,8 @@ static int nfs_mount_version; * nfs_mount_version: version this source and running kernel can handle */ static void -find_kernel_nfs_mount_version(void) { +find_kernel_nfs_mount_version(void) +{ static int kernel_version = 0; if (kernel_version) @@ -191,15 +194,17 @@ find_kernel_nfs_mount_version(void) { kernel_version = get_kernel_revision(); if (kernel_version) { - if (kernel_version < MAKE_VERSION(2,1,32)) - nfs_mount_version = 1; - else if (kernel_version < MAKE_VERSION(2,3,99)) - nfs_mount_version = 3; - else - nfs_mount_version = 4; /* since 2.3.99pre4 */ + if (kernel_version < MAKE_VERSION(2,1,32)) + nfs_mount_version = 1; + else if (kernel_version < MAKE_VERSION(2,2,18) || + (kernel_version >= MAKE_VERSION(2,3,0) && + kernel_version < MAKE_VERSION(2,3,99))) + nfs_mount_version = 3; + else + nfs_mount_version = 4; /* since 2.3.99pre4 */ } if (nfs_mount_version > NFS_MOUNT_VERSION) - nfs_mount_version = NFS_MOUNT_VERSION; + nfs_mount_version = NFS_MOUNT_VERSION; } static struct pmap * @@ -257,7 +262,7 @@ int nfsmount(const char *spec, const char *node, int *flags, char hostdir[1024]; CLIENT *mclient; char *hostname; - char *dirname; + char *pathname; char *old_opts; char *mounthost=NULL; char new_opts[1024]; @@ -305,22 +310,22 @@ int nfsmount(const char *spec, const char *node, int *flags, msock = fsock = -1; mclient = NULL; if (strlen(spec) >= sizeof(hostdir)) { - error_msg("excessively long host:dir argument\n"); + error_msg("excessively long host:dir argument"); goto fail; } strcpy(hostdir, spec); if ((s = strchr(hostdir, ':'))) { hostname = hostdir; - dirname = s + 1; + pathname = s + 1; *s = '\0'; /* Ignore all but first hostname in replicated mounts until they can be fully supported. (mack@sgi.com) */ if ((s = strchr(hostdir, ','))) { *s = '\0'; - error_msg("warning: multiple hostnames not supported\n"); + error_msg("warning: multiple hostnames not supported"); } } else { - error_msg("directory to mount not in host:dir format\n"); + error_msg("directory to mount not in host:dir format"); goto fail; } @@ -330,11 +335,11 @@ int nfsmount(const char *spec, const char *node, int *flags, #endif { if ((hp = gethostbyname(hostname)) == NULL) { - error_msg("can't get address for %s\n", hostname); + herror_msg("%s", hostname); goto fail; } else { if (hp->h_length > sizeof(struct in_addr)) { - error_msg("got bad hp->h_length\n"); + error_msg("got bad hp->h_length"); hp->h_length = sizeof(struct in_addr); } memcpy(&server_addr.sin_addr, @@ -351,7 +356,7 @@ int nfsmount(const char *spec, const char *node, int *flags, if (!old_opts) old_opts = ""; if (strlen(old_opts) + strlen(s) + 10 >= sizeof(new_opts)) { - error_msg("excessively long option argument\n"); + error_msg("excessively long option argument"); goto fail; } sprintf(new_opts, "%s%saddr=%s", @@ -511,11 +516,11 @@ int nfsmount(const char *spec, const char *node, int *flags, data.flags |= (nolock ? NFS_MOUNT_NONLM : 0); #endif if (nfsvers > MAX_NFSPROT) { - error_msg("NFSv%d not supported!\n", nfsvers); + error_msg("NFSv%d not supported!", nfsvers); return 0; } if (mountvers > MAX_NFSPROT) { - error_msg("NFSv%d not supported!\n", nfsvers); + error_msg("NFSv%d not supported!", nfsvers); return 0; } if (nfsvers && !mountvers) @@ -575,11 +580,11 @@ int nfsmount(const char *spec, const char *node, int *flags, mount_server_addr.sin_addr.s_addr = inet_addr(hostname); } else { if ((hp = gethostbyname(mounthost)) == NULL) { - error_msg("can't get address for %s\n", hostname); + herror_msg("%s", mounthost); goto fail; } else { if (hp->h_length > sizeof(struct in_addr)) { - error_msg("got bad hp->h_length?\n"); + error_msg("got bad hp->h_length?"); hp->h_length = sizeof(struct in_addr); } mount_server_addr.sin_family = AF_INET; @@ -657,7 +662,7 @@ int nfsmount(const char *spec, const char *node, int *flags, mclient = 0; } if (mclient) { - /* try to mount hostname:dirname */ + /* try to mount hostname:pathname */ mclient->cl_auth = authunix_create_default(); /* make pointers in xdr_mountres3 NULL so @@ -668,14 +673,14 @@ int nfsmount(const char *spec, const char *node, int *flags, if (pm_mnt->pm_vers == 3) clnt_stat = clnt_call(mclient, MOUNTPROC3_MNT, (xdrproc_t) xdr_dirpath, - (caddr_t) &dirname, + (caddr_t) &pathname, (xdrproc_t) xdr_mountres3, (caddr_t) &status, total_timeout); else clnt_stat = clnt_call(mclient, MOUNTPROC_MNT, (xdrproc_t) xdr_dirpath, - (caddr_t) &dirname, + (caddr_t) &pathname, (xdrproc_t) xdr_fhstatus, (caddr_t) &status, total_timeout); @@ -714,8 +719,8 @@ int nfsmount(const char *spec, const char *node, int *flags, if (nfsvers == 2) { if (status.nfsv2.fhs_status != 0) { - error_msg("%s:%s failed, reason given by server: %s\n", - hostname, dirname, + error_msg("%s:%s failed, reason given by server: %s", + hostname, pathname, nfs_strerror(status.nfsv2.fhs_status)); goto fail; } @@ -730,20 +735,20 @@ int nfsmount(const char *spec, const char *node, int *flags, #endif } else { #if NFS_MOUNT_VERSION >= 4 - fhandle3 *fhandle; + fhandle3 *my_fhandle; if (status.nfsv3.fhs_status != 0) { - error_msg("%s:%s failed, reason given by server: %s\n", - hostname, dirname, + error_msg("%s:%s failed, reason given by server: %s", + hostname, pathname, nfs_strerror(status.nfsv3.fhs_status)); goto fail; } - fhandle = &status.nfsv3.mountres3_u.mountinfo.fhandle; + my_fhandle = &status.nfsv3.mountres3_u.mountinfo.fhandle; memset(data.old_root.data, 0, NFS_FHSIZE); memset(&data.root, 0, sizeof(data.root)); - data.root.size = fhandle->fhandle3_len; + data.root.size = my_fhandle->fhandle3_len; memcpy(data.root.data, - (char *) fhandle->fhandle3_val, - fhandle->fhandle3_len); + (char *) my_fhandle->fhandle3_val, + my_fhandle->fhandle3_len); data.flags |= NFS_MOUNT_VER3; #endif @@ -868,20 +873,20 @@ static struct { { -1, EIO } }; -static char *nfs_strerror(int stat) +static char *nfs_strerror(int status) { int i; static char buf[256]; for (i = 0; nfs_errtbl[i].stat != -1; i++) { - if (nfs_errtbl[i].stat == stat) + if (nfs_errtbl[i].stat == status) return strerror(nfs_errtbl[i].errnum); } - sprintf(buf, _("unknown nfs status return value: %d"), stat); + sprintf(buf, _("unknown nfs status return value: %d"), status); return buf; } -bool_t +static bool_t xdr_fhandle (XDR *xdrs, fhandle objp) { //register int32_t *buf;