git-svn-id: svn+ssh://svn.dolda2000.com/srv/svn/repos/src/icmp-dn@227
959494ce-11ee-0310-bf91-
de5d638817bd
#include <fcntl.h>
#define CONFIGFILE "/etc/nss-icmp.conf"
#include <fcntl.h>
#define CONFIGFILE "/etc/nss-icmp.conf"
+#if 0
+#define DEBUGP(format...) fprintf(stderr, "nss-icmp: " format);
+#else
+#define DEBUGP(format...)
+#endif
struct cache {
struct cache *next, *prev;
struct cache {
struct cache *next, *prev;
return(NSS_STATUS_UNAVAIL);
}
return(NSS_STATUS_UNAVAIL);
}
+ DEBUGP("starting lookup\n");
+
if(usecache) {
expirecache();
for(cc = cache; cc != NULL; cc = cc->next) {
if(usecache) {
expirecache();
for(cc = cache; cc != NULL; cc = cc->next) {
+ DEBUGP("address not in cache, looking up for real\n");
ap = (u_int8_t *)addr;
if(inet_ntop(af, addr, addrbuf, sizeof(addrbuf)) == NULL) {
*errnop = errno;
*h_errnop = NETDB_INTERNAL;
return(NSS_STATUS_UNAVAIL);
}
ap = (u_int8_t *)addr;
if(inet_ntop(af, addr, addrbuf, sizeof(addrbuf)) == NULL) {
*errnop = errno;
*h_errnop = NETDB_INTERNAL;
return(NSS_STATUS_UNAVAIL);
}
+ DEBUGP("address is %s\n", addrbuf);
if(pipe(pfd)) {
*errnop = errno;
if(pipe(pfd)) {
*errnop = errno;
if(usecache)
updatecache(addr, len, af, retbuf->aliaslist, ttl);
} else {
if(usecache)
updatecache(addr, len, af, retbuf->aliaslist, ttl);
} else {
+ DEBUGP("address found in cache\n");
if(cc->notfound) {
*h_errnop = TRY_AGAIN; /* XXX: Is this correct? */
return(NSS_STATUS_NOTFOUND);
if(cc->notfound) {
*h_errnop = TRY_AGAIN; /* XXX: Is this correct? */
return(NSS_STATUS_NOTFOUND);
p3 = buffer + sizeof(*retbuf);
for(i = 0; cc->names[i] != NULL; i++) {
thislen = strlen(cc->names[i]);
p3 = buffer + sizeof(*retbuf);
for(i = 0; cc->names[i] != NULL; i++) {
thislen = strlen(cc->names[i]);
+ DEBUGP("filling in address %s, length %i\n", cc->names[i], thislen);
if((p3 - buffer) + thislen + 1 > buflen) {
*errnop = ENOMEM;
*h_errnop = NETDB_INTERNAL;
return(NSS_STATUS_UNAVAIL);
}
memcpy(p3, cc->names[i], thislen + 1);
if((p3 - buffer) + thislen + 1 > buflen) {
*errnop = ENOMEM;
*h_errnop = NETDB_INTERNAL;
return(NSS_STATUS_UNAVAIL);
}
memcpy(p3, cc->names[i], thislen + 1);
- retbuf->aliaslist[an] = p3;
+ retbuf->aliaslist[i] = p3;
- if(++an == 16) {
- *errnop = ENOMEM;
- *h_errnop = NETDB_INTERNAL;
- return(NSS_STATUS_UNAVAIL);
- }
+ retbuf->aliaslist[i] = NULL;
+ DEBUGP("returning hostent\n");
memcpy(retbuf->retaddr, addr, len);
retbuf->addrlist[0] = retbuf->retaddr;
retbuf->addrlist[1] = NULL;
memcpy(retbuf->retaddr, addr, len);
retbuf->addrlist[0] = retbuf->retaddr;
retbuf->addrlist[1] = NULL;
result->h_length = len;
*h_errnop = NETDB_SUCCESS;
result->h_length = len;
*h_errnop = NETDB_SUCCESS;
return(NSS_STATUS_SUCCESS);
}
return(NSS_STATUS_SUCCESS);
}