strncpy (was Re: samba 3.0.22 / 3.0.23)

David Collier-Brown davec-b at rogers.com
Thu Jul 27 15:47:19 GMT 2006


Just fyi,

froggy> score -d strncpy -I. -I/usr/include/sys -Iinclude -Iubiqx -Itdb  -Ismbwrapper -I/opt/csw/include .
Interface Badness  Calls
--------- -------  -----
sprintf      5     18
strncat      5     12
strncpy      5    131
-------- -----    ---
   Total    805

plus there are probably a few hidden in macros..

--dave

David Collier-Brown wrote:
>   Oh dear, strncpy is
> - often slower than strcpy, as it null-pads out to the specified length
> - happily creates non-terminated strings unless you use
>   length-1 and put in the terminating null manually.
> 
>   Samba has an implementation of strlcpy, which does the "right thing",
> and safe_strcat, which replaces strncat.  Alas, only the latter
> is widely used.
> 
>   I have a few minutes (;-)), so would you like a patch changing
> all the strncats to strlcats with the proper lengths?  If so,
> I can give you a diff -u, just tell me which source base to use.
> 
> --dave
> 
> 
> 
> Jurzitza, Dieter wrote:
> 
>> Can some kind person give me some insight on what to do here? 
> 
>  > A "grep strncpy *.c" shows a long list in nsswitch (see below);
>  > any suggestions on this? "strcpy" can also be found here.
> 
>>
>> source/nsswitch> grep strncpy ./*.c > /tmp/out
>> source/nsswitch> cat /tmp/out
>> ./pam_winbind.c:        strncpy(request.data.auth.user, user, 
>> ./pam_winbind.c:        strncpy(request.data.auth.pass, pass, 
>> ./pam_winbind.c:                
>> strncpy(request.data.auth.krb5_cc_type, cctype, 
>> ./pam_winbind.c:                
>> strncpy(request.data.auth.require_membership_of_sid, member, 
>> ./pam_winbind.c:                strncpy(sid_request.data.name.name, 
>> member,
>> ./pam_winbind.c:                
>> strncpy(request.data.auth.require_membership_of_sid, member, 
>> ./pam_winbind.c:        strncpy(request.data.chauthtok.user, user, 
>> ./pam_winbind.c:                
>> strncpy(request.data.chauthtok.oldpass, oldpass, 
>> ./pam_winbind.c:                
>> strncpy(request.data.chauthtok.newpass, newpass, 
>> ./pam_winbind.c:        strncpy(request.data.username, user,
>> ./pam_winbind.c:                strncpy(request.data.logoff.user, user,
>> ./pam_winbind.c:                
>> strncpy(request.data.logoff.krb5ccname, ccname,
>> ./wb_common.c:  strncpy(path, dir, sizeof(path) - 1);
>> ./wb_common.c:  strncpy(sunaddr.sun_path, path, 
>> sizeof(sunaddr.sun_path) - 1);
>> ./winbind_nss_irix.c:       strncpy(request->data.username, key, 
>> ./winbind_nss_irix.c:       strncpy(request->data.groupname, key, 
>> ./winbind_nss_irix.c:       strncpy(request->data.winsreq, key, 
>> sizeof(request->data.winsreq) - 1);
>> ./winbind_nss_irix.c:       strncpy(request->data.winsreq, key, 
>> sizeof(request->data.winsreq) - 1);
>> ./winbind_nss_linux.c:          strncpy(request.data.username, name, 
>> ./winbind_nss_linux.c:          strncpy(request.data.groupname, name, 
>> ./winbind_nss_linux.c:  strncpy(request.data.username, user,
>> ./winbind_nss_linux.c:  strncpy(request.data.sid, 
>> user_sid,sizeof(request.data.sid) - 1);
>> ./winbind_nss_linux.c:  strncpy(request.data.name.name, name, 
>> ./winbind_nss_linux.c:  strncpy(request.data.sid, sid, 
>> ./winbind_nss_linux.c:  strncpy(request.data.sid, sid, 
>> sizeof(request.data.sid) - 1);
>> ./winbind_nss_linux.c:  strncpy(request.data.sid, sid, 
>> sizeof(request.data.sid) - 1);
>> ./winbind_nss_solaris.c:        strncpy(request.data.winsreq, 
>> argp->key.name, strlen(argp->key.name)) ;
>> ./winbind_nss_solaris.c:        strncpy(request.data.winsreq, 
>> argp->key.name, strlen(argp->key.name));
>>
> 

-- 
David Collier-Brown,         | Always do right. This will gratify
System Programmer and Author | some people and astonish the rest
davecb at spamcop.net           |                      -- Mark Twain
(416) 223-5943


More information about the samba-technical mailing list