There is now a new user management window. From here you can add and
remove users or modify their settings.
+Relatedly, the server will only allow remote user management if you set
+remote_userman to 'yes'.
+
* Changes up to version 3.0.2
Builds --without-server should work again.
The minimum number of seconds that must elapse between password reminders.
The default is 600, i.e. 10 minutes.
.TP
+.B remote_userman yes\fR|\fBno
+User management over TCP connection is only allowed if this is set to
+\fByes\fR. By default it is set to \fBno\fR.
+.TP
.B replay_min \fISECONDS\fR
The minimum number of seconds that must elapse after a track has been played
before it can be picked at random. The default is 8 hours. If this is set to
{ C(replay_min), &type_integer, validate_non_negative },
{ C(refresh), &type_integer, validate_positive },
{ C(reminder_interval), &type_integer, validate_positive },
+ { C(remote_userman), &type_boolean, validate_any },
{ C2(restrict, restrictions), &type_restrict, validate_any },
{ C(sample_format), &type_sample_format, validate_sample_format },
{ C(scratch), &type_string_accum, validate_isreg },
/** @brief Minimum interval between password reminder emails */
long reminder_interval;
+
+ /** @brief Whether to allow user management over TCP */
+ int remote_userman;
/* derived values: */
int nparts; /* number of distinct name parts */
int nvec) {
const char *rights;
+ if(!config->remote_userman && !(c->rights & RIGHT__LOCAL)) {
+ sink_writes(ev_writer_sink(c->w), "550 Remote user management is disabled\n");
+ return 1;
+ }
if(nvec > 2) {
rights = vec[2];
if(parse_rights(vec[2], 0, 1)) {
int attribute((unused)) nvec) {
struct conn *d;
+ if(!config->remote_userman && !(c->rights & RIGHT__LOCAL)) {
+ sink_writes(ev_writer_sink(c->w), "550 Remote user management is disabled\n");
+ return 1;
+ }
if(trackdb_deluser(vec[0])) {
sink_writes(ev_writer_sink(c->w), "550 Cannot delete user\n");
return 1;
int attribute((unused)) nvec) {
struct conn *d;
+ if(!config->remote_userman && !(c->rights & RIGHT__LOCAL)) {
+ sink_writes(ev_writer_sink(c->w), "550 Remote user management is disabled\n");
+ return 1;
+ }
/* RIGHT_ADMIN can do anything; otherwise you can only set your own email
* address and password. */
if((c->rights & RIGHT_ADMIN)
struct kvp *k;
const char *value;
+ if(!config->remote_userman && !(c->rights & RIGHT__LOCAL)) {
+ sink_writes(ev_writer_sink(c->w), "550 Remote user management is disabled\n");
+ return 1;
+ }
/* RIGHT_ADMIN allows anything; otherwise you can only get your own email
* address and rights list. */
if((c->rights & RIGHT_ADMIN)