This file is indexed.

/usr/include/aff4/aff4_map.h is in libaff4-dev 0.24.post1-3.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
/*
Copyright 2014 Google Inc. All rights reserved.

Licensed under the Apache License, Version 2.0 (the "License"); you may not use
this file except in compliance with the License.  You may obtain a copy of the
License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed
under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
CONDITIONS OF ANY KIND, either express or implied.  See the License for the
specific language governing permissions and limitations under the License.
*/

#ifndef SRC_AFF4_MAP_H_
#define SRC_AFF4_MAP_H_

#include "aff4_io.h"
#include <map>

class AFF4Map;


// This is the type written to the map stream in this exact binary layout.
struct BinaryRange {
  uint64_t map_offset = 0;
  uint64_t target_offset = 0;
  uint64_t length = 0;
  uint32_t target_id = 0;
}__attribute__((packed));


class Range: public BinaryRange {
 public:
  explicit Range(BinaryRange range): BinaryRange(range) {}
  Range(): BinaryRange() {}

  aff4_off_t map_end() {
    return map_offset + length;
  }

  aff4_off_t target_end() {
    return target_offset + length;
  }

  string SerializeToString();
};


class AFF4Map: public AFF4Stream {
 protected:
  // The URN that will be used as the target of the next Write() operation.
  URN last_target;

 public:
  // The target list.
  vector<URN> targets;
  std::map<string, int> target_idx_map;
  std::map<aff4_off_t, Range> map;

  explicit AFF4Map(DataStore *resolver): AFF4Stream(resolver) {}

  static AFF4ScopedPtr<AFF4Map> NewAFF4Map(
      DataStore *resolver, const URN &object_urn, const URN &volume_urn);

  virtual AFF4Status LoadFromURN();

  virtual string Read(size_t length);
  virtual int Write(const char *data, int length);

  virtual AFF4Status WriteStream(
      AFF4Stream *source,
      ProgressContext *progress = nullptr);

  virtual AFF4Status WriteStream(
      AFF4Map *source,
      ProgressContext *progress = nullptr);

  AFF4Status Flush();

  AFF4Status AddRange(aff4_off_t map_offset, aff4_off_t target_offset,
                      aff4_off_t length, URN target);

  void Dump();

  std::vector<Range> GetRanges();

  // Creates or retrieves the underlying map data stream.
  AFF4Status GetBackingStream(URN &target);

  void Clear();

  virtual aff4_off_t Size();

  using AFF4Stream::Write;
};


#endif  // SRC_AFF4_MAP_H_