Follow @Openwall on Twitter for new release announcements and other news
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date: Tue, 5 Nov 2013 14:24:16 -0500
From: Rich Felker <dalias@...ifal.cx>
To: musl@...ts.openwall.com
Subject: Re: [PATCH] shadow: Implement putspent

On Mon, Nov 04, 2013 at 11:47:40PM -0800, Michael Forney wrote:
> ---
> When I brought up implementing the shadow.h functions on IRC, several concerns
> were raised. However, it turns out that the shadow package only requires
> putspent. I didn't understand the concerns on IRC, so if there is an issue with
> the implementation of this function, please let me know and hopefully I'll be
> able to address it.
> 
>  src/passwd/fgetspent.c |  5 -----
>  src/passwd/putspent.c  | 30 ++++++++++++++++++++++++++++++
>  2 files changed, 30 insertions(+), 5 deletions(-)
>  create mode 100644 src/passwd/putspent.c
> 
> diff --git a/src/passwd/fgetspent.c b/src/passwd/fgetspent.c
> index a9a3c97..3dda784 100644
> --- a/src/passwd/fgetspent.c
> +++ b/src/passwd/fgetspent.c
> @@ -4,8 +4,3 @@ struct spwd *fgetspent(FILE *f)
>  {
>  	return 0;
>  }
> -
> -int putspent(const struct spwd *sp, FILE *f)
> -{
> -	return -1;
> -}
> diff --git a/src/passwd/putspent.c b/src/passwd/putspent.c
> new file mode 100644
> index 0000000..bb0a410
> --- /dev/null
> +++ b/src/passwd/putspent.c
> @@ -0,0 +1,30 @@
> +#include <shadow.h>
> +#include <stdio.h>
> +
> +int putspent(const struct spwd *sp, FILE *f)
> +{
> +	flockfile(f);
> +	if (sp->sp_namp && fputs(sp->sp_namp, f) == EOF) goto fail;
> +	if (fputc(':', f) == EOF) goto fail;
> +	if (sp->sp_pwdp && fputs(sp->sp_pwdp, f) == EOF) goto fail;
> +	if (fputc(':', f) == EOF) goto fail;
> +	if (sp->sp_lstchg != -1 && fprintf(f, "%d", sp->sp_lstchg) < 0) goto fail;
> +	if (fputc(':', f) == EOF) goto fail;

Is there a reason for all this logic instead of a single call to
fprintf with a proper format string? Writing the value -1 as an empty
slot can be handled with a simple macro that expands to 0,0 for an
argument of -1 and -1,val for other values, along with a %.*d format.

Rich

Powered by blists - more mailing lists

Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.