summaryrefslogtreecommitdiffstats
path: root/src/kdc/network.c
diff options
context:
space:
mode:
authorTheodore Tso <tytso@mit.edu>1995-01-26 04:21:45 +0000
committerTheodore Tso <tytso@mit.edu>1995-01-26 04:21:45 +0000
commit64a370c19fb420c84a112effb23925875a6d201f (patch)
treea19dd245239923dd1e611c092ea3ad528f0bc6b4 /src/kdc/network.c
parent165f067c4adb444247271cb690214e33f6c09d3b (diff)
downloadkrb5-64a370c19fb420c84a112effb23925875a6d201f.tar.gz
krb5-64a370c19fb420c84a112effb23925875a6d201f.tar.xz
krb5-64a370c19fb420c84a112effb23925875a6d201f.zip
Allow the primary port that the KDC listens on be configurable on the
command line. If the appropriate /etc/services entries aren't found, use compiled in defaults. git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@4851 dc483132-0cff-0310-8789-dd5450dbe970
Diffstat (limited to 'src/kdc/network.c')
-rw-r--r--src/kdc/network.c31
1 files changed, 18 insertions, 13 deletions
diff --git a/src/kdc/network.c b/src/kdc/network.c
index ed5f2820f..35b350166 100644
--- a/src/kdc/network.c
+++ b/src/kdc/network.c
@@ -49,6 +49,7 @@
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,22 +66,26 @@ const char *prog;
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;
+ 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)
+ sin.sin_port = htons(KRB5_DEFAULT_PORT);
+ else
+ 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;
+ 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");
+ com_err(prog, 0, "Cannot bind server socket to fd %d", udp_port_fd);
return retval;
}
FD_SET(udp_port_fd, &select_fds);
@@ -94,7 +99,7 @@ const char *prog;
return 0; /* No secondary listening port defined */
sp = getservbyname(krb5_kdc_sec_udp_portname, "udp");
- if (!sp) {
+ if (!sp && sin.sin_port != htons(KRB5_DEFAULT_SEC_PORT)) {
com_err(prog, 0, "%s/udp service unknown\n",
krb5_kdc_sec_udp_portname);
return 0; /* Don't give an error if we can't */
@@ -105,7 +110,7 @@ const char *prog;
return 0; /* Don't give an error we we can't do this */
}
memset((char *)&sin, 0, sizeof(sin));
- sin.sin_port = sp->s_port;
+ sin.sin_port = sp ? sp->s_port : htons(KRB5_DEFAULT_SEC_PORT);
if (bind(sec_udp_port_fd, (struct sockaddr *)&sin, sizeof(sin)) == -1) {
com_err(prog, errno, "while trying to bind secondary server socket");
return 0; /* Don't give an error if we can't do this */