Make s_auth.c compile.
This commit is contained in:
parent
1087485cf2
commit
c6f49c9a63
2 changed files with 42 additions and 36 deletions
|
@ -45,7 +45,7 @@ struct AuthRequest
|
||||||
struct Client *client; /* pointer to client struct for request */
|
struct Client *client; /* pointer to client struct for request */
|
||||||
struct DNSQuery dns_query; /* DNS Query */
|
struct DNSQuery dns_query; /* DNS Query */
|
||||||
unsigned int flags; /* current state of request */
|
unsigned int flags; /* current state of request */
|
||||||
int fd; /* file descriptor for auth queries */
|
rb_fde_t *F; /* file descriptor for auth queries */
|
||||||
time_t timeout; /* time when query expires */
|
time_t timeout; /* time when query expires */
|
||||||
#ifdef IPV6
|
#ifdef IPV6
|
||||||
int ip6_int;
|
int ip6_int;
|
||||||
|
|
76
src/s_auth.c
76
src/s_auth.c
|
@ -103,7 +103,7 @@ init_auth(void)
|
||||||
/* This hook takes a struct Client for its argument */
|
/* This hook takes a struct Client for its argument */
|
||||||
memset(&auth_poll_list, 0, sizeof(auth_poll_list));
|
memset(&auth_poll_list, 0, sizeof(auth_poll_list));
|
||||||
rb_event_addish("timeout_auth_queries_event", timeout_auth_queries_event, NULL, 1);
|
rb_event_addish("timeout_auth_queries_event", timeout_auth_queries_event, NULL, 1);
|
||||||
auth_heap = rb_bh_create(sizeof(struct AuthRequest), LCLIENT_HEAP_SIZE);
|
auth_heap = rb_bh_create(sizeof(struct AuthRequest), LCLIENT_HEAP_SIZE, "auth_heap");
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -114,7 +114,7 @@ make_auth_request(struct Client *client)
|
||||||
{
|
{
|
||||||
struct AuthRequest *request = rb_bh_alloc(auth_heap);
|
struct AuthRequest *request = rb_bh_alloc(auth_heap);
|
||||||
client->localClient->auth_request = request;
|
client->localClient->auth_request = request;
|
||||||
request->fd = -1;
|
request->F = NULL;
|
||||||
request->client = client;
|
request->client = client;
|
||||||
request->timeout = rb_current_time() + ConfigFileEntry.connect_timeout;
|
request->timeout = rb_current_time() + ConfigFileEntry.connect_timeout;
|
||||||
return request;
|
return request;
|
||||||
|
@ -145,8 +145,6 @@ release_auth_client(struct AuthRequest *auth)
|
||||||
client->localClient->auth_request = NULL;
|
client->localClient->auth_request = NULL;
|
||||||
rb_dlinkDelete(&auth->node, &auth_poll_list);
|
rb_dlinkDelete(&auth->node, &auth_poll_list);
|
||||||
free_auth_request(auth);
|
free_auth_request(auth);
|
||||||
if(client->localClient->F->fd > highest_fd)
|
|
||||||
highest_fd = client->localClient->F->fd;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* When a client has auth'ed, we want to start reading what it sends
|
* When a client has auth'ed, we want to start reading what it sends
|
||||||
|
@ -154,9 +152,8 @@ release_auth_client(struct AuthRequest *auth)
|
||||||
* -- adrian
|
* -- adrian
|
||||||
*/
|
*/
|
||||||
client->localClient->allow_read = MAX_FLOOD;
|
client->localClient->allow_read = MAX_FLOOD;
|
||||||
rb_setflush(client->localClient->F->fd, 1000, flood_recalc, client);
|
|
||||||
rb_dlinkAddTail(client, &client->node, &global_client_list);
|
rb_dlinkAddTail(client, &client->node, &global_client_list);
|
||||||
read_packet(client->localClient->F->fd, client);
|
read_packet(client->localClient->F, client);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -245,8 +242,8 @@ auth_error(struct AuthRequest *auth)
|
||||||
{
|
{
|
||||||
++ServerStats->is_abad;
|
++ServerStats->is_abad;
|
||||||
|
|
||||||
rb_close(auth->fd);
|
rb_close(auth->F);
|
||||||
auth->fd = -1;
|
auth->F = NULL;
|
||||||
|
|
||||||
ClearAuth(auth);
|
ClearAuth(auth);
|
||||||
sendheader(auth->client, REPORT_FAIL_ID);
|
sendheader(auth->client, REPORT_FAIL_ID);
|
||||||
|
@ -265,16 +262,16 @@ auth_error(struct AuthRequest *auth)
|
||||||
static int
|
static int
|
||||||
start_auth_query(struct AuthRequest *auth)
|
start_auth_query(struct AuthRequest *auth)
|
||||||
{
|
{
|
||||||
struct rb_sockaddr_storage localaddr;
|
struct rb_sockaddr_storage localaddr, destaddr;
|
||||||
socklen_t locallen = sizeof(struct rb_sockaddr_storage);
|
socklen_t locallen = sizeof(struct rb_sockaddr_storage);
|
||||||
int fd;
|
rb_fde_t *F;
|
||||||
int family;
|
int family;
|
||||||
|
|
||||||
if(IsAnyDead(auth->client))
|
if(IsAnyDead(auth->client))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
family = auth->client->localClient->ip.ss_family;
|
family = auth->client->localClient->ip.ss_family;
|
||||||
if((fd = rb_socket(family, SOCK_STREAM, 0, "ident")) == -1)
|
if((F = rb_socket(family, SOCK_STREAM, 0, "ident")) == NULL)
|
||||||
{
|
{
|
||||||
report_error("creating auth stream socket %s:%s",
|
report_error("creating auth stream socket %s:%s",
|
||||||
get_client_name(auth->client, SHOW_IP),
|
get_client_name(auth->client, SHOW_IP),
|
||||||
|
@ -286,12 +283,12 @@ start_auth_query(struct AuthRequest *auth)
|
||||||
/*
|
/*
|
||||||
* TBD: this is a pointless arbitrary limit .. we either have a socket or not. -nenolod
|
* TBD: this is a pointless arbitrary limit .. we either have a socket or not. -nenolod
|
||||||
*/
|
*/
|
||||||
if((rb_get_maxconnections() - 10) < fd)
|
if((maxconnections - 10) < rb_get_fd(F))
|
||||||
{
|
{
|
||||||
sendto_realops_snomask(SNO_GENERAL, L_ALL,
|
sendto_realops_snomask(SNO_GENERAL, L_ALL,
|
||||||
"Can't allocate fd for auth on %s",
|
"Can't allocate fd for auth on %s",
|
||||||
get_client_name(auth->client, SHOW_IP));
|
get_client_name(auth->client, SHOW_IP));
|
||||||
rb_close(fd);
|
rb_close(F);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -305,10 +302,10 @@ start_auth_query(struct AuthRequest *auth)
|
||||||
* and machines with multiple IP addresses are common now
|
* and machines with multiple IP addresses are common now
|
||||||
*/
|
*/
|
||||||
memset(&localaddr, 0, locallen);
|
memset(&localaddr, 0, locallen);
|
||||||
getsockname(auth->client->localClient->F->fd,
|
getsockname(rb_get_fd(auth->client->localClient->F),
|
||||||
(struct sockaddr *) &localaddr, &locallen);
|
(struct sockaddr *) &localaddr, &locallen);
|
||||||
|
|
||||||
mangle_mapped_sockaddr((struct sockaddr *)&localaddr);
|
/* XXX mangle_mapped_sockaddr((struct sockaddr *)&localaddr); */
|
||||||
#ifdef IPV6
|
#ifdef IPV6
|
||||||
if(localaddr.ss_family == AF_INET6)
|
if(localaddr.ss_family == AF_INET6)
|
||||||
{
|
{
|
||||||
|
@ -316,14 +313,23 @@ start_auth_query(struct AuthRequest *auth)
|
||||||
} else
|
} else
|
||||||
#endif
|
#endif
|
||||||
((struct sockaddr_in *)&localaddr)->sin_port = 0;
|
((struct sockaddr_in *)&localaddr)->sin_port = 0;
|
||||||
|
|
||||||
|
destaddr = auth->client->localClient->ip;
|
||||||
|
#ifdef IPV6
|
||||||
|
if(localaddr.ss_family == AF_INET6)
|
||||||
|
{
|
||||||
|
((struct sockaddr_in6 *)&localaddr)->sin6_port = 113;
|
||||||
|
} else
|
||||||
|
#endif
|
||||||
|
((struct sockaddr_in *)&localaddr)->sin_port = 113;
|
||||||
|
|
||||||
auth->fd = fd;
|
auth->F = F;
|
||||||
SetAuthConnect(auth);
|
SetAuthConnect(auth);
|
||||||
|
|
||||||
rb_connect_tcp(fd, auth->client->sockhost, 113,
|
rb_connect_tcp(F, (struct sockaddr *)&destaddr,
|
||||||
(struct sockaddr *) &localaddr, GET_SS_LEN(localaddr),
|
(struct sockaddr *) &localaddr, GET_SS_LEN(&localaddr),
|
||||||
auth_connect_callback, auth,
|
auth_connect_callback, auth,
|
||||||
localaddr.ss_family, GlobalSetOptions.ident_timeout);
|
GlobalSetOptions.ident_timeout);
|
||||||
return 1; /* We suceed here for now */
|
return 1; /* We suceed here for now */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -435,8 +441,8 @@ timeout_auth_queries_event(void *notused)
|
||||||
|
|
||||||
if(auth->timeout < rb_current_time())
|
if(auth->timeout < rb_current_time())
|
||||||
{
|
{
|
||||||
if(auth->fd >= 0)
|
if(auth->F != NULL)
|
||||||
rb_close(auth->fd);
|
rb_close(auth->F);
|
||||||
|
|
||||||
if(IsDoingAuth(auth))
|
if(IsDoingAuth(auth))
|
||||||
{
|
{
|
||||||
|
@ -470,7 +476,7 @@ timeout_auth_queries_event(void *notused)
|
||||||
* problems arise. -avalon
|
* problems arise. -avalon
|
||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
auth_connect_callback(int fd, int error, void *data)
|
auth_connect_callback(rb_fde_t *F, int error, void *data)
|
||||||
{
|
{
|
||||||
struct AuthRequest *auth = data;
|
struct AuthRequest *auth = data;
|
||||||
struct sockaddr_in us;
|
struct sockaddr_in us;
|
||||||
|
@ -480,7 +486,7 @@ auth_connect_callback(int fd, int error, void *data)
|
||||||
socklen_t tlen = sizeof(struct sockaddr_in);
|
socklen_t tlen = sizeof(struct sockaddr_in);
|
||||||
|
|
||||||
/* Check the error */
|
/* Check the error */
|
||||||
if(error != COMM_OK)
|
if(error != RB_OK)
|
||||||
{
|
{
|
||||||
/* We had an error during connection :( */
|
/* We had an error during connection :( */
|
||||||
auth_error(auth);
|
auth_error(auth);
|
||||||
|
@ -488,9 +494,9 @@ auth_connect_callback(int fd, int error, void *data)
|
||||||
}
|
}
|
||||||
|
|
||||||
if(getsockname
|
if(getsockname
|
||||||
(auth->client->localClient->F->fd, (struct sockaddr *) &us,
|
(rb_get_fd(auth->client->localClient->F), (struct sockaddr *) &us,
|
||||||
(socklen_t *) & ulen)
|
(socklen_t *) & ulen)
|
||||||
|| getpeername(auth->client->localClient->F->fd,
|
|| getpeername(rb_get_fd(auth->client->localClient->F),
|
||||||
(struct sockaddr *) &them, (socklen_t *) & tlen))
|
(struct sockaddr *) &them, (socklen_t *) & tlen))
|
||||||
{
|
{
|
||||||
ilog(L_IOERROR, "auth get{sock,peer}name error for %s:%m",
|
ilog(L_IOERROR, "auth get{sock,peer}name error for %s:%m",
|
||||||
|
@ -501,14 +507,14 @@ auth_connect_callback(int fd, int error, void *data)
|
||||||
rb_snprintf(authbuf, sizeof(authbuf), "%u , %u\r\n",
|
rb_snprintf(authbuf, sizeof(authbuf), "%u , %u\r\n",
|
||||||
(unsigned int) ntohs(them.sin_port), (unsigned int) ntohs(us.sin_port));
|
(unsigned int) ntohs(them.sin_port), (unsigned int) ntohs(us.sin_port));
|
||||||
|
|
||||||
if(write(auth->fd, authbuf, strlen(authbuf)) == -1)
|
if(write(rb_get_fd(auth->F), authbuf, strlen(authbuf)) == -1)
|
||||||
{
|
{
|
||||||
auth_error(auth);
|
auth_error(auth);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
ClearAuthConnect(auth);
|
ClearAuthConnect(auth);
|
||||||
SetAuthPending(auth);
|
SetAuthPending(auth);
|
||||||
read_auth_reply(auth->fd, auth);
|
read_auth_reply(auth->F, auth);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -521,7 +527,7 @@ auth_connect_callback(int fd, int error, void *data)
|
||||||
#define AUTH_BUFSIZ 128
|
#define AUTH_BUFSIZ 128
|
||||||
|
|
||||||
static void
|
static void
|
||||||
read_auth_reply(int fd, void *data)
|
read_auth_reply(rb_fde_t *F, void *data)
|
||||||
{
|
{
|
||||||
struct AuthRequest *auth = data;
|
struct AuthRequest *auth = data;
|
||||||
char *s = NULL;
|
char *s = NULL;
|
||||||
|
@ -530,11 +536,11 @@ read_auth_reply(int fd, void *data)
|
||||||
int count;
|
int count;
|
||||||
char buf[AUTH_BUFSIZ + 1]; /* buffer to read auth reply into */
|
char buf[AUTH_BUFSIZ + 1]; /* buffer to read auth reply into */
|
||||||
|
|
||||||
len = read(auth->fd, buf, AUTH_BUFSIZ);
|
len = read(rb_get_fd(F), buf, AUTH_BUFSIZ);
|
||||||
|
|
||||||
if(len < 0 && ignoreErrno(errno))
|
if(len < 0 && rb_ignore_errno(errno))
|
||||||
{
|
{
|
||||||
rb_setselect(fd, FDLIST_IDLECLIENT, COMM_SELECT_READ, read_auth_reply, auth, 0);
|
rb_setselect(F, RB_SELECT_READ, read_auth_reply, auth);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -565,8 +571,8 @@ read_auth_reply(int fd, void *data)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
rb_close(auth->fd);
|
rb_close(auth->F);
|
||||||
auth->fd = -1;
|
auth->F = NULL;
|
||||||
ClearAuth(auth);
|
ClearAuth(auth);
|
||||||
|
|
||||||
if(s == NULL)
|
if(s == NULL)
|
||||||
|
@ -606,8 +612,8 @@ delete_auth_queries(struct Client *target_p)
|
||||||
if(IsDNSPending(auth))
|
if(IsDNSPending(auth))
|
||||||
delete_resolver_queries(&auth->dns_query);
|
delete_resolver_queries(&auth->dns_query);
|
||||||
|
|
||||||
if(auth->fd >= 0)
|
if(auth->F != NULL)
|
||||||
rb_close(auth->fd);
|
rb_close(auth->F);
|
||||||
|
|
||||||
rb_dlinkDelete(&auth->node, &auth_poll_list);
|
rb_dlinkDelete(&auth->node, &auth_poll_list);
|
||||||
free_auth_request(auth);
|
free_auth_request(auth);
|
||||||
|
|
Loading…
Reference in a new issue