Skip to content

Commit 01e950c

Browse files
committed
Fixes issue #18
Dont check for sudo first, try to open fd
1 parent a54d783 commit 01e950c

File tree

2 files changed

+31
-4
lines changed

2 files changed

+31
-4
lines changed

keylogger.go

+7-4
Original file line numberDiff line numberDiff line change
@@ -35,12 +35,15 @@ var allowedDevices = devices{"keyboard", "logitech mx keys"}
3535
// New creates a new keylogger for a device path
3636
func New(devPath string) (*KeyLogger, error) {
3737
k := &KeyLogger{}
38-
if !k.IsRoot() {
39-
return nil, errors.New("Must be run as root")
40-
}
4138
fd, err := os.OpenFile(devPath, os.O_RDWR, os.ModeCharDevice)
39+
if err != nil {
40+
if os.IsPermission(err) && !k.IsRoot() {
41+
return nil, errors.New("permission denied. run with root permission or use a user with access to " + devPath)
42+
}
43+
return nil, err
44+
}
4245
k.fd = fd
43-
return k, err
46+
return k, nil
4447
}
4548

4649
// FindKeyboardDevice by going through each device registered on OS

keylogger_test.go

+24
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package keylogger
22

33
import (
4+
"os"
45
"testing"
56
)
67

@@ -38,3 +39,26 @@ func TestBufferParser(t *testing.T) {
3839
return
3940
}
4041
}
42+
43+
func TestWithPermission(t *testing.T) {
44+
fd, err := os.CreateTemp("", "*")
45+
if err != nil {
46+
t.Fatal(err)
47+
}
48+
// try to create new keylogger with file descriptor which has the permission
49+
k, err := New(fd.Name())
50+
if err != nil {
51+
t.Fatal(err)
52+
}
53+
k.Close()
54+
fd.Close()
55+
56+
// try to create new keylogger with file descriptor which has no permission
57+
_, err = New("/dev/tty0")
58+
if err == nil {
59+
t.Fatal("expected error, got nil")
60+
}
61+
if err.Error() != "permission denied. run with root permission or use a user with access to /dev/tty0" {
62+
t.Fatalf("unexpected error: %v", err)
63+
}
64+
}

0 commit comments

Comments
 (0)