From tlyu@MIT.EDU Thu Oct 10 12:55:52 1996 Received: from MIT.EDU (SOUTH-STATION-ANNEX.MIT.EDU [18.72.1.2]) by rt-11.MIT.EDU (8.7.5/8.7.3) with SMTP id MAA28944 for ; Thu, 10 Oct 1996 12:55:52 -0400 Received: from TESLA-COIL.MIT.EDU by MIT.EDU with SMTP id AA24912; Thu, 10 Oct 96 12:55:51 EDT Received: by tesla-coil.MIT.EDU (5.x/4.7) id AA12286; Thu, 10 Oct 1996 12:55:49 -0400 Message-Id: <199609172055.QAA24780@jik.tiac.net> Date: Tue, 17 Sep 1996 16:55:10 -0400 From: "Jonathan I. Kamens" To: krb5-bugs@MIT.EDU, kerberos@MIT.EDU Subject: krb5b7: Add a "forward" command to telnet >Number: 93 >Category: telnet >Synopsis: krb5b7: Add a "forward" command to telnet >Confidential: yes >Severity: serious >Priority: medium >Responsible: hartmans >State: closed >Class: change-request >Submitter-Id: unknown >Arrival-Date: Thu Oct e 12:56:01 EDT 1996 >Last-Modified: Fri Oct e 20:05:22 EDT 1996 >Originator: >Organization: >Release: >Environment: >Description: >How-To-Repeat: >Fix: >Audit-Trail: Responsible-Changed-From-To: gnats-admin->hartmans Responsible-Changed-By: tlyu Responsible-Changed-When: Thu Oct 10 12:58:55 1996 Responsible-Changed-Why: refiled State-Changed-From-To: open-closed State-Changed-By: hartmans State-Changed-When: Fri Oct 11 20:03:31 1996 State-Changed-Why: Dup of telnet/45. >Unformatted: The patch below adds a "forward" command to telnet, so that ticket forwarding parameters can be modified after starting telnet and/or in the .telnetrc file. This patch was implemented by Marc Horowitz; I'm not claiming authorship for it, just submitting it from OV's source tree so that it can be integrated back into the MIT release :-). --- telnet/commands.c 1996/09/17 19:54:21 1.1 +++ telnet/commands.c 1996/09/17 19:54:38 1.2 @@ -2113,6 +2113,115 @@ } #endif /* ENCRYPTION */ +#if defined(FORWARD) +/* + * The FORWARD command. + */ + + +extern int forward_flags; + +struct forwlist { + char *name; + char *help; + int (*handler)(); + int f_flags; +}; + +static int + forw_status P((void)), + forw_set P((int)), + forw_help P((void)); + +struct forwlist ForwList[] = { + { "status", "Display current status of credential forwarding", + forw_status, 0 }, + { "disable", "Disable credential forwarding", + forw_set, 0 }, + { "enable", "Enable credential forwarding", + forw_set, + OPTS_FORWARD_CREDS }, + { "forwardable", "Enable credential forwarding of forwardable credentials", + forw_set, + OPTS_FORWARD_CREDS | + OPTS_FORWARDABLE_CREDS }, + { "help", 0, forw_help, 0 }, + { "?", "Print help information", forw_help, 0 }, + { 0 }, +}; + + static int +forw_status() +{ + if (forward_flags & OPTS_FORWARD_CREDS) { + if (forward_flags & OPTS_FORWARDABLE_CREDS) { + printf("Credential forwarding of forwardable credentials enabled\n"); + } else { + printf("Credential forwarding enabled\n"); + } + } else { + printf("Credential forwarding disabled\n"); + } + return(0); +} + +forw_set(f_flags) + int f_flags; +{ + forward_flags = f_flags; + return(0); +} + + static int +forw_help() +{ + struct forwlist *c; + + for (c = ForwList; c->name; c++) { + if (c->help) { + if (*c->help) + printf("%-15s %s\n", c->name, c->help); + else + printf("\n"); + } + } + return 0; +} + +forw_cmd(argc, argv) + int argc; + char *argv[]; +{ + struct forwlist *c; + + if (argc < 2) { + fprintf(stderr, + "Need an argument to 'forward' command. 'forward ?' for help.\n"); + return 0; + } + + c = (struct forwlist *) + genget(argv[1], (char **) ForwList, sizeof(struct forwlist)); + if (c == 0) { + fprintf(stderr, "'%s': unknown argument ('forw ?' for help).\n", + argv[1]); + return 0; + } + if (Ambiguous(c)) { + fprintf(stderr, "'%s': ambiguous argument ('forw ?' for help).\n", + argv[1]); + return 0; + } + if (argc != 2) { + fprintf(stderr, + "No arguments needed to 'forward %s' command. 'forward ?' for help.\n", + c->name); + return 0; + } + return((*c->handler)(c->f_flags)); +} +#endif + #if defined(unix) && defined(TN3270) static void filestuff(fd) @@ -2485,6 +2594,9 @@ #ifdef ENCRYPTION encrypthelp[] = "turn on (off) encryption ('encrypt ?' for more)", #endif /* ENCRYPTION */ +#ifdef FORWARD + forwardhelp[] = "turn on (off) credential forwarding ('forward ?' for more)", +#endif #if defined(unix) zhelp[] = "suspend telnet", #endif /* defined(unix) */ @@ -2516,6 +2628,9 @@ #ifdef ENCRYPTION { "encrypt", encrypthelp, encrypt_cmd, 0 }, #endif /* ENCRYPTION */ +#ifdef FORWARD + { "forward", forwardhelp, forw_cmd, 0 }, +#endif #if defined(unix) { "z", zhelp, suspend, 0 }, #endif /* defined(unix) */