1 /*
2 * Copyright 2016 The Netty Project
3 *
4 * The Netty Project licenses this file to you under the Apache License,
5 * version 2.0 (the "License"); you may not use this file except in compliance
6 * with the License. You may obtain a copy of the License at:
7 *
8 * https://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 * License for the specific language governing permissions and limitations
14 * under the License.
15 */
16
17 package io.netty.channel.unix;
18
19 import io.netty.util.internal.UnstableApi;
20
21 import static io.netty.util.internal.EmptyArrays.EMPTY_INTS;
22
23 /**
24 * User credentials discovered for the peer unix domain socket.
25 *
26 * The PID, UID and GID of the user connected on the other side of the unix domain socket
27 * For details see:
28 * <a href=https://man7.org/linux/man-pages/man7/socket.7.html>SO_PEERCRED</a>
29 */
30 @UnstableApi
31 public final class PeerCredentials {
32 private final int pid;
33 private final int uid;
34 private final int[] gids;
35
36 // These values are set by JNI via Socket.peerCredentials()
37 PeerCredentials(int p, int u, int... gids) {
38 pid = p;
39 uid = u;
40 this.gids = gids == null ? EMPTY_INTS : gids;
41 }
42
43 /**
44 * Get the PID of the peer process.
45 * <p>
46 * This is currently not populated on MacOS and BSD based systems.
47 * @return The PID of the peer process.
48 */
49 public int pid() {
50 return pid;
51 }
52
53 public int uid() {
54 return uid;
55 }
56
57 public int[] gids() {
58 return gids.clone();
59 }
60
61 @Override
62 public String toString() {
63 StringBuilder sb = new StringBuilder(128);
64 sb.append("UserCredentials[pid=").append(pid).append("; uid=").append(uid).append("; gids=[");
65 if (gids.length > 0) {
66 sb.append(gids[0]);
67 for (int i = 1; i < gids.length; ++i) {
68 sb.append(", ").append(gids[i]);
69 }
70 }
71 sb.append(']');
72 return sb.toString();
73 }
74 }