- (void) sprintf(cmd, "rcp%s%s%s",
- iamrecursive ? " -r" : "", pflag ? " -p" : "",
- targetshouldbedirectory ? " -d" : "");
- (void) signal(SIGPIPE, lostconn);
- targ = colon(argv[argc - 1]);
- if (targ) { /* ... to remote */
- *targ++ = 0;
- if (*targ == 0)
- targ = ".";
-#ifndef NAMESERVER
- tuser = rindex(argv[argc - 1], '.');
- if (tuser) {
- *tuser++ = 0;
- if (!okname(tuser))
- exit(1);
- } else
- tuser = pwd->pw_name;
-#else NAMESERVER
- thost = index(argv[argc - 1], '@');
- if (thost) {
- *thost++ = 0;
- tuser = argv[argc - 1];
- if (*tuser == '\0')
- tuser = pwd->pw_name;
- else if (!okname(tuser))
- exit(1);
- } else {
- thost = argv[argc - 1];
- tuser = pwd->pw_name;
- }
-#endif NAMESERVER
- for (i = 0; i < argc - 1; i++) {
- src = colon(argv[i]);
- if (src) { /* remote to remote */
- *src++ = 0;
- if (*src == 0)
- src = ".";
-#ifndef NAMESERVER
- suser = rindex(argv[i], '.');
- if (suser) {
- *suser++ = 0;
- if (!okname(suser))
-#else NAMESERVER
- host = index(argv[i], '@');
- if (host) {
- *host++ = 0;
- suser = argv[i];
- if (*suser == '\0')
- suser = pwd->pw_name;
- else if (!okname(suser))
-#endif NAMESERVER
- continue;
-#ifndef NAMESERVER
- (void) sprintf(buf, "rsh %s -l %s -n %s %s '%s.%s:%s'",
- argv[i], suser, cmd, src,
- argv[argc - 1], tuser, targ);
- } else
- (void) sprintf(buf, "rsh %s -n %s %s '%s.%s:%s'",
- argv[i], cmd, src,
- argv[argc - 1], tuser, targ);
-#else NAMESERVER
- (void) sprintf(buf, "rsh %s -l %s -n %s %s '%s@%s:%s'",
- host, suser, cmd, src,
- tuser, thost, targ);
- } else
- (void) sprintf(buf, "rsh %s -n %s %s '%s@%s:%s'",
- argv[i], cmd, src,
- tuser, thost, targ);
-#endif NAMESERVER
- (void) susystem(buf);
- } else { /* local to remote */
- if (rem == -1) {
- (void) sprintf(buf, "%s -t %s",
- cmd, targ);
-#ifndef NAMESERVER
- host = argv[argc - 1];
-#else NAMESERVER
- host = thost;
-#endif NAMESERVER
- rem = rcmd(&host, port, pwd->pw_name, tuser,
- buf, 0);
- if (rem < 0)
- exit(1);
- if (response() < 0)
- exit(1);
- (void) setuid(userid);
- }
- source(1, argv+i);
- }
- }
- } else { /* ... to local */
+
+ rem = -1;
+ /* command to be executed on remote system using "rsh" */
+#ifdef KERBEROS
+ (void)sprintf(cmd, "rcp%s%s%s%s", iamrecursive ? " -r" : "",
+#ifdef CRYPT
+ ((encrypt && use_kerberos) ? " -x" : ""),
+#else
+ "",
+#endif
+ pflag ? " -p" : "", targetshouldbedirectory ? " -d" : "");
+#else
+ (void)sprintf(cmd, "rcp%s%s%s", iamrecursive ? " -r" : "",
+ pflag ? " -p" : "", targetshouldbedirectory ? " -d" : "");
+#endif
+
+ (void)signal(SIGPIPE, lostconn);
+
+ if (targ = colon(argv[argc - 1]))
+ toremote(targ, argc, argv); /* destination is remote host */
+ else {
+ tolocal(argc, argv); /* destination is local host */