Consolidated code for creating new entries in fw-prompt.

shw_dev
Stephen Watt 7 years ago
parent 4f685222e1
commit 819edd1962

@ -9,8 +9,6 @@ fw-daemon:
fw-prompt: fw-prompt:
apply once rules still do not work because they the DBus invocation requires the guid to be passed apply once rules still do not work because they the DBus invocation requires the guid to be passed
remove duplicate code for creating new treeview items
more nesting for similar prompts (by application, pid, target host, etc) more nesting for similar prompts (by application, pid, target host, etc)
remove old decision code remove old decision code

@ -75,7 +75,6 @@ const (
COL_NO_LAST COL_NO_LAST
) )
var dbuso *dbusObject var dbuso *dbusObject
var userPrefs fpPreferences var userPrefs fpPreferences
var mainWin *gtk.Window var mainWin *gtk.Window
@ -373,7 +372,6 @@ func removeRequest(treeStore *gtk.TreeStore, guid string) {
defer globalPromptLock.Unlock() defer globalPromptLock.Unlock()
remove_outer: remove_outer:
/* XXX: This is horrible. Figure out how to do this properly. */
for ridx := 0; ridx < globalTS.IterNChildren(nil); ridx++ { for ridx := 0; ridx < globalTS.IterNChildren(nil); ridx++ {
nchildren := 0 nchildren := 0
this_iter, err := globalTS.GetIterFromString(fmt.Sprintf("%d", ridx)) this_iter, err := globalTS.GetIterFromString(fmt.Sprintf("%d", ridx))
@ -407,34 +405,10 @@ remove_outer:
} }
func addRequestInc(treeStore *gtk.TreeStore, guid, path, icon, proto string, pid int, ipaddr, hostname string, port, uid, gid int, // Needs to be locked by caller
origin, timestamp string, is_socks bool, optstring string, sandbox string, action int) bool { func storeNewEntry(ts *gtk.TreeStore, iter *gtk.TreeIter, guid, path, icon, proto string, pid int, ipaddr, hostname string, port, uid, gid int, origin,
duplicated := false timestamp string, is_socks bool, optstring, sandbox string, action int) {
var colVals = [COL_NO_LAST]interface{}{}
globalPromptLock.Lock()
defer globalPromptLock.Unlock()
for ridx := 0; ridx < globalTS.IterNChildren(nil); ridx++ {
/* XXX: This is horrible. Figure out how to do this properly. */
rule, iter, err := getRuleByIdx(ridx, -1)
if err != nil {
break
// XXX: not compared: optstring/sandbox
} else if (rule.Path == path) && (rule.Proto == proto) && (rule.Pid == pid) && (rule.Target == ipaddr) && (rule.Hostname == hostname) &&
(rule.Port == port) && (rule.UID == uid) && (rule.GID == gid) && (rule.Origin == origin) && (rule.IsSocks == is_socks) {
rule.nrefs++
err := globalTS.SetValue(iter, 0, rule.nrefs)
if err != nil {
log.Println("Error creating duplicate firewall prompt entry:", err)
break
}
fmt.Println("YES REALLY DUPLICATE: ", rule.nrefs)
duplicated = true
subiter := globalTS.Append(iter)
if is_socks { if is_socks {
if (optstring != "") && (strings.Index(optstring, "SOCKS") == -1) { if (optstring != "") && (strings.Index(optstring, "SOCKS") == -1) {
@ -444,7 +418,6 @@ func addRequestInc(treeStore *gtk.TreeStore, guid, path, icon, proto string, pid
} }
} }
var colVals = [COL_NO_LAST]interface{}{}
colVals[COL_NO_NREFS] = 1 colVals[COL_NO_NREFS] = 1
colVals[COL_NO_ICON_PIXBUF] = nil colVals[COL_NO_ICON_PIXBUF] = nil
colVals[COL_NO_GUID] = guid colVals[COL_NO_GUID] = guid
@ -474,13 +447,55 @@ func addRequestInc(treeStore *gtk.TreeStore, guid, path, icon, proto string, pid
colVals[COL_NO_OPTSTRING] = optstring colVals[COL_NO_OPTSTRING] = optstring
colVals[COL_NO_ACTION] = action colVals[COL_NO_ACTION] = action
itheme, err := gtk.IconThemeGetDefault()
if err != nil {
log.Fatal("Could not load default icon theme:", err)
}
pb, err := itheme.LoadIcon(icon, 24, gtk.ICON_LOOKUP_GENERIC_FALLBACK)
if err != nil {
log.Println("Could not load icon:", err)
} else {
colVals[COL_NO_ICON_PIXBUF] = pb
}
for n := 0; n < len(colVals); n++ { for n := 0; n < len(colVals); n++ {
err = globalTS.SetValue(subiter, n, colVals[n]) err := ts.SetValue(iter, n, colVals[n])
if err != nil { if err != nil {
log.Fatal("Unable to add row:", err) log.Fatal("Unable to add row:", err)
} }
} }
return
}
func addRequestInc(treeStore *gtk.TreeStore, guid, path, icon, proto string, pid int, ipaddr, hostname string, port, uid, gid int,
origin, timestamp string, is_socks bool, optstring string, sandbox string, action int) bool {
duplicated := false
globalPromptLock.Lock()
defer globalPromptLock.Unlock()
for ridx := 0; ridx < globalTS.IterNChildren(nil); ridx++ {
rule, iter, err := getRuleByIdx(ridx, -1)
if err != nil {
break
// XXX: not compared: optstring/sandbox
} else if (rule.Path == path) && (rule.Proto == proto) && (rule.Pid == pid) && (rule.Target == ipaddr) && (rule.Hostname == hostname) &&
(rule.Port == port) && (rule.UID == uid) && (rule.GID == gid) && (rule.Origin == origin) && (rule.IsSocks == is_socks) {
rule.nrefs++
err := globalTS.SetValue(iter, 0, rule.nrefs)
if err != nil {
log.Println("Error creating duplicate firewall prompt entry:", err)
break
}
fmt.Println("YES REALLY DUPLICATE: ", rule.nrefs)
duplicated = true
subiter := globalTS.Append(iter)
storeNewEntry(globalTS, subiter, guid, path, icon, proto, pid, ipaddr, hostname, port, uid, gid, origin, timestamp, is_socks, optstring, sandbox, action)
break break
} }
@ -537,64 +552,9 @@ func addRequest(treeStore *gtk.TreeStore, guid, path, icon, proto string, pid in
globalPromptLock.Lock() globalPromptLock.Lock()
defer globalPromptLock.Unlock() defer globalPromptLock.Unlock()
iter := treeStore.Append(nil)
if is_socks {
if (optstring != "") && (strings.Index(optstring, "SOCKS") == -1) {
optstring = "SOCKS5 / " + optstring
} else if optstring == "" {
optstring = "SOCKS5"
}
}
var colVals = [COL_NO_LAST]interface{}{}
colVals[COL_NO_NREFS] = 1
colVals[COL_NO_ICON_PIXBUF] = nil
colVals[COL_NO_GUID] = guid
colVals[COL_NO_PATH] = path
colVals[COL_NO_ICON] = icon
colVals[COL_NO_PROTO] = proto
colVals[COL_NO_PID] = pid
if ipaddr == "" {
colVals[COL_NO_DSTIP] = "---"
} else {
colVals[COL_NO_DSTIP] = ipaddr
}
colVals[COL_NO_HOSTNAME] = hostname
colVals[COL_NO_PORT] = port
colVals[COL_NO_UID] = uid
colVals[COL_NO_GID] = gid
colVals[COL_NO_ORIGIN] = origin
colVals[COL_NO_TIMESTAMP] = timestamp
colVals[COL_NO_IS_SOCKS] = 0
if is_socks {
colVals[COL_NO_IS_SOCKS] = 1
}
colVals[COL_NO_OPTSTRING] = optstring
colVals[COL_NO_ACTION] = action
itheme, err := gtk.IconThemeGetDefault()
if err != nil {
log.Fatal("Could not load default icon theme:", err)
}
pb, err := itheme.LoadIcon(icon, 24, gtk.ICON_LOOKUP_GENERIC_FALLBACK)
if err != nil {
log.Println("Could not load icon:", err)
} else {
colVals[COL_NO_ICON_PIXBUF] = pb
}
for n := 0; n < len(colVals); n++ { iter := treeStore.Append(nil)
err := treeStore.SetValue(iter, n, colVals[n]) storeNewEntry(treeStore, iter, guid, path, icon, proto, pid, ipaddr, hostname, port, uid, gid, origin, timestamp, is_socks, optstring, sandbox, action)
if err != nil {
log.Fatal("Unable to add row:", err)
}
}
decision := addDecision() decision := addDecision()
dumpDecisions() dumpDecisions()

Loading…
Cancel
Save