This file is indexed.

/usr/lib/python2.7/dist-packages/libvserver.py is in util-vserver 0.30.216-pre3120-1.4+b1.

This file is owned by root:root, with mode 0o755.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
#!/usr/bin/python -tt
# 
# $Id$
# Copyright (C) 2008 Daniel Hokka Zakrisson
# vim:set ts=4 sw=4 expandtab:
# 
# 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 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., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.

import _libvserver

class struct:
    _default_ = 0
    def __init__(self, *args, **kwargs):
        l = len(args)
        if l > len(self._fields_):
            raise KeyError("%s has only %d fields" % (self.__class__,
                                                      len(self._fields_)))
        for i in range(0, l):
            self.__dict__[self._fields_[i]] = args[i]
        for i in kwargs.iterkeys():
            if i not in self._fields_:
                raise KeyError("%s has no such field '%s'" % (self.__class__,
                                                              i))
            self.__dict__[i] = kwargs[i]
    def __totuple(self):
        return tuple(self.__dict__.get(f, self._default_) for f in self._fields_)
    def __iter__(self):
        return self.__totuple().__iter__()
    def __repr__(self):
        return repr(self.__dict__)
    def __addsub(self, other, negator):
        import copy
        c = copy.deepcopy(self)
        for i in vars(other):
            if i in self._fields_:
                c.__dict__[i] = (self.__dict__.get(i, self._default_) +
                                 (negator * getattr(other, i)))
        return c
    def __add__(self, other):
        return self.__addsub(other, 1)
    def __sub__(self, other):
        return self.__addsub(other, -1)

get_vci = _libvserver.vc_get_vci

class struct_ctx_flags(struct):
    _fields_ = ["flagword", "mask"]

def ctx_create(xid, flags=None):
    if flags is None:
        flags = (0, 0)
    elif not isinstance(flags, struct_ctx_flags):
        raise TypeError("flags must be of type struct_ctx_flags")
    return _libvserver.vc_ctx_create(xid, *flags)
def ctx_migrate(xid, flags=0):
    return _libvserver.vc_ctx_migrate(xid, flags)

class struct_ctx_stat(struct):
    _fields_ = ["usecnt", "tasks"]
def ctx_stat(xid):
    return struct_ctx_stat(*_libvserver.vc_ctx_stat(xid))

class struct_virt_stat(struct):
    _fields_ = ["offset", "uptime", "nr_threads", "nr_running",
                "nr_uninterruptible", "nr_onhold", "nr_forks",
                "load0", "load1", "load2"]
def virt_stat(xid):
    return struct_virt_stat(*_libvserver.vc_virt_stat(xid))

ctx_kill = _libvserver.vc_ctx_kill
def get_cflags(xid):
    return struct_ctx_flags(*_libvserver.vc_get_cflags(xid))
def set_cflags(xid, flags):
    if not isinstance(flags, struct_ctx_flags):
        raise TypeError("flags must be of type struct_ctx_flags")
    _libvserver.vc_set_cflags(xid, *flags)

class struct_ctx_caps(struct):
    _fields_ = ["bcaps", "bmask", "ccaps", "cmask"]
def get_ccaps(xid):
    return struct_ctx_caps(*_libvserver.vc_get_ccaps(xid))
def set_ccaps(xid, caps):
    if not isinstance(caps, struct_ctx_caps):
        raise TypeError("caps must be of type struct_ctx_caps")
    _libvserver.vc_set_ccaps(xid, *caps)

class struct_vx_info(struct):
    _fields_ = ["xid", "initpid"]
def get_vx_info(xid):
    return struct_vx_info(*_libvserver.vc_get_vx_info(xid))

get_task_xid = _libvserver.vc_get_task_xid
wait_exit = _libvserver.vc_wait_exit

class struct_rlimit_mask(struct):
    _fields_ = ["min", "soft", "hard"]
def get_rlimit_mask(xid):
    return struct_rlimit_mask(*_libvserver.vc_get_rlimit_mask(xid))

class struct_rlimit(struct):
    _fields_ = ["min", "soft", "hard"]
    _default_ = _libvserver.VC_LIM_KEEP
def get_rlimit(xid, resource):
    return struct_rlimit(*_libvserver.vc_get_rlimit(xid, resource))
def set_rlimit(xid, resource, limit):
    if not isinstance(limit, struct_rlimit):
        raise TypeError("limit must be of type struct_rlimit")
    _libvserver.vc_set_rlimit(xid, resource, *limit)

class stuct_rlimit_stat(struct):
    _fields_ = ["hits", "value", "minimum", "maximum"]
def rlimit_stat(xid, resource):
    return struct_rlimit_stat(*_libvserver.vc_rlimit_stat(xid, resource))

