google_guest_agent/events/sshtrustedca/sshtrustedca.go (30 lines of code) (raw):
// Copyright 2023 Google LLC
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// https://www.apache.org/licenses/LICENSE-2.0
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// Package sshtrustedca implement the sshd trusted ca cert pipe events watcher.
package sshtrustedca
import (
"os"
"sync"
)
const (
// WatcherID is the sshtrustedca watcher's ID.
WatcherID = "ssh-trusted-ca-pipe-watcher"
// ReadEvent is the sshtrustedca's read event type ID.
ReadEvent = "ssh-trusted-ca-pipe-watcher,read"
// DefaultPipePath defines the default ssh trusted ca pipe path.
DefaultPipePath = "/etc/ssh/oslogin_trustedca.pub"
)
// Watcher is the sshtrustedca event watcher implementation.
type Watcher struct {
// pipePath points to the named pipe it's writing to.
pipePath string
// waitingWrite is a flag to inform the Watcher that the Handler has or
// hasn't finished writing.
waitingWrite bool
// mutex protects waitingWrite on concurrent accesses.
mutex sync.Mutex
}
// PipeData wraps the pipe event data.
type PipeData struct {
// File is the writeonly pipe's file descriptor. The user/handler must
// make sure to close it after processing the event.
File *os.File
// Finished is a callback used by the event handler to inform the write to
// the pipe is finished.
Finished func()
}
// New allocates and initializes a new Watcher.
func New(pipePath string) *Watcher {
return &Watcher{
pipePath: pipePath,
}
}
// ID returns the sshtrustedca event watcher id.
func (mp *Watcher) ID() string {
return WatcherID
}
// Events returns an slice with all implemented events.
func (mp *Watcher) Events() []string {
return []string{ReadEvent}
}