Re: rsync fix symlink discovery

2021-07-06 Thread Claudio Jeker
On Mon, Jul 05, 2021 at 08:11:12PM -0900, Philip Guenther wrote:
> Based on the fts_open(3) manpage and other base source usage, shouldn't
> this use fts_accpath instead of fts_name?

Yes this should use fts_accpath.  I knew there was something different
than fts_name. I just missed it when I read the man page.
 
> The use of fts_statp in this code seems a bit loose vs ftp_info: instead of
> using S_ISLNK() on fts_statp I would expect this code to check for fts_info
> == FTS_SL: according the manpage fts_statp's value is undefined for various
> values of fts_info.
 
I'll have a look at this. I do agree that the code should be improved
overall.
 
> Philip Guenther
> 
> On Fri, Jul 2, 2021 at 4:46 AM Claudio Jeker 
> wrote:
> 
> > Hit this today while doing some tests. symlink_read() needs to use just
> > the filename and not the full path because fts_read(3) does chdir
> > internally.
> >
> > Without this I got:
> > openrsync: error: ./obj/openrsync.1: readlink: No such file or directory
> > openrsync: error: symlink_read
> > openrsync: error: flist_gen_dirent
> > openrsync: error: flist_gen
> > openrsync: error: rsync_sender
> >
> > --
> > :wq Claudio
> >
> > Index: flist.c
> > ===
> > RCS file: /cvs/src/usr.bin/rsync/flist.c,v
> > retrieving revision 1.32
> > diff -u -p -r1.32 flist.c
> > --- flist.c 30 Jun 2021 13:10:04 -  1.32
> > +++ flist.c 2 Jul 2021 13:14:01 -
> > @@ -972,7 +972,7 @@ flist_gen_dirent(struct sess *sess, char
> > /* Optionally copy link information. */
> >
> > if (S_ISLNK(ent->fts_statp->st_mode)) {
> > -   f->link = symlink_read(f->path);
> > +   f->link = symlink_read(ent->fts_name);
> > if (f->link == NULL) {
> > ERRX1("symlink_read");
> > goto out;
> >
> >

-- 
:wq Claudio



Re: rsync fix symlink discovery

2021-07-05 Thread Philip Guenther
Based on the fts_open(3) manpage and other base source usage, shouldn't
this use fts_accpath instead of fts_name?

The use of fts_statp in this code seems a bit loose vs ftp_info: instead of
using S_ISLNK() on fts_statp I would expect this code to check for fts_info
== FTS_SL: according the manpage fts_statp's value is undefined for various
values of fts_info.


Philip Guenther

On Fri, Jul 2, 2021 at 4:46 AM Claudio Jeker 
wrote:

> Hit this today while doing some tests. symlink_read() needs to use just
> the filename and not the full path because fts_read(3) does chdir
> internally.
>
> Without this I got:
> openrsync: error: ./obj/openrsync.1: readlink: No such file or directory
> openrsync: error: symlink_read
> openrsync: error: flist_gen_dirent
> openrsync: error: flist_gen
> openrsync: error: rsync_sender
>
> --
> :wq Claudio
>
> Index: flist.c
> ===
> RCS file: /cvs/src/usr.bin/rsync/flist.c,v
> retrieving revision 1.32
> diff -u -p -r1.32 flist.c
> --- flist.c 30 Jun 2021 13:10:04 -  1.32
> +++ flist.c 2 Jul 2021 13:14:01 -
> @@ -972,7 +972,7 @@ flist_gen_dirent(struct sess *sess, char
> /* Optionally copy link information. */
>
> if (S_ISLNK(ent->fts_statp->st_mode)) {
> -   f->link = symlink_read(f->path);
> +   f->link = symlink_read(ent->fts_name);
> if (f->link == NULL) {
> ERRX1("symlink_read");
> goto out;
>
>


rsync fix symlink discovery

2021-07-02 Thread Claudio Jeker
Hit this today while doing some tests. symlink_read() needs to use just
the filename and not the full path because fts_read(3) does chdir
internally.

Without this I got:
openrsync: error: ./obj/openrsync.1: readlink: No such file or directory
openrsync: error: symlink_read
openrsync: error: flist_gen_dirent
openrsync: error: flist_gen
openrsync: error: rsync_sender

-- 
:wq Claudio

Index: flist.c
===
RCS file: /cvs/src/usr.bin/rsync/flist.c,v
retrieving revision 1.32
diff -u -p -r1.32 flist.c
--- flist.c 30 Jun 2021 13:10:04 -  1.32
+++ flist.c 2 Jul 2021 13:14:01 -
@@ -972,7 +972,7 @@ flist_gen_dirent(struct sess *sess, char
/* Optionally copy link information. */
 
if (S_ISLNK(ent->fts_statp->st_mode)) {
-   f->link = symlink_read(f->path);
+   f->link = symlink_read(ent->fts_name);
if (f->link == NULL) {
ERRX1("symlink_read");
goto out;