+2001-09020 NeilBrown <neilb@cse.unsw.edu.au>
+ Anne Milicia <milicia@missioncriticallinux.com>
+
+ * support/export/client.c (client_lookup) call gethostbyadd
+ to make sure that we have a canonical hostname, even for
+ dotted-quads
+ * utils/exportfs/exportfs.c (exportfs) Likewise
+
2001-09-12 NeilBrown <neilb@cse.unsw.edu.au>
* support/nfs/exports.c (putexportent): \octal quote any spaces
htype = client_gettype(hname);
if (htype == MCL_FQDN) {
+ struct hostent *hp2;
hp = gethostbyname(hname);
if (hp == NULL || hp->h_addrtype != AF_INET) {
xlog(L_ERROR, "%s has non-inet addr", hname);
return NULL;
}
- hp = hostent_dup (hp);
+ /* make sure we have canonical name */
+ hp2 = hostent_dup(hp);
+ hp = gethostbyaddr(hp2->h_addr, hp2->h_length,
+ hp2->h_addrtype);
+ if (hp) {
+ free(hp2);
+ hp = hostent_dup(hp);
+ } else
+ hp = hp2;
+
hname = (char *) hp->h_name;
for (clp = clientlist[htype]; clp; clp = clp->m_next) {
if ((htype = client_gettype(hname)) == MCL_FQDN &&
(hp = gethostbyname(hname)) != NULL) {
- hp = hostent_dup (hp);
+ struct hostent *hp2 = hostent_dup (hp);
+ hp = gethostbyaddr(hp2->h_addr, hp2->h_length,
+ hp2->h_addrtype);
+ if (hp) {
+ free(hp2);
+ hp = hostent_dup(hp);
+ } else
+ hp = hp2;
exp = export_find(hp, path);
} else {
exp = export_lookup(hname, path);