chiark / gitweb /
disobedience: grey out user management if it won't work.
authorRichard Kettlewell <rjk@terraraq.org.uk>
Sun, 14 Aug 2011 17:08:06 +0000 (18:08 +0100)
committerRichard Kettlewell <rjk@terraraq.org.uk>
Sun, 14 Aug 2011 17:08:06 +0000 (18:08 +0100)
This already worked for users without the 'admin' right but failed on
remote connections if the server had remote_userman set to 'no' (which
is the default).  The result was pretty ugly, the user management
window opened but would repeatedly cause protocol error popups.

The implementation depends on the server change in
b60ceb3caecce2c86c484e6173fb1428b71d456a.

It will still go wrong if remote_userman is changed during the
server's lifetime, presumably a fairly rare event.

disobedience/menu.c

index 435aeb4175d252a158da46696000db17b8a2f84d..272242f1b125fd5d529489f5112441f87cff52fd 100644 (file)
@@ -215,11 +215,23 @@ void users_set_sensitive(int sensitive) {
   gtk_widget_set_sensitive(w, sensitive);
 }
 
+static void menu_check_userman(void attribute((unused)) *v,
+                               const char *err,
+                               const char attribute((unused)) *value) {
+  if(err && !strncmp(err, "510", 3))
+    users_set_sensitive(FALSE);
+  else
+    users_set_sensitive(TRUE);
+}
+
 /** @brief Called when our rights change */
 static void menu_rights_changed(const char attribute((unused)) *event,
                                 void attribute((unused)) *eventdata,
                                 void attribute((unused)) *callbackdata) {
-  users_set_sensitive(!!(last_rights & RIGHT_ADMIN));
+  if(last_rights & RIGHT_ADMIN)
+    disorder_eclient_userinfo(client, menu_check_userman, "", "email", 0);
+  else
+    users_set_sensitive(FALSE);
 }
 
 /** @brief Create the menu bar widget */