#include "reject.h"
#include "sslproc.h"
-extern char *crypt();
-
#ifndef INADDR_NONE
#define INADDR_NONE ((unsigned int) 0xffffffff)
#endif
{ "RSFNC", CAP_RSFNC },
{ "SAVE", CAP_SAVE },
{ "EUID", CAP_EUID },
+ { "EOPMOD", CAP_EOPMOD },
{0, 0}
};
* Again, if there are no wild cards involved in the server
* name, use the hash lookup
*/
- if(!target_p)
+ if(!target_p && wilds)
{
- if(!wilds)
- {
- if(MyClient(source_p) || !IsDigit(parv[server][0]))
- sendto_one_numeric(source_p, ERR_NOSUCHSERVER,
- form_str(ERR_NOSUCHSERVER),
- parv[server]);
- return (HUNTED_NOSUCH);
- }
- else
+ RB_DLINK_FOREACH(ptr, global_client_list.head)
{
- target_p = NULL;
-
- RB_DLINK_FOREACH(ptr, global_client_list.head)
+ if(match(new, ((struct Client *) (ptr->data))->name))
{
- if(match(new, ((struct Client *) (ptr->data))->name))
- {
- target_p = ptr->data;
- break;
- }
+ target_p = ptr->data;
+ break;
}
}
}
+ if(target_p && !IsRegistered(target_p))
+ target_p = NULL;
+
if(target_p)
{
- if(!IsRegistered(target_p))
- {
- sendto_one_numeric(source_p, ERR_NOSUCHSERVER,
- form_str(ERR_NOSUCHSERVER),
- parv[server]);
- return HUNTED_NOSUCH;
- }
-
if(IsMe(target_p) || MyClient(target_p))
return HUNTED_ISME;
if(ServerConfEncrypted(tmp_p))
{
- if(!strcmp(tmp_p->passwd, crypt(client_p->localClient->passwd,
+ if(!strcmp(tmp_p->passwd, rb_crypt(client_p->localClient->passwd,
tmp_p->passwd)))
{
server_p = tmp_p;
ubuf[1] = '\0';
}
- if(has_id(target_p) && IsCapable(client_p, CAP_EUID))
+ if(IsCapable(client_p, CAP_EUID))
sendto_one(client_p, ":%s EUID %s %d %ld %s %s %s %s %s %s %s :%s",
target_p->servptr->id, target_p->name,
target_p->hopcount + 1,
IsDynSpoof(target_p) ? target_p->orighost : "*",
EmptyString(target_p->user->suser) ? "*" : target_p->user->suser,
target_p->info);
- else if(has_id(target_p))
+ else
sendto_one(client_p, ":%s UID %s %d %ld %s %s %s %s %s :%s",
target_p->servptr->id, target_p->name,
target_p->hopcount + 1,
target_p->username, target_p->host,
IsIPSpoof(target_p) ? "0" : target_p->sockhost,
target_p->id, target_p->info);
- else
- sendto_one(client_p, "NICK %s %d %ld %s %s %s %s :%s",
- target_p->name,
- target_p->hopcount + 1,
- (long) target_p->tsinfo,
- ubuf,
- target_p->username, target_p->host,
- target_p->servptr->name, target_p->info);
-
- if(!has_id(target_p) || !IsCapable(client_p, CAP_EUID))
+
+ if(!IsCapable(client_p, CAP_EUID))
{
if(IsDynSpoof(target_p))
sendto_one(client_p, ":%s ENCAP * REALHOST %s",
set_chcap_usage_counts(client_p);
rb_dlinkAdd(client_p, &client_p->lnode, &me.serv->servers);
- del_unknown_ip(client_p);
rb_dlinkMoveNode(&client_p->localClient->tnode, &unknown_list, &serv_list);
rb_dlinkAddTailAlloc(client_p, &global_serv_list);
free_pre_client(client_p);
- if (!IsCapable(client_p, CAP_ZIP))
- send_pop_queue(client_p);
+ send_pop_queue(client_p);
return 0;
}
}
}
-static void
-serv_connect_ev(void *data)
-{
- struct Client *client_p = data;
- serv_connect_callback(client_p->localClient->F, RB_OK, client_p);
-}
-
static void
serv_connect_ssl_callback(rb_fde_t *F, int status, void *data)
{
struct Client *client_p = data;
rb_fde_t *xF[2];
+ rb_connect_sockaddr(F, (struct sockaddr *)&client_p->localClient->ip, sizeof(client_p->localClient->ip));
if(status != RB_OK)
{
- /* XXX deal with failure */
+ /* Print error message, just like non-SSL. */
+ serv_connect_callback(F, status, data);
return;
}
- rb_connect_sockaddr(F, (struct sockaddr *)&client_p->localClient->ip, sizeof(client_p->localClient->ip));
rb_socketpair(AF_UNIX, SOCK_STREAM, 0, &xF[0], &xF[1], "Outgoing ssld connection");
del_from_cli_fd_hash(client_p);
client_p->localClient->F = xF[0];
client_p->localClient->ssl_ctl = start_ssld_connect(F, xF[1], rb_get_fd(xF[0]));
SetSSL(client_p);
- rb_event_addonce("serv_connect_ev", serv_connect_ev, client_p, 1);
+ serv_connect_callback(client_p->localClient->F, RB_OK, client_p);
}
/*
/* Next, send the initial handshake */
SetHandshake(client_p);
- /* kludge, if we're not using TS6, dont ever send
- * ourselves as being TS6 capable.
- */
if(!EmptyString(server_p->spasswd))
{
sendto_one(client_p, "PASS %s TS %d :%s",