~mir-team/mir/in-process-egl+input-conglomeration

« back to all changes in this revision

Viewing changes to 3rd_party/android-input/android/system/core/libcutils/sockets.c

Merged trunk and fixed issues

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/*
2
 
 * Copyright (C) 2011 The Android Open Source Project
3
 
 *
4
 
 * Licensed under the Apache License, Version 2.0 (the "License");
5
 
 * you may not use this file except in compliance with the License.
6
 
 * You may obtain a copy of the License at
7
 
 *
8
 
 *      http://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,
12
 
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
 
 * See the License for the specific language governing permissions and
14
 
 * limitations under the License.
15
 
 */
16
 
 
17
 
#include <cutils/log.h>
18
 
#include <cutils/sockets.h>
19
 
 
20
 
#ifdef HAVE_ANDROID_OS
21
 
/* For the socket trust (credentials) check */
22
 
#include <private/android_filesystem_config.h>
23
 
#endif
24
 
 
25
 
bool socket_peer_is_trusted(int fd)
26
 
{
27
 
#ifdef HAVE_ANDROID_OS
28
 
    struct ucred cr;
29
 
    socklen_t len = sizeof(cr);
30
 
    int n = getsockopt(fd, SOL_SOCKET, SO_PEERCRED, &cr, &len);
31
 
 
32
 
    if (n != 0) {
33
 
        ALOGE("could not get socket credentials: %s\n", strerror(errno));
34
 
        return false;
35
 
    }
36
 
 
37
 
    if ((cr.uid != AID_ROOT) && (cr.uid != AID_SHELL)) {
38
 
        ALOGE("untrusted userid on other end of socket: userid %d\n", cr.uid);
39
 
        return false;
40
 
    }
41
 
#endif
42
 
 
43
 
    return true;
44
 
}