xref: /aosp_15_r20/tools/treble/hacksaw/cmd/hacksawd/main.go (revision 105f628577ac4ba0e277a494fbb614ed8c12a994)
1*105f6285SAndroid Build Coastguard Worker// Copyright 2020 Google LLC
2*105f6285SAndroid Build Coastguard Worker//
3*105f6285SAndroid Build Coastguard Worker// Licensed under the Apache License, Version 2.0 (the "License");
4*105f6285SAndroid Build Coastguard Worker// you may not use this file except in compliance with the License.
5*105f6285SAndroid Build Coastguard Worker// You may obtain a copy of the License at
6*105f6285SAndroid Build Coastguard Worker//
7*105f6285SAndroid Build Coastguard Worker//     https://www.apache.org/licenses/LICENSE-2.0
8*105f6285SAndroid Build Coastguard Worker//
9*105f6285SAndroid Build Coastguard Worker// Unless required by applicable law or agreed to in writing, software
10*105f6285SAndroid Build Coastguard Worker// distributed under the License is distributed on an "AS IS" BASIS,
11*105f6285SAndroid Build Coastguard Worker// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12*105f6285SAndroid Build Coastguard Worker// See the License for the specific language governing permissions and
13*105f6285SAndroid Build Coastguard Worker// limitations under the License.
14*105f6285SAndroid Build Coastguard Worker
15*105f6285SAndroid Build Coastguard Worker// hacksawd is a privileged daemon that manages the mounts
16*105f6285SAndroid Build Coastguard Workerpackage main
17*105f6285SAndroid Build Coastguard Worker
18*105f6285SAndroid Build Coastguard Workerimport (
19*105f6285SAndroid Build Coastguard Worker	"net"
20*105f6285SAndroid Build Coastguard Worker	"net/http"
21*105f6285SAndroid Build Coastguard Worker	"net/rpc"
22*105f6285SAndroid Build Coastguard Worker	"os"
23*105f6285SAndroid Build Coastguard Worker	"strconv"
24*105f6285SAndroid Build Coastguard Worker
25*105f6285SAndroid Build Coastguard Worker	"android.googlesource.com/platform/tools/treble.git/hacksaw/bind"
26*105f6285SAndroid Build Coastguard Worker)
27*105f6285SAndroid Build Coastguard Worker
28*105f6285SAndroid Build Coastguard Workerfunc main() {
29*105f6285SAndroid Build Coastguard Worker	if os.Getenv("LISTEN_PID") != strconv.Itoa(os.Getpid()) {
30*105f6285SAndroid Build Coastguard Worker		panic("Unexpected PID")
31*105f6285SAndroid Build Coastguard Worker	}
32*105f6285SAndroid Build Coastguard Worker
33*105f6285SAndroid Build Coastguard Worker	if os.Getenv("LISTEN_FDS") != strconv.Itoa(1) {
34*105f6285SAndroid Build Coastguard Worker		panic("Unexpected number of socket fds")
35*105f6285SAndroid Build Coastguard Worker	}
36*105f6285SAndroid Build Coastguard Worker
37*105f6285SAndroid Build Coastguard Worker	const socketFD = 3
38*105f6285SAndroid Build Coastguard Worker	socketFile := os.NewFile(socketFD, "hacksawd.sock")
39*105f6285SAndroid Build Coastguard Worker
40*105f6285SAndroid Build Coastguard Worker	listener, err := net.FileListener(socketFile)
41*105f6285SAndroid Build Coastguard Worker	if err != nil {
42*105f6285SAndroid Build Coastguard Worker		panic(err)
43*105f6285SAndroid Build Coastguard Worker	}
44*105f6285SAndroid Build Coastguard Worker
45*105f6285SAndroid Build Coastguard Worker	binder := bind.NewLocalPathBinder()
46*105f6285SAndroid Build Coastguard Worker	server := bind.NewServer(binder)
47*105f6285SAndroid Build Coastguard Worker	if err = rpc.Register(server); err != nil {
48*105f6285SAndroid Build Coastguard Worker		panic(err)
49*105f6285SAndroid Build Coastguard Worker	}
50*105f6285SAndroid Build Coastguard Worker	rpc.HandleHTTP()
51*105f6285SAndroid Build Coastguard Worker	http.Serve(listener, nil)
52*105f6285SAndroid Build Coastguard Worker}
53