From 25575475bf9a601ad7259680928337564511c47f Mon Sep 17 00:00:00 2001 From: Alexander Vdolainen Date: Thu, 18 Mar 2021 17:25:17 +0200 Subject: [PATCH] ejabberd auth message function; --- src/eport.c | 52 +++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 51 insertions(+), 1 deletion(-) diff --git a/src/eport.c b/src/eport.c index cfe507a..e8ba603 100644 --- a/src/eport.c +++ b/src/eport.c @@ -23,6 +23,7 @@ #include #include #include +#include #include @@ -77,5 +78,54 @@ ssize_t eport_write(FILE *stream, char *buffer, size_t buffer_size) int eport_ejabberd_msgread(char *buffer, size_t buffer_size, struct ejabber_msg *m) { - return 0; + char *orig_buffer = buffer; + unsigned long hash = 5381; + int c, t = 0; + + if(!buffer || buffer_size <= 0) { + ieinval: + errno = EINVAL; + return -1; + } + if(!m) goto ieinval; + + /* calc hash for first message word till the end or till the ':' */ + while(((c = *buffer++) != '\0') || (*buffer == ':')) + hash = ((hash << 5) + hash) + c; + + switch(hash) { + case AUTH_HASH: m->aev = EJA_AUTH; break; + case ISUSER_HASH: m->aev = EJA_ISUSER; break; + case SETPASS_HASH: m->aev = EJA_SETPASS; break; + case TRYREGISTER_HASH: m->aev = EJA_TRYREGISTER; break; + case REMOVEUSER_HASH: m->aev = EJA_REMOVEUSER; break; + case REMOVEUSER3_HASH: m->aev = EJA_REMOVEUSER3; break; + default: + errno = EINVAL; + return -1; + } + /* initialize other things in message */ + m->msg_data = orig_buffer; + m->user = m->domain = m->password = NULL; + /* shift a pointer */ + c = *buffer++; orig_buffer = buffer; + + while((buffer = strchr(buffer, ':')) != NULL) { + switch(t) { + case 0: m->user = orig_buffer; break; + case 1: m->domain = orig_buffer; break; + default: + errno = EINVAL; + return -1; + } + *buffer = '\0'; c = *buffer++; + orig_buffer = buffer; t++; + } + if(*orig_buffer != '\0') { + if(t > 1) m->password = orig_buffer; + else m->domain = orig_buffer; + t++; + } + + return t; }