@@ -1222,7 +1222,7 @@ def pgdata_content(self, pgdata, ignore_ptrack=True, exclude_dirs=None):
12221222directory_dict = {}
12231223directory_dict ['pgdata' ]= pgdata
12241224directory_dict ['files' ]= {}
1225- directory_dict ['dirs' ]= []
1225+ directory_dict ['dirs' ]= {}
12261226for root ,dirs ,files in os .walk (pgdata ,followlinks = True ):
12271227dirs [:]= [d for d in dirs if d not in dirs_to_ignore ]
12281228for file in files :
@@ -1267,7 +1267,18 @@ def pgdata_content(self, pgdata, ignore_ptrack=True, exclude_dirs=None):
12671267break
12681268
12691269if not found :
1270- directory_dict ['dirs' ].append (directory_relpath )
1270+ directory_dict ['dirs' ][directory_relpath ]= {}
1271+
1272+ # get permissions for every file and directory
1273+ for file in directory_dict ['dirs' ]:
1274+ full_path = os .path .join (pgdata ,file )
1275+ directory_dict ['dirs' ][file ]['mode' ]= os .stat (
1276+ full_path ).st_mode
1277+
1278+ for file in directory_dict ['files' ]:
1279+ full_path = os .path .join (pgdata ,file )
1280+ directory_dict ['files' ][file ]['mode' ]= os .stat (
1281+ full_path ).st_mode
12711282
12721283return directory_dict
12731284
@@ -1283,6 +1294,21 @@ def compare_pgdata(self, original_pgdata, restored_pgdata):
12831294error_message += '\n Directory was not present'
12841295error_message += ' in original PGDATA: {0}\n ' .format (
12851296os .path .join (restored_pgdata ['pgdata' ],directory ))
1297+ else :
1298+ if (
1299+ restored_pgdata ['dirs' ][directory ]['mode' ]!=
1300+ original_pgdata ['dirs' ][directory ]['mode' ]
1301+ ):
1302+ fail = True
1303+ error_message += '\n Dir permissions mismatch:\n '
1304+ error_message += ' Dir old: {0} Permissions: {1}\n ' .format (
1305+ os .path .join (original_pgdata ['pgdata' ],directory ),
1306+ original_pgdata ['dirs' ][directory ]['mode' ])
1307+ error_message += ' Dir new: {0} Permissions: {1}\n ' .format (
1308+ os .path .join (restored_pgdata ['pgdata' ],directory ),
1309+ restored_pgdata ['dirs' ][directory ]['mode' ])
1310+
1311+
12861312
12871313for directory in original_pgdata ['dirs' ]:
12881314if directory not in restored_pgdata ['dirs' ]:
@@ -1305,6 +1331,19 @@ def compare_pgdata(self, original_pgdata, restored_pgdata):
13051331for file in original_pgdata ['files' ]:
13061332if file in restored_pgdata ['files' ]:
13071333
1334+ if (
1335+ restored_pgdata ['files' ][file ]['mode' ]!=
1336+ original_pgdata ['files' ][file ]['mode' ]
1337+ ):
1338+ fail = True
1339+ error_message += '\n File permissions mismatch:\n '
1340+ error_message += ' File_old: {0} Permissions: {1}\n ' .format (
1341+ os .path .join (original_pgdata ['pgdata' ],file ),
1342+ original_pgdata ['files' ][file ]['mode' ])
1343+ error_message += ' File_new: {0} Permissions: {1}\n ' .format (
1344+ os .path .join (restored_pgdata ['pgdata' ],file ),
1345+ restored_pgdata ['files' ][file ]['mode' ])
1346+
13081347if (
13091348original_pgdata ['files' ][file ]['md5' ]!=
13101349restored_pgdata ['files' ][file ]['md5' ]