No AF_UNIX on Windows and no SIGPIPE and SIGXCPU
This commit is contained in:

committed by
Love Hornquist Astrand

parent
246e60891c
commit
d84119813e
@@ -45,12 +45,13 @@ static int time_before_gone;
|
||||
|
||||
const char *master_hostname;
|
||||
|
||||
static int
|
||||
static SOCKET
|
||||
make_signal_socket (krb5_context context)
|
||||
{
|
||||
#ifndef NO_UNIX_SOCKETS
|
||||
struct sockaddr_un addr;
|
||||
const char *fn;
|
||||
int fd;
|
||||
SOCKET fd;
|
||||
|
||||
fn = kadm5_log_signal_socket(context);
|
||||
|
||||
@@ -64,18 +65,32 @@ make_signal_socket (krb5_context context)
|
||||
if (bind (fd, (struct sockaddr *)&addr, sizeof(addr)) < 0)
|
||||
krb5_err (context, 1, errno, "bind %s", addr.sun_path);
|
||||
return fd;
|
||||
#else
|
||||
struct addrinfo *ai = NULL;
|
||||
SOCKET fd;
|
||||
|
||||
kadm5_log_signal_socket_info(context, 1, &ai);
|
||||
|
||||
fd = socket(ai->ai_family, ai->ai_socktype, ai->ai_protocol);
|
||||
if (IS_BAD_SOCKET(fd))
|
||||
krb5_err (context, 1, SOCK_ERRNO, "socket AF=%d", ai->ai_family);
|
||||
|
||||
if (IS_SOCKET_ERROR( bind (fd, ai->ai_addr, ai->ai_addrlen) ))
|
||||
krb5_err (context, 1, SOCK_ERRNO, "bind");
|
||||
return fd;
|
||||
#endif
|
||||
}
|
||||
|
||||
static int
|
||||
static SOCKET
|
||||
make_listen_socket (krb5_context context, const char *port_str)
|
||||
{
|
||||
int fd;
|
||||
SOCKET fd;
|
||||
int one = 1;
|
||||
struct sockaddr_in addr;
|
||||
|
||||
fd = socket (AF_INET, SOCK_STREAM, 0);
|
||||
if (fd < 0)
|
||||
krb5_err (context, 1, errno, "socket AF_INET");
|
||||
if (IS_BAD_SOCKET(fd))
|
||||
krb5_err (context, 1, SOCK_ERRNO, "socket AF_INET");
|
||||
setsockopt (fd, SOL_SOCKET, SO_REUSEADDR, (void *)&one, sizeof(one));
|
||||
memset (&addr, 0, sizeof(addr));
|
||||
addr.sin_family = AF_INET;
|
||||
@@ -105,7 +120,7 @@ make_listen_socket (krb5_context context, const char *port_str)
|
||||
}
|
||||
|
||||
struct slave {
|
||||
int fd;
|
||||
SOCKET fd;
|
||||
struct sockaddr_in addr;
|
||||
char *name;
|
||||
krb5_auth_context ac;
|
||||
@@ -180,9 +195,9 @@ slave_dead(krb5_context context, slave *s)
|
||||
{
|
||||
krb5_warnx(context, "slave %s dead", s->name);
|
||||
|
||||
if (s->fd >= 0) {
|
||||
close (s->fd);
|
||||
s->fd = -1;
|
||||
if (!IS_BAD_SOCKET(s->fd)) {
|
||||
closesocket (s->fd);
|
||||
s->fd = INVALID_SOCKET;
|
||||
}
|
||||
s->flags |= SLAVE_F_DEAD;
|
||||
slave_seen(s);
|
||||
@@ -193,8 +208,8 @@ remove_slave (krb5_context context, slave *s, slave **root)
|
||||
{
|
||||
slave **p;
|
||||
|
||||
if (s->fd >= 0)
|
||||
close (s->fd);
|
||||
if (!IS_BAD_SOCKET(s->fd))
|
||||
closesocket (s->fd);
|
||||
if (s->name)
|
||||
free (s->name);
|
||||
if (s->ac)
|
||||
@@ -209,7 +224,7 @@ remove_slave (krb5_context context, slave *s, slave **root)
|
||||
}
|
||||
|
||||
static void
|
||||
add_slave (krb5_context context, krb5_keytab keytab, slave **root, int fd)
|
||||
add_slave (krb5_context context, krb5_keytab keytab, slave **root, SOCKET fd)
|
||||
{
|
||||
krb5_principal server;
|
||||
krb5_error_code ret;
|
||||
@@ -228,7 +243,7 @@ add_slave (krb5_context context, krb5_keytab keytab, slave **root, int fd)
|
||||
|
||||
addr_len = sizeof(s->addr);
|
||||
s->fd = accept (fd, (struct sockaddr *)&s->addr, &addr_len);
|
||||
if (s->fd < 0) {
|
||||
if (IS_BAD_SOCKET(s->fd)) {
|
||||
krb5_warn (context, errno, "accept");
|
||||
goto error;
|
||||
}
|
||||
@@ -294,7 +309,7 @@ error:
|
||||
|
||||
struct prop_context {
|
||||
krb5_auth_context auth_context;
|
||||
int fd;
|
||||
SOCKET fd;
|
||||
};
|
||||
|
||||
static int
|
||||
@@ -744,7 +759,7 @@ main(int argc, char **argv)
|
||||
void *kadm_handle;
|
||||
kadm5_server_context *server_context;
|
||||
kadm5_config_params conf;
|
||||
int signal_fd, listen_fd;
|
||||
SOCKET signal_fd, listen_fd;
|
||||
int log_fd;
|
||||
slave *slaves = NULL;
|
||||
uint32_t current_version = 0, old_version = 0;
|
||||
@@ -880,7 +895,11 @@ main(int argc, char **argv)
|
||||
}
|
||||
|
||||
if (ret && FD_ISSET(signal_fd, &readset)) {
|
||||
#ifndef NO_UNIX_SOCKETS
|
||||
struct sockaddr_un peer_addr;
|
||||
#else
|
||||
struct sockaddr_storage peer_addr;
|
||||
#endif
|
||||
socklen_t peer_len = sizeof(peer_addr);
|
||||
|
||||
if(recvfrom(signal_fd, (void *)&vers, sizeof(vers), 0,
|
||||
@@ -931,8 +950,11 @@ main(int argc, char **argv)
|
||||
write_stats(context, slaves, current_version);
|
||||
}
|
||||
|
||||
if(exit_flag == SIGXCPU)
|
||||
if (0) ;
|
||||
#ifndef NO_SIGXCPU
|
||||
else if(exit_flag == SIGXCPU)
|
||||
krb5_warnx(context, "%s CPU time limit exceeded", getprogname());
|
||||
#endif
|
||||
else if(exit_flag == SIGINT || exit_flag == SIGTERM)
|
||||
krb5_warnx(context, "%s terminated", getprogname());
|
||||
else
|
||||
|
Reference in New Issue
Block a user