Skip to content

Commit

Permalink
fix(middlewared/account): do not leave a new homedir behind on error
Browse files Browse the repository at this point in the history
Ticket:	#77719
  • Loading branch information
william-gr committed Feb 28, 2019
1 parent 62cc7b1 commit 15a1bee
Showing 1 changed file with 26 additions and 22 deletions.
48 changes: 26 additions & 22 deletions src/middlewared/middlewared/plugins/account.py
Expand Up @@ -171,30 +171,34 @@ async def do_create(self, data):
home_mode = data.pop('home_mode')
if data['home'] and data['home'] != '/nonexistent':
try:
os.makedirs(data['home'], mode=int(home_mode, 8))
os.chown(data['home'], data['uid'], group['gid'])
except FileExistsError:
if not os.path.isdir(data['home']):
try:
os.makedirs(data['home'], mode=int(home_mode, 8))
new_homedir = True
os.chown(data['home'], data['uid'], group['gid'])
except FileExistsError:
if not os.path.isdir(data['home']):
raise CallError(
'Path for home directory already '
'exists and is not a directory',
errno.EEXIST
)

# If it exists, ensure the user is owner
os.chown(data['home'], data['uid'], group['gid'])
except OSError as oe:
raise CallError(
'Path for home directory already '
'exists and is not a directory',
errno.EEXIST
'Failed to create the home directory '
f'({data["home"]}) for user: {oe}'
)

# If it exists, ensure the user is owner
os.chown(data['home'], data['uid'], group['gid'])
except OSError as oe:
raise CallError(
'Failed to create the home directory '
f'({data["home"]}) for user: {oe}'
)
else:
new_homedir = True
if os.stat(data['home']).st_dev == os.stat('/mnt').st_dev:
raise CallError(
f'The path for the home directory "({data["home"]})" '
'must include a volume or dataset.'
)
if os.stat(data['home']).st_dev == os.stat('/mnt').st_dev:
raise CallError(
f'The path for the home directory "({data["home"]})" '
'must include a volume or dataset.'
)
except Exception:
if new_homedir:
shutil.rmtree(data['home'])
raise

if not data.get('uid'):
data['uid'] = await self.get_next_uid()
Expand Down

0 comments on commit 15a1bee

Please sign in to comment.