From baebeee98f439bed42ba395a132984adccc8ffd7 Mon Sep 17 00:00:00 2001
From: Matthias Schiffer <mschiffer@universe-factory.net>
Date: Mon, 14 Jul 2014 22:09:43 +0200
Subject: [PATCH] gluon-luci-admin: support disabling password login again

---
 .../lib/lua/luci/model/cbi/admin/remote.lua   | 43 ++++++++++++-------
 .../lib/lua/luci/view/admin/expertmode.htm    | 12 +++---
 2 files changed, 34 insertions(+), 21 deletions(-)

diff --git a/package/gluon-luci-admin/files/usr/lib/lua/luci/model/cbi/admin/remote.lua b/package/gluon-luci-admin/files/usr/lib/lua/luci/model/cbi/admin/remote.lua
index a3ce7f62c..8617c439f 100644
--- a/package/gluon-luci-admin/files/usr/lib/lua/luci/model/cbi/admin/remote.lua
+++ b/package/gluon-luci-admin/files/usr/lib/lua/luci/model/cbi/admin/remote.lua
@@ -16,16 +16,14 @@ $Id$
 
 local fs = require "nixio.fs"
 
-local m, s, pw1, pw2
-
-m = Map("system", "Remotezugriff")
+local m = Map("system", "SSH-Keys")
 m.submit = "Speichern"
 m.reset = "Zurücksetzen"
 m.pageaction = false
 m.template = "admin/expertmode"
 
 if fs.access("/etc/config/dropbear") then
-  s = m:section(TypedSection, "_keys", nil,
+  local s = m:section(TypedSection, "_dummy1", nil,
     "Hier hast du die Möglichkeit SSH-Keys (einen pro Zeile) zu hinterlegen:")
 
   s.addremove = false
@@ -57,37 +55,52 @@ if fs.access("/etc/config/dropbear") then
   end
 end
 
-s = m:section(TypedSection, "_pass", nil,
-  "Alternativ kannst du auch ein Passwort setzen. Wähle bitte ein sicheres Passwort, das du nirgendswo anders verwendest.")
+local m2 = Map("system", "Passwort")
+m2.submit = "Speichern"
+m2.reset = false
+m2.pageaction = false
+m2.template = "admin/expertmode"
+
+local s = m2:section(TypedSection, "_dummy2", nil,
+[[Alternativ kannst du auch ein Passwort setzen. Wähle bitte ein sicheres Passwort, das du nirgendwo anders verwendest.<br /><br />
+Beim Setzen eines leeren Passworts wird der Login per Passwort gesperrt (dies ist die Standard-Einstellung).]])
 
 s.addremove = false
 s.anonymous = true
 
-pw1 = s:option(Value, "pw1", "Passwort")
+local pw1 = s:option(Value, "pw1", "Passwort")
 pw1.password = true
 
-pw2 = s:option(Value, "pw2", "Wiederholung")
+local pw2 = s:option(Value, "pw2", "Wiederholung")
 pw2.password = true
 
 function s.cfgsections()
   return { "_pass" }
 end
 
-function m.on_commit(map)
+function m2.on_commit(map)
   local v1 = pw1:formvalue("_pass")
   local v2 = pw2:formvalue("_pass")
 
-  if v1 and v2 and #v1 > 0 and #v2 > 0 then
+  if v1 and v2 then
     if v1 == v2 then
-      if luci.sys.user.setpasswd(luci.dispatcher.context.authuser, v1) == 0 then
-        m.message = "Passwort geändert."
+      if #v1 > 0 then
+	if luci.sys.user.setpasswd(luci.dispatcher.context.authuser, v1) == 0 then
+          m2.message = "Passwort geändert."
+	else
+          m2.errmessage = "Das Passwort konnte nicht geändert werden."
+	end
       else
-        m.errmessage = "Das Passwort konnte nicht geändert werden."
+        -- We don't check the return code here as the error 'password for root is already locked' is normal...
+        os.execute('passwd -l root >/dev/null')
+        m2.message = "Passwort gelöscht."
       end
     else
-      m.errmessage = "Die beiden Passwörter stimmen nicht überein."
+      m2.errmessage = "Die beiden Passwörter stimmen nicht überein."
     end
   end
 end
 
-return m
+local c = Compound(m, m2)
+c.pageaction = false
+return c
diff --git a/package/gluon-luci-admin/files/usr/lib/lua/luci/view/admin/expertmode.htm b/package/gluon-luci-admin/files/usr/lib/lua/luci/view/admin/expertmode.htm
index 2907ecb3a..53947f3c3 100644
--- a/package/gluon-luci-admin/files/usr/lib/lua/luci/view/admin/expertmode.htm
+++ b/package/gluon-luci-admin/files/usr/lib/lua/luci/view/admin/expertmode.htm
@@ -1,9 +1,3 @@
-<%- if self.message then %>
-	<p class="message success"><%=self.message%></p>
-<%- end %>
-<%- if self.errmessage then %>
-	<p class="message error"><%=self.errmessage%></p>
-<%- end %>
 <% if not self.embedded then %>
 <form method="post" enctype="multipart/form-data" action="<%=REQUEST_URI%>">
 	<div>
@@ -13,6 +7,12 @@
 <% end %>
 	<div class="cbi-map" id="cbi-<%=self.config%>">
 		<% if self.title and #self.title > 0 then %><h2><a id="content" name="content"><%=self.title%></a></h2><% end %>
+		<%- if self.message then %>
+			<p class="message success"><%=self.message%></p>
+		<%- end %>
+		<%- if self.errmessage then %>
+			<p class="message error"><%=self.errmessage%></p>
+		<%- end %>
 		<% if self.description and #self.description > 0 then %><div class="cbi-map-descr"><%=self.description%></div><% end %>
 		<% self:render_children() %>
 	</div>
-- 
GitLab