=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/rsync/main.c,v retrieving revision 1.65 retrieving revision 1.66 diff -c -r1.65 -r1.66 *** src/usr.bin/rsync/main.c 2022/08/02 20:01:12 1.65 --- src/usr.bin/rsync/main.c 2023/02/14 17:15:15 1.66 *************** *** 1,4 **** ! /* $OpenBSD: main.c,v 1.65 2022/08/02 20:01:12 tb Exp $ */ /* * Copyright (c) 2019 Kristaps Dzonsons * --- 1,4 ---- ! /* $OpenBSD: main.c,v 1.66 2023/02/14 17:15:15 job Exp $ */ /* * Copyright (c) 2019 Kristaps Dzonsons * *************** *** 231,247 **** j = strlen(cp); if (f->remote && strncasecmp(cp, "rsync://", 8) == 0) { ! /* rsync://path */ cp += 8; ! if ((ccp = strchr(cp, ':'))) /* skip :port */ *ccp = '\0'; if (strncmp(cp, f->host, len) || (cp[len] != '/' && cp[len] != '\0')) errx(ERR_SYNTAX, "different remote host: %s", f->sources[i]); memmove(f->sources[i], ! f->sources[i] + len + 8 + 1, ! j - len - 8); } else if (f->remote && strncmp(cp, "::", 2) == 0) { /* ::path */ memmove(f->sources[i], --- 231,251 ---- j = strlen(cp); if (f->remote && strncasecmp(cp, "rsync://", 8) == 0) { ! /* rsync://host[:port]/path */ ! size_t module_offset = len; cp += 8; ! /* skip :port */ ! if ((ccp = strchr(cp, ':')) != NULL) { *ccp = '\0'; + module_offset += strcspn(ccp + 1, "/") + 1; + } if (strncmp(cp, f->host, len) || (cp[len] != '/' && cp[len] != '\0')) errx(ERR_SYNTAX, "different remote host: %s", f->sources[i]); memmove(f->sources[i], ! f->sources[i] + module_offset + 8 + 1, ! j - module_offset - 8); } else if (f->remote && strncmp(cp, "::", 2) == 0) { /* ::path */ memmove(f->sources[i],