diff options
| author | Theodore Tso <tytso@mit.edu> | 1995-01-26 04:21:45 +0000 |
|---|---|---|
| committer | Theodore Tso <tytso@mit.edu> | 1995-01-26 04:21:45 +0000 |
| commit | 64a370c19fb420c84a112effb23925875a6d201f (patch) | |
| tree | a19dd245239923dd1e611c092ea3ad528f0bc6b4 /src/kdc/network.c | |
| parent | 165f067c4adb444247271cb690214e33f6c09d3b (diff) | |
| download | krb5-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.c | 31 |
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 */ |
