Arthur de Jong

Open Source / Free Software developer

summaryrefslogtreecommitdiffstats
path: root/nss/ethers.c
diff options
context:
space:
mode:
authorArthur de Jong <arthur@arthurdejong.org>2012-10-13 23:08:59 +0200
committerArthur de Jong <arthur@arthurdejong.org>2012-10-13 23:08:59 +0200
commitb27f3f8fe80cc2dcbf66f975c4d987209d529586 (patch)
tree650b7c61ff56133b598aa7c50530c4bf951ce98a /nss/ethers.c
parent43ac16ba109680eb79a737266f7372423c4ffad4 (diff)
in ether handling only write to output values and return correct error for buffer too small
git-svn-id: http://arthurdejong.org/svn/nss-pam-ldapd/nss-pam-ldapd@1791 ef36b2f9-881f-0410-afb5-c4e39611909c
Diffstat (limited to 'nss/ethers.c')
-rw-r--r--nss/ethers.c13
1 files changed, 7 insertions, 6 deletions
diff --git a/nss/ethers.c b/nss/ethers.c
index 349ddab..a9ae132 100644
--- a/nss/ethers.c
+++ b/nss/ethers.c
@@ -119,25 +119,26 @@ static nss_status_t read_result(TFILE *fp,void *args,int wantname)
res=snprintf(NSS_ARGS(args)->buf.buffer,NSS_ARGS(args)->buf.buflen,
"%s %s",ether_ntoa(&result.e_addr),result.e_name);
if ((res<0)||(res>=NSS_ARGS(args)->buf.buflen))
- return NSS_STR_PARSE_PARSE;
+ {
+ NSS_ARGS(args)->erange=1;
+ return NSS_NOTFOUND;
+ }
NSS_ARGS(args)->returnval=NSS_ARGS(args)->buf.buffer;
NSS_ARGS(args)->returnlen=strlen(NSS_ARGS(args)->returnval);
- NSS_ARGS(args)->buf.result=NULL;
return NSS_SUCCESS;
}
-#endif /* not HAVE_STRUCT_NSS_XBYY_ARGS_RETURNLEN */
+#endif /* HAVE_STRUCT_NSS_XBYY_ARGS_RETURNLEN */
/* return the result entry */
if (wantname)
{
+ /* we expect the buffer to have enough room for the name (buflen==0) */
strcpy(NSS_ARGS(args)->buf.buffer,result.e_name);
- NSS_ARGS(args)->returnval=NSS_ARGS(args)->buf.result=NSS_ARGS(args)->buf.buffer;
- NSS_ARGS(args)->buf.buflen=strlen(NSS_ARGS(args)->returnval);
+ NSS_ARGS(args)->returnval=NSS_ARGS(args)->buf.buffer;
}
else /* address */
{
memcpy(NSS_ARGS(args)->buf.result,&result.e_addr,sizeof(result.e_addr));
NSS_ARGS(args)->returnval=NSS_ARGS(args)->buf.result;
- NSS_ARGS(args)->buf.result=NULL;
}
return NSS_SUCCESS;
}