[1176] in Kerberos-V5-bugs

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

krb5b4pl3: KDC should have command-line argument for port number

daemon@ATHENA.MIT.EDU (Jonathan I. Kamens)
Tue Mar 14 16:45:54 1995

From: "Jonathan I. Kamens" <jik@cam.ov.com>
Date: Tue, 14 Mar 1995 16:48:49 -0500
To: krb5-bugs@MIT.EDU

This patch modifies the KDC so that the primary port number can be
specified on the command line.  This is useful both for debugging and
for running a KDC without requiring modifications to /etc/services on
the KDC host.

--- kdc/main.c	1995/03/09 15:35:19	1.3
+++ kdc/main.c	1995/03/09 15:37:47	1.4
@@ -52,6 +52,7 @@
 #include "kdc5_err.h"
 
 static int nofork = 0;
+short primary_port = 0;
 
 static void
 kdc_com_err_proc(whoami, code, format, pvar)
@@ -131,7 +132,7 @@
 usage(name)
 char *name;
 {
-    fprintf(stderr, "usage: %s [-d dbpathname] [-r dbrealmname] [-R replaycachename ]\n\t[-m] [-k masterkeytype] [-M masterkeyname] [-n]\n", name);
+    fprintf(stderr, "usage: %s [-d dbpathname] [-r dbrealmname] [-R replaycachename ]\n\t[-m] [-k masterkeytype] [-M masterkeyname] [-n] [-p port]\n", name);
     return;
 }
 
@@ -153,7 +154,7 @@
 
     extern char *optarg;
 
-    while ((c = getopt(argc, argv, "r:d:mM:nk:R:")) != EOF) {
+    while ((c = getopt(argc, argv, "r:d:mM:np:k:R:")) != EOF) {
 	switch(c) {
 	case 'r':			/* realm name for db */
 	    db_realm = optarg;
@@ -169,6 +170,9 @@
 	    break;
 	case 'n':
 	    nofork++;			/* don't detach from terminal */
+	    break;
+	case 'p':
+	    primary_port = atoi(optarg);
 	    break;
 	case 'k':			/* keytype for master key */
 	    master_keyblock.keytype = atoi(optarg);
*** kdc/network.c	1995/03/09 15:46:41	1.1
--- kdc/network.c	1995/03/09 15:47:21	1.2
***************
*** 49,54 ****
--- 49,55 ----
  extern char *krb5_kdc_udp_portname;
  extern char *krb5_kdc_sec_udp_portname;
  extern int errno;
+ extern short primary_port;
  
  static int udp_port_fd = -1;
  static int sec_udp_port_fd = -1;
***************
*** 65,83 ****
  
      FD_ZERO(&select_fds);
      select_nfsd = 0;
!     sp = getservbyname(krb5_kdc_udp_portname, "udp");
!     if (!sp) {
! 	com_err(prog, 0, "%s/udp service unknown\n",
! 		krb5_kdc_udp_portname);
! 	return KDC5_NOPORT;
      }
      if ((udp_port_fd = socket(PF_INET, SOCK_DGRAM, 0)) == -1) {
  	retval = errno;
  	com_err(prog, 0, "Cannot create server socket");
  	return retval;
      }
-     memset((char *)&sin, 0, sizeof(sin));
-     sin.sin_port = sp->s_port;
      if (bind(udp_port_fd, (struct sockaddr *)&sin, sizeof(sin)) == -1) {
  	retval = errno;
  	com_err(prog, 0, "Cannot bind server socket");
--- 66,88 ----
  
      FD_ZERO(&select_fds);
      select_nfsd = 0;
!     memset((char *)&sin, 0, sizeof(sin));
!     if (primary_port)
! 	sin.sin_port = htons(primary_port);
!     else {
! 	sp = getservbyname(krb5_kdc_udp_portname, "udp");
! 	if (!sp) {
! 	    com_err(prog, 0, "%s/udp service unknown\n",
! 		    krb5_kdc_udp_portname);
! 	    return KDC5_NOPORT;
! 	}
! 	sin.sin_port = sp->s_port;
      }
      if ((udp_port_fd = socket(PF_INET, SOCK_DGRAM, 0)) == -1) {
  	retval = errno;
  	com_err(prog, 0, "Cannot create server socket");
  	return retval;
      }
      if (bind(udp_port_fd, (struct sockaddr *)&sin, sizeof(sin)) == -1) {
  	retval = errno;
  	com_err(prog, 0, "Cannot bind server socket");

Jonathan Kamens  |  OpenVision Technologies, Inc.  |   jik@cam.ov.com

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