+ o Make it possible to confirm subscription even though it's a closedlist.
+ It makes sense to be able to confirm a request submitted by the sysadmin
+ on the commandline
+ o Add 'subonlyget' tunable which makes +get-N only work for subscribers
1.2.8
o Don't closedir() before done (GOOD spotting Christian Laursen)
o Make sure the resend of queue files will not loop indefinately
If this file exists, then retrieving old posts with +get-N is disabled
+ · subonlyget (boolean)
+
+ If this file exists, then retrieving old posts with +get-N is only
+ possible for subscribers. The above mentioned 'noget' have precedence.
+
· verp (normal)
Enable VERP support. Anything added in this variable will be appended the
#include "memory.h"
#include "log_oper.h"
#include "ctrlvalues.h"
+#include "subscriberfuncs.h"
enum ctrl_e {
CTRL_SUBSCRIBE_DIGEST,
const char *subswitch;
size_t len;
struct stat stbuf;
- int closedlist, nosubconfirm, tmpfd, noget, i;
+ int closedlist, nosubconfirm, tmpfd, noget, i, subonlyget = 0;
size_t cmdlen;
unsigned int ctrl;
struct strlist *owners;
/* listname+subconf-digest-COOKIE@domain.tld */
case CTRL_CONFSUB_DIGEST:
unlink(mailname);
- if (closedlist)
- exit(EXIT_SUCCESS);
conffilename = concatstr(3, listdir, "/subconf/", param);
myfree(param);
if((tmpfd = open(conffilename, O_RDONLY)) < 0) {
/* listname+subconf-nomail-COOKIE@domain.tld */
case CTRL_CONFSUB_NOMAIL:
unlink(mailname);
- if (closedlist)
- exit(EXIT_SUCCESS);
conffilename = concatstr(3, listdir, "/subconf/", param);
myfree(param);
if((tmpfd = open(conffilename, O_RDONLY)) < 0) {
/* listname+subconf-COOKIE@domain.tld */
case CTRL_CONFSUB:
unlink(mailname);
- if (closedlist)
- exit(EXIT_SUCCESS);
conffilename = concatstr(3, listdir, "/subconf/", param);
myfree(param);
if((tmpfd = open(conffilename, O_RDONLY)) < 0) {
noget = statctrl(listdir, "noget");
if(noget)
exit(EXIT_SUCCESS);
+ subonlyget = statctrl(listdir, "subonlyget");
+ if(subonlyget)
+ if(is_subbed(listdir, fromemails->emaillist[0]) != 0)
+ exit(EXIT_SUCCESS);
/* sanity check--is it all digits? */
for(c = param; *c != '\0'; c++) {
if(!isdigit((int)*c))