403Webshell
Server IP : 158.178.228.73  /  Your IP : 80.80.80.153
Web Server : Apache/2.4.37 (Oracle Linux Server) OpenSSL/1.1.1k
System : Linux ust-wp1-prod 5.15.0-308.179.6.el8uek.x86_64 #2 SMP Wed Apr 23 10:46:57 PDT 2025 x86_64
User : tomasFtp ( 1007)
PHP Version : 8.4.8
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : ON  |  Sudo : ON  |  Pkexec : ON
Directory :  /proc/thread-self/root/proc/self/root/proc/thread-self/root/bin/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /proc/thread-self/root/proc/self/root/proc/thread-self/root/bin/ksplice
#! /usr/bin/python3.6
# -*- coding: utf-8 -*-
# Copyright © 2015, 2019 Oracle and/or its affiliates. All rights reserved.
from __future__ import print_function
import argparse
import os
import sys

from ksplicelib.cron import cron_backoff
from ksplicelib.pager import output_to_pager
from ksplicelib.logger import KspliceClientError, Logger, NoUspliceTargetsKspliceClientError
from ksplicelib.config import KspliceConfig
from ksplicelib.pidlock import PIDLock, PIDLockFailed
from ksplicelib.utils import (
    CoreDebugLog,
    has_errors,
    print_blacklisted,
    print_errors,
    )
from ksplicelib.version import KSPLICE_VERSION

KSPLICE_LOCK_FILE = '/var/lib/ksplice/lock'

from ksplicelib.user import (  # noqa
    do_apply_user,
    do_list_user,
    do_remove_user,
    do_show_user,
    do_undo_user,
    do_upgrade_user,
    do_init_user,
    manager_factory,
    )

from ksplicelib.kernel import (  # noqa
    do_apply_kernel,
    do_list_kernel,
    do_remove_kernel,
    do_show_kernel,
    do_uname_kernel,
    do_undo_kernel,
    do_upgrade_kernel,
    do_init_kernel,
    )

from ksplicelib.xen import (  # noqa
    do_apply_xen,
    do_list_xen,
    do_show_xen,
    do_undo_xen,
    do_upgrade_xen,
    do_remove_xen,
    do_init_xen,
    )


ERROR_UNKNOWN         = 1
ERROR_INTERRUPT      = 2
 # This is inconsistent but the previous two errors aren't likely to ever occur
 # together and it saves some bits for future use
ERROR_NO_BINARIES    = 3
ERROR_KERNEL_FAIL    = 4
ERROR_USERSPACE_FAIL = 8
ERROR_XEN_FAIL       = 16

def do_init_all(args, config):
    do_init_xen(args, config)
    return 0

def do_list_all(args, config):
    do_list_user(args, config)
    do_list_kernel(args, config)
    do_list_xen(args, config)

    return 0

def do_show_all(args, config):
    failed = False

    print('Ksplice user-space updates:')
    if do_show_user(args, config) != 0:
        failed = True
    print('\nKsplice kernel updates:')
    if do_show_kernel(args, config) != 0:
        failed = True
    if do_show_xen(args, config) != 0:
        failed = True

    return -1 if failed else 0

def do_upgrade_all(args, config):
    exit_code = 0

    upgrade_result = do_upgrade_user(args, config)

    if do_upgrade_kernel(args, config) != 0:
        exit_code = exit_code | ERROR_KERNEL_FAIL

    if config.xen_enabled and do_upgrade_xen(args, config) != 0:
        exit_code = exit_code | ERROR_XEN_FAIL

    if upgrade_result != 0:
        exit_code = exit_code | ERROR_USERSPACE_FAIL

    return exit_code

def do_remove_all(args, config):
    failed = False

    remove_result = do_remove_user(args, config)

    if do_remove_kernel(args, config) != 0:
        failed = True

    if config.xen_enabled and do_remove_xen(args, config) != 0:
        failed = True

    if remove_result != 0:
        failed = True

    return -1 if failed else 0

def dispatch(args, config):
    handler = globals().get('do_%s_%s' % (args.command, args.subsys))
    if handler is None:
        print('error: "{command}" not applicable to subsystem "{subsys}"'.format(command=args.command,
                                                                                 subsys=args.subsys))
    else:
        Logger().log.debug("Running %s %s." % (args.subsys, args.command))
        pager_commands = ['list', 'show']
        if args.command in pager_commands:
            output_to_pager()
        try:
            with PIDLock(KSPLICE_LOCK_FILE):
                return handler(args, config)
        except PIDLockFailed:
            Logger().log.error('Failed to lock {lockfile}, another instance of ksplice may be running'.format(lockfile=KSPLICE_LOCK_FILE))
            return 1
    return 0

