Make s_auth.c compile.

This commit is contained in:
Jilles Tjoelker 2008-04-02 21:14:34 +02:00
parent 1087485cf2
commit c6f49c9a63
2 changed files with 42 additions and 36 deletions

View file

@ -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;

View file

@ -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);