Deleted Added
full compact
archive_acl.c (313570) archive_acl.c (313926)
1/*-
2 * Copyright (c) 2003-2010 Tim Kientzle
3 * Copyright (c) 2016 Martin Matuska
4 * All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:

--- 69 unchanged lines hidden (view full) ---

78static int is_nfs4_perms(const char *start, const char *end,
79 int *result);
80static void next_field(const char **p, const char **start,
81 const char **end, char *sep);
82static void append_entry(char **p, const char *prefix, int type,
83 int tag, int flags, const char *name, int perm, int id);
84static void append_id(char **p, int id);
85
1/*-
2 * Copyright (c) 2003-2010 Tim Kientzle
3 * Copyright (c) 2016 Martin Matuska
4 * All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:

--- 69 unchanged lines hidden (view full) ---

78static int is_nfs4_perms(const char *start, const char *end,
79 int *result);
80static void next_field(const char **p, const char **start,
81 const char **end, char *sep);
82static void append_entry(char **p, const char *prefix, int type,
83 int tag, int flags, const char *name, int perm, int id);
84static void append_id(char **p, int id);
85
86static const struct {
87 const int perm;
88 const char c;
89 const wchar_t wc;
90} nfsv4_acl_perm_map[] = {
91 { ARCHIVE_ENTRY_ACL_READ_DATA | ARCHIVE_ENTRY_ACL_LIST_DIRECTORY, 'r',
92 L'r' },
93 { ARCHIVE_ENTRY_ACL_WRITE_DATA | ARCHIVE_ENTRY_ACL_ADD_FILE, 'w',
94 L'w' },
95 { ARCHIVE_ENTRY_ACL_EXECUTE, 'x', L'x' },
96 { ARCHIVE_ENTRY_ACL_APPEND_DATA | ARCHIVE_ENTRY_ACL_ADD_SUBDIRECTORY,
97 'p', L'p' },
98 { ARCHIVE_ENTRY_ACL_DELETE, 'd', L'd' },
99 { ARCHIVE_ENTRY_ACL_DELETE_CHILD, 'D', L'D' },
100 { ARCHIVE_ENTRY_ACL_READ_ATTRIBUTES, 'a', L'a' },
101 { ARCHIVE_ENTRY_ACL_WRITE_ATTRIBUTES, 'A', L'A' },
102 { ARCHIVE_ENTRY_ACL_READ_NAMED_ATTRS, 'R', L'R' },
103 { ARCHIVE_ENTRY_ACL_WRITE_NAMED_ATTRS, 'W', L'W' },
104 { ARCHIVE_ENTRY_ACL_READ_ACL, 'c', L'c' },
105 { ARCHIVE_ENTRY_ACL_WRITE_ACL, 'C', L'C' },
106 { ARCHIVE_ENTRY_ACL_WRITE_OWNER, 'o', L'o' },
107 { ARCHIVE_ENTRY_ACL_SYNCHRONIZE, 's', L's' }
108};
109
110static const int nfsv4_acl_perm_map_size = (int)(sizeof(nfsv4_acl_perm_map) /
111 sizeof(nfsv4_acl_perm_map[0]));
112
113static const struct {
114 const int perm;
115 const char c;
116 const wchar_t wc;
117} nfsv4_acl_flag_map[] = {
118 { ARCHIVE_ENTRY_ACL_ENTRY_FILE_INHERIT, 'f', L'f' },
119 { ARCHIVE_ENTRY_ACL_ENTRY_DIRECTORY_INHERIT, 'd', L'd' },
120 { ARCHIVE_ENTRY_ACL_ENTRY_INHERIT_ONLY, 'i', L'i' },
121 { ARCHIVE_ENTRY_ACL_ENTRY_NO_PROPAGATE_INHERIT, 'n', L'n' },
122 { ARCHIVE_ENTRY_ACL_ENTRY_SUCCESSFUL_ACCESS, 'S', L'S' },
123 { ARCHIVE_ENTRY_ACL_ENTRY_FAILED_ACCESS, 'F', L'F' },
124 { ARCHIVE_ENTRY_ACL_ENTRY_INHERITED, 'I', L'I' }
125};
126
127static const int nfsv4_acl_flag_map_size = (int)(sizeof(nfsv4_acl_flag_map) /
128 sizeof(nfsv4_acl_flag_map[0]));
129
86void
87archive_acl_clear(struct archive_acl *acl)
88{
89 struct archive_acl_entry *ap;
90
91 while (acl->acl_head != NULL) {
92 ap = acl->acl_head->next;
93 archive_mstring_clean(&acl->acl_head->name);

--- 642 unchanged lines hidden (view full) ---

736 append_id_w(wp, id / 10);
737 *(*wp)++ = L"0123456789"[id % 10];
738}
739
740static void
741append_entry_w(wchar_t **wp, const wchar_t *prefix, int type,
742 int tag, int flags, const wchar_t *wname, int perm, int id)
743{
130void
131archive_acl_clear(struct archive_acl *acl)
132{
133 struct archive_acl_entry *ap;
134
135 while (acl->acl_head != NULL) {
136 ap = acl->acl_head->next;
137 archive_mstring_clean(&acl->acl_head->name);

--- 642 unchanged lines hidden (view full) ---

780 append_id_w(wp, id / 10);
781 *(*wp)++ = L"0123456789"[id % 10];
782}
783
784static void
785append_entry_w(wchar_t **wp, const wchar_t *prefix, int type,
786 int tag, int flags, const wchar_t *wname, int perm, int id)
787{
788 int i;
789
744 if (prefix != NULL) {
745 wcscpy(*wp, prefix);
746 *wp += wcslen(*wp);
747 }
748 switch (tag) {
749 case ARCHIVE_ENTRY_ACL_USER_OBJ:
750 wname = NULL;
751 id = -1;

--- 53 unchanged lines hidden (view full) ---

805 *(*wp)++ = L':';
806 }
807 if ((type & ARCHIVE_ENTRY_ACL_TYPE_POSIX1E) != 0) {
808 /* POSIX.1e ACL perms */
809 *(*wp)++ = (perm & 0444) ? L'r' : L'-';
810 *(*wp)++ = (perm & 0222) ? L'w' : L'-';
811 *(*wp)++ = (perm & 0111) ? L'x' : L'-';
812 } else {
790 if (prefix != NULL) {
791 wcscpy(*wp, prefix);
792 *wp += wcslen(*wp);
793 }
794 switch (tag) {
795 case ARCHIVE_ENTRY_ACL_USER_OBJ:
796 wname = NULL;
797 id = -1;

--- 53 unchanged lines hidden (view full) ---

851 *(*wp)++ = L':';
852 }
853 if ((type & ARCHIVE_ENTRY_ACL_TYPE_POSIX1E) != 0) {
854 /* POSIX.1e ACL perms */
855 *(*wp)++ = (perm & 0444) ? L'r' : L'-';
856 *(*wp)++ = (perm & 0222) ? L'w' : L'-';
857 *(*wp)++ = (perm & 0111) ? L'x' : L'-';
858 } else {
813 /* NFS4 ACL perms */
814 *(*wp)++ = (perm & (ARCHIVE_ENTRY_ACL_READ_DATA |
815 ARCHIVE_ENTRY_ACL_LIST_DIRECTORY)) ? L'r' : L'-';
816 *(*wp)++ = (perm & (ARCHIVE_ENTRY_ACL_WRITE_DATA |
817 ARCHIVE_ENTRY_ACL_ADD_FILE)) ? L'w' : L'-';
818 *(*wp)++ = (perm & ARCHIVE_ENTRY_ACL_EXECUTE) ? L'x' : L'-';
819 *(*wp)++ = (perm & (ARCHIVE_ENTRY_ACL_APPEND_DATA |
820 ARCHIVE_ENTRY_ACL_ADD_SUBDIRECTORY)) ? L'p' : L'-';
821 *(*wp)++ = (perm & ARCHIVE_ENTRY_ACL_DELETE) ? L'd' : L'-';
822 *(*wp)++ = (perm &
823 ARCHIVE_ENTRY_ACL_DELETE_CHILD) ? L'D' : L'-';
824 *(*wp)++ = (perm &
825 ARCHIVE_ENTRY_ACL_READ_ATTRIBUTES) ? L'a' : L'-';
826 *(*wp)++ = (perm &
827 ARCHIVE_ENTRY_ACL_WRITE_ATTRIBUTES) ? L'A' : L'-';
828 *(*wp)++ = (perm &
829 ARCHIVE_ENTRY_ACL_READ_NAMED_ATTRS) ? L'R' : L'-';
830 *(*wp)++ = (perm &
831 ARCHIVE_ENTRY_ACL_WRITE_NAMED_ATTRS) ? L'W' : L'-';
832 *(*wp)++ = (perm & ARCHIVE_ENTRY_ACL_READ_ACL) ? L'c' : L'-';
833 *(*wp)++ = (perm & ARCHIVE_ENTRY_ACL_WRITE_ACL) ? L'C' : L'-';
834 *(*wp)++ = (perm &
835 ARCHIVE_ENTRY_ACL_WRITE_OWNER) ? L'o' : L'-';
836 *(*wp)++ = (perm &
837 ARCHIVE_ENTRY_ACL_SYNCHRONIZE) ? L's' : L'-';
859 /* NFSv4 ACL perms */
860 for (i = 0; i < nfsv4_acl_perm_map_size; i++) {
861 if (perm & nfsv4_acl_perm_map[i].perm)
862 *(*wp)++ = nfsv4_acl_perm_map[i].wc;
863 else if ((flags & ARCHIVE_ENTRY_ACL_STYLE_COMPACT) == 0)
864 *(*wp)++ = L'-';
865 }
838 *(*wp)++ = L':';
866 *(*wp)++ = L':';
839 *(*wp)++ = (perm &
840 ARCHIVE_ENTRY_ACL_ENTRY_FILE_INHERIT) ? L'f' : L'-';
841 *(*wp)++ = (perm &
842 ARCHIVE_ENTRY_ACL_ENTRY_DIRECTORY_INHERIT) ? L'd' : L'-';
843 *(*wp)++ = (perm &
844 ARCHIVE_ENTRY_ACL_ENTRY_INHERIT_ONLY) ? L'i' : L'-';
845 *(*wp)++ = (perm &
846 ARCHIVE_ENTRY_ACL_ENTRY_NO_PROPAGATE_INHERIT) ? L'n' : L'-';
847 *(*wp)++ = (perm &
848 ARCHIVE_ENTRY_ACL_ENTRY_SUCCESSFUL_ACCESS) ? L'S' : L'-';
849 *(*wp)++ = (perm &
850 ARCHIVE_ENTRY_ACL_ENTRY_FAILED_ACCESS) ? L'F' : L'-';
851 *(*wp)++ = (perm &
852 ARCHIVE_ENTRY_ACL_ENTRY_INHERITED) ? L'I' : L'-';
867 for (i = 0; i < nfsv4_acl_flag_map_size; i++) {
868 if (perm & nfsv4_acl_flag_map[i].perm)
869 *(*wp)++ = nfsv4_acl_flag_map[i].wc;
870 else if ((flags & ARCHIVE_ENTRY_ACL_STYLE_COMPACT) == 0)
871 *(*wp)++ = L'-';
872 }
853 *(*wp)++ = L':';
854 switch (type) {
855 case ARCHIVE_ENTRY_ACL_TYPE_ALLOW:
856 wcscpy(*wp, L"allow");
857 break;
858 case ARCHIVE_ENTRY_ACL_TYPE_DENY:
859 wcscpy(*wp, L"deny");
860 break;

--- 132 unchanged lines hidden (view full) ---

993 append_id(p, id / 10);
994 *(*p)++ = "0123456789"[id % 10];
995}
996
997static void
998append_entry(char **p, const char *prefix, int type,
999 int tag, int flags, const char *name, int perm, int id)
1000{
873 *(*wp)++ = L':';
874 switch (type) {
875 case ARCHIVE_ENTRY_ACL_TYPE_ALLOW:
876 wcscpy(*wp, L"allow");
877 break;
878 case ARCHIVE_ENTRY_ACL_TYPE_DENY:
879 wcscpy(*wp, L"deny");
880 break;

--- 132 unchanged lines hidden (view full) ---

1013 append_id(p, id / 10);
1014 *(*p)++ = "0123456789"[id % 10];
1015}
1016
1017static void
1018append_entry(char **p, const char *prefix, int type,
1019 int tag, int flags, const char *name, int perm, int id)
1020{
1021 int i;
1022
1001 if (prefix != NULL) {
1002 strcpy(*p, prefix);
1003 *p += strlen(*p);
1004 }
1005 switch (tag) {
1006 case ARCHIVE_ENTRY_ACL_USER_OBJ:
1007 name = NULL;
1008 id = -1;

--- 53 unchanged lines hidden (view full) ---

1062 *(*p)++ = ':';
1063 }
1064 if ((type & ARCHIVE_ENTRY_ACL_TYPE_POSIX1E) != 0) {
1065 /* POSIX.1e ACL perms */
1066 *(*p)++ = (perm & 0444) ? 'r' : '-';
1067 *(*p)++ = (perm & 0222) ? 'w' : '-';
1068 *(*p)++ = (perm & 0111) ? 'x' : '-';
1069 } else {
1023 if (prefix != NULL) {
1024 strcpy(*p, prefix);
1025 *p += strlen(*p);
1026 }
1027 switch (tag) {
1028 case ARCHIVE_ENTRY_ACL_USER_OBJ:
1029 name = NULL;
1030 id = -1;

--- 53 unchanged lines hidden (view full) ---

1084 *(*p)++ = ':';
1085 }
1086 if ((type & ARCHIVE_ENTRY_ACL_TYPE_POSIX1E) != 0) {
1087 /* POSIX.1e ACL perms */
1088 *(*p)++ = (perm & 0444) ? 'r' : '-';
1089 *(*p)++ = (perm & 0222) ? 'w' : '-';
1090 *(*p)++ = (perm & 0111) ? 'x' : '-';
1091 } else {
1070 /* NFS4 ACL perms */
1071 *(*p)++ = (perm & (ARCHIVE_ENTRY_ACL_READ_DATA |
1072 ARCHIVE_ENTRY_ACL_LIST_DIRECTORY)) ? 'r' : '-';
1073 *(*p)++ = (perm & (ARCHIVE_ENTRY_ACL_WRITE_DATA |
1074 ARCHIVE_ENTRY_ACL_ADD_FILE)) ? 'w' : '-';
1075 *(*p)++ = (perm & (ARCHIVE_ENTRY_ACL_EXECUTE)) ? 'x' : '-';
1076 *(*p)++ = (perm & (ARCHIVE_ENTRY_ACL_APPEND_DATA |
1077 ARCHIVE_ENTRY_ACL_ADD_SUBDIRECTORY)) ? 'p' : '-';
1078 *(*p)++ = (perm & ARCHIVE_ENTRY_ACL_DELETE) ? 'd' : '-';
1079 *(*p)++ = (perm & ARCHIVE_ENTRY_ACL_DELETE_CHILD) ? 'D' : '-';
1080 *(*p)++ = (perm &
1081 ARCHIVE_ENTRY_ACL_READ_ATTRIBUTES) ? 'a' : '-';
1082 *(*p)++ = (perm &
1083 ARCHIVE_ENTRY_ACL_WRITE_ATTRIBUTES) ? 'A' : '-';
1084 *(*p)++ = (perm &
1085 ARCHIVE_ENTRY_ACL_READ_NAMED_ATTRS) ? 'R' : '-';
1086 *(*p)++ = (perm &
1087 ARCHIVE_ENTRY_ACL_WRITE_NAMED_ATTRS) ? 'W' : '-';
1088 *(*p)++ = (perm &
1089 ARCHIVE_ENTRY_ACL_READ_ACL) ? 'c' : '-';
1090 *(*p)++ = (perm &
1091 ARCHIVE_ENTRY_ACL_WRITE_ACL) ? 'C' : '-';
1092 *(*p)++ = (perm &
1093 ARCHIVE_ENTRY_ACL_WRITE_OWNER) ? 'o' : '-';
1094 *(*p)++ = (perm &
1095 ARCHIVE_ENTRY_ACL_SYNCHRONIZE) ? 's' : '-';
1092 /* NFSv4 ACL perms */
1093 for (i = 0; i < nfsv4_acl_perm_map_size; i++) {
1094 if (perm & nfsv4_acl_perm_map[i].perm)
1095 *(*p)++ = nfsv4_acl_perm_map[i].c;
1096 else if ((flags & ARCHIVE_ENTRY_ACL_STYLE_COMPACT) == 0)
1097 *(*p)++ = '-';
1098 }
1096 *(*p)++ = ':';
1099 *(*p)++ = ':';
1097 *(*p)++ = (perm &
1098 ARCHIVE_ENTRY_ACL_ENTRY_FILE_INHERIT) ? 'f' : '-';
1099 *(*p)++ = (perm &
1100 ARCHIVE_ENTRY_ACL_ENTRY_DIRECTORY_INHERIT) ? 'd' : '-';
1101 *(*p)++ = (perm &
1102 ARCHIVE_ENTRY_ACL_ENTRY_INHERIT_ONLY) ? 'i' : '-';
1103 *(*p)++ = (perm &
1104 ARCHIVE_ENTRY_ACL_ENTRY_NO_PROPAGATE_INHERIT) ? 'n' : '-';
1105 *(*p)++ = (perm &
1106 ARCHIVE_ENTRY_ACL_ENTRY_SUCCESSFUL_ACCESS) ? 'S' : '-';
1107 *(*p)++ = (perm &
1108 ARCHIVE_ENTRY_ACL_ENTRY_FAILED_ACCESS) ? 'F' : '-';
1109 *(*p)++ = (perm &
1110 ARCHIVE_ENTRY_ACL_ENTRY_INHERITED) ? 'I' : '-';
1100 for (i = 0; i < nfsv4_acl_flag_map_size; i++) {
1101 if (perm & nfsv4_acl_flag_map[i].perm)
1102 *(*p)++ = nfsv4_acl_flag_map[i].c;
1103 else if ((flags & ARCHIVE_ENTRY_ACL_STYLE_COMPACT) == 0)
1104 *(*p)++ = '-';
1105 }
1111 *(*p)++ = ':';
1112 switch (type) {
1113 case ARCHIVE_ENTRY_ACL_TYPE_ALLOW:
1114 strcpy(*p, "allow");
1115 break;
1116 case ARCHIVE_ENTRY_ACL_TYPE_DENY:
1117 strcpy(*p, "deny");
1118 break;

--- 343 unchanged lines hidden (view full) ---

1462/*
1463 * Parse a string as a NFS4 ACL permission field.
1464 * Returns true if the string is non-empty and consists only of NFS4 ACL
1465 * permission characters, false otherwise
1466 */
1467static int
1468is_nfs4_perms_w(const wchar_t *start, const wchar_t *end, int *permset)
1469{
1106 *(*p)++ = ':';
1107 switch (type) {
1108 case ARCHIVE_ENTRY_ACL_TYPE_ALLOW:
1109 strcpy(*p, "allow");
1110 break;
1111 case ARCHIVE_ENTRY_ACL_TYPE_DENY:
1112 strcpy(*p, "deny");
1113 break;

--- 343 unchanged lines hidden (view full) ---

1457/*
1458 * Parse a string as a NFS4 ACL permission field.
1459 * Returns true if the string is non-empty and consists only of NFS4 ACL
1460 * permission characters, false otherwise
1461 */
1462static int
1463is_nfs4_perms_w(const wchar_t *start, const wchar_t *end, int *permset)
1464{
1470 const wchar_t *p;
1465 const wchar_t *p = start;
1471
1466
1472 if (start >= end)
1473 return (0);
1474 p = start;
1475 while (p < end) {
1476 switch (*p++) {
1477 case L'r':
1478 *permset |= ARCHIVE_ENTRY_ACL_READ_DATA;
1479 break;
1480 case L'w':
1481 *permset |= ARCHIVE_ENTRY_ACL_WRITE_DATA;
1482 break;

--- 45 unchanged lines hidden (view full) ---

1528/*
1529 * Parse a string as a NFS4 ACL flags field.
1530 * Returns true if the string is non-empty and consists only of NFS4 ACL
1531 * flag characters, false otherwise
1532 */
1533static int
1534is_nfs4_flags_w(const wchar_t *start, const wchar_t *end, int *permset)
1535{
1467 while (p < end) {
1468 switch (*p++) {
1469 case L'r':
1470 *permset |= ARCHIVE_ENTRY_ACL_READ_DATA;
1471 break;
1472 case L'w':
1473 *permset |= ARCHIVE_ENTRY_ACL_WRITE_DATA;
1474 break;

--- 45 unchanged lines hidden (view full) ---

1520/*
1521 * Parse a string as a NFS4 ACL flags field.
1522 * Returns true if the string is non-empty and consists only of NFS4 ACL
1523 * flag characters, false otherwise
1524 */
1525static int
1526is_nfs4_flags_w(const wchar_t *start, const wchar_t *end, int *permset)
1527{
1536 const wchar_t *p;
1528 const wchar_t *p = start;
1537
1529
1538 if (start >= end)
1539 return (0);
1540 p = start;
1541 while (p < end) {
1542 switch(*p++) {
1543 case L'f':
1544 *permset |= ARCHIVE_ENTRY_ACL_ENTRY_FILE_INHERIT;
1545 break;
1546 case L'd':
1547 *permset |= ARCHIVE_ENTRY_ACL_ENTRY_DIRECTORY_INHERIT;
1548 break;

--- 391 unchanged lines hidden (view full) ---

1940/*
1941 * Parse a string as a NFS4 ACL permission field.
1942 * Returns true if the string is non-empty and consists only of NFS4 ACL
1943 * permission characters, false otherwise
1944 */
1945static int
1946is_nfs4_perms(const char *start, const char *end, int *permset)
1947{
1530 while (p < end) {
1531 switch(*p++) {
1532 case L'f':
1533 *permset |= ARCHIVE_ENTRY_ACL_ENTRY_FILE_INHERIT;
1534 break;
1535 case L'd':
1536 *permset |= ARCHIVE_ENTRY_ACL_ENTRY_DIRECTORY_INHERIT;
1537 break;

--- 391 unchanged lines hidden (view full) ---

1929/*
1930 * Parse a string as a NFS4 ACL permission field.
1931 * Returns true if the string is non-empty and consists only of NFS4 ACL
1932 * permission characters, false otherwise
1933 */
1934static int
1935is_nfs4_perms(const char *start, const char *end, int *permset)
1936{
1948 const char *p;
1937 const char *p = start;
1949
1938
1950 if (start >= end)
1951 return (0);
1952 p = start;
1953 while (p < end) {
1954 switch (*p++) {
1955 case 'r':
1956 *permset |= ARCHIVE_ENTRY_ACL_READ_DATA;
1957 break;
1958 case 'w':
1959 *permset |= ARCHIVE_ENTRY_ACL_WRITE_DATA;
1960 break;

--- 45 unchanged lines hidden (view full) ---

2006/*
2007 * Parse a string as a NFS4 ACL flags field.
2008 * Returns true if the string is non-empty and consists only of NFS4 ACL
2009 * flag characters, false otherwise
2010 */
2011static int
2012is_nfs4_flags(const char *start, const char *end, int *permset)
2013{
1939 while (p < end) {
1940 switch (*p++) {
1941 case 'r':
1942 *permset |= ARCHIVE_ENTRY_ACL_READ_DATA;
1943 break;
1944 case 'w':
1945 *permset |= ARCHIVE_ENTRY_ACL_WRITE_DATA;
1946 break;

--- 45 unchanged lines hidden (view full) ---

1992/*
1993 * Parse a string as a NFS4 ACL flags field.
1994 * Returns true if the string is non-empty and consists only of NFS4 ACL
1995 * flag characters, false otherwise
1996 */
1997static int
1998is_nfs4_flags(const char *start, const char *end, int *permset)
1999{
2014 const char *p;
2000 const char *p = start;
2015
2001
2016 if (start >= end)
2017 return (0);
2018 p = start;
2019 while (p < end) {
2020 switch(*p++) {
2021 case 'f':
2022 *permset |= ARCHIVE_ENTRY_ACL_ENTRY_FILE_INHERIT;
2023 break;
2024 case 'd':
2025 *permset |= ARCHIVE_ENTRY_ACL_ENTRY_DIRECTORY_INHERIT;
2026 break;

--- 60 unchanged lines hidden ---
2002 while (p < end) {
2003 switch(*p++) {
2004 case 'f':
2005 *permset |= ARCHIVE_ENTRY_ACL_ENTRY_FILE_INHERIT;
2006 break;
2007 case 'd':
2008 *permset |= ARCHIVE_ENTRY_ACL_ENTRY_DIRECTORY_INHERIT;
2009 break;

--- 60 unchanged lines hidden ---