躯干和不受支持的系统调用

时间:2017-10-08 17:52:35

标签: tor torsocks

我需要使用python deamon app来强化(使用torsocks) 在macos上测试一切正常,在linux上我有这个错误:

package main

import (
    "log"
    "strconv"
    "net/http"
    "strings"
)

func AddProduct(w http.ResponseWriter, r *http.Request) {
    c := strings.Split(strings.Trim(r.URL.Path, "/"), "/")
    switch {
    case len(c) == 2:
        // GET product/{id}
        if r.Method != "GET" && r.Method != "HEAD" {
            http.Error(w, http.StatusText(http.StatusMethodNotAllowed), http.StatusMethodNotAllowed)
            return
        }
        id, err := strconv.Atoi(c[1])
        if err != nil {
            break
        }
        // implementation
        return

    case len(c) == 3 && c[2] == "item":
        // POST product/{id}/item
        if r.Method != "POST" {
            http.Error(w, http.StatusText(http.StatusMethodNotAllowed), http.StatusMethodNotAllowed)
            return
        }
        id, err := strconv.Atoi(c[1])
        if err != nil {
            break
        }
        // implementation
        return

    case len(c) == 4 && c[2] == "item":
        // GET product/{id}/item/{itemID}
        if r.Method != "GET" && r.Method != "HEAD" {
            http.Error(w, http.StatusText(http.StatusMethodNotAllowed), http.StatusMethodNotAllowed)
            return
        }
        id, err := strconv.Atoi(c[1])
        if err != nil {
            break
        }

        itemID, err := strconv.Atoi(c[3])
        if err != nil {
            break
        }
        // implementation
        return
    }
    http.Error(w, http.StatusText(http.StatusNotFound), http.StatusNotFound)
}

func main() {
    http.HandleFunc("/product/", AddProduct)
    log.Fatal(http.ListenAndServe(":8080", nil))
}

我应该调查什么?

1 个答案:

答案 0 :(得分:1)

更新

我的补丁已被Torsocks源代码接受。如果遇到不受支持的syscall 217错误,请获取最新的Torsocks代码:https://gitweb.torproject.org/torsocks.git

如果在其他不受支持的系统调用中遇到错误,请在Bugtracker上添加票证: https://trac.torproject.org/projects/tor/newticket


最近开发了一个补丁,以使Torsock完全支持该系统调用(217:getdents64)。该补丁尚未被主版本接受,但是您可以自己轻松构建它。只需克隆以下git repo:https://github.com/seisvelas/torsocks并按照构建说明进行操作即可。

该补丁应该(希望)很快成为官方躯干的一部分。您可以在以下跟踪器上查看错误报告: https://trac.torproject.org/projects/tor/ticket/28861

如果您想知道为什么会发生这种情况,那是因为Torsocks列出了允许进行系统调用的白名单。希望Torsock的第3版应该通过使用seccomp / pledge解决此问题,但目前非常处于开发初期。同时,可以将不代表安全问题的系统调用手动添加到白名单中。由于getdents和getdents64(后者是向OP发出问题的系统调用)对我来说似乎没有问题,因此我开发了链接补丁,目前正在等待将其接受到主要的Torsocks代码库中。