[1365] in Kerberos-V5-bugs
rsh/rlogin/rcp, why exit if getservbyname fails?
daemon@ATHENA.MIT.EDU (Scott Schwartz)
Mon May 8 15:44:08 1995
To: krb5-bugs@MIT.EDU
Date: Mon, 8 May 1995 15:43:36 -0400
From: Scott Schwartz <schwartz@galapagos.cse.psu.edu>
Why exit if, e.g., eklogin isn't in /etc/services? Why not fall back
to the port number? That way, you can copy and use krlogin on a
system whose administrators don't want to edit any config files for
the sake of kerberos (annoyingly common in these parts).
Suggested patch follows.
*** 1.1 1995/05/08 01:26:37
--- krcp.c 1995/05/08 03:04:16
***************
*** 161,174 ****
if (sp == NULL) {
#ifdef KERBEROS
! fprintf(stderr, "rcp: kshell/tcp: unknown service\n");
! try_normal(orig_argv);
#else
! fprintf(stderr, "rcp: shell/tcp: unknown service\n");
! exit(1);
#endif /* KERBEROS */
}
- port = sp->s_port;
pwd = getpwuid(userid = getuid());
if (pwd == 0) {
fprintf(stderr, "who are you?\n");
--- 161,175 ----
if (sp == NULL) {
#ifdef KERBEROS
! fprintf(stderr, "rcp: kshell/tcp: unknown service, trying 544\n");
! port = htons(544);
#else
! fprintf(stderr, "rcp: shell/tcp: unknown service, trying 514\n");
! port = htons(514);
#endif /* KERBEROS */
+ } else {
+ port = sp->s_port;
}
pwd = getpwuid(userid = getuid());
if (pwd == 0) {
fprintf(stderr, "who are you?\n");
*** 1.1 1995/05/08 03:10:11
--- krlogin.c 1995/05/08 02:56:38
***************
*** 308,313 ****
--- 308,314 ----
#endif
struct passwd *pwd;
struct servent *sp;
+ int svc_port;
int uid, options = 0;
#ifdef POSIX_SIGNALS
struct sigaction sa;
***************
*** 468,483 ****
else
sp = getservbyname("klogin","tcp");
if (sp == 0) {
! fprintf(stderr, "rlogin: %s/tcp: unknown service\n",
! encrypt_flag ? "eklogin" : "klogin");
!
! try_normal(orig_argv);
}
#else
sp = getservbyname("login", "tcp");
if (sp == 0) {
! fprintf(stderr, "rlogin: login/tcp: unknown service\n");
! exit(2);
}
#endif /* KERBEROS */
if (cp == (char *) NULL) cp = getenv("TERM");
--- 469,488 ----
else
sp = getservbyname("klogin","tcp");
if (sp == 0) {
! svc_port = htons(encrypt_flag ? 2105 : 543);
! fprintf(stderr, "rlogin: %s/tcp: unknown service, trying port %d\n",
! encrypt_flag ? "eklogin" : "klogin", ntohs(svc_port));
! } else {
! svc_port = sp->s_port;
}
#else
sp = getservbyname("login", "tcp");
if (sp == 0) {
! svc_port = htons(513);
! fprintf(stderr, "rlogin: %s/tcp: unknown service, trying port %d\n",
! "login", ntohs(svc_port));
! } else {
! svc_port = sp->s_port;
}
#endif /* KERBEROS */
if (cp == (char *) NULL) cp = getenv("TERM");
***************
*** 547,553 ****
#endif /* POSIX_SIGNALS */
if (debug_port)
! sp->s_port = htons(debug_port);
#ifdef KERBEROS
authopts = AP_OPTS_MUTUAL_REQUIRED;
--- 552,558 ----
#endif /* POSIX_SIGNALS */
if (debug_port)
! svc_port = htons(debug_port);
#ifdef KERBEROS
authopts = AP_OPTS_MUTUAL_REQUIRED;
***************
*** 559,565 ****
if (Fflag)
authopts |= OPTS_FORWARDABLE_CREDS;
! status = kcmd(&sock, &host, sp->s_port,
null_local_username ? NULL : pwd->pw_name,
name ? name : pwd->pw_name, term,
0, "host", krb_realm,
--- 564,570 ----
if (Fflag)
authopts |= OPTS_FORWARDABLE_CREDS;
! status = kcmd(&sock, &host, svc_port,
null_local_username ? NULL : pwd->pw_name,
name ? name : pwd->pw_name, term,
0, "host", krb_realm,
***************
*** 587,593 ****
exit(1);
}
#else
! rem = rcmd(&host, sp->s_port,
null_local_username ? NULL : pwd->pw_name,
name ? name : pwd->pw_name, term, 0);
#endif /* KERBEROS */
--- 592,598 ----
exit(1);
}
#else
! rem = rcmd(&host, svc_port,
null_local_username ? NULL : pwd->pw_name,
name ? name : pwd->pw_name, term, 0);
#endif /* KERBEROS */
*** 1.1 1995/05/08 01:26:37
--- krsh.c 1995/05/08 02:53:13
***************
*** 126,131 ****
--- 126,132 ----
fd_set readfrom, ready;
int one = 1;
struct servent *sp;
+ int svc_port;
#ifdef POSIX_SIGNALS
sigset_t omask, igmask;
struct sigaction sa, osa;
***************
*** 312,327 ****
#endif /* KERBEROS */
if (sp == 0) {
#ifdef KERBEROS
! fprintf(stderr, "rsh: kshell/tcp: unknown service\n");
! try_normal(argv0);
#else
! fprintf(stderr, "rsh: shell/tcp: unknown service\n");
#endif /* KERBEROS */
! exit(1);
}
if (debug_port)
! sp->s_port = htons(debug_port);
#ifdef KERBEROS
krb5_init_context(&bsd_context);
--- 313,330 ----
#endif /* KERBEROS */
if (sp == 0) {
#ifdef KERBEROS
! fprintf(stderr, "rsh: kshell/tcp: unknown service, trying port 544\n");
! svc_port = htons(544);
#else
! fprintf(stderr, "rsh: shell/tcp: unknown service, trying port 514\n");
! svc_port = htons(514);
#endif /* KERBEROS */
! } else {
! svc_port = sp->s_port;
}
if (debug_port)
! svc_port = htons(debug_port);
#ifdef KERBEROS
krb5_init_context(&bsd_context);
***************
*** 335,341 ****
if (Fflag)
authopts |= OPTS_FORWARDABLE_CREDS;
! status = kcmd(&rem, &host, sp->s_port,
pwd->pw_name,
user ? user : pwd->pw_name,
args, &rfd2, "host", krb_realm,
--- 338,344 ----
if (Fflag)
authopts |= OPTS_FORWARDABLE_CREDS;
! status = kcmd(&rem, &host, svc_port,
pwd->pw_name,
user ? user : pwd->pw_name,
args, &rfd2, "host", krb_realm,
***************
*** 364,370 ****
exit(1);
}
#else /* !KERBEROS */
! rem = rcmd(&host, sp->s_port, pwd->pw_name,
user ? user : pwd->pw_name, args, &rfd2);
if (rem < 0)
exit(1);
--- 367,373 ----
exit(1);
}
#else /* !KERBEROS */
! rem = rcmd(&host, svc_port, pwd->pw_name,
user ? user : pwd->pw_name, args, &rfd2);
if (rem < 0)
exit(1);