p!ranha?
Server IP : 103.169.32.36  /  Your IP : 216.73.216.202
Web Server : Apache
System : Linux web.dpmptsp 3.10.0-1160.119.1.el7.x86_64 #1 SMP Tue Jun 4 14:43:51 UTC 2024 x86_64
User : apache ( 48)
PHP Version : 5.6.40
Disable Function : NONE
MySQL : ON  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : ON  |  Sudo : ON  |  Pkexec : ON
Directory :  /usr/lib/python2.7/site-packages/yum/

Upload File :
Curr3nt_D!r [ Writeable ] D0cum3nt_r0Ot [ Writeable ]

 
Command :
Current File : /usr/lib/python2.7/site-packages/yum/igroups.py
#! /usr/bin/python -tt
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU Library General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#
# Copyright 2010, 2012 Red Hat
#
# James Antill <james@fedoraproject.org>

import os
import fnmatch
import re

def _open_no_umask(*args):
    """ Annoying people like to set umask's for root, which screws everything
        up for user readable stuff. """
    oumask = os.umask(022)
    try:
        ret = open(*args)
    finally:
        os.umask(oumask)

    return ret

def _makedirs_no_umask(*args):
    """ Annoying people like to set umask's for root, which screws everything
        up for user readable stuff. """
    oumask = os.umask(022)
    try:
        ret = os.makedirs(*args)
    finally:
        os.umask(oumask)

    return ret

def _read_str(fo):
    for s in fo:
        if s[:-1]:
            return s[:-1]
    return ''

class InstalledGroup(object):
    def __init__(self, gid):
        self.gid       = gid
        self.pkg_names = set()
        self.environment = None

    def __cmp__(self, other):
        if other is None:
            return 1
        return cmp(self.gid, other.gid)

    def _additions(self, pkg_names):
        pkg_names = set(pkg_names)
        return sorted(pkg_names.difference(self.pkg_names))

    def _removals(self, pkg_names):
        pkg_names = set(pkg_names)
        return sorted(pkg_names.difference(self.pkg_names))

    groupid = property(fget=lambda self: self.gid,
                      fset=lambda self, value: setattr(self, "gid", value),
                      fdel=lambda self: setattr(self, "gid", None),
                      doc="Compat. to treat comps groups/igroups the same")



class InstalledEnvironment(object):
    def __init__(self, evgid):
        self.evgid     = evgid
        self.grp_names = set()

    def __cmp__(self, other):
        if other is None:
            return 1
        return cmp(self.evgid, other.evgid)

    def _additions(self, grp_names):
        grp_names = set(grp_names)
        return sorted(grp_names.difference(self.grp_names))

    def _removals(self, grp_names):
        grp_names = set(grp_names)
        return sorted(grp_names.difference(self.grp_names))

    environmentid = property(fget=lambda self: self.evgid,
                      fset=lambda self, value: setattr(self, "evgid", value),
                      fdel=lambda self: setattr(self, "evgid", None),
                      doc="Compat. to treat comps groups/igroups the same")


