X-Git-Url: https://git.subgeniuskitty.com/unix-history/.git/blobdiff_plain/1b8d273e352803f0c9fbb4c90bf79d03f589f45a..8bd4aa16d15ecd17dc2643390f4495ee5fddc2ae:/usr/src/bin/rcp/rcp.c diff --git a/usr/src/bin/rcp/rcp.c b/usr/src/bin/rcp/rcp.c index fb5a2443b2..893129d1b4 100644 --- a/usr/src/bin/rcp/rcp.c +++ b/usr/src/bin/rcp/rcp.c @@ -1,28 +1,18 @@ /* - * Copyright (c) 1983 The Regents of the University of California. + * Copyright (c) 1983, 1990 The Regents of the University of California. * All rights reserved. * - * Redistribution and use in source and binary forms are permitted - * provided that the above copyright notice and this paragraph are - * duplicated in all such forms and that any documentation, - * advertising materials, and other materials related to such - * distribution and use acknowledge that the software was developed - * by the University of California, Berkeley. The name of the - * University may not be used to endorse or promote products derived - * from this software without specific prior written permission. - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + * %sccs.include.redist.c% */ #ifndef lint char copyright[] = -"@(#) Copyright (c) 1983 The Regents of the University of California.\n\ +"@(#) Copyright (c) 1983, 1990 The Regents of the University of California.\n\ All rights reserved.\n"; #endif /* not lint */ #ifndef lint -static char sccsid[] = "@(#)rcp.c 5.26 (Berkeley) %G%"; +static char sccsid[] = "@(#)rcp.c 5.30 (Berkeley) %G%"; #endif /* not lint */ /* @@ -36,6 +26,8 @@ static char sccsid[] = "@(#)rcp.c 5.26 (Berkeley) %G%"; #include #include #include +#include +#include #include #include #include @@ -49,12 +41,17 @@ static char sccsid[] = "@(#)rcp.c 5.26 (Berkeley) %G%"; #include char dst_realm_buf[REALM_SZ]; char *dest_realm = NULL; -int use_kerberos = 1, encrypt = 0; +int use_kerberos = 1; CREDENTIALS cred; Key_schedule schedule; extern char *krb_realmofhost(); +#ifdef CRYPT +int encrypt = 0; #define OPTIONS "dfkprtx" #else +#define OPTIONS "dfkprt" +#endif +#else #define OPTIONS "dfprt" #endif @@ -80,7 +77,7 @@ main(argc, argv) extern int optind; struct servent *sp; int ch, fflag, tflag; - char *targ, *colon(); + char *targ, *shell, *colon(); struct passwd *getpwuid(); int lostconn(); @@ -99,10 +96,12 @@ main(argc, argv) strncpy(dst_realm_buf, ++argv, REALM_SZ); dest_realm = dst_realm_buf; break; +#ifdef CRYPT case 'x': encrypt = 1; /* des_set_key(cred.session, schedule); */ break; +#endif #endif /* rshd-invoked options (server) */ case 'd': @@ -125,12 +124,17 @@ main(argc, argv) argv += optind; #ifdef KERBEROS - sp = getservbyname((encrypt ? "ekshell" : "kshell"), "tcp"); +#ifdef CRYPT + shell = encrypt ? "ekshell" : "kshell"; +#else + shell = "kshell"; +#endif + sp = getservbyname(shell, "tcp"); if (sp == NULL) { char msgbuf[64]; use_kerberos = 0; (void) sprintf(msgbuf, "can't get entry for %s/tcp service", - (encrypt ? "ekshell" : "kshell")); + shell); old_warning(msgbuf); sp = getservbyname("shell", "tcp"); } @@ -172,7 +176,11 @@ main(argc, argv) /* 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" : "", @@ -196,7 +204,7 @@ toremote(targ, argc, argv) int argc; char **argv; { - int i; + int i, tos; char *bp, *host, *src, *suser, *thost, *tuser; char *colon(), *malloc(); @@ -267,6 +275,10 @@ toremote(targ, argc, argv) bp, 0); if (rem < 0) exit(1); + tos = IPTOS_THROUGHPUT; + if (setsockopt(rem, IPPROTO_IP, IP_TOS, + (char *)&tos, sizeof(int)) < 0) + perror("rcp: setsockopt TOS (ignored)"); if (response() < 0) exit(1); (void)free(bp); @@ -281,7 +293,7 @@ tolocal(argc, argv) int argc; char **argv; { - int i; + int i, tos; char *bp, *host, *src, *suser; char *colon(), *malloc(); @@ -324,9 +336,13 @@ tolocal(argc, argv) (void)free(bp); if (rem < 0) continue; - (void)setreuid(0, userid); + (void)seteuid(userid); + tos = IPTOS_THROUGHPUT; + if (setsockopt(rem, IPPROTO_IP, IP_TOS, + (char *)&tos, sizeof(int)) < 0) + perror("rcp: setsockopt TOS (ignored)"); sink(1, argv + argc - 1); - (void)setreuid(userid, 0); + (void)seteuid(0); (void)close(rem); rem = -1; } @@ -849,9 +865,15 @@ nospace() usage() { #ifdef KERBEROS +#ifdef CRYPT (void)fprintf(stderr, "%s\n\t%s\n", "usage: rcp [-k realm] [-px] f1 f2", "or: rcp [-k realm] [-rpx] f1 ... fn directory"); +#else + (void)fprintf(stderr, "%s\n\t%s\n", + "usage: rcp [-k realm] [-p] f1 f2", + "or: rcp [-k realm] [-rp] f1 ... fn directory"); +#endif #else (void)fprintf(stderr, "usage: rcp [-p] f1 f2; or: rcp [-rp] f1 ... fn directory\n"); @@ -880,6 +902,7 @@ again: if (dest_realm == NULL) dest_realm = krb_realmofhost(*host); +#ifdef CRYPT if (encrypt) rem = krcmd_mutual( host, port, @@ -887,6 +910,7 @@ again: dest_realm, &cred, schedule); else +#endif rem = krcmd( host, port, user, bp, 0, dest_realm); @@ -910,11 +934,13 @@ again: goto again; } } else { +#ifdef CRYPT if (encrypt) { fprintf(stderr, "The -x option requires Kerberos authentication\n"); exit(1); } +#endif rem = rcmd(host, sp->s_port, locuser, user, bp, 0); } return(rem);