Andrew Tridgell a52cb0abc9 testsuite: a leading comma in "auth users" must split on commas alone
Four modules -- two defect cases and a control apiece -- driving the
defect in both directions.

"spaced" needs no groups at all:

    auth users = ,@nosuchgroup authuser:deny, authuser:rw

  * parsed as documented -- one entry naming a group that does not
    exist, so no match, then "authuser:rw" grants access;
  * split on whitespace -- "@nosuchgroup", then "authuser:deny", which
    matches the username and refuses a transfer that should succeed.

"grpdeny" drives the direction that was actually reported, a member of a
denied group getting in:

    auth users = ,@[! []*:deny, <realuser>:rw

"[! []*" is a wildmatch class holding a space, matching any ordinary
group name -- one with no "/" in it, which wildmatch treats as a path
separator -- whose first character is neither a space nor a "[".  So the
entry contains a space without needing an NSS group named with one,
which a test cannot create.  Parsed as documented the deny fires; split
on whitespace it becomes "@[!" and "[]*:deny", both unterminated classes
that match nothing, and the later ":rw" lets the member in.

The "[" is excluded from the class for the sake of that second half: the
simpler "[! ]*" splits to "]*", which matches any name beginning with
"]", so on a host with such a user the buggy parser would deny for the
wrong reason and look correct.

That half authenticates as the invoking user rather than the
secrets-file name, because the daemon must resolve the name to a real
uid or getallgroups() finds nothing and no group rule of any spelling
could match.

Each direction needs its own control, because "refused" is the expected
outcome of grpdeny and almost anything can produce a refusal.  "plain"
proves the synthetic credential and the transfer work; "grpctl"
(auth users = @*:rw) proves the daemon resolved the real user to a uid,
enumerated its groups, accepted its secret and could store the file.
Without them, pointing grpdeny at a nonexistent module or breaking the
real user's secret both made it pass while proving nothing.

The deny itself is checked in the daemon log, not the client's output.
A client is told only "auth failed" whatever the server decided, so
"denied by rule", "no matching rule" and "password mismatch" are
indistinguishable to it -- and a parse yielding no rules at all produces
"no matching rule", which would satisfy any client-side check without
the deny having matched anything.
2026-07-29 13:10:54 +10:00
2022-10-16 10:28:58 -07:00
2021-09-26 18:55:46 -07:00
2023-05-04 08:45:42 -07:00
2023-05-04 08:45:42 -07:00
2021-09-26 16:57:55 -07:00
2019-03-16 09:15:49 -07:00
2020-06-13 19:15:02 -07:00
2022-01-15 17:21:01 -08:00
2019-03-16 09:15:49 -07:00
2019-03-16 09:15:49 -07:00
2022-01-15 17:21:01 -08:00
2025-08-23 16:40:34 +10:00
2020-06-13 19:15:02 -07:00
2022-03-26 08:58:51 -07:00
2022-01-15 17:21:01 -08:00
2026-07-20 14:05:31 +10:00
2026-07-20 14:05:31 +10:00
2026-04-22 13:02:10 +10:00
2026-05-23 07:52:55 +10:00
2026-07-20 07:27:22 +10:00

WHAT IS RSYNC?

Rsync is a fast and extraordinarily versatile file copying tool for both remote and local files.

Rsync uses a delta-transfer algorithm which provides a very fast method for bringing remote files into sync. It does this by sending just the differences in the files across the link, without requiring that both sets of files are present at one of the ends of the link beforehand. At first glance this may seem impossible because the calculation of diffs between two files normally requires local access to both files.

A technical report describing the rsync algorithm is included with this package.

USAGE

Basically you use rsync just like scp, but rsync has many additional options. To get a complete list of supported options type:

rsync --help

See the manpage for more detailed information.

BUILDING AND INSTALLING

If you need to build rsync yourself, check out the INSTALL page for information on what libraries and packages you can use to get the maximum features in your build.

SETUP

Rsync normally uses ssh or rsh for communication with remote systems. It does not need to be setuid and requires no special privileges for installation. You must, however, have a working ssh or rsh system. Using ssh is recommended for its security features.

Alternatively, rsync can run in `daemon' mode, listening on a socket. This is generally used for public file distribution, although authentication and access control are available.

To install rsync, first run the "configure" script. This will create a Makefile and config.h appropriate for your system. Then type "make".

Note that on some systems you will have to force configure not to use gcc because gcc may not support some features (such as 64 bit file offsets) that your system may support. Set the environment variable CC to the name of your native compiler before running configure in this case.

Once built put a copy of rsync in your search path on the local and remote systems (or use "make install"). That's it!

RSYNC DAEMONS

Rsync can also talk to "rsync daemons" which can provide anonymous or authenticated rsync. See the rsyncd.conf(5) manpage for details on how to setup an rsync daemon. See the rsync(1) manpage for info on how to connect to an rsync daemon.

WEB SITE

For more information, visit the main rsync web site.

You'll find a FAQ list, downloads, resources, HTML versions of the manpages, etc.

MAILING LISTS

There is a mailing list for the discussion of rsync and its applications that is open to anyone to join. New releases are announced on this list, and there is also an announcement-only mailing list for those that want official announcements. See the mailing-list page for full details.

DISCORD

There is also an rsync Discord server for real-time chat about rsync and its development.

BUG REPORTS

The bug-tracking web page has full details on bug reporting.

That page contains links to the current bug list, and information on how to do a good job when reporting a bug. You might also like to try searching the Internet for the error message you've received, or looking in the mailing list archives.

To send a bug report, follow the instructions on the bug-tracking page of the web site.

Alternately, email your bug report to rsync@lists.samba.org.

For security issues please email details of the issue to rsync.project@gmail.com.

GIT REPOSITORY

If you want to get the very latest version of rsync direct from the source code repository, then you will need to use git. The git repo is hosted on GitHub and on Samba's site.

See the download page for full details on all the ways to grab the source.

Rsync was originally written by Andrew Tridgell and Paul Mackerras. Many people from around the world have helped to maintain and improve it.

Special thanks go to Wayne Davison, who maintained rsync from 2004 to 2024.

Rsync may be used, modified and redistributed only under the terms of the GNU General Public License, found in the file COPYING in this distribution, or at the Free Software Foundation.

S
Description
No description provided
Readme GPL-3.0
67 MiB
0 Stars 1 Watchers 0 Forks
Languages
C 48.6%
Python 41.5%
HTML 4.3%
M4 1.3%
Shell 0.8%
Other 3.4%