version 1.12, 2001/07/17 02:13:29 |
version 1.13, 2001/09/04 23:35:59 |
|
|
long authopts; |
long authopts; |
{ |
{ |
int s, timo = 1, pid; |
int s, timo = 1, pid; |
int oldmask; |
sigset_t mask, oldmask; |
struct sockaddr_in sin, from; |
struct sockaddr_in sin, from; |
char c; |
char c; |
int lport = IPPORT_RESERVED - 1; |
int lport = IPPORT_RESERVED - 1; |
|
|
if (realm == NULL || realm[0] == '\0') |
if (realm == NULL || realm[0] == '\0') |
realm = krb_realmofhost(host_save); |
realm = krb_realmofhost(host_save); |
|
|
oldmask = sigblock(sigmask(SIGURG)); |
sigemptyset(&mask); |
|
sigaddset(&mask, SIGURG); |
|
sigprocmask(SIG_BLOCK, &mask, &oldmask); |
for (;;) { |
for (;;) { |
s = getport(&lport); |
s = getport(&lport); |
if (s < 0) { |
if (s < 0) { |
|
|
"kcmd(socket): All ports in use\n"); |
"kcmd(socket): All ports in use\n"); |
else |
else |
perror("kcmd: socket"); |
perror("kcmd: socket"); |
sigsetmask(oldmask); |
sigprocmask(SIG_SETMASK, &oldmask, NULL); |
return (-1); |
return (-1); |
} |
} |
fcntl(s, F_SETOWN, pid); |
fcntl(s, F_SETOWN, pid); |
|
|
} |
} |
if (errno != ECONNREFUSED) |
if (errno != ECONNREFUSED) |
perror(hp->h_name); |
perror(hp->h_name); |
sigsetmask(oldmask); |
sigprocmask(SIG_SETMASK, &oldmask, NULL); |
return (-1); |
return (-1); |
} |
} |
if (fd2p == 0) { |
if (fd2p == 0) { |
|
|
status = -1; |
status = -1; |
goto bad2; |
goto bad2; |
} |
} |
sigsetmask(oldmask); |
sigprocmask(SIG_SETMASK, &oldmask, NULL); |
*sock = s; |
*sock = s; |
return (KSUCCESS); |
return (KSUCCESS); |
bad2: |
bad2: |
|
|
(void) close(*fd2p); |
(void) close(*fd2p); |
bad: |
bad: |
(void) close(s); |
(void) close(s); |
sigsetmask(oldmask); |
sigprocmask(SIG_SETMASK, &oldmask, NULL); |
return (status); |
return (status); |
} |
} |
|
|