[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