X-Git-Url: http://git.pk910.de/?a=blobdiff_plain;f=src%2Fircd_auth.c;h=1645892042e434b3965ea2fc330a40a7d0297e60;hb=b708125495aacd544ee33d252368814acae5adb9;hp=0478f9b25b3ee319666d031908f237c055000678;hpb=285018f265af0f32438a5de357905963daaaa86f;p=NextIRCd.git diff --git a/src/ircd_auth.c b/src/ircd_auth.c index 0478f9b..1645892 100644 --- a/src/ircd_auth.c +++ b/src/ircd_auth.c @@ -14,6 +14,10 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ +#include + +#include "ircd_auth.h" +#include "ircd_sock.h" #include "struct_auth.h" #include "struct_connection.h" #include "ircd_client.h" @@ -21,29 +25,34 @@ #include "IOHandler/IODNSLookup.h" #include "version.h" +static void auth_start_dnsreverse(struct Auth *auth); static IODNS_CALLBACK(auth_dns_callback); +static void auth_free(struct Auth *auth); static struct Auth *authlist_first = NULL; static struct Auth *authlist_last = NULL; -struct Auth *auth_new(struct Connection *conn) { +struct Auth *auth_new(struct Connection *conn) { struct Auth *auth = calloc(1, sizeof(*auth)); - client_printf(conn, "NOTICE AUTH :*** NextIRCd v%d.%d (%s)", VERSION_NUMBER, patchlevel, revision); + socket_printf(conn, "NOTICE AUTH :*** NextIRCd v%d.%d (%s)", VERSION_NUMBER, patchlevel, revision); auth->conn = conn; + conn->data.auth = auth; time(&auth->startup_time); auth->prev = authlist_last; auth->next = NULL; if(!authlist_last) - authlist_first = auth + authlist_first = auth; authlist_last = auth; + auth_start_dnsreverse(auth); + return auth; } -void auth_start_dnsreverse(struct Auth *auth) { - client_printf(auth->conn, "NOTICE AUTH :*** Looking up your hostname"); +static void auth_start_dnsreverse(struct Auth *auth) { + socket_printf(auth->conn, "NOTICE AUTH :*** Looking up your hostname"); struct IODNSAddress *sockaddr; sockaddr = iosocket_get_remote_addr(auth->conn->socket); @@ -58,19 +67,15 @@ static IODNS_CALLBACK(auth_dns_callback) { struct Auth *auth = event->query->data; struct IODNSResult *dnsresult = event->result; + auth->dnslookup = NULL; + if(event->type == IODNSEVENT_SUCCESS) { strncpy(auth->host, dnsresult->result.host, HOSTLEN); - client_printf(auth->conn, "NOTICE AUTH :*** Found your hostname (%s)", auth->host); + socket_printf(auth->conn, "NOTICE AUTH :*** Found your hostname (%s)", auth->host); } else { struct IODNSAddress *sockaddr = iosocket_get_remote_addr(auth->conn->socket); - if(sockaddr->addresslen == sizeof(struct sockaddr_in)) { - //ipv4 - inet_ntop(AF_INET, (void *)(&((struct sockaddr_in *)sockaddr->address)->sin_addr), auth->host, HOSTLEN); - } else { - //ipv6 - inet_ntop(AF_INET6, (void *)(&((struct sockaddr_in6 *)sockaddr->address)->sin6_addr), auth->host, HOSTLEN); - } - client_printf(auth->conn, "NOTICE AUTH :*** Couldn't look up your hostname. Using your IP instead (%s)", auth->host); + iodns_print_address(sockaddr, auth->conn->socket->ipv6, auth->host, HOSTLEN); + socket_printf(auth->conn, "NOTICE AUTH :*** Couldn't look up your hostname. Using your IP instead (%s)", auth->host); } if(dnsresult) iodns_free_result(dnsresult); @@ -80,5 +85,30 @@ static IODNS_CALLBACK(auth_dns_callback) { void auth_try_finish(struct Auth *auth) { + if(auth->server) { + + } else { + if(!auth->have_nick || !auth->have_user) + return; + if(!auth->sent_ping) { + auth->sent_ping = 1; + socket_printf(auth->conn, ":AUTH PING :%d", auth->startup_time); + } else if(auth->have_pong && auth->have_dnsresolv) { + struct Client *client = client_connected(auth); + auth->conn->authed = 1; + auth->conn->data.client = client; + auth_free(auth); + } + } +} + +void auth_abort(struct Auth *auth) { + +} +static void auth_free(struct Auth *auth) { + if(auth->dnslookup) { + + } + }