代码拉取完成,页面将自动刷新
package nmcli
import (
"fmt"
"os/exec"
"strings"
)
// OvpnConnectionDefaults settings to apply to an existing NetworkManager connection
type OvpnConnectionDefaults struct {
DNS string
AuthSettings Auth
IgnoreIPV6 bool
}
// Auth holds authentication details for setting up a connection
type Auth struct {
Mode string
User string
Pass string
}
// ModifyConnection modifies the specified connection using settings provided
func ModifyConnection(connectionID string, settings OvpnConnectionDefaults) ([]string, error) {
if err := checkHasNmcli(); err != nil {
return nil, err
}
execCmd := []string{"connection", "modify", connectionID,
"ipv4.dns-priority -1", // prevents DNS leak in /etc/resolv.conf
fmt.Sprintf("ipv4.dns %s", settings.DNS),
"ipv4.ignore-auto-dns true",
}
if settings.AuthSettings.Mode == "non_encrypted" {
passwordCmd := []string{
"+vpn.data password-flags=0",
fmt.Sprintf("+vpn.data username=%s", settings.AuthSettings.User),
fmt.Sprintf("vpn.secrets password=%s", settings.AuthSettings.Pass),
}
execCmd = append(execCmd, passwordCmd...)
}
if settings.IgnoreIPV6 {
execCmd = append(execCmd, "ipv6.method ignore")
}
var cmdFields []string
for key, cmd := range execCmd {
if key == 2 {
cmdFields = append(cmdFields, cmd)
} else {
cmdFields = append(cmdFields, strings.Fields(cmd)...)
}
}
//loglog.Handler.Info("running nmcli %v", cmdFields)
cmd := exec.Command("nmcli", cmdFields...)
stdout, err := cmd.StdoutPipe()
if err != nil {
//loglog.Handler.Warn("cmd out pipe produced err")
return nil, err
}
stderr, err := cmd.StderrPipe()
if err != nil {
//loglog.Handler.Warn("cmd out err produced")
return nil, err
}
err = cmd.Start()
if err != nil {
//loglog.Handler.Warn("cmd failed to start")
return nil, err
}
data := GetStdoutText(stdout)
if errOut := GetStdoutText(stderr); errOut != nil {
return nil, fmt.Errorf(strings.Join(errOut, " "))
}
cmd.Wait()
return data, err
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。