micromdm / scep

Go SCEP server
MIT License
323 stars 124 forks source link

Unable to enroll second device after enrolling one device (with nanomdm) #232

Open ashishmeher216 opened 5 months ago

ashishmeher216 commented 5 months ago

I am getting the error: remove depot\serial: The process cannot access the file because it is being used by another process.

Is anyone else also facing the same? I read some other issue about data races and it is fixed. https://github.com/micromdm/scep/pull/185

From my analysis, the error seems to originate from from writeSerial() function defined in depot/file/depot.go.

func (d fileDepot) writeSerial(serial big.Int) error { if err := os.MkdirAll(d.dirPath, 0755); err != nil { fmt.Println("πŸš€ ~ file: depot.go:314 ~ iferr:=os.MkdirAll ~ err:", err) return err } name := d.path("serial") fmt.Println("πŸš€ ~ file: depot.go:318 ~ func ~ name:", name) // depot/serial err := os.Remove(name) fmt.Println("πŸš€ ~ file: depot.go:332 ~ func ~ Remove: Removing serial file") fmt.Println("πŸš€ ~ file: depot.go:319 ~ func ~ err:", err) // getting error here

file, err := os.OpenFile(name, os.O_WRONLY|os.O_CREATE|os.O_EXCL, serialPerm)
if err != nil {
    return err
}
defer file.Close()

if _, err := file.WriteString(fmt.Sprintf("%x\n", serial.Bytes())); err != nil {
    os.Remove(name)
    return err
}
return nil

}

jessepeterson commented 5 months ago

What OS are running the SCEP server on? You may want to try mysqlscepserver. We don't have a way to try the BoltDB backend with the stand-alone server. I'll see if I can find some time to test this. Also you can give step-ca a try.

ashishmeher216 commented 5 months ago

Hey @jessepeterson, thanks for the quick reply. I am running the SCEP server on windows for testing purpose.
You can test this by connecting nanomdm with this SCEP server and then enrolling more than one device.

Sure, I will try the two scep servers you mentioned.

jessepeterson commented 5 months ago

Ah, Windows. Yes there may be a bug where we did not account for Windows file locking semantics in the storage backend. Linux doesn't have this issue afaik.

ashishmeher216 commented 5 months ago

Haha, i know right. Will check it once on linux.

ashishmeher216 commented 5 months ago

This is working on linux machine. I also tested mysqlscepserve and it is working. Thanks.