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