chiark / gitweb /
Shun time(), since on Linux it is not monotonic with gettimeofday().
[disorder] / lib / rights.c
index 5a9935bac1f102715305e77de4833073f650b633..05a33427f21aca442dcc274491163351bf1cc227 100644 (file)
@@ -2,29 +2,25 @@
  * This file is part of DisOrder
  * Copyright (C) 2007 Richard Kettlewell
  *
- * This program is free software; you can redistribute it and/or modify
+ * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
+ * the Free Software Foundation, either version 3 of the License, or
  * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- *
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
  * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 /** @file lib/rights.c
  * @brief User rights
  */
 
-#include <config.h>
-#include "types.h"
+#include "common.h"
 
-#include <string.h>
 
 #include "mem.h"
 #include "log.h"
@@ -75,41 +71,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) {
@@ -125,7 +101,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;