mirror of
https://github.com/ansible/awx.git
synced 2026-05-08 09:57:35 -02:30
Merge pull request #372 from jangsutsr/7536_prevent_mistakenly_truncate_sgr
Prevent mistakenly truncate ANSI SGR code in job event stdout
This commit is contained in:
@@ -38,7 +38,7 @@ from rest_framework.utils.serializer_helpers import ReturnList
|
|||||||
from polymorphic.models import PolymorphicModel
|
from polymorphic.models import PolymorphicModel
|
||||||
|
|
||||||
# AWX
|
# AWX
|
||||||
from awx.main.constants import SCHEDULEABLE_PROVIDERS
|
from awx.main.constants import SCHEDULEABLE_PROVIDERS, ANSI_SGR_PATTERN
|
||||||
from awx.main.models import * # noqa
|
from awx.main.models import * # noqa
|
||||||
from awx.main.access import get_user_capabilities
|
from awx.main.access import get_user_capabilities
|
||||||
from awx.main.fields import ImplicitRoleField
|
from awx.main.fields import ImplicitRoleField
|
||||||
@@ -3120,6 +3120,14 @@ class JobEventSerializer(BaseSerializer):
|
|||||||
max_bytes = settings.EVENT_STDOUT_MAX_BYTES_DISPLAY
|
max_bytes = settings.EVENT_STDOUT_MAX_BYTES_DISPLAY
|
||||||
if max_bytes > 0 and 'stdout' in ret and len(ret['stdout']) >= max_bytes:
|
if max_bytes > 0 and 'stdout' in ret and len(ret['stdout']) >= max_bytes:
|
||||||
ret['stdout'] = ret['stdout'][:(max_bytes - 1)] + u'\u2026'
|
ret['stdout'] = ret['stdout'][:(max_bytes - 1)] + u'\u2026'
|
||||||
|
set_count = 0
|
||||||
|
reset_count = 0
|
||||||
|
for m in ANSI_SGR_PATTERN.finditer(ret['stdout']):
|
||||||
|
if m.string[m.start():m.end()] == u'\u001b[0m':
|
||||||
|
reset_count += 1
|
||||||
|
else:
|
||||||
|
set_count += 1
|
||||||
|
ret['stdout'] += u'\u001b[0m' * (set_count - reset_count)
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
|
|
||||||
@@ -3151,6 +3159,14 @@ class AdHocCommandEventSerializer(BaseSerializer):
|
|||||||
max_bytes = settings.EVENT_STDOUT_MAX_BYTES_DISPLAY
|
max_bytes = settings.EVENT_STDOUT_MAX_BYTES_DISPLAY
|
||||||
if max_bytes > 0 and 'stdout' in ret and len(ret['stdout']) >= max_bytes:
|
if max_bytes > 0 and 'stdout' in ret and len(ret['stdout']) >= max_bytes:
|
||||||
ret['stdout'] = ret['stdout'][:(max_bytes - 1)] + u'\u2026'
|
ret['stdout'] = ret['stdout'][:(max_bytes - 1)] + u'\u2026'
|
||||||
|
set_count = 0
|
||||||
|
reset_count = 0
|
||||||
|
for m in ANSI_SGR_PATTERN.finditer(ret['stdout']):
|
||||||
|
if m.string[m.start():m.end()] == u'\u001b[0m':
|
||||||
|
reset_count += 1
|
||||||
|
else:
|
||||||
|
set_count += 1
|
||||||
|
ret['stdout'] += u'\u001b[0m' * (set_count - reset_count)
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,8 +1,11 @@
|
|||||||
# Copyright (c) 2015 Ansible, Inc.
|
# Copyright (c) 2015 Ansible, Inc.
|
||||||
# All Rights Reserved.
|
# All Rights Reserved.
|
||||||
|
|
||||||
|
import re
|
||||||
|
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import ugettext_lazy as _
|
||||||
|
|
||||||
CLOUD_PROVIDERS = ('azure', 'azure_rm', 'ec2', 'gce', 'rax', 'vmware', 'openstack', 'satellite6', 'cloudforms')
|
CLOUD_PROVIDERS = ('azure', 'azure_rm', 'ec2', 'gce', 'rax', 'vmware', 'openstack', 'satellite6', 'cloudforms')
|
||||||
SCHEDULEABLE_PROVIDERS = CLOUD_PROVIDERS + ('custom', 'scm',)
|
SCHEDULEABLE_PROVIDERS = CLOUD_PROVIDERS + ('custom', 'scm',)
|
||||||
PRIVILEGE_ESCALATION_METHODS = [ ('sudo', _('Sudo')), ('su', _('Su')), ('pbrun', _('Pbrun')), ('pfexec', _('Pfexec')), ('dzdo', _('DZDO')), ('pmrun', _('Pmrun')), ('runas', _('Runas'))]
|
PRIVILEGE_ESCALATION_METHODS = [ ('sudo', _('Sudo')), ('su', _('Su')), ('pbrun', _('Pbrun')), ('pfexec', _('Pfexec')), ('dzdo', _('DZDO')), ('pmrun', _('Pmrun')), ('runas', _('Runas'))]
|
||||||
|
ANSI_SGR_PATTERN = re.compile(r'\x1b\[[0-9;]*m')
|
||||||
|
|||||||
Reference in New Issue
Block a user