v0.0.0 -- initial commit
This commit is contained in:
commit
d4dd13ad97
3 changed files with 147 additions and 0 deletions
3
Makefile
Normal file
3
Makefile
Normal file
|
@ -0,0 +1,3 @@
|
|||
all: usblocker.go
|
||||
go fmt usblocker.go
|
||||
go build usblocker.go
|
BIN
usblocker
Executable file
BIN
usblocker
Executable file
Binary file not shown.
144
usblocker.go
Normal file
144
usblocker.go
Normal file
|
@ -0,0 +1,144 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"log"
|
||||
"os"
|
||||
_ "os/exec"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
"time"
|
||||
)
|
||||
|
||||
/* Shows the help message
|
||||
*/
|
||||
func ShowHelp() {
|
||||
fmt.Println("Watches a device and locks the screen if the device is missing.")
|
||||
fmt.Println()
|
||||
fmt.Println("Usage:")
|
||||
fmt.Println(" usblocker run: Runs USBLocker in foreground.")
|
||||
//fmt.Println(" usblocker daemon: Runs in background.")
|
||||
//fmt.Println(" usblocker create: Prepares a device for usage with USBLocker.")
|
||||
//fmt.Println(" (Not yet implemented!)")
|
||||
}
|
||||
|
||||
/* The watcher himself!
|
||||
*/
|
||||
func WatcherUnlocked(device string) {
|
||||
// Watch!
|
||||
for {
|
||||
_, errs := os.Stat(device)
|
||||
if errs != nil {
|
||||
break
|
||||
}
|
||||
time.Sleep(time.Duration(1) * time.Second)
|
||||
}
|
||||
log.Println("Locked")
|
||||
var args []string
|
||||
args = append(args, "-nolock")
|
||||
//args = append(args, "-info")
|
||||
//args = append(args, "")
|
||||
args = append(args, "-mode")
|
||||
args = append(args, "blank")
|
||||
//log.Println(args)
|
||||
var attr os.ProcAttr
|
||||
lpid, err := os.StartProcess("/usr/bin/xlock", args, &attr)
|
||||
if err != nil {
|
||||
log.Fatal("Error: ", err)
|
||||
}
|
||||
WatcherLocked(lpid)
|
||||
}
|
||||
|
||||
/* Watcher for locked state / no device
|
||||
*/
|
||||
func WatcherLocked(lpid *os.Process) {
|
||||
var passphrase []byte // TEH KEY!!1!
|
||||
var devices []string // list of devices
|
||||
var lfile *os.File // device file
|
||||
ldev := "" // device file name
|
||||
version := "v0" // version string
|
||||
|
||||
// Set the passphrase
|
||||
for i := range passphrase {
|
||||
passphrase[i] = 0
|
||||
}
|
||||
|
||||
for {
|
||||
var err error
|
||||
devices, err = filepath.Glob("/dev/?d?1")
|
||||
if err != nil {
|
||||
log.Fatal("Error while getting list of aviable devices (/dev/?d?1):", err)
|
||||
}
|
||||
|
||||
// Search lock device
|
||||
for i := range devices {
|
||||
log.Println("Checking", devices[i], "for usblocker data...")
|
||||
lfile, err = os.Open(devices[i])
|
||||
if err != nil {
|
||||
log.Fatal("Error while opening the device file:", err)
|
||||
}
|
||||
// Check for magic string
|
||||
magictest := []byte(" ")
|
||||
length, err := lfile.Read(magictest)
|
||||
if err != nil {
|
||||
log.Fatal("Error while reading the device file:", err)
|
||||
_ = lfile.Close()
|
||||
}
|
||||
if length == 9 && string(magictest) == "usblocker" {
|
||||
ldev = devices[i]
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
// Check lockdev version
|
||||
if ldev != "" {
|
||||
log.Println("Checking", ldev, "for right version...")
|
||||
versiontest := []byte(" ")
|
||||
length, err := lfile.Read(versiontest)
|
||||
_ = lfile.Close()
|
||||
if err != nil {
|
||||
log.Fatal("Error while reading the device file:", err)
|
||||
}
|
||||
if length == 7 && strings.HasPrefix(string(versiontest), version) {
|
||||
// And finally: UNLOCK!
|
||||
log.Println("Unlocked")
|
||||
if lpid != nil {
|
||||
lpid.Kill()
|
||||
_, _ = lpid.Wait()
|
||||
}
|
||||
WatcherUnlocked(ldev)
|
||||
}
|
||||
}
|
||||
|
||||
time.Sleep(time.Duration(1) * time.Second)
|
||||
}
|
||||
}
|
||||
|
||||
/* The main function
|
||||
*/
|
||||
func main() {
|
||||
// Determining what to do
|
||||
if len(os.Args) == 1 {
|
||||
ShowHelp()
|
||||
return
|
||||
}
|
||||
switch os.Args[1] {
|
||||
case "run":
|
||||
case "daemon":
|
||||
log.Fatal("Not yet implemented.")
|
||||
case "create":
|
||||
log.Fatal("Not yet implemented.")
|
||||
default:
|
||||
ShowHelp()
|
||||
}
|
||||
|
||||
// Check for root
|
||||
if os.Getuid() != 0 {
|
||||
log.Fatal("YU NO GOT ROOT??")
|
||||
}
|
||||
|
||||
// Greet the user :)
|
||||
//log.Println("USBLocker", version)
|
||||
|
||||
WatcherLocked(nil)
|
||||
}
|
Loading…
Reference in a new issue