reset_minmax = _libvserver.vc_reset_minmax

get_task_nid = _libvserver.vc_get_task_nid
net_create = _libvserver.vc_net_create
net_migrate = _libvserver.vc_net_migrate

class struct_net_addr(struct):
    _fields_ = ["vna_type", "vna_flags", "vna_prefix", "vna_parent", "ip1",
                "ip2", "mask"]

def net_add(nid, addr):
    if not isinstance(addr, struct_net_addr):
        raise TypeError("addr must be of type struct_net_addr")
    _libvserver.vc_net_add(nid, *addr)

def net_remove(nid, addr):
    if not isinstance(addr, struct_net_addr):
        raise TypeError("addr must be of type struct_net_addr")
    _libvserver.vc_net_remove(nid, *addr)

class struct_net_flags(struct):
    _fields_ = ["flagword", "mask"]
def get_nflags(nid):
    return struct_net_flags(*_libvserver.vc_get_nflags(nid))
def set_nflags(nid, flags):
    if not isinstance(flags, struct_net_flags):
        raise TypeError("flags must be of type struct_net_flags")
    _libvserver.vc_set_nflags(nid, *flags)

class struct_net_caps(struct):
    _fields_ = ["ncaps", "cmask"]
def get_ncaps(nid):
    return struct_net_caps(*_libvserver.vc_get_ncaps(nid))
def set_ncaps(nid, caps):
    if not isinstance(caps, struct_net_caps):
        raise TypeError("caps must be of type struct_net_caps")
    _libvserver.vc_set_ncaps(nid, *caps)

def _vc_set_iattr(f, obj, tag, flags, mask):
    if tag is None:
        tag = 0
    else:
        mask |= _libvserver.VC_IATTR_XID
    f(obj, tag, flags, mask)
def set_iattr(filename, tag=None, flags=0, mask=0):
    _vc_set_iattr(_libvserver.vc_set_iattr, filename, tag, flags, mask)
def fset_iattr(fd, tag=None, flags=0, mask=0):
    _vc_set_iattr(_libvserver.vc_fset_iattr, fd, tag, flags, mask)
get_iattr = lambda f: _libvserver.vc_get_iattr(f, -1)
fget_iattr = lambda f: _libvserver.vc_fget_iattr(f, -1)

def vhi_type(type):
    if isinstance(type, int):
        return type
    else:
        return _libvserver.__dict__["vcVHI_%s" % type]
def set_vhi_name(xid, type, val):
    _libvserver.vc_set_vhi_name(xid, vhi_type(type), val)
def get_vhi_name(xid, type):
    return _libvserver.vc_get_vhi_name(xid, vhi_type(type))

enter_namespace = _libvserver.vc_enter_namespace
set_namespace = _libvserver.vc_set_namespace
get_space_mask = _libvserver.vc_get_space_mask
get_space_default = _libvserver.vc_get_space_default

def add_dlimit(path, tag, flags=0):
    _libvserver.vc_add_dlimit(path, tag, flags)
def rem_dlimit(path, tag, flags=0):
    _libvserver.vc_rem_dlimit(path, tag, flags)
class struct_ctx_dlimit(struct):
    _fields_ = ["space_used", "space_total", "inodes_used", "inodes_total",
                "reserved"]
    _default_ = _libvserver.VC_CDLIM_KEEP
def set_dlimit(path, tag, limit, flags=0):
    if not isinstance(limit, struct_ctx_dlimit):
        raise TypeError("limit must be of type struct_ctx_dlimit")
    _libvserver.vc_set_dlimit(path, tag, flags, *limit)
def get_dlimit(path, tag, flags=0):
    return struct_ctx_dlimit(*_libvserver.vc_get_dlimit(path, tag, flags))

get_task_tag = _libvserver.vc_get_task_tag
tag_create = _libvserver.vc_tag_create
tag_migrate = _libvserver.vc_tag_migrate

class struct_set_sched(struct):
    _fields_ = ["set_mask", "fill_rate", "interval", "fill_rate2", "interval2",
                "tokens", "tokens_min", "tokens_max", "priority_bias",
                "cpu_id", "bucket_id"]
    def fill_set_mask(self):
        if "set_mask" not in self.__dict__:
            self.set_mask = 0
        for field in self.__dict__:
            f = field.replace("priority", "prio").upper()
            self.set_mask |= _libvserver.__dict__.get("VC_VXSM_" + f, 0)
def set_sched(xid, sched):
    if not isinstance(sched, struct_set_sched):
        raise TypeError("sched must be of type struct_set_sched")
    sched.fill_set_mask()
    _libvserver.vc_set_sched(xid, *sched)
