diff options
author | Arthur de Jong <arthur@arthurdejong.org> | 2012-10-13 23:08:59 +0200 |
---|---|---|
committer | Arthur de Jong <arthur@arthurdejong.org> | 2012-10-13 23:08:59 +0200 |
commit | b27f3f8fe80cc2dcbf66f975c4d987209d529586 (patch) | |
tree | 650b7c61ff56133b598aa7c50530c4bf951ce98a /nss/ethers.c | |
parent | 43ac16ba109680eb79a737266f7372423c4ffad4 (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.c | 13 |
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; } |