class InstalledGroups(object):
    def __init__(self, db_path):
        self.groups   = {}
        self.changed  = False
        self.environments = {}

        self._read_pkg_grps(db_path)
        self._read_grp_grps(db_path)

    def _read_pkg_grps(self, db_path):
        self.filename = db_path + "/installed"
        if not os.access(self.filename, os.R_OK):
            return

        fo = open(self.filename)
        try:
            ver = int(_read_str(fo))
        except ValueError:
            return
        if ver != 1:
            return

        groups_num = int(_read_str(fo))
        while groups_num > 0:
            groups_num -= 1

            grp = InstalledGroup(_read_str(fo))
            self.groups[grp.gid] = grp

            num = int(_read_str(fo))
            while num > 0:
                num -= 1
                grp.pkg_names.add(_read_str(fo))

    def _read_grp_grps(self, db_path):
        self.grp_filename = db_path + "/environment"
        if not os.access(self.grp_filename, os.R_OK):
            return

        fo = open(self.grp_filename)
        try:
            ver = int(_read_str(fo))
        except ValueError:
            return
        if ver != 1:
            return

        groups_num = int(_read_str(fo))
        while groups_num > 0:
            groups_num -= 1

            evgrp = InstalledEnvironment(_read_str(fo))
            self.environments[evgrp.evgid] = evgrp

            num = int(_read_str(fo))
            while num > 0:
                num -= 1
                grpname = _read_str(fo)
                memb = _read_str(fo)
                evgrp.grp_names.add(grpname)
                assert memb in ('true', 'false')
                if memb == 'true':
                    assert grpname in self.groups
                    if grpname in self.groups:
                        self.groups[grpname].environment = evgrp.evgid

    def close(self):
        pass

    def save(self, force=False):
        if not force and not self.changed:
            return False

        db_path = os.path.dirname(self.filename)
        if not os.path.exists(db_path):
            try:
                _makedirs_no_umask(db_path)
            except (IOError, OSError), e:
                # some sort of useful thing here? A warning?
                return False

        if not os.access(db_path, os.W_OK):
            return False

        self._write_pkg_grps()
        self._write_grp_grps()

        self.changed = False

    def _write_pkg_grps(self):
        fo = _open_no_umask(self.filename + '.tmp', 'w')

        fo.write("1\n") # version
        fo.write("%u\n" % len(self.groups))
        for grp in sorted(self.groups.values()):
            fo.write("%s\n" % grp.gid)
            fo.write("%u\n" % len(grp.pkg_names))
            for pkgname in sorted(grp.pkg_names):
                fo.write("%s\n" % pkgname)
        fo.close()
        os.rename(self.filename + '.tmp', self.filename)

    def _write_grp_grps(self):
        fo = _open_no_umask(self.grp_filename + '.tmp', 'w')

        fo.write("1\n") # version
        fo.write("%u\n" % len(self.environments))
        for evgrp in sorted(self.environments.values()):
            fo.write("%s\n" % evgrp.evgid)
            fo.write("%u\n" % len(evgrp.grp_names))
            for grpname in sorted(evgrp.grp_names):
                fo.write("%s\n" % grpname)
                if (grpname in self.groups and
                    self.groups[grpname].environment == evgrp.evgid):
                    fo.write("%s\n" % "true")
                else:
                    fo.write("%s\n" % "false")

        fo.close()
        os.rename(self.grp_filename + '.tmp', self.grp_filename)

    def add_group(self, groupid, pkg_names, ievgrp=None):
        self.changed = True

        if groupid not in self.groups:
            self.groups[groupid] = InstalledGroup(groupid)
        grp = self.groups[groupid]

        for pkg_name in pkg_names:
            grp.pkg_names.add(pkg_name)

        if ievgrp is not None:
            grp.environment = ievgrp.evgid
            ievgrp.grp_names.add(groupid)
        return grp

    def del_group(self, groupid):
        self.changed = True

        if groupid in self.groups:
            del self.groups[groupid]

    def return_groups(self, group_pattern, case_sensitive=False):
        returns = {}

        if not group_pattern:
            return []

        for item in group_pattern.split(','):
            item = item.strip()
            if item in self.groups:
                thisgroup = self.groups[item]
                returns[thisgroup.gid] = thisgroup
                continue
            
            if case_sensitive:
                match = re.compile(fnmatch.translate(item)).match
            else:
                match = re.compile(fnmatch.translate(item), flags=re.I).match

            done = False
            for group in self.groups.values():
                if match(group.gid):
                    done = True
                    returns[group.gid] = group
                    break

        return returns.values()

    def add_environment(self, evgroupid, grp_names):
        self.changed = True

        if evgroupid not in self.environments:
            self.environments[evgroupid] = InstalledEnvironment(evgroupid)
        grp = self.environments[evgroupid]

        for grp_name in grp_names:
            grp.grp_names.add(grp_name)
        return grp

    def del_environment(self, evgroupid):
        self.changed = True

        if evgroupid in self.environments:
            del self.environments[evgroupid]

    def return_environments(self, evgroup_pattern, case_sensitive=False):
        returns = {}

        if not evgroup_pattern:
            return []

        for item in evgroup_pattern.split(','):
            item = item.strip()
            if item in self.environments:
                thisgroup = self.environments[item]
                returns[thisgroup.evgid] = thisgroup
                continue

            if case_sensitive:
                match = re.compile(fnmatch.translate(item)).match
            else:
                match = re.compile(fnmatch.translate(item), flags=re.I).match

            done = False
            for group in self.environments.values():
                if match(group.evgid):
                    done = True
                    returns[group.evgid] = group
                    break

        return returns.values()
