1// Copyright 2017 The Chromium OS Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5syntax = "proto3"; 6option optimize_for = LITE_RUNTIME; 7 8// This file defines messages for starting, stopping, and managing 9p servers 9// with access to the user's home directory. 10package vm_tools.seneschal; 11option go_package = "seneschal_proto"; 12 13// Defines a path to be shared with a 9p server. 14message SharedPath { 15 // Path to be shared. Must be relative, must not have any ".." elements, and 16 // must not end with ".". The destination path is constructed by appending 17 // the name of the storage location and this path to the root of the server. 18 // So if |path| is "foo/bar" and the |storage_location| field of the 19 // SharePathRequest is "DOWNLOADS", then the destination path will be 20 // "/Downloads/foo/bar". Any ancestor directories will be automatically 21 // created but will not be writable unless they have been shared via a 22 // SharePathRequest. 23 string path = 1; 24 25 // Whether the path should be writable by the server. Due to limitations in 26 // the way bind mounts interact with user namespaces, setting this to false 27 // will not currently do anything. All shared paths are writable. Maybe 28 // one day if the linux developers decide that dropping privileges should 29 // not require having additional privileges that you wouldn't otherwise need 30 // we can maybe do something useful with this. 31 bool writable = 2; 32} 33 34// Defines the vsock address on which a server should listen for requests. 35// The server will always use context id 2 (VM host) as its address. 36message VsockAddress { 37 // The port number on which the server should listen for requests. 38 uint32 port = 1; 39 40 // The context id from which this server should accept connections. 41 uint32 accept_cid = 2; 42} 43 44// Defines the unix address on which a server should listen for requests. 45message UnixAddress { 46 // The path on the system where the server should listen for requests. 47 string path = 1; 48} 49 50// Defines the network address on which a server should listen for requests. 51// The server will always use localhost as its address. 52message NetworkAddress { 53 // The port on which the server should listen for requests. 54 uint32 port = 1; 55} 56 57// Indicates that the message includes a file descriptor on which the server 58// should listen for requests. 59message FileDescriptor {} 60 61// Information that must be included with every StartServer dbus request. 62message StartServerRequest { 63 // The address on which the server should listen for requests. 64 oneof listen_address { 65 VsockAddress vsock = 1; 66 UnixAddress unix_addr = 2; 67 NetworkAddress net = 3; 68 FileDescriptor fd = 4; 69 } 70} 71 72// Information sent back by seneschal in response to a StartServer message. 73message StartServerResponse { 74 // Set to true if the server was started successfully. 75 bool success = 1; 76 77 // The handle with which to refer to this server in future requests. Only 78 // valid if |success| is true. 79 uint32 handle = 2; 80 81 // The reason why the server failed to start, if any. Only valid when 82 // |success| is false. 83 string failure_reason = 3; 84} 85 86// Information that must be included with every StopServer request. 87message StopServerRequest { 88 // The handle to the server that should be stopped. 89 uint32 handle = 1; 90} 91 92// Information sent back by seneschal when it receives a StopServer requests. 93message StopServerResponse { 94 // If true, then the server was successfully stopped. 95 bool success = 1; 96 97 // The reason why the server could not be stopped, if any. Only valid when 98 // |success| is false. 99 string failure_reason = 2; 100} 101 102// Information that must be included with every SharePath request. 103message SharePathRequest { 104 // The handle to the server with whom the path should be shared. 105 uint32 handle = 1; 106 107 // The actual path to be shared. Must be relative to |storage_location| 108 // and must not contain any "../" elements or end with ".". 109 SharedPath shared_path = 2; 110 111 // The location where the path to be shared lives. 112 enum StorageLocation { 113 // The user's Downloads/ directory. 114 DOWNLOADS = 0; 115 } 116 StorageLocation storage_location = 3; 117 118 // The user's cryptohome. This is the <hash> part of /home/user/<hash>. 119 string owner_id = 4; 120} 121 122// Information sent back by seneschal when it receives a SharePath request. 123message SharePathResponse { 124 // If true, then the path was shared successfully. 125 bool success = 1; 126 127 // The path relative to the server's root where the shared path can be 128 // accessed. Only valid if |success| is true. 129 string path = 2; 130 131 // The reason why the path could not be shared, if any. Only valid when 132 // |success| is false. 133 string failure_reason = 3; 134} 135