X-Git-Url: https://jfr.im/git/irc/evilnet/x3.git/blobdiff_plain/1117fc5a8fda9e591ea33b418fadbd4f220fb834..9b2d838a3f6c15287a36caed1c8e10ff8d74613d:/src/proto-p10.c?ds=sidebyside diff --git a/src/proto-p10.c b/src/proto-p10.c index 40b03a6..b75ee87 100644 --- a/src/proto-p10.c +++ b/src/proto-p10.c @@ -425,9 +425,9 @@ irc_user(struct userNode *user) } void -irc_account(struct userNode *user, const char *stamp) +irc_account(struct userNode *user, const char *stamp, time_t timestamp) { - putsock("%s " P10_ACCOUNT " %s %s", self->numeric, user->numeric, stamp); + putsock("%s " P10_ACCOUNT " %s R %s %lu", self->numeric, user->numeric, stamp, timestamp); } void @@ -1042,13 +1042,36 @@ static CMD_FUNC(cmd_nick) static CMD_FUNC(cmd_account) { struct userNode *user; + struct server *server; + struct handle_info *hi; - if ((argc < 3) || !origin || !GetServerH(origin)) + if ((argc < 3) || !origin || !(server = GetServerH(origin))) return 0; /* Origin must be server. */ + + /* This next line appears to tremple origin.. why? */ user = GetUserN(argv[1]); if (!user) return 1; /* A QUIT probably passed the ACCOUNT. */ - call_account_func(user, argv[2]); + + if(!strcmp(argv[2],"C")) + { + if((hi = loc_auth(argv[4], argv[5]))) + { + /* Return a AC A */ + putsock("%s " P10_ACCOUNT " %s A %s %lu", self->numeric, server->numeric , argv[3], hi->registered); + + } + else + { + /* Return a AC D */ + putsock("%s " P10_ACCOUNT " %s D %s", self->numeric, server->numeric , argv[3]); + } + return 1; + } + else if(!strcmp(argv[2],"R")) + call_account_func(user, argv[3]); + else + call_account_func(user, argv[2]); /* For backward compatability */ return 1; }