1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* vim: set sw=2 ts=2 et ft=cpp: tw=80: */
3 
4 /* This Source Code Form is subject to the terms of the Mozilla Public
5  * License, v. 2.0. If a copy of the MPL was not distributed with this
6  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
7 
8 #ifndef mozilla_ipc_KeyStoreConnector_h
9 #define mozilla_ipc_KeyStoreConnector_h
10 
11 #include "mozilla/ipc/UnixSocketConnector.h"
12 
13 namespace mozilla {
14 namespace ipc {
15 
16 class KeyStoreConnector final : public UnixSocketConnector
17 {
18 public:
19   KeyStoreConnector(const char** const aAllowedUsers);
20   ~KeyStoreConnector();
21 
22   // Methods for |UnixSocketConnector|
23   //
24 
25   nsresult ConvertAddressToString(const struct sockaddr& aAddress,
26                                   socklen_t aAddressLength,
27                                   nsACString& aAddressString) override;
28 
29   nsresult CreateListenSocket(struct sockaddr* aAddress,
30                               socklen_t* aAddressLength,
31                               int& aListenFd) override;
32 
33   nsresult AcceptStreamSocket(int aListenFd,
34                               struct sockaddr* aAddress,
35                               socklen_t* aAddressLength,
36                               int& aStreamFd) override;
37 
38   nsresult CreateStreamSocket(struct sockaddr* aAddress,
39                               socklen_t* aAddressLength,
40                               int& aStreamFd) override;
41 
42   nsresult Duplicate(UnixSocketConnector*& aConnector) override;
43 
44 private:
45   nsresult CreateSocket(int& aFd) const;
46   nsresult SetSocketFlags(int aFd) const;
47   nsresult CheckPermission(int aFd) const;
48   nsresult CreateAddress(struct sockaddr& aAddress,
49                          socklen_t& aAddressLength) const;
50 
51   const char** const mAllowedUsers;
52 };
53 
54 }
55 }
56 
57 #endif
58