/*
* This module handles self-service subscription/unsubscription to mail lists.
*
- * Copyright (c) 2002-2012 by the citadel.org team
+ * Copyright (c) 2002-2016 by the citadel.org team
*
* This program is open source software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 3.
*
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
*/
#include "sysdep.h"
#include "msgbase.h"
#include "internet_addressing.h"
#include "clientsocket.h"
-#include "file_ops.h"
#include "ctdl_module.h"
/*
void listsub_generate_token(char *buf) {
char sourcebuf[SIZ];
static int seq = 0;
+ size_t len;
/* Theo, please sit down and shut up. This key doesn't have to be
* tinfoil-hat secure, it just needs to be reasonably unguessable
* and unique.
*/
- sprintf(sourcebuf, "%lx",
+ len = sprintf(sourcebuf, "%lx",
(long) (++seq + getpid() + time(NULL))
);
/* Convert it to base64 so it looks cool */
- CtdlEncodeBase64(buf, sourcebuf, strlen(sourcebuf), 0);
+ len = CtdlEncodeBase64(buf, sourcebuf, len, 0);
+ if (buf[len - 1] == '\n') {
+ buf[len - 1] = '\0';
+ }
}
const RoomNetCfg ActiveSubscribers[] = {listrecp, digestrecp};
RoomMailAddress = qrbuf.QRname;
OneRNCfg = CtdlGetNetCfgForRoom(qrbuf.QRnumber);
- if (OneRNCfg!=NULL) {
+ if (OneRNCfg != NULL) {
found_sub = CountThisSubscriber(OneRNCfg, *email);
if (StrLength(OneRNCfg->Sender) > 0) {
EmailSender = RoomMailAddress = ChrPtr(OneRNCfg->Sender);
ChrPtr(*email),
RoomMailAddress);
+ FreeRoomNetworkStruct(&OneRNCfg);
end_critical_section(S_NETCONFIGS);
return;
}
"\n"
"--__ctdlmultipart__--\n"), 0);
+ SaveRoomNetConfigFile(OneRNCfg, qrbuf.QRnumber);
+ FreeRoomNetworkStruct(&OneRNCfg);
end_critical_section(S_NETCONFIGS);
pcf_req = SmashStrBuf(&cf_req);
}
if (found_sub == 0) {
- cprintf("%d '%s' is not subscribed to '%s'.\n",
- ERROR + NO_SUCH_USER,
- ChrPtr(*email),
- qrbuf.QRname);
-
+ cprintf("%d '%s' is not subscribed to '%s'.\n", ERROR + NO_SUCH_USER, ChrPtr(*email), qrbuf.QRname);
+ FreeRoomNetworkStruct(&OneRNCfg);
end_critical_section(S_NETCONFIGS);
return;
}
"\n"
"--__ctdlmultipart__--\n"), 0);
+ SaveRoomNetConfigFile(OneRNCfg, qrbuf.QRnumber);
+ FreeRoomNetworkStruct(&OneRNCfg);
end_critical_section(S_NETCONFIGS);
pcf_req = SmashStrBuf(&cf_req);
else
{
/* whipe duplicate subscribe entry... */
- OneRNCfg->changed = 1;
- SaveChangedConfigs();
errmsg = "already subscribed";
}
}
errmsg = "no subscriber found for this unsubscription request";
}
DeleteGenericCfgLine(NULL/*TODO*/, &ConfirmLine);
- OneRNCfg->changed = 1;
- SaveChangedConfigs();
}
+ SaveRoomNetConfigFile(OneRNCfg, qrbuf.QRnumber);
+ FreeRoomNetworkStruct(&OneRNCfg);
end_critical_section(S_NETCONFIGS);
/*