check_login in loginutils/login.c (was Re: [BusyBox] Re: login buggy also in 1.00pre5)
Tito
farmatito at tiscali.it
Wed Jan 7 11:31:12 UTC 2004
On Tuesday 06 January 2004 23:19, Friedrich Lobenstock wrote:
> Charlie Brady wrote on 06.01.2004 23:22 MET:
> > On Tue, 6 Jan 2004, Tito wrote:
> >>>> if ( check_nologin ( pw-> pw_uid == 0 ))
> >>>> return EXIT_FAILURE;
> >
> > ...
> >
> >>maybe something like :
> >> if ( check_nologin ( (pw-> pw_uid == 0) ) == 1)
> >> return EXIT_FAILURE;
> >>would be easier to understand for the non-gurus. ;-)
> >
> > But that might mean something different (the internals of
> > check_nologin() will say).
> >
> > Would you be happier with
> >
> > if (check_nologin(!pw->pw_uid))
> > return EXIT_FAILURE;
>
> How about the patch below? It calls check_nologin for a user-id
> which I think is more clear and let me show you that we even
> reduce code size:
>
> # sed -e "/^$/d" -e "/^#/d" .config
> HAVE_DOT_CONFIG=y
> CONFIG_FEATURE_BUFFERS_GO_IN_BSS=y
> CONFIG_FEATURE_VERBOSE_USAGE=y
> CONFIG_FEATURE_DEVPTS=y
> EXTRA_CFLAGS_OPTIONS=""
> PREFIX="./_install"
> CONFIG_LOGIN=y
> CONFIG_FEATURE_SECURETTY=y
> CONFIG_FEATURE_SH_IS_NONE=y
>
> * without this patch applied (binary stripped):
>
> # ls -al busybox-1.00-pre5/busybox
> -rwxr-xr-x 1 fl users 13424 2004-01-07 00:09
> busybox-1.00-pre5/busybox*
>
> * with this patch applied (binary stripped):
>
> # ls -al busybox-1.00-pre5/busybox
> -rwxr-xr-x 1 fl users 13392 2004-01-07 00:13
> busybox-1.00-pre5/busybox*
>
>
> Difference: 32 Bytes (because we do one comparision less than before)
> [ note: result valid for the CRIS architecture, numbers might differ on
> other arch ]
>
> --- busybox-1.00-pre5/loginutils/login.c.org 2004-01-06 23:33:24.000000000
> +0100 +++ busybox-1.00-pre5/loginutils/login.c 2004-01-06
> 23:35:01.000000000 +0100 @@ -37,7 +37,7 @@
> #define USERNAME_SIZE 32
>
>
> -static int check_nologin ( int amroot );
> +static int check_nologin ( int uid );
>
> #if defined CONFIG_FEATURE_SECURETTY
> static int check_tty ( const char *tty );
> @@ -217,7 +217,7 @@
> }
>
> alarm ( 0 );
> - if ( check_nologin ( pw-> pw_uid == 0 ))
> + if ( check_nologin ( pw-> pw_uid ))
> return EXIT_FAILURE;
>
> #ifdef CONFIG_FEATURE_U_W_TMP
> @@ -315,7 +315,7 @@
> }
>
>
> -static int check_nologin ( int amroot )
> +static int check_nologin ( int uid )
> {
> if ( access ( bb_path_nologin_file, F_OK ) == 0 ) {
> FILE *fp;
> @@ -330,7 +330,7 @@
> } else {
> puts ( "\r\nSystem closed for routine maintenance.\r" );
> }
> - if ( !amroot )
At this point to be coherent rather than writing a comment do
if(uid!=0)
> + if ( uid ) /* !root */
> return 1;
>
> puts ( "\r\n[Disconnect bypassed -- root login allowed.]\r" );
Looks easier to understand at the first glance...........
Tito
More information about the busybox
mailing list