[1176] in Kerberos-V5-bugs
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