extern int verbose;
extern int quiet;
+extern int output_motd;
extern int list_only;
extern int am_sender;
extern int am_server;
extern int am_daemon;
extern int am_root;
extern int rsync_port;
+extern int ignore_errors;
extern int kluge_around_eof;
extern int daemon_over_rsh;
extern int sanitize_paths;
return ret ? ret : client_run(fd, fd, -1, argc, argv);
}
-int start_inband_exchange(char *user, char *path, int f_in, int f_out,
+int start_inband_exchange(const char *user, char *path, int f_in, int f_out,
int argc)
{
int i;
return -1;
}
- rprintf(FINFO, "%s\n", line);
+ /* This might be a MOTD line or a module listing, but there is
+ * no way to differentiate it. The manpage mentions this. */
+ if (output_motd)
+ rprintf(FINFO, "%s\n", line);
}
kluge_around_eof = 0;
if (wait_process(pid, &status, 0) < 0
|| !WIFEXITED(status) || WEXITSTATUS(status) != 0) {
char *e;
- if (asprintf(&e, "pre-xfer exec returned failure (%d)\n", status) < 0)
+ if (asprintf(&e, "pre-xfer exec returned failure (%d)%s%s\n",
+ status, status < 0 ? ": " : "",
+ status < 0 ? strerror(errno) : "") < 0)
out_of_memory("finish_pre_exec");
return e;
}
if (am_root) {
p = lp_uid(i);
if (!name_to_uid(p, &uid)) {
- if (!isdigit(*(unsigned char *)p)) {
+ if (!isDigit(p)) {
rprintf(FLOG, "Invalid uid %s\n", p);
io_printf(f_out, "@ERROR: invalid uid %s\n", p);
return -1;
p = lp_gid(i);
if (!name_to_gid(p, &gid)) {
- if (!isdigit(*(unsigned char *)p)) {
+ if (!isDigit(p)) {
rprintf(FLOG, "Invalid gid %s\n", p);
io_printf(f_out, "@ERROR: invalid gid %s\n", p);
return -1;
verbose = 0; /* future verbosity is controlled by client options */
ret = parse_arguments(&argc, (const char ***) &argv, 0);
quiet = 0; /* Don't let someone try to be tricky. */
+ if (lp_ignore_errors(module_id))
+ ignore_errors = 1;
if (filesfrom_fd == 0)
filesfrom_fd = f_in;
if (!ret || err_msg) {
if (err_msg)
- rprintf(FERROR, err_msg);
+ rwrite(FERROR, err_msg, strlen(err_msg));
else
option_error();
msleep(400);