static int c_rescan(struct conn *c,
char **vec,
int nvec) {
- int wait = 0, fresh = 0, n;
+ int flag_wait = 0, flag_fresh = 0, n;
/* Parse flags */
for(n = 0; n < nvec; ++n) {
if(!strcmp(vec[n], "wait"))
- wait = 1; /* wait for rescan to complete */
+ flag_wait = 1; /* wait for rescan to complete */
#if 0
/* Currently disabled because untested (and hard to test). */
else if(!strcmp(vec[n], "fresh"))
- fresh = 1; /* don't piggyback underway rescan */
+ flag_fresh = 1; /* don't piggyback underway rescan */
#endif
else {
sink_writes(ev_writer_sink(c->w), "550 unknown flag\n");
}
/* Report what was requested */
info("S%x rescan by %s (%s %s)", c->tag, c->who,
- wait ? "wait" : "",
- fresh ? "fresh" : "");
+ flag_wait ? "wait" : "",
+ flag_fresh ? "fresh" : "");
if(trackdb_rescan_underway()) {
- if(fresh) {
+ if(flag_fresh) {
/* We want a fresh rescan but there is already one underway. Arrange a
* callback when it completes and then set off a new one. */
- c->rescan_wait = wait;
+ c->rescan_wait = flag_wait;
trackdb_add_rescanned(start_fresh_rescan, c);
- if(wait)
+ if(flag_wait)
return 0;
else {
sink_writes(ev_writer_sink(c->w), "250 rescan queued\n");
}
} else {
/* There's a rescan underway, and it's acceptable to piggyback on it */
- if(wait) {
+ if(flag_wait) {
/* We want to block until completion. */
trackdb_add_rescanned(finished_rescan, c);
return 0;
}
} else {
/* No rescan is underway. fresh is therefore irrelevant. */
- if(wait) {
+ if(flag_wait) {
/* We want to block until completion */
trackdb_rescan(c->ev, 1/*check*/, finished_rescan, c);
return 0;
eventlog_remove(c->lo);
return;
}
+ /* user-* messages are restricted */
+ if(!strncmp(msg, "user-", 5)) {
+ /* They are only sent to admin users */
+ if(!(c->rights & RIGHT_ADMIN))
+ return;
+ /* They are not sent over TCP connections unless remote user-management is
+ * enabled */
+ if(!config->remote_userman && !(c->rights & RIGHT__LOCAL))
+ return;
+ }
sink_printf(ev_writer_sink(c->w), "%"PRIxMAX" %s\n",
(uintmax_t)time(0), msg);
}
sink_writes(ev_writer_sink(c->w), "550 Cannot send a reminder email\n");
return 1;
}
+ /* TODO use email_valid() */
if(!(email = kvp_get(k, "email"))
|| !strchr(email, '@')) {
error(0, "user '%s' has no valid email address", vec[0]);