

def drop_privileges(user=None, group=None):
    'Drop privileges to user/group privileges.'
    if ((user is None) and (group is None)):
        return
    if (os.geteuid() != 0):
        msg = _('Root permissions are required to drop privileges.')
        LOG.critical(msg)
        raise exceptions.FailToDropPrivilegesExit(msg)
    if (group is not None):
        try:
            os.setgroups([])
        except OSError:
            msg = _('Failed to remove supplemental groups')
            LOG.critical(msg)
            raise exceptions.FailToDropPrivilegesExit(msg)
        setgid(group)
    if (user is not None):
        setuid(user)
    LOG.info(_LI('Process runs with uid/gid: %(uid)s/%(gid)s'), {
        'uid': os.getuid(),
        'gid': os.getgid(),
    })

dataset/ETHPy150Open openstack/neutron/neutron/agent/linux/daemon.py drop_privileges/original