|
|
@ -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,6 +405,70 @@ remove_outer:
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Needs to be locked by caller
|
|
|
|
|
|
|
|
func storeNewEntry(ts *gtk.TreeStore, iter *gtk.TreeIter, guid, path, icon, proto string, pid int, ipaddr, hostname string, port, uid, gid int, origin,
|
|
|
|
|
|
|
|
timestamp string, is_socks bool, optstring, sandbox string, action int) {
|
|
|
|
|
|
|
|
var colVals = [COL_NO_LAST]interface{}{}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if is_socks {
|
|
|
|
|
|
|
|
if (optstring != "") && (strings.Index(optstring, "SOCKS") == -1) {
|
|
|
|
|
|
|
|
optstring = "SOCKS5 / " + optstring
|
|
|
|
|
|
|
|
} else if optstring == "" {
|
|
|
|
|
|
|
|
optstring = "SOCKS5"
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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++ {
|
|
|
|
|
|
|
|
err := ts.SetValue(iter, n, colVals[n])
|
|
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
|
|
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,
|
|
|
|
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 {
|
|
|
|
origin, timestamp string, is_socks bool, optstring string, sandbox string, action int) bool {
|
|
|
|
duplicated := false
|
|
|
|
duplicated := false
|
|
|
@ -415,8 +477,6 @@ func addRequestInc(treeStore *gtk.TreeStore, guid, path, icon, proto string, pid
|
|
|
|
defer globalPromptLock.Unlock()
|
|
|
|
defer globalPromptLock.Unlock()
|
|
|
|
|
|
|
|
|
|
|
|
for ridx := 0; ridx < globalTS.IterNChildren(nil); ridx++ {
|
|
|
|
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)
|
|
|
|
rule, iter, err := getRuleByIdx(ridx, -1)
|
|
|
|
if err != nil {
|
|
|
|
if err != nil {
|
|
|
|
break
|
|
|
|
break
|
|
|
@ -435,52 +495,7 @@ func addRequestInc(treeStore *gtk.TreeStore, guid, path, icon, proto string, pid
|
|
|
|
duplicated = true
|
|
|
|
duplicated = true
|
|
|
|
|
|
|
|
|
|
|
|
subiter := globalTS.Append(iter)
|
|
|
|
subiter := globalTS.Append(iter)
|
|
|
|
|
|
|
|
storeNewEntry(globalTS, subiter, guid, path, icon, proto, pid, ipaddr, hostname, port, uid, gid, origin, timestamp, is_socks, optstring, sandbox, action)
|
|
|
|
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
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for n := 0; n < len(colVals); n++ {
|
|
|
|
|
|
|
|
err = globalTS.SetValue(subiter, n, colVals[n])
|
|
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
|
|
log.Fatal("Unable to add row:", err)
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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
|
|
|
|
iter := treeStore.Append(nil)
|
|
|
|
colVals[COL_NO_PORT] = port
|
|
|
|
storeNewEntry(treeStore, iter, guid, path, icon, proto, pid, ipaddr, hostname, port, uid, gid, origin, timestamp, is_socks, optstring, sandbox, action)
|
|
|
|
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++ {
|
|
|
|
|
|
|
|
err := treeStore.SetValue(iter, n, colVals[n])
|
|
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
|
|
log.Fatal("Unable to add row:", err)
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
decision := addDecision()
|
|
|
|
decision := addDecision()
|
|
|
|
dumpDecisions()
|
|
|
|
dumpDecisions()
|
|
|
|