def configure_logger(args):
    try:
        logger = Logger()
        logger.configure(args)
    except Exception:
        print('Error: failed to configure the logger', file=sys.stderr)
        sys.exit(1)

def main():
    default_path = "/usr/sbin:/usr/bin:/sbin:/bin"
    if 'PATH' not in os.environ or not os.environ['PATH']:
        os.environ['PATH'] = default_path
    else:
        os.environ['PATH'] += ":" + default_path

    parser = argparse.ArgumentParser(prog='ksplice')

    parser.add_argument('subsys',
                        choices=['kernel', 'user', 'xen', 'all'],
                        help='Select what to patch, either the kernel, user-space, Xen hypervisor or all.',
                        default='all')

    subparsers = parser.add_subparsers(title='subcommands',
                                       description='valid subcommands',
                                       metavar='{list-targets,uname,upgrade,remove,show}')
    subparsers.required = True

    parser.add_argument('--debug', help='Write a debug log file', type=str)
    parser.add_argument('--yes', '-y', help='answer "yes" to all user prompts',
                        action='store_true', dest='yes', default=False)
    parser.add_argument('--retries', type=int, default=0, metavar='max_retries',
                        help='Retry patching until all running processes are patched or exceeded maximum number of retries')
    parser.add_argument('--no', '-n', help='answer "no" to all user prompts',
                        action='store_true', dest='no', default=False)
    parser.add_argument('--verbose', '-v', help='provide more detail about what this program is doing',
                        action='count', default=0)
    parser.add_argument('--quiet', '-q', help="don't print status messages",
                        action='store_true', default=False)
    parser.add_argument('--version', action='version', version='Ksplice %s' % (KSPLICE_VERSION,))
    parser.add_argument('--cron', help=argparse.SUPPRESS, action='store_true', default=False)

    # Parser for list-targets
    list_targets_parser = subparsers.add_parser('list-targets',
                                                description='List Ksplice targets',
                                                help='List all Ksplice capable targets in running processes')
    list_targets_parser.add_argument('--pid', type=int,
                                     help='PID to list targets for, omitting this option scans all processes')
    list_targets_parser.add_argument('--target', type=str,
                                     help='Target name to limit results to, omitting this option lists all targets')
    list_targets_parser.set_defaults(func=dispatch, command='list')

    # Parser for uname
    uname_parser = subparsers.add_parser('uname',
                                         description='Show the effective uname output for a patched kernel',
                                         help='Show the effective uname output for the kernel after Ksplice updates have been applied.')
    uname_parser.add_argument('-a', '--all', action='store_const', const='-a',
                              help='print all information, in the following order, except omit -p and -i if unknown')
    uname_parser.add_argument('-s', '--kernel-name', action='store_const', const='-s',
                              help='print the kernel name')
    uname_parser.add_argument('-n', '--nodename', action='store_const', const='-n',
                              help='print the network node hostname')
    uname_parser.add_argument('-r', '--kernel-release', action='store_const', const='-r',
                              help='print the kernel release')
    uname_parser.add_argument('-v', '--kernel-version', action='store_const', const='-v',
                              help='print the kernel version')
    uname_parser.add_argument('-m', '--machine', action='store_const', const='-m',
                              help='print the machine hardware name')
    uname_parser.add_argument('-p', '--processor', action='store_const', const='-p',
                              help='print the processor type or "unknown"')
    uname_parser.add_argument('-i', '--hardware-platform', action='store_const', const='-i',
                              help='print the hardware platform or "unknown"')
    uname_parser.add_argument('-o', '--operating-system', action='store_const', const='-o',
                              help='print the operating system')
    uname_parser.set_defaults(func=dispatch, command='uname')

    # Parser for upgrade
    upgrade_parser = subparsers.add_parser('upgrade',
                                           description='Upgrade the system with all available updates',
                                           help='Fetch all available updates and apply them to the system')
    upgrade_parser.add_argument('--pid', type=int,
                                help='PID to undo the update from, omitting this option undoes the update from all processes')
    upgrade_parser.add_argument('--no-yum', action='store_true', default=False,
                                help=argparse.SUPPRESS)

    # symbols that can be ignored if not
    # on the call stack during stack check:
    # format: <kid>:<target>:<symbol> where <target> could be empty
    upgrade_parser.add_argument('--reliable-match', default=list(), action='append',
                                help=argparse.SUPPRESS)
    upgrade_parser.set_defaults(func=dispatch, command='upgrade')

    # Parser for remove
    remove_parser = subparsers.add_parser('remove',
                                          description='Remove selected updates from a running system',
                                          help='Remove selected updates from a running system')
    remove_parser.add_argument('--all', action='store_true', default=False,
                               help='take action for all updates')
    remove_parser.add_argument('--pid', type=int,
                               help='PID to remove the updates from, omitting this option removes the updates from all processes')
    remove_parser.add_argument('kids', nargs='*',
                               help='The Ksplice IDs of the updates to remove from the system')
    # symbols that can be ignored if not
    # on the call stack during stack check:
    # format: <kid>:<target>:<symbol> where <target> could be empty
    remove_parser.add_argument('--reliable-match', default=list(), action='append',
                               help=argparse.SUPPRESS)
    remove_parser.set_defaults(func=dispatch, command='remove')

    # Parser for apply
    apply_parser = subparsers.add_parser('apply',
                                         description='Apply a Ksplice update',
                                         )
    apply_parser.add_argument('--pid', type=int,
                              help='PID to apply the update on, omitting this option applies the update to all processes')
    apply_parser.add_argument('--partial', action='store_true',
                              help='For kernel updates only, applies the update only to those modules which are loaded.')
    # symbols that can be ignored if not on the call stack during stack check:
    # format: <symbol>
    apply_parser.add_argument('--reliable-match', default=list(), action='append',
                             help=argparse.SUPPRESS)
    apply_parser.add_argument('update', nargs=1, help='The update tarball to apply')
    apply_parser.set_defaults(func=dispatch, command='apply')

    # Parser for undo
    undo_parser = subparsers.add_parser('undo',
                                        description='Undo a Ksplice update')
    undo_parser.add_argument('--pid', type=int,
                             help='PID to undo the update from, omitting this option undoes the update from all processes')
    undo_parser.add_argument('kid', nargs=1, help='The update KID to undo')
    # symbols that can be ignored if not on the call stack during stack check:
    # format: <symbol>
    undo_parser.add_argument('--reliable-match', default=list(), action='append',
                             help=argparse.SUPPRESS)
    undo_parser.set_defaults(func=dispatch, command='undo')

    # Parser for show
    show_parser = subparsers.add_parser('show',
                                        description='Show installed Ksplice updates',
                                        help='Show Ksplice updates that are installed for processes running on the system')
    show_parser.add_argument('--pid', type=int,
                             help='PID to list updates for, omitting this option will show updates for all processes')
    show_parser.add_argument('--available', action='store_const', const='--available',
                             help='Show the updates that are available to be installed')
    show_parser.add_argument('--count', action='store_const', const='--count',
                             help=argparse.SUPPRESS)
    show_parser.add_argument('--all', action='store_const', const='--all',
                             help=argparse.SUPPRESS)
    show_parser.set_defaults(func=dispatch, command='show')

    init_parser = subparsers.add_parser('init',
                                        description='Init ksplice updates',
                                       )
    init_parser.add_argument('--check', action='store_true', dest='check_init', default=False,
                             help=argparse.SUPPRESS)
    init_parser.set_defaults(func=dispatch, command='init')


    args = parser.parse_args(sys.argv[1:])

    if args.debug:
        try:
            os.unlink(args.debug)
        except OSError:
            pass

    if args.cron:
        args.quiet = True

    configure_logger(args)

    if args.cron and not cron_backoff.may_run():
        Logger().log.debug("Server backoff time not met, will not run")
        return 0

    # Note that reliable-match option is not supported with subsys == "all"
    if 'reliable_match' in args and args.reliable_match and args.subsys != 'user':
        print(
            'error: --reliable-match only compatible with ',
            'user-space updates.',
            file=sys.stderr
        )

    try:
        config = KspliceConfig()
        if args.cron:
            if not config.autoinstall:
                return 0
            if args.subsys == 'xen' and not config.xen_enabled:
                return 0
            args.yes = config.autoinstall
            args.no = not config.autoinstall
        rc = args.func(args, config)
    except NoUspliceTargetsKspliceClientError as e:
        Logger().log.error('No active user-space Ksplice targets')
        Logger().log.error('Have you installed Ksplice-aware libraries and rebooted?')
        rc = ERROR_NO_BINARIES
    except KspliceClientError as e:
        # Pretty handle the exception
        Logger().log.error(e)
        Logger().log.debug("KspliceClientError: ", exc_info=1)
        rc = ERROR_UNKNOWN
    except KeyboardInterrupt:
        # User-initiated
        Logger().log.error("Interrupted!")
        Logger().log.debug("", exc_info=1)
        rc = ERROR_INTERRUPT
    except SystemExit as e:
        raise
    except:
        # Report and log all other exceptions
        print("An unexpected error occured.", file=sys.stderr)
        Logger().log.debug("Unexpected exception recieved.", exc_info=1)
        rc = ERROR_UNKNOWN

    if args.debug:
        with open(args.debug, 'a') as debug:
            debug.write(CoreDebugLog().all_debug())

    return rc

if __name__ == '__main__':
    sys.exit(main())

Youez - 2016 - github.com/yon3zu
LinuXploit