N4m3
5!z3
L45t M0d!f!3d
0wn3r / Gr0up
P3Rm!55!0n5
0pt!0n5
..
--
December 21 2023 09:18:24
0 / 0
0755
Errors.py
4.265 KB
October 01 2020 17:03:44
0 / 0
0755
Errors.pyc
9.084 KB
October 01 2020 17:03:44
0 / 0
0644
__init__.py
304.096 KB
October 01 2020 17:03:44
0 / 0
0755
__init__.pyc
199.779 KB
October 01 2020 17:03:44
0 / 0
0644
callbacks.py
5.64 KB
October 01 2020 17:03:44
0 / 0
0755
callbacks.pyc
6.232 KB
October 01 2020 17:03:44
0 / 0
0644
comps.py
31.586 KB
October 01 2020 17:03:44
0 / 0
0755
comps.pyc
26.872 KB
October 01 2020 17:03:44
0 / 0
0644
config.py
49.886 KB
October 01 2020 17:03:44
0 / 0
0755
config.pyc
48.018 KB
October 01 2020 17:03:44
0 / 0
0644
constants.py
4.516 KB
October 01 2020 17:03:44
0 / 0
0755
constants.pyc
3.42 KB
October 01 2020 17:03:44
0 / 0
0644
depsolve.py
74.046 KB
October 01 2020 17:03:44
0 / 0
0755
depsolve.pyc
46.906 KB
October 01 2020 17:03:44
0 / 0
0644
drpm.py
12.851 KB
October 01 2020 17:03:44
0 / 0
0755
drpm.pyc
10.834 KB
October 01 2020 17:03:44
0 / 0
0644
failover.py
5.005 KB
October 01 2020 17:03:44
0 / 0
0755
failover.pyc
5.236 KB
October 01 2020 17:03:44
0 / 0
0644
fssnapshots.py
10.159 KB
October 01 2020 17:03:44
0 / 0
0755
fssnapshots.pyc
9.752 KB
October 01 2020 17:03:44
0 / 0
0644
history.py
61.125 KB
October 01 2020 17:03:44
0 / 0
0755
history.pyc
53.306 KB
October 01 2020 17:03:44
0 / 0
0644
i18n.py
20.437 KB
October 01 2020 17:03:44
0 / 0
0755
i18n.pyc
16.05 KB
October 01 2020 17:03:44
0 / 0
0644
igroups.py
9.313 KB
October 01 2020 17:03:44
0 / 0
0755
igroups.pyc
10.218 KB
October 01 2020 17:03:44
0 / 0
0644
logginglevels.py
7.904 KB
October 01 2020 17:03:44
0 / 0
0755
logginglevels.pyc
6.511 KB
October 01 2020 17:03:44
0 / 0
0644
mdparser.py
6.258 KB
October 01 2020 17:03:44
0 / 0
0755
mdparser.pyc
7.58 KB
October 01 2020 17:03:44
0 / 0
0644
metalink.py
9.188 KB
October 01 2020 17:03:44
0 / 0
0755
metalink.pyc
8.836 KB
October 01 2020 17:03:44
0 / 0
0644
misc.py
39.567 KB
October 01 2020 17:03:44
0 / 0
0755
misc.pyc
39.58 KB
October 01 2020 17:03:44
0 / 0
0644
packageSack.py
40.786 KB
October 01 2020 17:03:44
0 / 0
0755
packageSack.pyc
41.88 KB
October 01 2020 17:03:44
0 / 0
0644
packages.py
84.104 KB
October 01 2020 17:03:44
0 / 0
0755
packages.pyc
84.514 KB
October 01 2020 17:03:44
0 / 0
0644
parser.py
7.973 KB
October 01 2020 17:03:44
0 / 0
0755
parser.pyc
6.499 KB
October 01 2020 17:03:44
0 / 0
0644
pgpmsg.py
53.5 KB
October 01 2020 17:03:44
0 / 0
0755
pgpmsg.pyc
38.268 KB
October 01 2020 17:03:44
0 / 0
0644
pkgtag_db.py
4.864 KB
October 01 2020 17:03:44
0 / 0
0755
pkgtag_db.pyc
5.061 KB
October 01 2020 17:03:44
0 / 0
0644
plugins.py
28.1 KB
October 01 2020 17:03:44
0 / 0
0755
plugins.pyc
29.097 KB
October 01 2020 17:03:44
0 / 0
0644
repoMDObject.py
11.231 KB
October 01 2020 17:03:44
0 / 0
0755
repoMDObject.pyc
9.17 KB
October 01 2020 17:03:44
0 / 0
0644
repos.py
16.528 KB
October 01 2020 17:03:44
0 / 0
0755
repos.pyc
17.383 KB
October 01 2020 17:03:44
0 / 0
0644
rpmsack.py
70.255 KB
October 01 2020 17:03:44
0 / 0
0755
rpmsack.pyc
58.355 KB
October 01 2020 17:03:44
0 / 0
0644
rpmtrans.py
24.845 KB
October 01 2020 17:03:44
0 / 0
0755
rpmtrans.pyc
22.544 KB
October 01 2020 17:03:44
0 / 0
0644
sqlitesack.py
69.763 KB
October 01 2020 17:03:44
0 / 0
0755
sqlitesack.pyc
53.751 KB
October 01 2020 17:03:44
0 / 0
0644
sqlutils.py
6.271 KB
October 01 2020 17:03:44
0 / 0
0755
sqlutils.pyc
5.602 KB
October 01 2020 17:03:44
0 / 0
0644
transactioninfo.py
33.784 KB
October 01 2020 17:03:44
0 / 0
0755
transactioninfo.pyc
30.293 KB
October 01 2020 17:03:44
0 / 0
0644
update_md.py
25.9 KB
October 01 2020 17:03:44
0 / 0
0755
update_md.pyc
21.722 KB
October 01 2020 17:03:44
0 / 0
0644
updateinfo.py
18.29 KB
October 01 2020 17:03:44
0 / 0
0755
updateinfo.pyc
16.36 KB
October 01 2020 17:03:44
0 / 0
0644
yumRepo.py
83.852 KB
October 01 2020 17:03:44
0 / 0
0755
yumRepo.pyc
64.827 KB
October 01 2020 17:03:44
0 / 0
0644