extern char *files_from;
extern char *tmpdir;
extern struct chmod_mode_struct *chmod_modes;
-extern struct filter_list_struct daemon_filter_list;
+extern filter_rule_list daemon_filter_list;
extern char curr_dir[MAXPATHLEN];
#ifdef ICONV_OPTION
extern char *iconv_opt;
if (protocol_version < 23) {
if (protocol_version == 22 || !am_sender)
- io_start_multiplex_in();
+ io_start_multiplex_in(f_in);
}
free(modname);
char *bp = buf, *eob = buf + limit - 1;
while (1) {
- int got = read(fd, bp, 1);
- if (got != 1) {
- if (got < 0 && errno == EINTR)
- continue;
- return -1;
- }
- if (*bp == '\0')
- break;
- if (bp < eob)
- bp++;
+ int got = read(fd, bp, 1);
+ if (got != 1) {
+ if (got < 0 && errno == EINTR)
+ continue;
+ return -1;
+ }
+ if (*bp == '\0')
+ break;
+ if (bp < eob)
+ bp++;
}
*bp = '\0';
static int add_a_group(int f_out, const char *gname)
{
gid_t gid;
- if (!name_to_gid(gname, &gid)) {
- if (!isDigit(gname)) {
- rprintf(FLOG, "Invalid gid %s\n", gname);
- io_printf(f_out, "@ERROR: invalid gid %s\n", gname);
- return -1;
- }
- gid = atol(gname);
+ if (!group_to_gid(gname, &gid, True)) {
+ rprintf(FLOG, "Invalid gid %s\n", gname);
+ io_printf(f_out, "@ERROR: invalid gid %s\n", gname);
+ return -1;
}
if (gid_count == MAX_GID_LIST) {
rprintf(FLOG, "Too many groups specified via gid parameter.\n");
p = *lp_uid(i) ? lp_uid(i) : am_root ? NOBODY_USER : NULL;
if (p) {
- if (!name_to_uid(p, &uid)) {
- if (!isDigit(p)) {
- rprintf(FLOG, "Invalid uid %s\n", p);
- io_printf(f_out, "@ERROR: invalid uid %s\n", p);
- return -1;
- }
- uid = atol(p);
+ if (!user_to_uid(p, &uid, True)) {
+ rprintf(FLOG, "Invalid uid %s\n", p);
+ io_printf(f_out, "@ERROR: invalid uid %s\n", p);
+ return -1;
}
set_uid = 1;
} else
set_filter_dir(module_dir, module_dirlen);
p = lp_filter(i);
- parse_rule(&daemon_filter_list, p, MATCHFLG_WORD_SPLIT,
+ parse_filter_str(&daemon_filter_list, p, rule_template(FILTRULE_WORD_SPLIT),
XFLG_ABS_IF_SLASH | XFLG_DIR2WILD3);
p = lp_include_from(i);
- parse_filter_file(&daemon_filter_list, p, MATCHFLG_INCLUDE,
+ parse_filter_file(&daemon_filter_list, p, rule_template(FILTRULE_INCLUDE),
XFLG_ABS_IF_SLASH | XFLG_DIR2WILD3 | XFLG_OLD_PREFIXES | XFLG_FATAL_ERRORS);
p = lp_include(i);
- parse_rule(&daemon_filter_list, p,
- MATCHFLG_INCLUDE | MATCHFLG_WORD_SPLIT,
+ parse_filter_str(&daemon_filter_list, p,
+ rule_template(FILTRULE_INCLUDE | FILTRULE_WORD_SPLIT),
XFLG_ABS_IF_SLASH | XFLG_DIR2WILD3 | XFLG_OLD_PREFIXES);
p = lp_exclude_from(i);
- parse_filter_file(&daemon_filter_list, p, 0,
+ parse_filter_file(&daemon_filter_list, p, rule_template(0),
XFLG_ABS_IF_SLASH | XFLG_DIR2WILD3 | XFLG_OLD_PREFIXES | XFLG_FATAL_ERRORS);
p = lp_exclude(i);
- parse_rule(&daemon_filter_list, p, MATCHFLG_WORD_SPLIT,
+ parse_filter_str(&daemon_filter_list, p, rule_template(FILTRULE_WORD_SPLIT),
XFLG_ABS_IF_SLASH | XFLG_DIR2WILD3 | XFLG_OLD_PREFIXES);
log_init(1);
if (protocol_version < 23
&& (protocol_version == 22 || am_sender))
- io_start_multiplex_out();
+ io_start_multiplex_out(f_out);
else if (!ret || err_msg) {
/* We have to get I/O multiplexing started so that we can
* get the error back to the client. This means getting
if (files_from)
write_byte(f_out, 0);
}
- io_start_multiplex_out();
+ io_start_multiplex_out(f_out);
}
if (!ret || err_msg) {