Should dummy_auth be const char?

        -alan-

Julien Cristau wrote:
> From: Branden Robinson <[email protected]>
> 
> Actually attempt to write data to the auth file in SaveServerAuthorizations();
> that way we detect problems like ENOSPC (full filesystem, user over quota)
> early enough to do something about it.  (See Debian #217505, #253480)
> 
> Forward-ported by Julien Cristau <[email protected]>.
> ---
>  auth.c |   34 ++++++++++++++++++++++++++++++++++
>  1 files changed, 34 insertions(+), 0 deletions(-)
> 
> diff --git a/auth.c b/auth.c
> index b80f16d..571276a 100644
> --- a/auth.c
> +++ b/auth.c
> @@ -401,6 +401,8 @@ SaveServerAuthorizations (
>      mode_t   mask;
>      int              ret;
>      int              i;
> +    char     dummy_auth[] = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
> +                            "XXXXXXXXXXXXXXXXX"; /* 64 "X"s */
>  
>      mask = umask (0077);
>      ret = MakeServerAuthFile(d, &auth_file);
> @@ -418,6 +420,31 @@ SaveServerAuthorizations (
>      {
>       Debug ("File: %s auth: %p\n", d->authFile, auths);
>       ret = TRUE;
> +     if (count == 0)
> +     {
> +             /*
> +              * This is a crude hack to determine whether we really can
> +              * write to the auth file even if we don't have real data
> +              * to write right now.
> +              */
> +
> +             /*
> +              * Write garbage data to file to provoke ENOSPC and other
> +              * errors.
> +              */
> +             (void) fprintf (auth_file, "%s", dummy_auth);
> +             (void) fflush (auth_file);
> +             if (ferror (auth_file))
> +             {
> +                 LogError ("Cannot write server authorization file %s\n",
> +                           d->authFile);
> +                 ret = FALSE;
> +             }
> +             /*
> +              * Rewind so that the garbage data is overwritten later.
> +              */
> +             rewind(auth_file);
> +     }
>       for (i = 0; i < count; i++)
>       {
>           /*
> @@ -436,6 +463,13 @@ SaveServerAuthorizations (
>                   d->authFile = NULL;
>               }
>       }
> +     /*
> +      * XXX: This is not elegant, but stdio has no truncation function.
> +      */
> +     if (ftruncate(fileno(auth_file), ftell(auth_file)))
> +     {
> +             Debug ("ftruncate() failed\n");
> +     }
>       fclose (auth_file);
>      }
>      return ret;

-- 
        -Alan Coopersmith-           [email protected]
         Sun Microsystems, Inc. - X Window System Engineering

_______________________________________________
xorg-devel mailing list
[email protected]
http://lists.x.org/mailman/listinfo/xorg-devel

Reply via email to