mirror of
https://github.com/freedombox/FreedomBox.git
synced 2026-03-25 09:21:10 +00:00
- Move render_tabs into plinth.views - Move admin_tabs and user_tabs into the class - New interproc module contains inter-process functions - New helper methods in TabMixin
72 lines
1.9 KiB
Python
72 lines
1.9 KiB
Python
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
|
|
import logging
|
|
import os
|
|
import pwd
|
|
import subprocess
|
|
|
|
from django.core.exceptions import ValidationError
|
|
from django.utils.translation import ugettext_lazy as _
|
|
from plinth.actions import superuser_run
|
|
from plinth.errors import ActionError
|
|
|
|
from plinth.modules.email_server import interproc
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
def exists_nam(username):
|
|
"""Returns True if the user's home directory exists"""
|
|
try:
|
|
passwd = pwd.getpwnam(username)
|
|
except KeyError as e:
|
|
raise ValidationError(_('User does not exist')) from e
|
|
return _exists(passwd)
|
|
|
|
|
|
def exists_uid(uid_number):
|
|
"""Returns True if the user's home directory exists"""
|
|
try:
|
|
passwd = pwd.getpwuid(uid_number)
|
|
except KeyError as e:
|
|
raise ValidationError(_('User does not exist')) from e
|
|
return _exists(passwd)
|
|
|
|
|
|
def _exists(passwd):
|
|
return os.path.exists(passwd.pw_dir)
|
|
|
|
|
|
def put_nam(username):
|
|
"""Create a home directory for the user (identified by username)"""
|
|
_put('nam', username)
|
|
|
|
|
|
def put_uid(uid_number):
|
|
"""Create a home directory for the user (identified by UID)"""
|
|
_put('uid', str(uid_number))
|
|
|
|
|
|
def _put(arg_type, user_info):
|
|
try:
|
|
args = ['-i', 'home', 'mk', arg_type, user_info]
|
|
superuser_run('email_server', args)
|
|
except ActionError as e:
|
|
raise RuntimeError('Action script failure') from e
|
|
|
|
|
|
def action_mk(arg_type, user_info):
|
|
if arg_type == 'nam':
|
|
passwd = pwd.getpwnam(user_info)
|
|
elif arg_type == 'uid':
|
|
passwd = pwd.getpwuid(int(user_info))
|
|
else:
|
|
raise ValueError('Unknown arg_type')
|
|
|
|
args = ['sudo', '-n', '--user=#' + str(passwd.pw_uid)]
|
|
args.extend(['/bin/sh', '-c', 'mkdir -p ~'])
|
|
completed = subprocess.run(args, capture_output=True)
|
|
if completed.returncode != 0:
|
|
interproc.log_subprocess(completed)
|
|
raise OSError('Could not create home directory')
|