def get_sched(xid, cpu_id=0, bucket_id=0):
    return struct_set_sched(*_libvserver.vc_get_sched(xid, cpu_id, bucket_id))

class struct_sched_info(struct):
    _fields_ = ["cpu_id", "bucket_id", "user_msec", "sys_msec", "hold_msec",
                "token_usec", "vavavoom"]
def sched_info(xid, cpu_id=-1, bucket_id=0):
    if cpu_id == -1:
        import os
        ret = struct_sched_info()
        ncpus = os.sysconf("SC_NPROCESSORS_ONLN")
        seen = 0
        # * 2 is to make sure we get all the processors. CPU hot-plug...
        for cpu in range(0, ncpus * 2):
            try:
                ret += struct_sched_info(*_libvserver.vc_sched_info(xid,
                                                                    cpu, 0))
                seen += 1
            except:
                pass
            if seen == ncpus:
                break
        return ret
    else:
        return struct_sched_info(*_libvserver.vc_sched_info(xid, cpu_id,
                                                               bucket_id))

set_mapping = _libvserver.vc_set_mapping
unset_mapping = _libvserver.vc_unset_mapping

get_badness = _libvserver.vc_get_badness
set_badness = _libvserver.vc_set_badness

get_insecurebcaps = _libvserver.vc_get_insecurebcaps
get_insecureccaps = _libvserver.vc_get_insecureccaps

isSupported = _libvserver.vc_isSupported
isSupportedString = _libvserver.vc_isSupportedString

getXIDType = _libvserver.vc_getXIDType

def xidopt2xid(opt, honor_static=True):
    return _libvserver.vc_xidopt2xid(opt, honor_static)
def nidopt2nid(opt, honor_static=True):
    return _libvserver.vc_nidopt2nid(opt, honor_static)
def tagopt2tag(opt, honor_static=True):
    return _libvserver.vc_tagopt2tag(opt, honor_static)

# XXX: bcap, ccap, cflag, nflag, ncap could all use the same code here.
def text2bcap(text):
    ret = _libvserver.vc_text2bcap(text)
    if ret == 0:
        raise ValueError("%s is not a valid bcap" % text)
    return ret
lobcap2text = _libvserver.vc_lobcap2text
def bcap2list(bcaps):
    list = []
    while True:
        bcaps, text = _libvserver.vc_lobcap2text(bcaps)
        if text is None:
            break
        list.append(text)
    return ",".join(list)
def list2bcap(list):
    bcaps, bmask = _libvserver.vc_list2bcap(list)
    return struct_ctx_caps(bcaps=bcaps, bmask=bmask)

def text2ccap(text):
    ret = _libvserver.vc_text2ccap(text)
    if ret == 0:
        raise ValueError("%s is not a valid ccap" % text)
    return ret
loccap2text = _libvserver.vc_loccap2text
def ccap2list(ccaps):
    list = []
    while True:
        ccaps, text = _libvserver.vc_loccap2text(ccaps)
        if text is None:
            break
        list.append(text)
    return ",".join(list)
def list2ccap(list):
    ccaps, cmask = _libvserver.vc_list2ccap(list)
    return struct_ctx_caps(ccaps=ccaps, cmask=cmask)

def text2cflag(text):
    ret = _libvserver.vc_text2cflag(text)
    if ret == 0:
        raise ValueError("%s is not a valid cflag" % text)
    return ret
locflag2text = _libvserver.vc_locflag2text
def cflag2list(cflags):
    list = []
    while True:
        cflags, text = _libvserver.vc_locflag2text(cflags)
        if text is None:
            break
        list.append(text)
    return ",".join(list)
def list2cflag(list):
    return struct_ctx_flags(*_libvserver.vc_list2cflag(list))

def text2nflag(text):
    ret = _libvserver.vc_text2nflag(text)
    if ret == 0:
        raise ValueError("%s is not a valid nflag" % text)
    return ret
lonflag2text = _libvserver.vc_lonflag2text
def nflag2list(nflags):
    list = []
    while True:
        nflags, text = _libvserver.vc_lonflag2text(nflags)
        if text is None:
            break
        list.append(text)
    return ",".join(list)
def list2nflag(list):
    return struct_net_flags(*_libvserver.vc_list2nflag(list))

def text2ncap(text):
    ret = _libvserver.vc_text2ncap(text)
    if ret == 0:
        raise ValueError("%s is not a valid ncap" % text)
    return ret
loncap2text = _libvserver.vc_loncap2text
def ncap2list(ncaps):
    list = []
    while True:
        ncaps, text = _libvserver.vc_loncap2text(ncaps)
        if text is None:
            break
        list.append(text)
    return ",".join(list)
def list2ncap(list):
    return struct_net_caps(*_libvserver.vc_list2ncap(list))