[1204] in Kerberos-V5-bugs
krb5b4pl3: slave/kpropd.c: use REUSEADDR when debugging
daemon@ATHENA.MIT.EDU (Jonathan I. Kamens)
Sun Mar 19 20:54:57 1995
From: "Jonathan I. Kamens" <jik@cam.ov.com>
Date: Sun, 19 Mar 1995 20:58:01 -0500
To: krb5-bugs@MIT.EDU
When debugging is enabled and kpropd can't bind to the port, it should
try binding again after setting SO_REUSEADDR on the socket. This
avoids problems when debugging modifications to kprop/kpropd or its
setup, when kpropd is run twice quickly in succession.
Patch follows.
--- slave/kpropd.c 1995/03/13 21:13:33 1.1
+++ slave/kpropd.c 1995/03/13 21:16:54 1.2
@@ -126,6 +126,7 @@
struct sockaddr_in sin, frominet;
struct servent *sp;
int finet, fromlen, s;
+ int ret;
finet = socket(AF_INET, SOCK_STREAM, 0);
if (finet < 0) {
@@ -140,10 +141,22 @@
memset((char *) &sin,0, sizeof(sin));
sin.sin_family = AF_INET;
sin.sin_port = sp->s_port;
- if (bind(finet, (struct sockaddr *) &sin, sizeof(sin)) < 0) {
+ if ((ret = bind(finet, (struct sockaddr *) &sin, sizeof(sin))) < 0) {
+ if (debug) {
+ int on = 1;
+ fprintf(stderr,
+ "%s: attempting to rebind socket with SO_REUSEADDR\n",
+ progname);
+ if (setsockopt(finet, SOL_SOCKET, SO_REUSEADDR,
+ (char *)&on, sizeof(on)) < 0)
+ com_err(progname, errno, "in setsockopt(SO_REUSEADDR)");
+ ret = bind(finet, (struct sockaddr *) &sin, sizeof(sin));
+ }
+ if (ret < 0) {
perror("bind");
com_err(progname, errno, "while binding listener socket");
exit(1);
+ }
}
if (!debug)
daemon(1, 0);