-#ifdef KERBEROS
-kerberos(bp, user)
- char *bp, *user;
-{
- struct servent *sp;
- char *host;
-
-again: rem = KSUCCESS;
- if (krb_realm[0] == '\0')
- rem = krb_get_lrealm(krb_realm, 1);
- if (rem == KSUCCESS) {
- if (encrypt)
- rem = krcmd_mutual(&host, port, user, bp, 0,
- krb_realm, &cred, schedule);
- else
- rem = krcmd(&host, port, user, bp, 0, krb_realm);
- } else {
- (void)fprintf(stderr,
- "rcp: error getting local realm %s\n", krb_err_txt[rem]);
- exit(1);
- }
- if (rem < 0 && errno == ECONNREFUSED) {
- use_kerberos = 0;
- old_warning("remote host doesn't support Kerberos");
- sp = getservbyname("shell", "tcp");
- if (sp == NULL) {
- (void)fprintf(stderr,
- "rcp: unknown service shell/tcp\n");
- exit(1);
- }
- port = sp->s_port;
- goto again;
- }
-}
-#endif /* KERBEROS */
-
-verifydir(cp)
- char *cp;
-{
- struct stat stb;
-
- if (stat(cp, &stb) >= 0) {
- if ((stb.st_mode & S_IFMT) == S_IFDIR)
- return;
- errno = ENOTDIR;
- }
- error("rcp: %s: %s.\n", cp, sys_errlist[errno]);
- exit(1);
-}
-
-char *
-colon(cp)
- register char *cp;
-{
- for (; *cp; ++cp) {
- if (*cp == ':')
- return(cp);
- if (*cp == '/')
- return(0);
- }
- return(0);
-}
-
-okname(cp0)
- char *cp0;
-{
- register char *cp = cp0;
- register int c;
-
- do {
- c = *cp;
- if (c & 0200)
- goto bad;
- if (!isalpha(c) && !isdigit(c) && c != '_' && c != '-')
- goto bad;
- } while (*++cp);
- return(1);
-bad:
- (void)fprintf(stderr, "rcp: invalid user name %s\n", cp0);
- return(0);
-}
-
-susystem(s)
- char *s;
-{
- int status, pid, w;
- register int (*istat)(), (*qstat)();
-
- if ((pid = vfork()) == 0) {
- (void)setuid(userid);
- execl(_PATH_BSHELL, "sh", "-c", s, (char *)0);
- _exit(127);
- }
- istat = signal(SIGINT, SIG_IGN);
- qstat = signal(SIGQUIT, SIG_IGN);
- while ((w = wait(&status)) != pid && w != -1)
- ;
- if (w == -1)
- status = -1;
- (void)signal(SIGINT, istat);
- (void)signal(SIGQUIT, qstat);
- return(status);
-}
-