#include <jsm.h>
mreturn mod_auth_digest_yum(mapi m, void *arg)
{
spool s;
char *sid;
char *digest;
char *mydigest;
log_debug("mod_auth_digest","checking");
if(jpacket_subtype(m->packet) == JPACKET__GET)
{
if(m->user->pass != NULL)
xmlnode_insert_tag(m->packet->iq,"digest");
return M_PASS;
}
if((digest = xmlnode_get_tag_data(m->packet->iq,"digest")) == NULL)
return M_PASS;
sid = xmlnode_get_attrib(xmlnode_get_tag(m->packet->iq,"digest"), "sid");
log_debug("mod_auth_digest", "Got SID: %s", sid);
s = spool_new(m->packet->p);
spooler(s,sid,m->user->pass,s);
mydigest = shahash(spool_print(s));
log_debug("mod_auth_digest","comparing %s %s",digest,mydigest);
if(m->user->pass == NULL || sid == NULL || mydigest == NULL)
jutil_error(m->packet->x, TERROR_NOTIMPL);
else if(j_strcasecmp(digest, mydigest) != 0)
jutil_error(m->packet->x, TERROR_AUTH);
else
jutil_iqresult(m->packet->x);
return M_HANDLED;
}
int mod_auth_digest_reset(mapi m, jid id, xmlnode pass)
{
log_debug("mod_auth_digest","resetting password");
xmlnode_put_attrib(pass,"xmlns",NS_AUTH);
return xdb_set(m->si->xc, id, NS_AUTH, pass);
}
mreturn mod_auth_digest_reg(mapi m, void *arg)
{
jid id;
xmlnode pass;
if(jpacket_subtype(m->packet) == JPACKET__GET)
{
xmlnode_insert_tag(m->packet->iq,"password");
return M_PASS;
}
if(jpacket_subtype(m->packet) != JPACKET__SET || (pass = xmlnode_get_tag(m->packet->iq,"password")) == NULL) return M_PASS;
if(m->user == NULL)
id = jid_user(m->packet->to);
else
id = m->user->id;
if(mod_auth_digest_reset(m,id,pass))
{
jutil_error(m->packet->x,(terror){500,"Password Storage Failed"});
return M_HANDLED;
}
return M_PASS;
}
mreturn mod_auth_digest_server(mapi m, void *arg)
{
mreturn ret;
if(m->packet->type != JPACKET_IQ) return M_IGNORE;
if(m->user == NULL) return M_PASS;
if(!NSCHECK(m->packet->iq,NS_REGISTER)) return M_PASS;
ret = mod_auth_digest_reg(m,arg);
if(ret == M_HANDLED)
js_deliver(m->si, jpacket_reset(m->packet));
return ret;
}
void mod_auth_digest(jsmi si)
{
log_warn(NULL,"mod_auth_digest in jsm_apple.so is diabled");
#if 0
log_debug("mod_auth_digest","init");
js_mapi_register(si,e_AUTH, mod_auth_digest_yum, NULL);
js_mapi_register(si,e_SERVER, mod_auth_digest_server, NULL);
if (js_config(si,"register") != NULL) js_mapi_register(si, e_REGISTER, mod_auth_digest_reg, NULL);
#endif
}