[Toybox] [PATCH] roadmap update: Android switched to toybox ls today.

José Bollo jobol at nonadev.net
Mon May 18 05:12:30 PDT 2015


Hi all,

I'm confused, the logic of the patch sent by this last email is wrong:
you must exchange + and -!

Sorry
José


Le lundi 18 mai 2015 à 10:08 +0200, José Bollo a écrit :
> Le samedi 16 mai 2015 à 12:26 -0500, Rob Landley a écrit :
> (snip)
> 
> > But meanwhile, I'm back looking at the smack-10 branch starting from
> > the new lib files, which is another message...
> 
> Hello,
> 
> Great news.
> 
> I think that it is mature. Obviously, you will have to rebase it a
> little to align it on top of your last changes.
> 
> I just found that I didn't pushed that interesting commit for ls:
> 
>     ls: Improve reading of security context
>     
>     The previous version had issues:
>      - context of sockets wasn't handled
>      - there was no rescue if openat failed
>      - style wasn't very good
>     
>     This commit fixes all of this.
> 
> diff --git a/toys/posix/ls.c b/toys/posix/ls.c
> index 0f7080b..0278a33 100644
> --- a/toys/posix/ls.c
> +++ b/toys/posix/ls.c
> @@ -148,21 +148,25 @@ static int numlen(long long ll)
>  static unsigned seclabel(struct dirtree *dt, int pad)
>  {
>    char *context = NULL;
> -  int len = 0, sts, fd, oflags = O_RDONLY|O_NONBLOCK/*|O_NOATIME*/;
> +  int len = 0, sts;
>  
> -  if (S_ISSOCK(dt->st.st_mode)
> -  || (S_ISLNK(dt->st.st_mode) && !(toys.optflags & FLAG_L))
> -  || ((fd = openat(dirtree_parentfd(dt), dt->name, oflags)) == -1))
> -  {
> +  if (S_ISLNK(dt->st.st_mode) && !(toys.optflags & FLAG_L)) {
> +    // Here a link. It isn't possible to read attributes of links by
> using
> +    // neither open(O_NOFOLLOW|O_READ) nor open(O_NOFOLLOW|O_PATH) thus
> +    // retrieves the path to read it!
>      char *path = dirtree_path(dt, 0);
> -    if (toys.optflags & FLAG_L) sts = security_get_context(path,
> &context);
> -    else sts = security_lget_context(path, &context);
> +    sts = security_lget_context(path, &context);
>      free(path);
> +    if (0 <= sts) len = sts;
>    } else {
> -    sts = security_fget_context(fd, &context);
> -    close(fd);
> +    int dirfd = dirtree_parentfd(dt);
> +    int fd = openat(dirfd, dt->name, O_RDONLY|O_NONBLOCK/*|
> O_NOATIME*/);
> +    if (fd != -1) {
> +      sts = security_fget_context(fd, &context);
> +      close(fd);
> +      if (0 <= sts) len = sts;
> +    }
>    }
> -  if (0 <= sts) len = sts;
>    if (pad) printf("%*s ", pad, len ? context : "?");
>    security_free_context(context);
>    return len + !len;
> 
> 
> =============================================
> Also please remember that bug fix:
> 
> diff --git a/toys/other/stat.c b/toys/other/stat.c
> index d6db44d..a96c1de 100644
> --- a/toys/other/stat.c
> +++ b/toys/other/stat.c
> @@ -82,7 +82,7 @@ static void print_stat(char type)
>      if (!stat->st_size && filetype == S_IFREG) t = "regular empty
> file";
>      xprintf("%s", t);
>    } else if (type == 'g') xprintf("%lu", stat->st_gid);
> -  else if (type == 'G') xprintf("%8s", TT.group_name->gr_name);
> +  else if (type == 'G') xprintf("%8s", TT.user_name->pw_name);
>    else if (type == 'h') xprintf("%lu", stat->st_nlink);
>    else if (type == 'i') xprintf("%llu", stat->st_ino);
>    else if (type == 'N') {
> 
> =============================================
> Have a good trip in Japan.
> Best regards
> José Bollo
> 
> _______________________________________________
> Toybox mailing list
> Toybox at lists.landley.net
> http://lists.landley.net/listinfo.cgi/toybox-landley.net




More information about the Toybox mailing list