For those that want "traditional" showmount -a behavior from their mountd
(hostname:/path instead of ipaddr:/path). This patch adds a '-r' flag that
does a reverse-resolve for each IP address listed in the rmtab when
a dump operation is called.
Probably not a good idea for those concerned about performance, but since it's
not the default option, I don't see it being an issue.
Signed-off-by: Jeff Layton <jlayton@redhat.com>
Signed-off-by: Neil Brown <neilb@suse.de>
static exports get_exportlist(void);
static struct nfs_fh_len *get_rootfh(struct svc_req *, dirpath *, mountstat3 *, int v3);
static exports get_exportlist(void);
static struct nfs_fh_len *get_rootfh(struct svc_req *, dirpath *, mountstat3 *, int v3);
+int reverse_resolve = 0;
int new_cache = 0;
/* PRC: a high-availability callout program can be specified with -H
int new_cache = 0;
/* PRC: a high-availability callout program can be specified with -H
/* Parse the command line options and arguments. */
opterr = 0;
/* Parse the command line options and arguments. */
opterr = 0;
- while ((c = getopt_long(argc, argv, "o:nFd:f:p:P:hH:N:V:vs:t:", longopts, NULL)) != EOF)
+ while ((c = getopt_long(argc, argv, "o:nFd:f:p:P:hH:N:V:vrs:t:", longopts, NULL)) != EOF)
switch (c) {
case 'o':
descriptors = atoi(optarg);
switch (c) {
case 'o':
descriptors = atoi(optarg);
case 'n':
_rpcfdtype = SOCK_DGRAM;
break;
case 'n':
_rpcfdtype = SOCK_DGRAM;
break;
+ case 'r':
+ reverse_resolve = 1;
+ break;
case 's':
if ((state_dir = xstrdup(optarg)) == NULL) {
fprintf(stderr, "%s: xstrdup(%s) failed!\n",
case 's':
if ((state_dir = xstrdup(optarg)) == NULL) {
fprintf(stderr, "%s: xstrdup(%s) failed!\n",
#include <limits.h> /* PATH_MAX */
#include <limits.h> /* PATH_MAX */
+extern int reverse_resolve;
+
/* If new path is a link do not destroy it but place the
* file where the link points.
*/
/* If new path is a link do not destroy it but place the
* file where the link points.
*/
struct rmtabent *rep;
struct stat stb;
int lockid;
struct rmtabent *rep;
struct stat stb;
int lockid;
+ struct in_addr addr;
+ struct hostent *he;
if ((lockid = xflock(_PATH_RMTAB, "r")) < 0)
return NULL;
if ((lockid = xflock(_PATH_RMTAB, "r")) < 0)
return NULL;
setrmtabent("r");
while ((rep = getrmtabent(1, NULL)) != NULL) {
m = (mountlist) xmalloc(sizeof(*m));
setrmtabent("r");
while ((rep = getrmtabent(1, NULL)) != NULL) {
m = (mountlist) xmalloc(sizeof(*m));
- m->ml_hostname = xstrdup(rep->r_client);
- m->ml_directory = xstrdup(rep->r_path);
+
+ if (reverse_resolve &&
+ inet_aton((const char *) rep->r_client, &addr) &&
+ (he = gethostbyaddr(&addr, sizeof(addr), AF_INET)))
+ m->ml_hostname = xstrdup(he->h_name);
+ else
+ m->ml_hostname = xstrdup(rep->r_client);
+
+ m->ml_directory = xstrdup(rep->r_path);
m->ml_next = mlist;
mlist = m;
}
m->ml_next = mlist;
mlist = m;
}