• Home
  • History
  • Annotate
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1  /*
2   * Copyright (C) 2008 The Android Open Source Project
3   * All rights reserved.
4   *
5   * Redistribution and use in source and binary forms, with or without
6   * modification, are permitted provided that the following conditions
7   * are met:
8   *  * Redistributions of source code must retain the above copyright
9   *    notice, this list of conditions and the following disclaimer.
10   *  * Redistributions in binary form must reproduce the above copyright
11   *    notice, this list of conditions and the following disclaimer in
12   *    the documentation and/or other materials provided with the
13   *    distribution.
14   *
15   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
16   * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
17   * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
18   * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
19   * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
20   * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
21   * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
22   * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
23   * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
24   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
25   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26   * SUCH DAMAGE.
27   */
28  
29  #pragma once
30  
31  #include "private/bionic_lock.h"
32  
33  #include "prop_area.h"
34  
35  class ContextNode {
36   public:
ContextNode(const char * context,const char * filename)37    ContextNode(const char* context, const char* filename)
38        : context_(context), pa_(nullptr), no_access_(false), filename_(filename) {
39      lock_.init(false);
40    }
~ContextNode()41    ~ContextNode() {
42      Unmap();
43    }
44  
45    DISALLOW_COPY_AND_ASSIGN(ContextNode);
46  
47    bool Open(bool access_rw, bool* fsetxattr_failed);
48    bool CheckAccessAndOpen();
49    void ResetAccess();
50    void Unmap();
51  
context()52    const char* context() const {
53      return context_;
54    }
pa()55    prop_area* pa() {
56      return pa_;
57    }
58  
59   private:
60    bool CheckAccess();
61  
62    Lock lock_;
63    const char* context_;
64    prop_area* pa_;
65    bool no_access_;
66    const char* filename_;
67  };
68