diff --git a/fetchmail-controller.lua b/fetchmail-controller.lua
index b70712e5a0b85ea05660750263c2efee9477d94a..9a7ff33f12c3e04b2176dae02f0af84176dcd925 100644
--- a/fetchmail-controller.lua
+++ b/fetchmail-controller.lua
@@ -25,7 +25,7 @@ function listentries(self)
end
function editentry(self)
- return controllerfunctions.handle_form(self, function() return self.model.readentry(self.clientdata.entry) end, self.model.updateentry, self.clientdata, "Save", "Edit Entry", "Entry Saved")
+ return controllerfunctions.handle_form(self, function() return self.model.readentry(self.clientdata.entry, self.clientdata.method, self.clientdata.remotemailbox, self.clientdata.localdomain) end, self.model.updateentry, self.clientdata, "Save", "Edit Entry", "Entry Saved")
end
function createentry(self)
@@ -33,5 +33,5 @@ function createentry(self)
end
function deleteentry(self)
- return self:redirect_to_referrer(self.model.deleteentry(self.clientdata.entry))
+ return self:redirect_to_referrer(self.model.deleteentry(self.clientdata.entry, self.clientdata.method, self.clientdata.remotemailbox, self.clientdata.localdomain))
end
diff --git a/fetchmail-editentry-html.lsp b/fetchmail-editentry-html.lsp
index 8917bc1f68457ae42b10244f59ef2fa4b6781f88..42539182eec92f508bc7124ee3b17fae3d01a74c 100644
--- a/fetchmail-editentry-html.lsp
+++ b/fetchmail-editentry-html.lsp
@@ -7,6 +7,10 @@ require("viewfunctions")
form.action = page_info.script .. page_info.prefix .. page_info.controller .. "/" .. page_info.action
if page_info.action == "editentry" then
form.value.remotehost.contenteditable = false
+ form.value.method.type = "text"
+ form.value.method.contenteditable = false
+ form.value.remotemailbox.contenteditable = false
+ form.value.localdomain.contenteditable = false
end
local order = { "remotehost", "enabled", "method", "remotemailbox", "remotepassword", "ssl", "localhost", "localmailbox", "localdomain" }
displayform(form, order)
diff --git a/fetchmail-listentries-html.lsp b/fetchmail-listentries-html.lsp
index 982ce9d3eceda4dbd501a20c69e96a3554477bfa..9ddcf64b3709585dd4e8b32c299cb89afd2bd29e 100644
--- a/fetchmail-listentries-html.lsp
+++ b/fetchmail-listentries-html.lsp
@@ -18,17 +18,19 @@ io.write("")
-
+
+
<% for i,entry in ipairs(data.value) do %>
- <% io.write(html.link{value = "editentry?entry=" .. entry.entry.."&redir="..page_info.orig_action, label="Edit " }) %>
- <% io.write(html.link{value = "deleteentry?entry=" .. entry.entry, label="Delete " }) %>
+ <% io.write(html.link{value = "editentry?entry=" .. entry.entry.."&method="..entry.method.."&remotemailbox="..entry.remotemailbox.."&localdomain="..entry.localdomain.."&redir="..page_info.orig_action, label="Edit " }) %>
+ <% io.write(html.link{value = "deleteentry?entry=" .. entry.entry.."&method="..entry.method.."&remotemailbox="..entry.remotemailbox.."&localdomain="..entry.localdomain, label="Delete " }) %>
|
<%= entry.entry %> |
<%= entry.enabled %> |
- <%= entry.method %> |
+ <%= entry.method %> |
+ <% if entry.localdomain and entry.localdomain ~= "" then io.write(entry.localdomain) else io.write(entry.remotemailbox) end %> |
<% end %>
diff --git a/fetchmail-model.lua b/fetchmail-model.lua
index 7b0e3df64d396b8d43a61dae87a6f6730e092c66..b92e1e7ca6bb9ba8b5d1a9073a4656c4e7f695b6 100644
--- a/fetchmail-model.lua
+++ b/fetchmail-model.lua
@@ -46,12 +46,27 @@ local function parseconfigfile(file)
return retval
end
-local function findentryline(entryname)
+local function findentryline(entryname, method, remotemailbox, localdomain)
if entryname and entryname ~= "" then
config = config or parseconfigfile(fs.read_file(configfile))
for i,entry in ipairs(config or {}) do
if (entry[1] == "server" or entry[1] == "poll" or entry[1] == "skip") and entry[2] == entryname then
- return entry
+ local reverseentry = {}
+ for i,word in ipairs(entry) do reverseentry[word] = i end
+ -- For pop3domain, check the localdomain
+ if method == "pop3domain" and (reverseentry["local"] or reverseentry["localdomains"]) then
+ if entry[(reverseentry["local"] or reverseentry["localdomains"])+1] == localdomain then
+ return entry
+ end
+ -- For etrn, no further check
+ elseif method == "etrn" and reverseentry["etrn"] then
+ return entry
+ -- For pop3 and imap, check the username
+ elseif method == "pop3" or method == "imap" then
+ if reverseentry["username"] and entry[reverseentry["username"]+1] == remotemailbox then
+ return entry
+ end
+ end
end
end
end
@@ -392,20 +407,28 @@ function readentries()
local reverseentry = {}
for i,word in ipairs(entry) do reverseentry[word] = i end
local method = "error"
+ local localdomain = ""
if reverseentry["local"] or reverseentry["localdomains"] then
method = "pop3domain"
+ if entry[(reverseentry["local"] or reverseentry["localdomains"])+1] then
+ localdomain = entry[(reverseentry["local"] or reverseentry["localdomains"])+1]
+ end
elseif reverseentry["proto"] or reverseentry["protocol"] then
method = entry[(reverseentry["proto"] or reverseentry["protocol"])+1] or method
end
local enabled = true
if entry[1] == "skip" then enabled=false end
- table.insert(entries.value, {entry=entry[2], method=method, enabled=enabled})
+ local username = ""
+ if reverseentry["username"] and entry[reverseentry["username"]+1] then
+ username = entry[reverseentry["username"]+1]
+ end
+ table.insert(entries.value, {entry=entry[2], method=method, enabled=enabled, remotemailbox=username, localdomain=localdomain})
end
end
return entries
end
-function readentry(entryname)
+function readentry(entryname, meth, remotemailbx, localdom)
local enabled = cfe({ type="boolean", value=true, label="Enable" })
local method = cfe({ type="select", value="pop3", label="Method", option=methods })
local remotehost = cfe({ value=entryname, label="Remote Host" })
@@ -416,7 +439,7 @@ function readentry(entryname)
local localdomain = cfe({ label="Local Domain" })
local ssl = cfe({ type="boolean", value=false, label="SSL Encryption" })
- local entry = findentryline(entryname)
+ local entry = findentryline(entryname, meth, remotemailbx, localdom)
if entry then
if entry[1] == "skip" then
enabled.value = false
@@ -454,7 +477,7 @@ end
function updateentry(entrystruct)
local success, entrystruct = validateentry(entrystruct)
- local entry = findentryline(entrystruct.value.remotehost.value)
+ local entry = findentryline(entrystruct.value.remotehost.value, entrystruct.value.method.value, entrystruct.value.remotemailbox.value, entrystruct.value.localdomain.value)
if not entry then
entrystruct.value.remotehost.errtxt = "Entry not found"
success = false
@@ -471,7 +494,7 @@ end
function createentry(entrystruct)
local success, entrystruct = validateentry(entrystruct)
- local entry = findentryline(entrystruct.value.remotehost.value)
+ local entry = findentryline(entrystruct.value.remotehost.value, entrystruct.value.method.value, entrystruct.value.remotemailbox.value, entrystruct.value.localdomain.value)
if entry then
entrystruct.value.remotehost.errtxt = "Entry already exists"
success = false
@@ -480,15 +503,15 @@ function createentry(entrystruct)
if success then
writeentryline(entrystruct)
else
- entrystruct.errtxt = "Failed to update entry"
+ entrystruct.errtxt = "Failed to create entry"
end
return entrystruct
end
-function deleteentry(entryname)
+function deleteentry(entryname, method, remotemailbox, localdomain)
local retval = cfe({ value="Deleted entry", label="Delete Fetchmail Entry Result" })
- local entry = findentryline(entryname)
+ local entry = findentryline(entryname, method, remotemailbox, localdomain)
if entry then
writeentryline(nil, entry)
else