chiark / gitweb /
disorder setup-guest + docs + tests
[disorder] / lib / rights.c
index 8d84743f8b8c1ad8821f0c16fcfc669241a94566..f0dc8924d4dff4bbec69db2d2e0912293d06dfba 100644 (file)
@@ -53,7 +53,8 @@ static const struct {
   { RIGHT_REGISTER, "register" },
   { RIGHT_USERINFO, "userinfo" },
   { RIGHT_PREFS, "prefs" },
-  { RIGHT_GLOBAL_PREFS, "global prefs" }
+  { RIGHT_GLOBAL_PREFS, "global prefs" },
+  { RIGHT_PAUSE, "pause" }
 };
 #define NRIGHTS (sizeof rights_names / sizeof *rights_names)
 
@@ -74,41 +75,21 @@ char *rights_string(rights_type r) {
   return d->vec;
 }
 
-/** @brief Compute default rights for a new user
- * @return Default rights value
- */
-rights_type default_rights(void) {
-  /* TODO get rights from config */
-  rights_type r = RIGHTS__MASK & ~(RIGHT_ADMIN|RIGHT_REGISTER
-                                   |RIGHT_MOVE__MASK
-                                   |RIGHT_SCRATCH__MASK
-                                   |RIGHT_REMOVE__MASK);
-  if(config->restrictions & RESTRICT_SCRATCH)
-    r |= RIGHT_SCRATCH_MINE|RIGHT_SCRATCH_RANDOM;
-  else
-    r |= RIGHT_SCRATCH_ANY;
-  if(!(config->restrictions & RESTRICT_MOVE))
-    r |= RIGHT_MOVE_ANY;
-  if(config->restrictions & RESTRICT_REMOVE)
-    r |= RIGHT_REMOVE_MINE;
-  else
-    r |= RIGHT_REMOVE_ANY;
-  return r;
-}
-
 /** @brief Parse a rights list
  * @param s Rights list in string form
  * @param rp Where to store rights, or NULL to just validate
+ * @param report Nonzero to log errors
  * @return 0 on success, non-0 if @p s is not valid
  */
-int parse_rights(const char *s, rights_type *rp) {
+int parse_rights(const char *s, rights_type *rp, int report) {
   rights_type r = 0;
   const char *t;
   size_t n, l;
 
   if(!*s) {
     /* You can't have no rights */
-    error(0, "empty rights string");
+    if(report)
+      error(0, "empty rights string");
     return -1;
   }
   while(*s) {
@@ -124,7 +105,8 @@ int parse_rights(const char *s, rights_type *rp) {
           && !strncmp(rights_names[n].name, s, l))
          break;
       if(n >= NRIGHTS) {
-       error(0, "unknown user right '%.*s'", (int)l, s);
+       if(report)
+          error(0, "unknown user right '%.*s'", (int)l, s);
        return -1;
       }
       r |= rights_names[n].bit;