chiark
/
gitweb
/
~mdw
/
disorder
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Additional testing for addr.c and a consequent bug fix.
[disorder]
/
server
/
server.c
diff --git
a/server/server.c
b/server/server.c
index 79ac7b114d13d0f7ddf9410a2079e24598bda4cd..cbeb0abae1107037e0d2e0e132024b13d8a493d5 100644
(file)
--- a/
server/server.c
+++ b/
server/server.c
@@
-1096,6
+1096,10
@@
static int c_adduser(struct conn *c,
int nvec) {
const char *rights;
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)) {
if(nvec > 2) {
rights = vec[2];
if(parse_rights(vec[2], 0, 1)) {
@@
-1117,6
+1121,10
@@
static int c_deluser(struct conn *c,
int attribute((unused)) nvec) {
struct conn *d;
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;
if(trackdb_deluser(vec[0])) {
sink_writes(ev_writer_sink(c->w), "550 Cannot delete user\n");
return 1;
@@
-1134,6
+1142,10
@@
static int c_edituser(struct conn *c,
int attribute((unused)) nvec) {
struct conn *d;
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)
/* RIGHT_ADMIN can do anything; otherwise you can only set your own email
* address and password. */
if((c->rights & RIGHT_ADMIN)
@@
-1172,8
+1184,12
@@
static int c_userinfo(struct conn *c,
struct kvp *k;
const char *value;
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
/* RIGHT_ADMIN allows anything; otherwise you can only get your own email
- * address and righ
st
list. */
+ * address and righ
ts
list. */
if((c->rights & RIGHT_ADMIN)
|| (!strcmp(c->who, vec[0])
&& (!strcmp(vec[1], "email")
if((c->rights & RIGHT_ADMIN)
|| (!strcmp(c->who, vec[0])
&& (!strcmp(vec[1], "email")