From hartmans@MIT.EDU Mon Sep 30 01:14:27 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 BAA23752 for ; Mon, 30 Sep 1996 01:14:26 -0400 Received: from STARKILLER.MIT.EDU by MIT.EDU with SMTP id AA01067; Mon, 30 Sep 96 01:14:26 EDT Received: by starkiller.MIT.EDU (5.x/4.7) id AA17257; Mon, 30 Sep 1996 01:14:26 -0400 Message-Id: <9609300514.AA17257@starkiller.MIT.EDU> Date: Mon, 30 Sep 1996 01:14:26 -0400 From: hartmans@MIT.EDU Reply-To: hartmans@MIT.EDU, "Jonathan I. Kamens" To: krb5-bugs@MIT.EDU Subject: add forward command X-Send-Pr-Version: 3.99 >Number: 45 >Category: telnet >Synopsis: add forward command >Confidential: no >Severity: non-critical >Priority: medium >Responsible: hartmans >State: closed >Class: change-request >Submitter-Id: unknown >Arrival-Date: Mon Sep e 01:15:00 EDT 1996 >Last-Modified: Fri Nov e 20:50:40 EST 1996 >Originator: "Jonathan I. Kamens" >Organization: mit >Release: beta-7 >Environment: System: SunOS starkiller 5.4 Generic_101945-37 sun4m sparc >Description: Received: from PACIFIC-CARRIER-ANNEX.MIT.EDU by po10.MIT.EDU (5.61/4.7) id AA12215; Tue, 17 Sep 96 16:57:36 EDT Received: from jik.tiac.net by MIT.EDU with SMTP id AA16860; Tue, 17 Sep 96 16:54:54 EDT Received: (from jik@localhost) by jik.tiac.net (8.8.Beta.1/8.8.Beta.1) id QAA24780; Tue, 17 Sep 1996 16:55:10 -0400 Message-Id: <199609172055.QAA24780@jik.tiac.net> Lines: 146 Xref: tertius.mit.edu mail.kerberos:2017 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 :-). >How-To-Repeat: >Fix: --- 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) */ >Audit-Trail: State-Changed-From-To: open-closed State-Changed-By: hartmans State-Changed-When: Fri Nov 1 20:49:09 1996 State-Changed-Why: Implemented. In addition to applying the patch, I moved some #defines from kerberos5.c to auth.h in libtelnet so things would work. This was reasonable because the #defines were already duplicated between main.c and kerberos5.c, and more duplicate code sucks. >Unformatted: