Add the source code for /usr/src/usr.bin from the Net/2 tape
[unix-history] / usr / src / bin / rcp / rcp.c
index a8984b2..0d15b68 100644 (file)
@@ -38,7 +38,7 @@ char copyright[] =
 #endif /* not lint */
 
 #ifndef lint
 #endif /* not lint */
 
 #ifndef lint
-static char sccsid[] = "@(#)rcp.c      5.32.1.1 (Berkeley) 8/20/91";
+static char sccsid[] = "@(#)rcp.c      5.32 (Berkeley) 2/25/91";
 #endif /* not lint */
 
 /*
 #endif /* not lint */
 
 /*
@@ -75,7 +75,12 @@ int  use_kerberos = 1;
 CREDENTIALS    cred;
 Key_schedule   schedule;
 extern char    *krb_realmofhost();
 CREDENTIALS    cred;
 Key_schedule   schedule;
 extern char    *krb_realmofhost();
+#ifdef CRYPT
+int    doencrypt = 0;
+#define        OPTIONS "dfk:prtx"
+#else
 #define        OPTIONS "dfk:prt"
 #define        OPTIONS "dfk:prt"
+#endif
 #else
 #define        OPTIONS "dfprt"
 #endif
 #else
 #define        OPTIONS "dfprt"
 #endif
@@ -121,6 +126,12 @@ main(argc, argv)
                        strncpy(dst_realm_buf, optarg, REALM_SZ);
                        dest_realm = dst_realm_buf;
                        break;
                        strncpy(dst_realm_buf, optarg, REALM_SZ);
                        dest_realm = dst_realm_buf;
                        break;
+#ifdef CRYPT
+               case 'x':
+                       doencrypt = 1;
+                       /* des_set_key(cred.session, schedule); */
+                       break;
+#endif
 #endif
                /* rshd-invoked options (server) */
                case 'd':
 #endif
                /* rshd-invoked options (server) */
                case 'd':
@@ -143,7 +154,11 @@ main(argc, argv)
        argv += optind;
 
 #ifdef KERBEROS
        argv += optind;
 
 #ifdef KERBEROS
+#ifdef CRYPT
+       shell = doencrypt ? "ekshell" : "kshell";
+#else
        shell = "kshell";
        shell = "kshell";
+#endif
        sp = getservbyname(shell, "tcp");
        if (sp == NULL) {
                char    msgbuf[64];
        sp = getservbyname(shell, "tcp");
        if (sp == NULL) {
                char    msgbuf[64];
@@ -192,7 +207,11 @@ main(argc, argv)
 #ifdef KERBEROS
        (void)snprintf(cmd, sizeof(cmd),
            "rcp%s%s%s%s", iamrecursive ? " -r" : "",
 #ifdef KERBEROS
        (void)snprintf(cmd, sizeof(cmd),
            "rcp%s%s%s%s", iamrecursive ? " -r" : "",
+#ifdef CRYPT
+           ((doencrypt && use_kerberos) ? " -x" : ""),
+#else
            "",
            "",
+#endif
            pflag ? " -p" : "", targetshouldbedirectory ? " -d" : "");
 #else
        (void)snprintf(cmd, sizeof(cmd), "rcp%s%s%s",
            pflag ? " -p" : "", targetshouldbedirectory ? " -d" : "");
 #else
        (void)snprintf(cmd, sizeof(cmd), "rcp%s%s%s",
@@ -882,9 +901,15 @@ nospace()
 usage()
 {
 #ifdef KERBEROS
 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");
        (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");
 #else
        (void)fprintf(stderr,
            "usage: rcp [-p] f1 f2; or: rcp [-rp] f1 ... fn directory\n");
@@ -913,6 +938,15 @@ again:
                if (dest_realm == NULL)
                        dest_realm = krb_realmofhost(*host);
 
                if (dest_realm == NULL)
                        dest_realm = krb_realmofhost(*host);
 
+#ifdef CRYPT
+               if (doencrypt)
+                       rem = krcmd_mutual(
+                               host, port,
+                               user, bp, 0,
+                               dest_realm,
+                               &cred, schedule);
+               else
+#endif
                        rem = krcmd(
                                host, port,
                                user, bp, 0, dest_realm);
                        rem = krcmd(
                                host, port,
                                user, bp, 0, dest_realm);
@@ -936,6 +970,13 @@ again:
                        goto again;
                }
        } else {
                        goto again;
                }
        } else {
+#ifdef CRYPT
+               if (doencrypt) {
+                       fprintf(stderr,
+                           "The -x option requires Kerberos authentication\n");
+                       exit(1);
+               }
+#endif
                rem = rcmd(host, sp->s_port, locuser, user, bp, 0);
        }
        return(rem);
                rem = rcmd(host, sp->s_port, locuser, user, bp, 0);
        }
        return(rem);