)]}'
{
  "commit": "bd1e719bf9c4bc58076e7b52e87be645c9b803f5",
  "tree": "f1c94ff9e91e2d2594ba9d1ae7f92120cca36722",
  "parents": [
    "32c8df44d5f53026d92ec24bcf4c864359395e55"
  ],
  "author": {
    "name": "Andrey Belov",
    "email": "defan@nginx.com",
    "time": "Mon Feb 13 16:29:04 2012 +0000"
  },
  "committer": {
    "name": "Andrey Belov",
    "email": "defan@nginx.com",
    "time": "Mon Feb 13 16:29:04 2012 +0000"
  },
  "message": "Added disable_symlinks directive.\n\nTo completely disable symlinks (disable_symlinks on)\nwe use openat(O_NOFOLLOW) for each path component\nto avoid races.\n\nTo allow symlinks with the same owner (disable_symlinks if_not_owner),\nuse openat() (followed by fstat()) and fstatat(AT_SYMLINK_NOFOLLOW),\nand then compare uids between fstat() and fstatat().\n\nAs there is a race between openat() and fstatat() we don\u0027t\nknow if openat() in fact opened symlink or not.  Therefore,\nwe have to compare uids even if fstatat() reports the opened\ncomponent isn\u0027t a symlink (as we don\u0027t know whether it was\nsymlink during openat() or not).\n\nDefault value is off, i.e. symlinks are allowed.\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "1ae55163d5358150f46eecea483c1d0169478a5f",
      "old_mode": 33188,
      "old_path": "src/core/ngx_core.h",
      "new_id": "435ce64e7bba020999c7b3b391ab5a358f024a55",
      "new_mode": 33188,
      "new_path": "src/core/ngx_core.h"
    },
    {
      "type": "modify",
      "old_id": "9154e081bc60478399b0e7a888610bedd1e3cd4d",
      "old_mode": 33188,
      "old_path": "src/core/ngx_open_file_cache.c",
      "new_id": "d66783bfcb80e8cb0ef3427bfaf758cde902d892",
      "new_mode": 33188,
      "new_path": "src/core/ngx_open_file_cache.c"
    },
    {
      "type": "modify",
      "old_id": "436de30609d931dafabf9aa0d06ae96446fcd05d",
      "old_mode": 33188,
      "old_path": "src/core/ngx_open_file_cache.h",
      "new_id": "0ff3453186ab3a4d7946b0894f87d78ab2195984",
      "new_mode": 33188,
      "new_path": "src/core/ngx_open_file_cache.h"
    },
    {
      "type": "modify",
      "old_id": "f82897dd597b059da7f53da4c08e0c387c203d7a",
      "old_mode": 33188,
      "old_path": "src/http/ngx_http_core_module.c",
      "new_id": "35b538b6e5bfdbb6b6d00ac48d42002e8cc8d3f8",
      "new_mode": 33188,
      "new_path": "src/http/ngx_http_core_module.c"
    },
    {
      "type": "modify",
      "old_id": "38f58dfcb4a406943a55cd0b1090630876a23b42",
      "old_mode": 33188,
      "old_path": "src/http/ngx_http_core_module.h",
      "new_id": "3d6408a1e557c18a091125776c43ec3a3350f01c",
      "new_mode": 33188,
      "new_path": "src/http/ngx_http_core_module.h"
    }
  ]
}
