From e0b27e9c1272fb52af32e60e19fb1cd501ce3706 Mon Sep 17 00:00:00 2001
From: Lukas Braun <lukas.braun@fau.de>
Date: Sat, 18 Mar 2017 21:40:42 +0100
Subject: [PATCH] simpler userlist format

Just lines of "<username> <secret>" and comments beginning with '#'.
---
 goatherd.go | 19 ++++++++++++++++---
 1 file changed, 16 insertions(+), 3 deletions(-)

diff --git a/goatherd.go b/goatherd.go
index 34aa97c..426e177 100644
--- a/goatherd.go
+++ b/goatherd.go
@@ -13,6 +13,7 @@ import (
     "log"
     "net"
     "os"
+    "strings"
     "sync"
     "time"
 
@@ -162,11 +163,22 @@ func read_users_from_file(path string) {
         log.Fatalf("%v: group/other accessible, refusing operation\n", path)
     }
 
-    var users_want map[string]string
     f, err := os.Open(path)
     err_fatal(err)
-    err = json.NewDecoder(f).Decode(&users_want)
-    if err != nil { log.Fatalf("JSON decode %v: %v", path, err) }
+    lines := bufio.NewScanner(f)
+
+    users_want := make(map[string]string)
+    for lines.Scan() {
+        l := strings.TrimSpace(lines.Text())
+        if len(l) == 0 || l[0] == '#' {
+            continue
+        }
+        tokens := strings.SplitN(l, " ", 2)
+        if len(tokens) != 2 {
+            log.Fatalf("unexpected input in userlist: %v\n", l)
+        }
+        users_want[strings.TrimSpace(tokens[0])] = strings.TrimSpace(tokens[1])
+    }
 
     // update and delete existing users
     rows, err := db.Query("SELECT name, secret FROM users")
@@ -192,6 +204,7 @@ func read_users_from_file(path string) {
         } else {
             log.Printf("remove %v\n", have.name)
             _, err = db.Exec("DELETE FROM users WHERE name = $1", have.name)
+            err_fatal(err)
         }
     }
 
-- 
GitLab