[1365] in Kerberos-V5-bugs

home help back first fref pref prev next nref lref last post

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);


home help back first fref pref prev next nref lref last post