[PATCH] lib/util: Fixup tcopy_passwd() to also copy the pw_comment, field

Jeremy Allison jra at samba.org
Wed Jun 12 18:22:22 UTC 2019


On Fri, May 31, 2019 at 03:33:48PM +0200, Stefan Behrens via samba-technical wrote:
> All fields of the passwd structure are copied except for pw_comment, and
> I needed pw_comment to be copied and here is the commit for the change.
> 
> Bug 13975
> 
> Review appreciated.

Set this to 5 on initialization:

 +     unsigned int num_subobjs;

i.e.

 +     unsigned int num_subobjs = 5;

This then removes the "else" from:

 +     if (from->pw_comment != NULL) {
 +             len += strlen(from->pw_comment)+1;
 +             num_subobjs = 6;
 +     } else {
 +             num_subobjs = 5;
 +     }

Cleaner code IMHO  :-).

Can you fix that and repost and then I'll +1 from me.

Cheers,

	Jeremy.

> From c8c6829e0b167c85fc804b2559a643232a36f9fa Mon Sep 17 00:00:00 2001
> From: Stefan Behrens <sbehrens at giantdisaster.de>
> Date: Wed, 27 Mar 2019 11:26:09 +0100
> Subject: [PATCH] lib/util: Fixup tcopy_passwd() to also copy the pw_comment
>  field
> 
> This change isn't needed by the Samba code itself but by a passdb
> module of mine. This module makes use of the comment field and
> requires that the copy of a passwd structure includes the pw_comment
> field. And I see no reason why all fields of the passwd structure
> are copied except for pw_comment.
> 
> Signed-off-by: Stefan Behrens <sbehrens at giantdisaster.de>
> ---
>  lib/util/util_pw.c | 12 +++++++++++-
>  1 file changed, 11 insertions(+), 1 deletion(-)
> 
> diff --git a/lib/util/util_pw.c b/lib/util/util_pw.c
> index 8035de4392c3..62e6e1e36a64 100644
> --- a/lib/util/util_pw.c
> +++ b/lib/util/util_pw.c
> @@ -34,14 +34,21 @@ struct passwd *tcopy_passwd(TALLOC_CTX *mem_ctx,
>  {
>  	struct passwd *ret;
>  	size_t len = 0;
> +	unsigned int num_subobjs;
>  
>  	len += strlen(from->pw_name)+1;
>  	len += strlen(from->pw_passwd)+1;
>  	len += strlen(from->pw_gecos)+1;
>  	len += strlen(from->pw_dir)+1;
>  	len += strlen(from->pw_shell)+1;
> +	if (from->pw_comment != NULL) {
> +		len += strlen(from->pw_comment)+1;
> +		num_subobjs = 6;
> +	} else {
> +		num_subobjs = 5;
> +	}
>  
> -	ret = talloc_pooled_object(mem_ctx, struct passwd, 5, len);
> +	ret = talloc_pooled_object(mem_ctx, struct passwd, num_subobjs, len);
>  
>  	if (ret == NULL) {
>  		return NULL;
> @@ -54,6 +61,9 @@ struct passwd *tcopy_passwd(TALLOC_CTX *mem_ctx,
>  	ret->pw_gecos = talloc_strdup(ret, from->pw_gecos);
>  	ret->pw_dir = talloc_strdup(ret, from->pw_dir);
>  	ret->pw_shell = talloc_strdup(ret, from->pw_shell);
> +	if (from->pw_comment != NULL) {
> +		ret->pw_comment = talloc_strdup(ret, from->pw_comment);
> +	}
>  
>  	return ret;
>  }
> -- 
> 2.19.2
> 




More information about the samba-technical mailing list