--- /dev/null
+Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
--- /dev/null
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+\f
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+\f
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+\f
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+\f
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+\f
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Library General
+Public License instead of this License.
--- /dev/null
+2004-02-11 22:06 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * NEWS, configure.ac: version 0.29
+
+2004-02-10 00:23 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * configure.ac: version 0.28.91
+
+2004-02-10 00:18 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * Makefile.am, src/Makefile-files: remove src/setattr on 'clean'
+ (reported by Noèl Köthe)
+
+2004-02-09 23:55 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * scripts/vserver-copy, src/vbuild.cc: further chattr "fixes"
+
+2004-02-06 23:28 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * configure.ac: version 0.28.90
+
+2004-02-06 23:20 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * util-vserver.spec.in: require chattr set 't' attribute on
+ /vservers
+
+2004-02-06 23:20 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * distrib/install-pre.sh, distrib/install-rh7.2,
+ distrib/install-rh7.3, scripts/vserver: when creating new vserver
+ topdirectories, call 'chattr -t' on them
+
+2004-02-05 04:52 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * configure.ac, lib/syscall-legacy.hc, lib/vserver-internal.h,
+ m4/ensc_syscall.m4: backported ENSC_SYSCALL_TRADITIONAL from HEAD
+ version 0.28.1
+
+2004-01-29 22:16 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * scripts/vserver-copy: fixed copyright, it is still at Mark
+ Lawrence
+
+2004-01-28 12:04 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * configure.ac: version 0.28
+
+2004-01-26 19:23 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * NEWS: version 0.27.91
+
+2004-01-26 19:22 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * configure.ac: version 0.27.91 use new ext2fs.h test
+
+2004-01-26 19:22 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * src/ext2fs.h: updated to new ext2fs.h test
+
+2004-01-26 19:21 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * m4/: ensc_cflags.m4, ensc_kerneldir.m4, ensc_uv_vrootdir.m4:
+ added missing quotes
+
+2004-01-26 19:20 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * m4/ensc_e2fscheck.m4: initial checkin
+
+2004-01-26 19:20 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * lib/syscall_kill-v11.hc: fixed warnings about missing initializer
+
+2004-01-26 19:19 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * lib/: getversion.c, vserver.h: vc_get_version(): removed 'int
+ cat' parameter
+
+2004-01-22 21:38 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * NEWS, configure.ac: version 0.27.90
+
+2004-01-22 20:52 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * scripts/vserver: call 'chkconfig' to fix initscripts *after*
+ generating the configuration (reported by DUCLOS Andre)
+
+2004-01-22 17:08 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * scripts/vserver: allow to override start/stop commands (patch by
+ Erik Smit)
+
+2004-01-20 00:00 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * scripts/vserver-copy: use an argument on 'mktemp' call
+
+2004-01-17 07:10 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * scripts/vserver-copy: autodetect the mktemp/tempfile command
+ (reported by DUCLOS Andre)
+
+2004-01-17 07:05 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * scripts/vserver: start programs with 'exec' on the 'suexec' (and
+ related) commands (patch by Alec Thomas)
+
+2004-01-07 17:24 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * src/chcontext.c: backported from HEAD: * removed obsolete and
+ unused 'fakeinit' variable * fixed ctx-creation with fakeinit and
+ static ctx-id's; fakeinit requires a second call for ctx -2 to
+ take effect
+
+2004-01-07 17:22 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * lib/vserver-internal.h: fixed handling of errors within
+ utilvserver_checkCompatVersion() to return real error-code but
+ not -EINVAL
+
+2003-12-30 20:38 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * configure.ac: version 0.27
+
+2003-12-30 15:22 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * NEWS, configure.ac: version 0.26.90
+
+2003-12-30 15:08 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * configure.ac: * another s!sys_virtual_context!vserver! * test for
+ ext2fs.h headers with the C++ compiler; this will detect
+ problems with RH rawhide headers very early
+ (https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=112448)
+
+2003-12-30 15:07 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * lib/vserver-internal.h: another s!sys_virtual_context!vserver!
+
+2003-12-30 15:06 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * lib/syscall_kill-v11.hc: made it compilable with non-C99
+ compilers
+
+2003-12-30 14:50 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * scripts/vserver: added basic Slackware support (patch by Stephen
+ Pearce)
+
+2003-12-30 14:49 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * src/vkill.c: * s!ctx_t!xid_t! * use native vc_ctx_kill() only
+ when legacy-API is disabled * fixed help-msg
+
+2003-12-30 14:45 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * lib/syscall_rlimit.c, lib/vserver-internal.h, lib/vserver.h,
+ lib/getctx-compat.hc, lib/getctx-legacy.hc, lib/getctx.c,
+ lib/syscall-compat.hc, lib/syscall.c, lib/syscall_kill-v11.hc,
+ lib/syscall_kill.c, lib/syscall_rlimit-v11.hc, src/vlimit.c,
+ configure.ac, compat.h: s!ctx_t!xid_t!
+
+2003-12-26 01:16 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * lib/: getversion-internal.hc, syscall-compat.hc,
+ syscall_kill-v11.hc, syscall_rlimit-v11.hc, vserver-internal.h:
+ s!sys_vserver!vserver!
+
+2003-12-23 17:54 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * configure.ac: fixed '--enable-apis' by
+ s!supported_apis!enable_apis!
+
+2003-12-23 17:52 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * scripts/vserver: mount /dev/pts with correct options
+
+2003-12-23 17:52 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * lib/syscall-legacy.hc: use syscall(...) on __hppa__ too
+
+2003-12-03 01:11 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * src/.cvsignore: added vkill
+
+2003-12-03 01:08 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * Makefile.am: added 'legacydir'
+
+2003-12-03 01:08 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * lib/getversion.c: vc_get_version(): fixed typo to avoid recursive
+ call
+
+2003-12-03 01:07 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * src/Makefile-files: added vkill
+
+2003-12-03 01:07 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * src/vkill.c: initial checkin
+
+2003-12-03 01:06 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * scripts/Makefile-files: install vkill and vunify.sh into
+ LEGACYDIR
+
+2003-12-03 01:05 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * scripts/: vunify.old.sh[DEAD], vunify.sh: renamved vunify.old.sh
+ to vunify.sh
+
+2003-11-29 00:26 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * scripts/vps.subst: fixed behavior with multiple args (from Debian
+ patch)
+
+2003-11-29 00:25 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * lib/: Makefile-files, syscall_kill-v11.hc, syscall_kill.c: added
+ syscall_kill*
+
+2003-11-29 00:22 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * lib/virtual.h: updated
+
+2003-11-29 00:22 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * lib/syscall.c: removed chrootsafe() code
+
+2003-11-29 00:22 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * lib/syscall-legacy.hc: removed old, unused code removed
+ chrootsafe() code made it compilable with '-fPIC'
+
+2003-11-29 00:17 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * lib/: syscall-compat.hc, getversion-internal.hc:
+ s!sys_virtual_context!sys_vserver!
+
+2003-11-29 00:14 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * lib/syscall_rlimit-v11.hc: s!sys_virtual_context!sys_vserver!
+
+2003-11-29 00:12 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * lib/vserver-internal.h: s!sys_virtual_context!sys_vserver! made
+ it compilable with '-fPIC'
+
+2003-11-29 00:11 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * lib/vserver.h: removed vc_chrootsafe(); such an implementation
+ seems to be impossible... updated vc_new_s_context documentation
+ added vc_ctx_kill() prototype + doc
+
+2003-11-29 00:10 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * tests/: Makefile-files, chrootsafe.cc[DEAD]: removed
+ chrootsafe.cc; such an implementation seems to be impossible...
+
+2003-11-29 00:08 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * src/capchroot.c: use chroot() instead of vc_chrootsafe()
+
+2003-11-22 03:14 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * NEWS, README, configure.ac: version 0.26
+
+2003-11-22 03:02 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * .cvsignore: updated
+
+2003-11-21 17:01 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * src/ifspec.c: fixed uninitialized variables when ioctl() on the
+ given interfaces fails (thanks to Herbert Poetzl)
+
+2003-11-21 04:52 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * configure.ac: version 0.25.90
+
+2003-11-21 04:51 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * .cvsignore: updated
+
+2003-11-20 01:46 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * Makefile.am: - use internal lib/virtual.h on default (controlled
+ by '--disable-internal-headers' option)
+
+2003-11-20 01:45 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * configure.ac: - added '--disable-internal-headers' option
+
+2003-11-19 01:22 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * lib/syscall_rlimit-v11.hc: vc_get_rlimit_mask_v11: fill
+ calculated values into *lim
+
+2003-11-18 23:41 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * NEWS, configure.ac: version 0.25
+
+2003-11-18 23:38 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * util-vserver.spec.in: added 'BuildRequires: e2fsprogs-devel'
+
+2003-11-18 23:37 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * configure.ac: added checks for <ext2fs/ext2fs.h> and
+ <linux/ext2_fs.h>
+
+2003-11-18 23:36 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * Makefile.am: remove '__user' which was added in 2.6 headers
+
+2003-11-18 23:30 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * src/: vutil.cc, showattr.c, ext2fs.h, Makefile-files: use/added
+ "ext2fs.h" header to bypass problems of 2.6 kernel headers (no
+ __u64 with '--std=c99')
+
+2003-11-18 23:22 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * sysv/vservers.subst: small cosmetical change
+
+2003-11-18 21:21 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * lib/vserver-internal.h: - use VC_RANDCTX instead of VC_NOCTX -
+ use the conditionalized CTX_USER2KERNEL/CTX_KERNEL2USER
+ transformations
+
+2003-11-18 21:19 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * lib/vserver.h: - removed C99 comments from copyright header; this
+ might be used by plain C89 programs also... - added VC_RANDCTX
+ constant - documented VC_* constants
+
+2003-11-18 21:18 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * scripts/vserver: added basic gentoo support (thanks to Allen D.
+ Parker II)
+
+2003-11-18 00:54 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * src/: .cvsignore, Makefile-files, ctxlimit.c[DEAD], vlimit.c:
+ renamed ctxlimit.* to vlimit.*
+
+2003-11-18 00:49 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * THANKS: added Sam Vilain
+
+2003-11-18 00:40 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * configure.ac: version 0.24.90
+
+2003-11-18 00:13 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * compat.h: made ctx_t and 'uint32_t' to fix kernel<->user
+ conflicts (-1 in user becomes 0x0000ffff in kernel which would
+ expect 0xffffffff)
+
+2003-11-18 00:12 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * lib/vserver.h: added VC_SAMECTX identifier
+
+2003-11-18 00:11 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * lib/vserver-internal.h: added CTX_USER2KERNEL() and
+ CTX_KERNEL2USER() macros to transform ctx from user into kernel
+ type and vice versa
+
+2003-11-18 00:11 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * lib/: syscall-compat.hc, syscall_rlimit-v11.hc: use
+ CTX_USER2KERNEL() macro to transform ctx from user into kernel
+ type
+
+2003-11-17 23:02 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * sysv/: rebootmgr.subst, vservers.subst: check existence of
+ cfg-file before starting the server
+
+2003-11-17 22:58 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * scripts/vserver: set correct mode/permissions of /var/run/utmp
+
+2003-11-08 00:04 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * lib/: Makefile-files, syscall_rlimit-v11.hc, syscall_rlimit.c:
+ added rlimit syscalls
+
+2003-11-07 23:02 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * src/: .cvsignore, Makefile-files, ctxlimit.c: added ctxlimit
+
+2003-11-07 23:01 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * src/setctxlimit.c[DEAD]: removed; obsoleted by ctxlimit tool
+
+2003-11-07 23:00 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * lib/vserver.h: added limit stuff
+
+2003-11-07 22:59 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * lib/vserver-internal.h, configure.ac: added V11 API
+
+2003-11-07 22:58 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * lib/virtual.h: updated; has now the limit-stuff
+
+2003-11-07 20:16 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * man/: vkill.8, setctxlimit.8, vdu.8: initial checkin (provided by
+ Sam Vilain)
+
+2003-11-04 01:17 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * NEWS, configure.ac: version 0.24
+
+2003-11-04 00:30 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * .cvsignore: added linuxcaps.h
+
+2003-11-04 00:13 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * Makefile.am: * enumerated all used m4-files * use/set CVS2CL*
+ flags * edit <linux/linuxcaps.h> and remove statements (#include,
+ __u32) which may cause errors
+
+2003-11-04 00:11 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * configure.ac: use ENSC_CHANGELOG
+
+2003-11-04 00:11 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * m4/: changelog.am, ensc_changelog.m4: merged from HEAD
+
+2003-11-04 00:10 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * m4/validate.am: updated from vserver-djinni
+
+2003-11-04 00:10 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * src/vutil.cc: fixed format-string error
+
+2003-11-03 21:56 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * util-vserver.spec.in: use '--enable-linuxconf' conflict with
+ future vserver-* versions
+
+2003-11-03 21:51 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * NEWS, configure.ac: conditionalized built of linuxconf-module
+ version 0.23.97
+
+2003-11-03 21:50 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * lib/vserver-internal.h: ignore lower 8 bits of API-version
+
+2003-11-03 21:49 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * Makefile.am, linuxconf/Makefile-files: conditionalized built of
+ linuxconf-module
+
+2003-10-30 16:23 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * NEWS: version 0.23.96
+
+2003-10-30 16:21 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * configure.ac: set '-Wno-unused-parameter' use ENSC_UV_VROOTDIR
+
+2003-10-30 16:21 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * m4/ensc_uv_vrootdir.m4: backported from HEAD
+
+2003-10-30 16:21 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * util-vserver.spec.in: create and own /vservers
+
+2003-10-30 16:17 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * distrib/: install-mdk8.2, install-post.sh, install-pre.sh,
+ install-rh7.2, install-rh7.3, install-rh8.0, install-rh9.0: use
+ customizable value for vserver-rootdir instead of hardcoded
+ '/vservers' import the global configuration file
+ (util-vserver-vars)
+
+2003-10-30 16:16 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * scripts/Makefile-files, scripts/distrib-info,
+ scripts/util-vserver-vars.subst, scripts/vrpm, scripts/vserver,
+ scripts/vserver-copy, scripts/vservers.grabinfo.sh,
+ scripts/vunify.old.sh, src/Makefile-files, src/rebootmgr.c,
+ src/vunify.cc, sysv/Makefile-files, sysv/rebootmgr.subst: use
+ customizable value for vserver-rootdir instead of hardcoded
+ '/vservers'
+
+2003-10-30 16:12 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * tests/: chrootsafe.cc, escaperoot.cc: do not declare unused
+ parameters anymore
+
+2003-10-30 15:25 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * util-vserver.spec.in: provide/conflict with vserver-admin
+
+2003-10-30 15:24 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * Makefile.am, m4/ensc_kerneldir.m4: backported ENSC_KERNEL_HEADERS
+ macro
+
+2003-10-30 15:23 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * configure.ac: backported CFLAGS/CXXFLAGS settings backported
+ ENSC_KERNEL_HEADERS macro
+
+2003-10-30 02:47 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * NEWS, configure.ac: version 0.23.95
+
+2003-10-30 02:46 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * .cvsignore: added util-vserver.spec
+
+2003-10-30 02:38 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * util-vserver.spec.in, vserver.spec.in[DEAD], Makefile.am,
+ configure.ac: renamed vserver.spec.in to util-vserver.spec.in
+
+2003-10-30 02:36 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * scripts/vserver: - reenabled the copy-all mode; can be disabled
+ by setting the $UTIL_VSERVER_AVOID_COPY environment variable -
+ use '-HS' ulimit switch for newly created vservers
+
+2003-10-30 02:34 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * newvserver.defaults[DEAD], linuxconf/.cvsignore,
+ linuxconf/Makefile-files, linuxconf/newvserver.8,
+ linuxconf/newvserver.defaults, linuxconf/newvserver.subst,
+ man/newvserver.8[DEAD], man/Makefile-files, Makefile.am,
+ vserver.spec.in: revived linuxconf-files, but moved them into an
+ own directory
+
+2003-10-30 01:41 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * scripts/.cvsignore: added auto-generated perl-scripts
+
+2003-10-30 01:39 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * scripts/Makefile-files, Makefile.am: reorganized make-file to
+ cope with substituted perl-scripts
+
+2003-10-30 01:38 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * scripts/: vkill[DEAD], vkill.subst, vps[DEAD], vps.subst: made
+ '/usr/sbin' path customizable; perl-scripts will be substituted
+ now
+
+2003-10-30 01:37 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * src/Makefile-files: define SBINDIR on rebootmgr.c compilation
+ install 'setattr' program
+
+2003-10-30 01:36 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * src/: chcontext.c, reducecap.c: remove CAP_OPENDEV added
+ CAP_QUOTACTL
+
+2003-10-30 01:33 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * scripts/vpstree, scripts/vrpm, scripts/vserver-copy,
+ scripts/vsysvwrapper, scripts/vtop, src/rebootmgr.c: use
+ customizable paths for '/usr/sbin'
+
+2003-10-30 01:32 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * scripts/rootshell: use customizable paths for '/usr/sbin' do not
+ log commands into /tmp/log anymore
+
+2003-10-30 01:31 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * scripts/distrib-info: made it 'bash' use customizable paths for
+ '/usr/sbin'
+
+2003-10-30 01:30 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * man/reducecap.8: removed CAP_OPENDEV; added CAP_QUOTACTL
+
+2003-10-21 19:26 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * configure.ac: version 0.23.93
+
+2003-10-21 18:58 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * lib/checkversion.c: fixed stupid thinko (EAGAIN vs. EINVAL)
+
+2003-10-18 03:48 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * lib/: getctx-legacy.hc, vserver.h: backported vc_X_getcctx()
+ changes from HEAD
+
+2003-10-18 03:40 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * configure.ac: version 0.23.92
+
+2003-10-18 03:34 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * lib/checkversion.c: restored compatibility for case when old
+ syscall interface uses the new syscall-number
+
+2003-10-14 18:11 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * lib/vserver.h: fixed vc_X_getcctx()
+
+2003-10-14 17:22 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * lib/vserver.h: added some documentation added vc_X_getctx()
+ (pseudo-)syscall
+
+2003-10-14 17:21 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * lib/vserver-internal.h: added macros from syscall.c added an
+ 'extern "C" {...}' block moved safechroot code into own file
+
+2003-10-14 17:20 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * lib/syscall.c: moved macros into vserver-internal moved version
+ code into own files
+
+2003-10-14 17:20 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * lib/: syscall-compat.hc, syscall-legacy.hc: include
+ "safechroot-internal.hc"
+
+2003-10-14 17:19 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * lib/: checkversion.c, getctx-compat.hc, getctx-legacy.hc,
+ getctx.c, getversion-internal.hc, getversion.c,
+ safechroot-internal.hc, uint2str.c: initial checkin
+
+2003-10-14 17:18 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * lib/Makefile-files: added lots of new files
+
+2003-10-14 15:54 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * configure.ac: added check for existing sys_virtual_context()
+ function renamed '--enable-supported-api' switch to
+ '--enable-apis'
+
+2003-10-14 15:54 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * lib/vserver-internal.h: added check for existing
+ sys_virtual_context() function
+
+2003-10-14 15:43 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * lib/syscall.c: added 'vc_get_version(int)' added lots of
+ macro-magic to generalize the syscall-wrappers
+
+2003-10-14 15:42 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * lib/vserver.h: added 'vc_get_version(int)'
+
+2003-10-14 04:55 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * configure.ac: version 0.23.91
+
+2003-10-14 04:54 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * vserver.spec.in: merged with VERSION_0_23 branch
+
+2003-10-14 03:32 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * lib/syscall-compat.hc: made it compilable with non-C99 compilers
+
+2003-10-14 03:31 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * sysv/Makefile-files: fixed typo in sed invocation
+
+2003-10-14 03:15 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * lib/virtual-inc.h[DEAD]: removed since solved by more general
+ 'linuxvirtual.h'
+
+2003-10-14 03:14 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * lib/syscall.c: include "linuxvirtual.h" instead of "linux-inc.h"
+
+2003-10-14 03:13 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * lib/syscall-legacy.hc: added missing chroot() call
+
+2003-10-14 03:13 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * lib/Makefile-files: removed virtual-inc.h
+
+2003-10-14 03:12 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * Makefile.am: generalized CLEANFILES variable added
+ 'linuxvirtual.h' to BUILT_SOURCES
+
+2003-10-14 02:45 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * tests/chrootsafe.cc: use new API
+
+2003-10-14 02:42 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * src/: capchroot.c, chbind.c, chcontext.c, rebootmgr.c,
+ reducecap.c, vserver-stat.c: use new API
+
+2003-10-14 02:36 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * compat.h: merged with HEAD
+
+2003-10-14 02:32 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * configure.ac: merged MS_MOVE/ctx_t code with HEAD added
+ --enable-supported-apis switch
+
+2003-10-14 02:30 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * Makefile.am: added $(lib_XHDRS) and compat.h
+
+2003-10-14 02:28 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * lib/Makefile-files: added lib_XHDRS with all the new files added
+ -D_GNU_SOURCE flag
+
+2003-10-14 02:20 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * lib/: syscall-compat.hc, syscall-legacy.hc, virtual-inc.h,
+ virtual.h, vserver-internal.h: initial checkin
+
+2003-10-14 02:07 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * lib/vserver.h: implemented new API
+
+2003-10-14 01:57 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * lib/syscall.c: implemented new API
+
+2003-10-14 01:53 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+
+ * src/Makefile-files: removed set_ctx_limit.c
+
--- /dev/null
+Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002 Free Software
+Foundation, Inc.
+
+ This file is free documentation; the Free Software Foundation gives
+unlimited permission to copy, distribute and modify it.
+
+Basic Installation
+==================
+
+ These are generic installation instructions.
+
+ The `configure' shell script attempts to guess correct values for
+various system-dependent variables used during compilation. It uses
+those values to create a `Makefile' in each directory of the package.
+It may also create one or more `.h' files containing system-dependent
+definitions. Finally, it creates a shell script `config.status' that
+you can run in the future to recreate the current configuration, and a
+file `config.log' containing compiler output (useful mainly for
+debugging `configure').
+
+ It can also use an optional file (typically called `config.cache'
+and enabled with `--cache-file=config.cache' or simply `-C') that saves
+the results of its tests to speed up reconfiguring. (Caching is
+disabled by default to prevent problems with accidental use of stale
+cache files.)
+
+ If you need to do unusual things to compile the package, please try
+to figure out how `configure' could check whether to do them, and mail
+diffs or instructions to the address given in the `README' so they can
+be considered for the next release. If you are using the cache, and at
+some point `config.cache' contains results you don't want to keep, you
+may remove or edit it.
+
+ The file `configure.ac' (or `configure.in') is used to create
+`configure' by a program called `autoconf'. You only need
+`configure.ac' if you want to change it or regenerate `configure' using
+a newer version of `autoconf'.
+
+The simplest way to compile this package is:
+
+ 1. `cd' to the directory containing the package's source code and type
+ `./configure' to configure the package for your system. If you're
+ using `csh' on an old version of System V, you might need to type
+ `sh ./configure' instead to prevent `csh' from trying to execute
+ `configure' itself.
+
+ Running `configure' takes awhile. While running, it prints some
+ messages telling which features it is checking for.
+
+ 2. Type `make' to compile the package.
+
+ 3. Optionally, type `make check' to run any self-tests that come with
+ the package.
+
+ 4. Type `make install' to install the programs and any data files and
+ documentation.
+
+ 5. You can remove the program binaries and object files from the
+ source code directory by typing `make clean'. To also remove the
+ files that `configure' created (so you can compile the package for
+ a different kind of computer), type `make distclean'. There is
+ also a `make maintainer-clean' target, but that is intended mainly
+ for the package's developers. If you use it, you may have to get
+ all sorts of other programs in order to regenerate files that came
+ with the distribution.
+
+Compilers and Options
+=====================
+
+ Some systems require unusual options for compilation or linking that
+the `configure' script does not know about. Run `./configure --help'
+for details on some of the pertinent environment variables.
+
+ You can give `configure' initial values for configuration parameters
+by setting variables in the command line or in the environment. Here
+is an example:
+
+ ./configure CC=c89 CFLAGS=-O2 LIBS=-lposix
+
+ *Note Defining Variables::, for more details.
+
+Compiling For Multiple Architectures
+====================================
+
+ You can compile the package for more than one kind of computer at the
+same time, by placing the object files for each architecture in their
+own directory. To do this, you must use a version of `make' that
+supports the `VPATH' variable, such as GNU `make'. `cd' to the
+directory where you want the object files and executables to go and run
+the `configure' script. `configure' automatically checks for the
+source code in the directory that `configure' is in and in `..'.
+
+ If you have to use a `make' that does not support the `VPATH'
+variable, you have to compile the package for one architecture at a
+time in the source code directory. After you have installed the
+package for one architecture, use `make distclean' before reconfiguring
+for another architecture.
+
+Installation Names
+==================
+
+ By default, `make install' will install the package's files in
+`/usr/local/bin', `/usr/local/man', etc. You can specify an
+installation prefix other than `/usr/local' by giving `configure' the
+option `--prefix=PATH'.
+
+ You can specify separate installation prefixes for
+architecture-specific files and architecture-independent files. If you
+give `configure' the option `--exec-prefix=PATH', the package will use
+PATH as the prefix for installing programs and libraries.
+Documentation and other data files will still use the regular prefix.
+
+ In addition, if you use an unusual directory layout you can give
+options like `--bindir=PATH' to specify different values for particular
+kinds of files. Run `configure --help' for a list of the directories
+you can set and what kinds of files go in them.
+
+ If the package supports it, you can cause programs to be installed
+with an extra prefix or suffix on their names by giving `configure' the
+option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
+
+Optional Features
+=================
+
+ Some packages pay attention to `--enable-FEATURE' options to
+`configure', where FEATURE indicates an optional part of the package.
+They may also pay attention to `--with-PACKAGE' options, where PACKAGE
+is something like `gnu-as' or `x' (for the X Window System). The
+`README' should mention any `--enable-' and `--with-' options that the
+package recognizes.
+
+ For packages that use the X Window System, `configure' can usually
+find the X include and library files automatically, but if it doesn't,
+you can use the `configure' options `--x-includes=DIR' and
+`--x-libraries=DIR' to specify their locations.
+
+Specifying the System Type
+==========================
+
+ There may be some features `configure' cannot figure out
+automatically, but needs to determine by the type of machine the package
+will run on. Usually, assuming the package is built to be run on the
+_same_ architectures, `configure' can figure that out, but if it prints
+a message saying it cannot guess the machine type, give it the
+`--build=TYPE' option. TYPE can either be a short name for the system
+type, such as `sun4', or a canonical name which has the form:
+
+ CPU-COMPANY-SYSTEM
+
+where SYSTEM can have one of these forms:
+
+ OS KERNEL-OS
+
+ See the file `config.sub' for the possible values of each field. If
+`config.sub' isn't included in this package, then this package doesn't
+need to know the machine type.
+
+ If you are _building_ compiler tools for cross-compiling, you should
+use the `--target=TYPE' option to select the type of system they will
+produce code for.
+
+ If you want to _use_ a cross compiler, that generates code for a
+platform different from the build platform, you should specify the
+"host" platform (i.e., that on which the generated programs will
+eventually be run) with `--host=TYPE'.
+
+Sharing Defaults
+================
+
+ If you want to set default values for `configure' scripts to share,
+you can create a site shell script called `config.site' that gives
+default values for variables like `CC', `cache_file', and `prefix'.
+`configure' looks for `PREFIX/share/config.site' if it exists, then
+`PREFIX/etc/config.site' if it exists. Or, you can set the
+`CONFIG_SITE' environment variable to the location of the site script.
+A warning: not all `configure' scripts look for a site script.
+
+Defining Variables
+==================
+
+ Variables not defined in a site shell script can be set in the
+environment passed to `configure'. However, some packages may run
+configure again during the build, and the customized values of these
+variables may be lost. In order to avoid this problem, you should set
+them in the `configure' command line, using `VAR=value'. For example:
+
+ ./configure CC=/usr/local2/bin/gcc
+
+will cause the specified gcc to be used as the C compiler (unless it is
+overridden in the site shell script).
+
+`configure' Invocation
+======================
+
+ `configure' recognizes the following options to control how it
+operates.
+
+`--help'
+`-h'
+ Print a summary of the options to `configure', and exit.
+
+`--version'
+`-V'
+ Print the version of Autoconf used to generate the `configure'
+ script, and exit.
+
+`--cache-file=FILE'
+ Enable the cache: use and save the results of the tests in FILE,
+ traditionally `config.cache'. FILE defaults to `/dev/null' to
+ disable caching.
+
+`--config-cache'
+`-C'
+ Alias for `--cache-file=config.cache'.
+
+`--quiet'
+`--silent'
+`-q'
+ Do not print messages saying which checks are being made. To
+ suppress all normal output, redirect it to `/dev/null' (any error
+ messages will still be shown).
+
+`--srcdir=DIR'
+ Look for the package's source code in directory DIR. Usually
+ `configure' can determine that directory automatically.
+
+`configure' also accepts some other, not widely useful, options. Run
+`configure --help' for more details.
+
--- /dev/null
+## $Id: Makefile.am,v 1.1.4.12 2004/02/09 23:18:59 ensc Exp $
+
+# Copyright (C) 2003 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+#
+# 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, 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+
+ACLOCAL_AMFLAGS = -I m4
+
+CVS2CL_AMFLAGS = $(CVS2CL_TAG) -U cvsusers.map --show-dead
+CVS2CL_ALLFLAGS := $(CVS2CL_AMFLAGS) $(CVS2CL_FLAGS)
+
+sysvdir = $(sysconfdir)/init.d
+vservercfgdir = $(sysconfdir)/vservers
+legacydir = $(pkglibdir)/legacy
+
+include_HEADERS = $(lib_HDRS)
+noinst_HEADERS = $(src_HDRS) $(lib_XHDRS) compat.h
+
+lib_LIBRARIES = $(lib_lib_LIBS)
+
+pkglib_SCRIPTS = $(distrib_SCRPTS) $(scripts_SCRPTS) $(src_pkglib_SCRPTS)
+pkglib_DATA = $(distrib_DAT) $(scriptscfg_DATA)
+pkglib_PROGRAMS = $(src_pkglib_PRGS)
+
+legacy_SCRIPTS = $(scripts_LEGSCRPTS)
+
+sbin_SCRIPTS = $(scripts_PRGS) $(linuxconf_SCRPTS)
+sbin_PROGRAMS = $(src_sbin_PRGS)
+noinst_PROGRAMS = $(test_PRGS)
+
+sysv_SCRIPTS = $(sysv_SCRPTS)
+sysconf_DATA = $(sysv_CFG)
+vservercfg_DATA = $(linuxconf_cfg_DTA)
+
+BUILT_SOURCES = linuxcaps.h linuxvirtual.h
+
+man_MANS = $(man_DATMAN) $(linuxconf_DATMAN)
+
+m4_FILES = m4/ensc_cflags.m4 m4/ensc_kerneldir.m4 \
+ m4/ensc_changelog.m4 m4/ensc_uv_vrootdir.m4
+
+EXTRA_DIST = $(distrib_SCRPTS) $(distrib_DAT) \
+ $(sysv_XTRAS) $(sysv_CFG) \
+ $(doc_DAT) $(man_DATMAN) $(linuxconf_XTRAS) \
+ $(scripts_SCRPTS) $(scripts_XTRAS) \
+ $(m4_FILES) \
+ util-vserver.spec THANKS
+
+AM_CPPFLAGS = -I $(top_srcdir)/lib -D VERSION=\"$(VERSION)\" -D PKGLIBDIR=\"$(pkglibdir)\" -D _GNU_SOURCE
+AM_CFLAGS = -Wall -pedantic
+
+CLEANFILES = $(sysv_GENSCRPTS) $(scripts_GENSCRPTS) \
+ $(linuxconf_GENFILES) $(src_GENFILES) \
+ $(BUILT_SOURCES)
+
+
+linuxcaps.h: ${kernelincludedir}/linux/capability.h Makefile
+ @rm -f $@
+ echo '#include <stdint.h>' >$@.tmp
+ sed -e 's!^#include .*!!g;s!\<__u32\>!uint32_t!g;s!\<__user\>!!g;' $< >>$@.tmp
+ @-chmod --reference $< $@.tmp &>/dev/null
+ mv -f $@.tmp $@
+ @chmod a-w $@
+
+linuxvirtual.h:
+if ENSC_ENABLE_INTERNAL_HEADERS
+ ln -sf '$(top_srcdir)/lib/virtual.h' '$@'
+else
+ ln -sf '$(kernelincludedir)/linux/virtual.h' '$@' && test -e '$@' || \
+ ln -sf '$(top_srcdir)/lib/virtual.h' '$@'
+endif
+
+include $(top_srcdir)/lib/Makefile-files
+include $(top_srcdir)/src/Makefile-files
+include $(top_srcdir)/distrib/Makefile-files
+include $(top_srcdir)/doc/Makefile-files
+include $(top_srcdir)/man/Makefile-files
+include $(top_srcdir)/scripts/Makefile-files
+include $(top_srcdir)/tests/Makefile-files
+include $(top_srcdir)/sysv/Makefile-files
+include $(top_srcdir)/linuxconf/Makefile-files
+
+include $(top_srcdir)/m4/gpgsig.am
+include $(top_srcdir)/m4/validate.am
+include $(top_srcdir)/m4/changelog.am
--- /dev/null
+# Makefile.in generated by automake 1.8.2 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004 Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+# Copyright (C) 2003 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+#
+# 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, 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+
+
+
+
+
+SOURCES = $(lib_libvserver_a_SOURCES) $(src_capchroot_SOURCES) $(src_chbind_SOURCES) $(src_chcontext_SOURCES) $(src_fakerunlevel_SOURCES) $(src_filetime_SOURCES) $(src_ifspec_SOURCES) $(src_listdevip_SOURCES) $(src_parserpmdump_SOURCES) $(src_readlink_SOURCES) $(src_rebootmgr_SOURCES) $(src_reducecap_SOURCES) $(src_showattr_SOURCES) $(src_showperm_SOURCES) $(src_vbuild_SOURCES) $(src_vcheck_SOURCES) $(src_vdu_SOURCES) $(src_vfiles_SOURCES) $(src_vkill_SOURCES) $(src_vlimit_SOURCES) $(src_vreboot_SOURCES) $(src_vserver_stat_SOURCES) $(src_vunify_SOURCES) $(tests_escaperoot_SOURCES) $(tests_forkbomb_SOURCES) $(tests_testipc_SOURCES) $(tests_testlimit_SOURCES) $(tests_testopenf_SOURCES)
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = .
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+pkglib_PROGRAMS = $(am__EXEEXT_2)
+sbin_PROGRAMS = $(am__EXEEXT_3)
+noinst_PROGRAMS = $(am__EXEEXT_1)
+DIST_COMMON = README $(am__configure_deps) $(include_HEADERS) \
+ $(noinst_HEADERS) $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+ $(srcdir)/config.h.in $(srcdir)/util-vserver.spec.in \
+ $(top_srcdir)/configure $(top_srcdir)/distrib/Makefile-files \
+ $(top_srcdir)/doc/Makefile-files \
+ $(top_srcdir)/lib/Makefile-files \
+ $(top_srcdir)/linuxconf/Makefile-files \
+ $(top_srcdir)/m4/changelog.am $(top_srcdir)/m4/gpgsig.am \
+ $(top_srcdir)/m4/validate.am $(top_srcdir)/man/Makefile-files \
+ $(top_srcdir)/scripts/Makefile-files \
+ $(top_srcdir)/src/Makefile-files \
+ $(top_srcdir)/sysv/Makefile-files \
+ $(top_srcdir)/tests/Makefile-files AUTHORS COPYING ChangeLog \
+ INSTALL NEWS THANKS compile depcomp install-sh missing \
+ mkinstalldirs
+subdir = .
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ensc_cflags.m4 \
+ $(top_srcdir)/m4/ensc_changelog.m4 \
+ $(top_srcdir)/m4/ensc_e2fscheck.m4 \
+ $(top_srcdir)/m4/ensc_kerneldir.m4 \
+ $(top_srcdir)/m4/ensc_syscall.m4 \
+ $(top_srcdir)/m4/ensc_uv_vrootdir.m4 \
+ $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
+ configure.lineno configure.status.lineno
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = config.h
+CONFIG_CLEAN_FILES = util-vserver.spec
+AR = ar
+ARFLAGS = cru
+am__installdirs = $(DESTDIR)$(libdir) $(DESTDIR)$(pkglibdir) $(DESTDIR)$(sbindir) $(DESTDIR)$(legacydir) $(DESTDIR)$(pkglibdir) $(DESTDIR)$(sbindir) $(DESTDIR)$(sysvdir) $(DESTDIR)$(man8dir) $(DESTDIR)$(pkglibdir) $(DESTDIR)$(scriptscfgdir) $(DESTDIR)$(sysconfdir) $(DESTDIR)$(vservercfgdir) $(DESTDIR)$(includedir)
+libLIBRARIES_INSTALL = $(INSTALL_DATA)
+LIBRARIES = $(lib_LIBRARIES)
+lib_libvserver_a_AR = $(AR) $(ARFLAGS)
+lib_libvserver_a_LIBADD =
+am__dirstamp = $(am__leading_dot)dirstamp
+am__objects_1 = lib/lib_libvserver_a-syscall.$(OBJEXT) \
+ lib/lib_libvserver_a-syscall_rlimit.$(OBJEXT) \
+ lib/lib_libvserver_a-syscall_kill.$(OBJEXT) \
+ lib/lib_libvserver_a-checkversion.$(OBJEXT) \
+ lib/lib_libvserver_a-getctx.$(OBJEXT) \
+ lib/lib_libvserver_a-getversion.$(OBJEXT) \
+ lib/lib_libvserver_a-uint2str.$(OBJEXT)
+am_lib_libvserver_a_OBJECTS = $(am__objects_1)
+lib_libvserver_a_OBJECTS = $(am_lib_libvserver_a_OBJECTS)
+am__EXEEXT_1 = tests/escaperoot$(EXEEXT) tests/forkbomb$(EXEEXT) \
+ tests/testipc$(EXEEXT) tests/testlimit$(EXEEXT) \
+ tests/testopenf$(EXEEXT)
+am__EXEEXT_2 = src/capchroot$(EXEEXT) src/fakerunlevel$(EXEEXT) \
+ src/filetime$(EXEEXT) src/ifspec$(EXEEXT) \
+ src/listdevip$(EXEEXT) src/parserpmdump$(EXEEXT) \
+ src/readlink$(EXEEXT) src/showattr$(EXEEXT) \
+ src/showperm$(EXEEXT) src/vbuild$(EXEEXT) src/vcheck$(EXEEXT) \
+ src/vreboot$(EXEEXT) src/vunify$(EXEEXT)
+pkglibPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
+am__EXEEXT_3 = src/chbind$(EXEEXT) src/chcontext$(EXEEXT) \
+ src/rebootmgr$(EXEEXT) src/reducecap$(EXEEXT) \
+ src/vlimit$(EXEEXT) src/vdu$(EXEEXT) src/vfiles$(EXEEXT) \
+ src/vkill$(EXEEXT) src/vserver-stat$(EXEEXT)
+sbinPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
+PROGRAMS = $(noinst_PROGRAMS) $(pkglib_PROGRAMS) $(sbin_PROGRAMS)
+am_src_capchroot_OBJECTS = src/capchroot.$(OBJEXT)
+src_capchroot_OBJECTS = $(am_src_capchroot_OBJECTS)
+src_capchroot_DEPENDENCIES = lib/libvserver.a
+am_src_chbind_OBJECTS = src/chbind.$(OBJEXT)
+src_chbind_OBJECTS = $(am_src_chbind_OBJECTS)
+src_chbind_DEPENDENCIES = lib/libvserver.a
+am_src_chcontext_OBJECTS = src/chcontext.$(OBJEXT)
+src_chcontext_OBJECTS = $(am_src_chcontext_OBJECTS)
+src_chcontext_DEPENDENCIES = lib/libvserver.a
+am_src_fakerunlevel_OBJECTS = src/fakerunlevel.$(OBJEXT)
+src_fakerunlevel_OBJECTS = $(am_src_fakerunlevel_OBJECTS)
+src_fakerunlevel_LDADD = $(LDADD)
+am_src_filetime_OBJECTS = src/filetime.$(OBJEXT)
+src_filetime_OBJECTS = $(am_src_filetime_OBJECTS)
+src_filetime_LDADD = $(LDADD)
+am_src_ifspec_OBJECTS = src/ifspec.$(OBJEXT)
+src_ifspec_OBJECTS = $(am_src_ifspec_OBJECTS)
+src_ifspec_LDADD = $(LDADD)
+am_src_listdevip_OBJECTS = src/listdevip.$(OBJEXT)
+src_listdevip_OBJECTS = $(am_src_listdevip_OBJECTS)
+src_listdevip_LDADD = $(LDADD)
+am_src_parserpmdump_OBJECTS = src/parserpmdump.$(OBJEXT)
+src_parserpmdump_OBJECTS = $(am_src_parserpmdump_OBJECTS)
+src_parserpmdump_LDADD = $(LDADD)
+am_src_readlink_OBJECTS = src/readlink.$(OBJEXT)
+src_readlink_OBJECTS = $(am_src_readlink_OBJECTS)
+src_readlink_LDADD = $(LDADD)
+am_src_rebootmgr_OBJECTS = src/src_rebootmgr-rebootmgr.$(OBJEXT)
+src_rebootmgr_OBJECTS = $(am_src_rebootmgr_OBJECTS)
+src_rebootmgr_LDADD = $(LDADD)
+am_src_reducecap_OBJECTS = src/reducecap.$(OBJEXT)
+src_reducecap_OBJECTS = $(am_src_reducecap_OBJECTS)
+src_reducecap_DEPENDENCIES = lib/libvserver.a
+am_src_showattr_OBJECTS = src/showattr.$(OBJEXT)
+src_showattr_OBJECTS = $(am_src_showattr_OBJECTS)
+src_showattr_LDADD = $(LDADD)
+am_src_showperm_OBJECTS = src/showperm.$(OBJEXT)
+src_showperm_OBJECTS = $(am_src_showperm_OBJECTS)
+src_showperm_LDADD = $(LDADD)
+am_src_vbuild_OBJECTS = src/vbuild.$(OBJEXT) src/vutil.$(OBJEXT)
+src_vbuild_OBJECTS = $(am_src_vbuild_OBJECTS)
+src_vbuild_LDADD = $(LDADD)
+am_src_vcheck_OBJECTS = src/vcheck.$(OBJEXT) src/vutil.$(OBJEXT)
+src_vcheck_OBJECTS = $(am_src_vcheck_OBJECTS)
+src_vcheck_LDADD = $(LDADD)
+am_src_vdu_OBJECTS = src/vdu.$(OBJEXT)
+src_vdu_OBJECTS = $(am_src_vdu_OBJECTS)
+src_vdu_LDADD = $(LDADD)
+am_src_vfiles_OBJECTS = src/vfiles.$(OBJEXT) src/vutil.$(OBJEXT)
+src_vfiles_OBJECTS = $(am_src_vfiles_OBJECTS)
+src_vfiles_LDADD = $(LDADD)
+am_src_vkill_OBJECTS = src/src_vkill-vkill.$(OBJEXT)
+src_vkill_OBJECTS = $(am_src_vkill_OBJECTS)
+src_vkill_DEPENDENCIES = lib/libvserver.a
+am_src_vlimit_OBJECTS = src/vlimit.$(OBJEXT)
+src_vlimit_OBJECTS = $(am_src_vlimit_OBJECTS)
+src_vlimit_DEPENDENCIES = lib/libvserver.a
+am_src_vreboot_OBJECTS = src/vreboot.$(OBJEXT)
+src_vreboot_OBJECTS = $(am_src_vreboot_OBJECTS)
+src_vreboot_LDADD = $(LDADD)
+am_src_vserver_stat_OBJECTS = src/vserver-stat.$(OBJEXT)
+src_vserver_stat_OBJECTS = $(am_src_vserver_stat_OBJECTS)
+src_vserver_stat_DEPENDENCIES = lib/libvserver.a
+am_src_vunify_OBJECTS = src/src_vunify-vunify.$(OBJEXT) \
+ src/src_vunify-vutil.$(OBJEXT)
+src_vunify_OBJECTS = $(am_src_vunify_OBJECTS)
+src_vunify_LDADD = $(LDADD)
+am_tests_escaperoot_OBJECTS = tests/escaperoot.$(OBJEXT)
+tests_escaperoot_OBJECTS = $(am_tests_escaperoot_OBJECTS)
+tests_escaperoot_LDADD = $(LDADD)
+am_tests_forkbomb_OBJECTS = tests/forkbomb.$(OBJEXT)
+tests_forkbomb_OBJECTS = $(am_tests_forkbomb_OBJECTS)
+tests_forkbomb_LDADD = $(LDADD)
+am_tests_testipc_OBJECTS = tests/testipc.$(OBJEXT)
+tests_testipc_OBJECTS = $(am_tests_testipc_OBJECTS)
+tests_testipc_LDADD = $(LDADD)
+am_tests_testlimit_OBJECTS = tests/testlimit.$(OBJEXT)
+tests_testlimit_OBJECTS = $(am_tests_testlimit_OBJECTS)
+tests_testlimit_LDADD = $(LDADD)
+am_tests_testopenf_OBJECTS = tests/testopenf.$(OBJEXT)
+tests_testopenf_OBJECTS = $(am_tests_testopenf_OBJECTS)
+tests_testopenf_LDADD = $(LDADD)
+legacySCRIPT_INSTALL = $(INSTALL_SCRIPT)
+pkglibSCRIPT_INSTALL = $(INSTALL_SCRIPT)
+sbinSCRIPT_INSTALL = $(INSTALL_SCRIPT)
+sysvSCRIPT_INSTALL = $(INSTALL_SCRIPT)
+SCRIPTS = $(legacy_SCRIPTS) $(pkglib_SCRIPTS) $(sbin_SCRIPTS) \
+ $(sysv_SCRIPTS)
+DEFAULT_INCLUDES = -I. -I$(srcdir) -I.
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+@AMDEP_TRUE@DEP_FILES = \
+@AMDEP_TRUE@ lib/$(DEPDIR)/lib_libvserver_a-checkversion.Po \
+@AMDEP_TRUE@ lib/$(DEPDIR)/lib_libvserver_a-getctx.Po \
+@AMDEP_TRUE@ lib/$(DEPDIR)/lib_libvserver_a-getversion.Po \
+@AMDEP_TRUE@ lib/$(DEPDIR)/lib_libvserver_a-syscall.Po \
+@AMDEP_TRUE@ lib/$(DEPDIR)/lib_libvserver_a-syscall_kill.Po \
+@AMDEP_TRUE@ lib/$(DEPDIR)/lib_libvserver_a-syscall_rlimit.Po \
+@AMDEP_TRUE@ lib/$(DEPDIR)/lib_libvserver_a-uint2str.Po \
+@AMDEP_TRUE@ src/$(DEPDIR)/capchroot.Po src/$(DEPDIR)/chbind.Po \
+@AMDEP_TRUE@ src/$(DEPDIR)/chcontext.Po \
+@AMDEP_TRUE@ src/$(DEPDIR)/fakerunlevel.Po \
+@AMDEP_TRUE@ src/$(DEPDIR)/filetime.Po src/$(DEPDIR)/ifspec.Po \
+@AMDEP_TRUE@ src/$(DEPDIR)/listdevip.Po \
+@AMDEP_TRUE@ src/$(DEPDIR)/parserpmdump.Po \
+@AMDEP_TRUE@ src/$(DEPDIR)/readlink.Po \
+@AMDEP_TRUE@ src/$(DEPDIR)/reducecap.Po \
+@AMDEP_TRUE@ src/$(DEPDIR)/showattr.Po \
+@AMDEP_TRUE@ src/$(DEPDIR)/showperm.Po \
+@AMDEP_TRUE@ src/$(DEPDIR)/src_rebootmgr-rebootmgr.Po \
+@AMDEP_TRUE@ src/$(DEPDIR)/src_vkill-vkill.Po \
+@AMDEP_TRUE@ src/$(DEPDIR)/src_vunify-vunify.Po \
+@AMDEP_TRUE@ src/$(DEPDIR)/src_vunify-vutil.Po \
+@AMDEP_TRUE@ src/$(DEPDIR)/vbuild.Po src/$(DEPDIR)/vcheck.Po \
+@AMDEP_TRUE@ src/$(DEPDIR)/vdu.Po src/$(DEPDIR)/vfiles.Po \
+@AMDEP_TRUE@ src/$(DEPDIR)/vlimit.Po src/$(DEPDIR)/vreboot.Po \
+@AMDEP_TRUE@ src/$(DEPDIR)/vserver-stat.Po \
+@AMDEP_TRUE@ src/$(DEPDIR)/vutil.Po \
+@AMDEP_TRUE@ tests/$(DEPDIR)/escaperoot.Po \
+@AMDEP_TRUE@ tests/$(DEPDIR)/forkbomb.Po \
+@AMDEP_TRUE@ tests/$(DEPDIR)/testipc.Po \
+@AMDEP_TRUE@ tests/$(DEPDIR)/testlimit.Po \
+@AMDEP_TRUE@ tests/$(DEPDIR)/testopenf.Po
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+CXXLD = $(CXX)
+CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
+ -o $@
+SOURCES = $(lib_libvserver_a_SOURCES) $(src_capchroot_SOURCES) \
+ $(src_chbind_SOURCES) $(src_chcontext_SOURCES) \
+ $(src_fakerunlevel_SOURCES) $(src_filetime_SOURCES) \
+ $(src_ifspec_SOURCES) $(src_listdevip_SOURCES) \
+ $(src_parserpmdump_SOURCES) $(src_readlink_SOURCES) \
+ $(src_rebootmgr_SOURCES) $(src_reducecap_SOURCES) \
+ $(src_showattr_SOURCES) $(src_showperm_SOURCES) \
+ $(src_vbuild_SOURCES) $(src_vcheck_SOURCES) $(src_vdu_SOURCES) \
+ $(src_vfiles_SOURCES) $(src_vkill_SOURCES) \
+ $(src_vlimit_SOURCES) $(src_vreboot_SOURCES) \
+ $(src_vserver_stat_SOURCES) $(src_vunify_SOURCES) \
+ $(tests_escaperoot_SOURCES) $(tests_forkbomb_SOURCES) \
+ $(tests_testipc_SOURCES) $(tests_testlimit_SOURCES) \
+ $(tests_testopenf_SOURCES)
+DIST_SOURCES = $(lib_libvserver_a_SOURCES) $(src_capchroot_SOURCES) \
+ $(src_chbind_SOURCES) $(src_chcontext_SOURCES) \
+ $(src_fakerunlevel_SOURCES) $(src_filetime_SOURCES) \
+ $(src_ifspec_SOURCES) $(src_listdevip_SOURCES) \
+ $(src_parserpmdump_SOURCES) $(src_readlink_SOURCES) \
+ $(src_rebootmgr_SOURCES) $(src_reducecap_SOURCES) \
+ $(src_showattr_SOURCES) $(src_showperm_SOURCES) \
+ $(src_vbuild_SOURCES) $(src_vcheck_SOURCES) $(src_vdu_SOURCES) \
+ $(src_vfiles_SOURCES) $(src_vkill_SOURCES) \
+ $(src_vlimit_SOURCES) $(src_vreboot_SOURCES) \
+ $(src_vserver_stat_SOURCES) $(src_vunify_SOURCES) \
+ $(tests_escaperoot_SOURCES) $(tests_forkbomb_SOURCES) \
+ $(tests_testipc_SOURCES) $(tests_testlimit_SOURCES) \
+ $(tests_testopenf_SOURCES)
+man8dir = $(mandir)/man8
+NROFF = nroff
+MANS = $(man_MANS)
+pkglibDATA_INSTALL = $(INSTALL_DATA)
+scriptscfgDATA_INSTALL = $(INSTALL_DATA)
+sysconfDATA_INSTALL = $(INSTALL_DATA)
+vservercfgDATA_INSTALL = $(INSTALL_DATA)
+DATA = $(pkglib_DATA) $(scriptscfg_DATA) $(sysconf_DATA) \
+ $(vservercfg_DATA)
+includeHEADERS_INSTALL = $(INSTALL_HEADER)
+HEADERS = $(include_HEADERS) $(noinst_HEADERS)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+distdir = $(PACKAGE)-$(VERSION)
+top_distdir = $(distdir)
+am__remove_distdir = \
+ { test ! -d $(distdir) \
+ || { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \
+ && rm -fr $(distdir); }; }
+DIST_ARCHIVES = $(distdir).tar.gz $(distdir).tar.bz2
+GZIP_ENV = --best
+distuninstallcheck_listfiles = find . -type f -print
+distcleancheck_listfiles = find . -type f -print
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPPFLAGS = @CPPFLAGS@
+CVS2CL = @CVS2CL@
+CVS2CL_TAG = @CVS2CL_TAG@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ENSC_ENABLE_INTERNAL_HEADERS_FALSE = @ENSC_ENABLE_INTERNAL_HEADERS_FALSE@
+ENSC_ENABLE_INTERNAL_HEADERS_TRUE = @ENSC_ENABLE_INTERNAL_HEADERS_TRUE@
+ENSC_ENABLE_LINUXCONF_FALSE = @ENSC_ENABLE_LINUXCONF_FALSE@
+ENSC_ENABLE_LINUXCONF_TRUE = @ENSC_ENABLE_LINUXCONF_TRUE@
+EXEEXT = @EXEEXT@
+HAVE_CVS2CL_FALSE = @HAVE_CVS2CL_FALSE@
+HAVE_CVS2CL_TRUE = @HAVE_CVS2CL_TRUE@
+HAVE_RCS2LOG_FALSE = @HAVE_RCS2LOG_FALSE@
+HAVE_RCS2LOG_TRUE = @HAVE_RCS2LOG_TRUE@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
+MAKEINFO = @MAKEINFO@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+RANLIB = @RANLIB@
+RCS2LOG = @RCS2LOG@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_RANLIB = @ac_ct_RANLIB@
+ac_ct_STRIP = @ac_ct_STRIP@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+bindir = @bindir@
+build_alias = @build_alias@
+datadir = @datadir@
+exec_prefix = @exec_prefix@
+host_alias = @host_alias@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+kernelincludedir = @kernelincludedir@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+vserverdir = @vserverdir@
+ACLOCAL_AMFLAGS = -I m4
+CVS2CL_AMFLAGS = $(CVS2CL_TAG) -U cvsusers.map --show-dead
+CVS2CL_ALLFLAGS := $(CVS2CL_AMFLAGS) $(CVS2CL_FLAGS)
+sysvdir = $(sysconfdir)/init.d
+vservercfgdir = $(sysconfdir)/vservers
+legacydir = $(pkglibdir)/legacy
+include_HEADERS = $(lib_HDRS)
+noinst_HEADERS = $(src_HDRS) $(lib_XHDRS) compat.h
+lib_LIBRARIES = $(lib_lib_LIBS)
+pkglib_SCRIPTS = $(distrib_SCRPTS) $(scripts_SCRPTS) $(src_pkglib_SCRPTS)
+pkglib_DATA = $(distrib_DAT) $(scriptscfg_DATA)
+legacy_SCRIPTS = $(scripts_LEGSCRPTS)
+sbin_SCRIPTS = $(scripts_PRGS) $(linuxconf_SCRPTS)
+sysv_SCRIPTS = $(sysv_SCRPTS)
+sysconf_DATA = $(sysv_CFG)
+vservercfg_DATA = $(linuxconf_cfg_DTA)
+BUILT_SOURCES = linuxcaps.h linuxvirtual.h
+man_MANS = $(man_DATMAN) $(linuxconf_DATMAN)
+m4_FILES = m4/ensc_cflags.m4 m4/ensc_kerneldir.m4 \
+ m4/ensc_changelog.m4 m4/ensc_uv_vrootdir.m4
+
+EXTRA_DIST = $(distrib_SCRPTS) $(distrib_DAT) \
+ $(sysv_XTRAS) $(sysv_CFG) \
+ $(doc_DAT) $(man_DATMAN) $(linuxconf_XTRAS) \
+ $(scripts_SCRPTS) $(scripts_XTRAS) \
+ $(m4_FILES) \
+ util-vserver.spec THANKS
+
+AM_CPPFLAGS = -I $(top_srcdir)/lib -D VERSION=\"$(VERSION)\" -D PKGLIBDIR=\"$(pkglibdir)\" -D _GNU_SOURCE
+AM_CFLAGS = -Wall -pedantic
+CLEANFILES = $(sysv_GENSCRPTS) $(scripts_GENSCRPTS) \
+ $(linuxconf_GENFILES) $(src_GENFILES) \
+ $(BUILT_SOURCES)
+
+lib_SRCS = lib/syscall.c \
+ lib/syscall_rlimit.c \
+ lib/syscall_kill.c \
+ lib/checkversion.c \
+ lib/getctx.c \
+ lib/getversion.c \
+ lib/uint2str.c
+
+lib_HDRS = lib/vserver.h
+lib_XHDRS = lib/syscall-compat.hc \
+ lib/syscall-legacy.hc \
+ lib/syscall_rlimit-v11.hc \
+ lib/syscall_kill-v11.hc \
+ lib/getctx-compat.hc \
+ lib/getctx-legacy.hc \
+ lib/getversion-internal.hc \
+ lib/safechroot-internal.hc \
+ lib/virtual.h \
+ lib/vserver-internal.h
+
+lib_lib_LIBS = lib/libvserver.a
+lib_libvserver_a_SOURCES = $(lib_SRCS)
+lib_libvserver_a_CPPFLAGS = -I$(kernelincludedir) -D_GNU_SOURCE
+src_HDRS = src/vutil.h src/vutil.p \
+ src/ext2fs.h
+
+src_pkglib_SCRPTS = src/setattr
+src_pkglib_PRGS = src/capchroot \
+ src/fakerunlevel \
+ src/filetime \
+ src/ifspec \
+ src/listdevip \
+ src/parserpmdump \
+ src/readlink \
+ src/showattr \
+ src/showperm \
+ src/vbuild \
+ src/vcheck \
+ src/vreboot \
+ src/vunify
+
+src_sbin_PRGS = src/chbind \
+ src/chcontext \
+ src/rebootmgr \
+ src/reducecap \
+ src/vlimit \
+ src/vdu \
+ src/vfiles \
+ src/vkill \
+ src/vserver-stat
+
+src_GENFILES = src/setattr
+src_capchroot_SOURCES = src/capchroot.c
+src_capchroot_LDADD = lib/libvserver.a
+src_chbind_SOURCES = src/chbind.c
+src_chbind_LDADD = lib/libvserver.a
+src_chcontext_SOURCES = src/chcontext.c
+src_chcontext_LDADD = lib/libvserver.a
+src_fakerunlevel_SOURCES = src/fakerunlevel.c
+src_filetime_SOURCES = src/filetime.c
+src_ifspec_SOURCES = src/ifspec.c
+src_listdevip_SOURCES = src/listdevip.c
+src_parserpmdump_SOURCES = src/parserpmdump.c
+src_readlink_SOURCES = src/readlink.c
+src_rebootmgr_SOURCES = src/rebootmgr.c
+src_rebootmgr_CPPFLAGS = $(AM_CPPFLAGS) -DSBINDIR=\"$(sbindir)\" -DVROOTDIR=\"$(vserverdir)\"
+src_reducecap_SOURCES = src/reducecap.c
+src_reducecap_LDADD = lib/libvserver.a
+src_vlimit_SOURCES = src/vlimit.c
+src_vlimit_LDADD = lib/libvserver.a
+src_vkill_SOURCES = src/vkill.c
+src_vkill_LDADD = lib/libvserver.a
+src_vkill_CPPFLAGS = $(AM_CPPFLAGS) -DLEGACYDIR=\"$(legacydir)\"
+src_showattr_SOURCES = src/showattr.c
+src_showperm_SOURCES = src/showperm.c
+src_vbuild_SOURCES = src/vbuild.cc src/vutil.cc
+src_vdu_SOURCES = src/vdu.c
+src_vfiles_SOURCES = src/vfiles.cc src/vutil.cc
+src_vreboot_SOURCES = src/vreboot.c
+src_vserver_stat_SOURCES = src/vserver-stat.c
+src_vserver_stat_LDADD = lib/libvserver.a
+src_vunify_SOURCES = src/vunify.cc src/vutil.cc
+src_vunify_CPPFLAGS = $(AM_CPPFLAGS) -DVROOTDIR=\"$(vserverdir)\"
+src_vcheck_SOURCES = src/vcheck.cc src/vutil.cc
+distrib_SCRPTS = distrib/install-mdk8.2 \
+ distrib/install-post.sh \
+ distrib/install-pre.sh \
+ distrib/install-rh7.2 \
+ distrib/install-rh7.3 \
+ distrib/install-rh8.0 \
+ distrib/install-rh9.0 \
+ distrib/sample.sh
+
+distrib_DAT = distrib/mdk8.2-minimum \
+ distrib/rh7.3-minimum \
+ distrib/rh8.0-minimum \
+ distrib/rh9.0-minimum \
+ distrib/sample.conf
+
+doc_DAT = doc/FAQ.txt \
+ doc/changelog.txt \
+ doc/intro.txt
+
+man_DATMAN = man/chbind.8 \
+ man/chcontext.8 \
+ man/distrib-info.8 \
+ man/rebootmgr.8 \
+ man/reducecap.8 \
+ man/vps.8 \
+ man/vpstree.8 \
+ man/vrpm.8 \
+ man/vserver-copy.8 \
+ man/vserver-stat.8 \
+ man/vserver.8 \
+ man/vtop.8
+
+scriptscfgdir = $(sbindir)
+scripts_src_SCRPTS = scripts/distrib-info \
+ scripts/rootshell \
+ scripts/save_s_context \
+ scripts/vprofile \
+ scripts/vserverkillall \
+ scripts/vservers.grabinfo.sh \
+ scripts/vsysvwrapper
+
+scripts_gen_SCRPTS =
+scripts_src_LEGSCRPTS = scripts/vunify.sh
+scripts_gen_LEGSCRPTS = scripts/vkill
+scripts_src_PRGS = scripts/vpstree \
+ scripts/vrpm \
+ scripts/vserver \
+ scripts/vserver-copy \
+ scripts/vtop
+
+scripts_gen_PRGS = scripts/vps
+scripts_PRGS = $(scripts_src_PRGS) $(scripts_gen_PRGS)
+scripts_SCRPTS = $(scripts_src_SCRPTS) $(scripts_gen_SCRPTS)
+scripts_LEGSCRPTS = $(scripts_src_LEGSCRPTS) $(scripts_gen_LEGSCRPTS)
+scriptscfg_DATA = scripts/util-vserver-vars
+scripts_XTRAS = scripts/util-vserver-vars.subst \
+ scripts/vkill.subst \
+ scripts/vps.subst \
+ $(scripts_src_SCRPTS) $(scripts_src_PRGS) \
+ $(scripts_src_LEGSCRPTS)
+
+scripts_GENSCRPTS = scripts/util-vserver-vars \
+ $(scripts_gen_SCRPTS) $(scripts_gen_PRGS) \
+ $(scripts_gen_LEGSCRPTS)
+
+test_PRGS = tests/escaperoot \
+ tests/forkbomb \
+ tests/testipc \
+ tests/testlimit \
+ tests/testopenf
+
+tests_escaperoot_SOURCES = tests/escaperoot.cc
+tests_forkbomb_SOURCES = tests/forkbomb.cc
+tests_testipc_SOURCES = tests/testipc.cc
+tests_testlimit_SOURCES = tests/testlimit.cc
+tests_testopenf_SOURCES = tests/testopenf.cc
+sysv_XTRAS = sysv/rebootmgr.subst \
+ sysv/v_gated.subst \
+ sysv/v_httpd.subst \
+ sysv/v_named.subst \
+ sysv/v_portmap.subst \
+ sysv/v_sendmail.subst \
+ sysv/v_smb.subst \
+ sysv/v_sshd.subst \
+ sysv/v_xinetd.subst \
+ sysv/vservers.subst
+
+sysv_GENSCRPTS = sysv/rebootmgr \
+ sysv/v_gated \
+ sysv/v_httpd \
+ sysv/v_named \
+ sysv/v_portmap \
+ sysv/v_sendmail \
+ sysv/v_smb \
+ sysv/v_sshd \
+ sysv/v_xinetd \
+ sysv/vservers
+
+sysv_SCRPTS = $(sysv_GENSCRPTS)
+sysv_CFG = sysv/vservers.conf
+linuxconf_gen_SCRPTS = linuxconf/newvserver
+linuxconf_src_DATMAN = linuxconf/newvserver.8
+linuxconf_cfg_src_DTA = linuxconf/newvserver.defaults
+linuxconf_XTRAS = linuxconf/newvserver.subst \
+ $(linuxconf_cfg_src_DTA) \
+ $(linuxconf_src_DATMAN)
+
+linuxconf_GENFILES = $(linuxconf_gen_SCRPTS)
+@ENSC_ENABLE_LINUXCONF_FALSE@linuxconf_DATMAN =
+@ENSC_ENABLE_LINUXCONF_TRUE@linuxconf_DATMAN = $(linuxconf_src_DATMAN)
+@ENSC_ENABLE_LINUXCONF_FALSE@linuxconf_SCRPTS =
+@ENSC_ENABLE_LINUXCONF_TRUE@linuxconf_SCRPTS = $(linuxconf_gen_SCRPTS)
+@ENSC_ENABLE_LINUXCONF_FALSE@linuxconf_cfg_DTA =
+@ENSC_ENABLE_LINUXCONF_TRUE@linuxconf_cfg_DTA = $(linuxconf_cfg_src_DTA)
+all: $(BUILT_SOURCES) config.h
+ $(MAKE) $(AM_MAKEFLAGS) all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .cc .o .obj
+am--refresh:
+ @:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(top_srcdir)/lib/Makefile-files $(top_srcdir)/src/Makefile-files $(top_srcdir)/distrib/Makefile-files $(top_srcdir)/doc/Makefile-files $(top_srcdir)/man/Makefile-files $(top_srcdir)/scripts/Makefile-files $(top_srcdir)/tests/Makefile-files $(top_srcdir)/sysv/Makefile-files $(top_srcdir)/linuxconf/Makefile-files $(top_srcdir)/m4/gpgsig.am $(top_srcdir)/m4/validate.am $(top_srcdir)/m4/changelog.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ echo ' cd $(srcdir) && $(AUTOMAKE) --gnu '; \
+ cd $(srcdir) && $(AUTOMAKE) --gnu \
+ && exit 0; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \
+ cd $(top_srcdir) && \
+ $(AUTOMAKE) --gnu Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ echo ' $(SHELL) ./config.status'; \
+ $(SHELL) ./config.status;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ $(SHELL) ./config.status --recheck
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(srcdir) && $(AUTOCONF)
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
+
+config.h: stamp-h1
+ @if test ! -f $@; then \
+ rm -f stamp-h1; \
+ $(MAKE) stamp-h1; \
+ else :; fi
+
+stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status
+ @rm -f stamp-h1
+ cd $(top_builddir) && $(SHELL) ./config.status config.h
+$(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_srcdir) && $(AUTOHEADER)
+ rm -f stamp-h1
+ touch $@
+
+distclean-hdr:
+ -rm -f config.h stamp-h1
+util-vserver.spec: $(top_builddir)/config.status $(srcdir)/util-vserver.spec.in
+ cd $(top_builddir) && $(SHELL) ./config.status $@
+install-libLIBRARIES: $(lib_LIBRARIES)
+ @$(NORMAL_INSTALL)
+ $(mkdir_p) $(DESTDIR)$(libdir)
+ @list='$(lib_LIBRARIES)'; for p in $$list; do \
+ if test -f $$p; then \
+ f="`echo $$p | sed -e 's|^.*/||'`"; \
+ echo " $(libLIBRARIES_INSTALL) $$p $(DESTDIR)$(libdir)/$$f"; \
+ $(libLIBRARIES_INSTALL) $$p $(DESTDIR)$(libdir)/$$f; \
+ else :; fi; \
+ done
+ @$(POST_INSTALL)
+ @list='$(lib_LIBRARIES)'; for p in $$list; do \
+ if test -f $$p; then \
+ p="`echo $$p | sed -e 's|^.*/||'`"; \
+ echo " $(RANLIB) $(DESTDIR)$(libdir)/$$p"; \
+ $(RANLIB) $(DESTDIR)$(libdir)/$$p; \
+ else :; fi; \
+ done
+
+uninstall-libLIBRARIES:
+ @$(NORMAL_UNINSTALL)
+ @list='$(lib_LIBRARIES)'; for p in $$list; do \
+ p="`echo $$p | sed -e 's|^.*/||'`"; \
+ echo " rm -f $(DESTDIR)$(libdir)/$$p"; \
+ rm -f $(DESTDIR)$(libdir)/$$p; \
+ done
+
+clean-libLIBRARIES:
+ -test -z "$(lib_LIBRARIES)" || rm -f $(lib_LIBRARIES)
+lib/$(am__dirstamp):
+ @$(mkdir_p) lib
+ @: > lib/$(am__dirstamp)
+lib/$(DEPDIR)/$(am__dirstamp):
+ @$(mkdir_p) lib/$(DEPDIR)
+ @: > lib/$(DEPDIR)/$(am__dirstamp)
+lib/lib_libvserver_a-syscall.$(OBJEXT): lib/$(am__dirstamp) \
+ lib/$(DEPDIR)/$(am__dirstamp)
+lib/lib_libvserver_a-syscall_rlimit.$(OBJEXT): lib/$(am__dirstamp) \
+ lib/$(DEPDIR)/$(am__dirstamp)
+lib/lib_libvserver_a-syscall_kill.$(OBJEXT): lib/$(am__dirstamp) \
+ lib/$(DEPDIR)/$(am__dirstamp)
+lib/lib_libvserver_a-checkversion.$(OBJEXT): lib/$(am__dirstamp) \
+ lib/$(DEPDIR)/$(am__dirstamp)
+lib/lib_libvserver_a-getctx.$(OBJEXT): lib/$(am__dirstamp) \
+ lib/$(DEPDIR)/$(am__dirstamp)
+lib/lib_libvserver_a-getversion.$(OBJEXT): lib/$(am__dirstamp) \
+ lib/$(DEPDIR)/$(am__dirstamp)
+lib/lib_libvserver_a-uint2str.$(OBJEXT): lib/$(am__dirstamp) \
+ lib/$(DEPDIR)/$(am__dirstamp)
+lib/libvserver.a: $(lib_libvserver_a_OBJECTS) $(lib_libvserver_a_DEPENDENCIES) lib/$(am__dirstamp)
+ -rm -f lib/libvserver.a
+ $(lib_libvserver_a_AR) lib/libvserver.a $(lib_libvserver_a_OBJECTS) $(lib_libvserver_a_LIBADD)
+ $(RANLIB) lib/libvserver.a
+
+clean-noinstPROGRAMS:
+ -test -z "$(noinst_PROGRAMS)" || rm -f $(noinst_PROGRAMS)
+install-pkglibPROGRAMS: $(pkglib_PROGRAMS)
+ @$(NORMAL_INSTALL)
+ $(mkdir_p) $(DESTDIR)$(pkglibdir)
+ @list='$(pkglib_PROGRAMS)'; for p in $$list; do \
+ p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+ if test -f $$p \
+ ; then \
+ f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \
+ echo " $(INSTALL_PROGRAM_ENV) $(pkglibPROGRAMS_INSTALL) $$p $(DESTDIR)$(pkglibdir)/$$f"; \
+ $(INSTALL_PROGRAM_ENV) $(pkglibPROGRAMS_INSTALL) $$p $(DESTDIR)$(pkglibdir)/$$f || exit 1; \
+ else :; fi; \
+ done
+
+uninstall-pkglibPROGRAMS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(pkglib_PROGRAMS)'; for p in $$list; do \
+ f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
+ echo " rm -f $(DESTDIR)$(pkglibdir)/$$f"; \
+ rm -f $(DESTDIR)$(pkglibdir)/$$f; \
+ done
+
+clean-pkglibPROGRAMS:
+ -test -z "$(pkglib_PROGRAMS)" || rm -f $(pkglib_PROGRAMS)
+install-sbinPROGRAMS: $(sbin_PROGRAMS)
+ @$(NORMAL_INSTALL)
+ $(mkdir_p) $(DESTDIR)$(sbindir)
+ @list='$(sbin_PROGRAMS)'; for p in $$list; do \
+ p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+ if test -f $$p \
+ ; then \
+ f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \
+ echo " $(INSTALL_PROGRAM_ENV) $(sbinPROGRAMS_INSTALL) $$p $(DESTDIR)$(sbindir)/$$f"; \
+ $(INSTALL_PROGRAM_ENV) $(sbinPROGRAMS_INSTALL) $$p $(DESTDIR)$(sbindir)/$$f || exit 1; \
+ else :; fi; \
+ done
+
+uninstall-sbinPROGRAMS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(sbin_PROGRAMS)'; for p in $$list; do \
+ f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
+ echo " rm -f $(DESTDIR)$(sbindir)/$$f"; \
+ rm -f $(DESTDIR)$(sbindir)/$$f; \
+ done
+
+clean-sbinPROGRAMS:
+ -test -z "$(sbin_PROGRAMS)" || rm -f $(sbin_PROGRAMS)
+src/$(am__dirstamp):
+ @$(mkdir_p) src
+ @: > src/$(am__dirstamp)
+src/$(DEPDIR)/$(am__dirstamp):
+ @$(mkdir_p) src/$(DEPDIR)
+ @: > src/$(DEPDIR)/$(am__dirstamp)
+src/capchroot.$(OBJEXT): src/$(am__dirstamp) \
+ src/$(DEPDIR)/$(am__dirstamp)
+src/capchroot$(EXEEXT): $(src_capchroot_OBJECTS) $(src_capchroot_DEPENDENCIES) src/$(am__dirstamp)
+ @rm -f src/capchroot$(EXEEXT)
+ $(LINK) $(src_capchroot_LDFLAGS) $(src_capchroot_OBJECTS) $(src_capchroot_LDADD) $(LIBS)
+src/chbind.$(OBJEXT): src/$(am__dirstamp) \
+ src/$(DEPDIR)/$(am__dirstamp)
+src/chbind$(EXEEXT): $(src_chbind_OBJECTS) $(src_chbind_DEPENDENCIES) src/$(am__dirstamp)
+ @rm -f src/chbind$(EXEEXT)
+ $(LINK) $(src_chbind_LDFLAGS) $(src_chbind_OBJECTS) $(src_chbind_LDADD) $(LIBS)
+src/chcontext.$(OBJEXT): src/$(am__dirstamp) \
+ src/$(DEPDIR)/$(am__dirstamp)
+src/chcontext$(EXEEXT): $(src_chcontext_OBJECTS) $(src_chcontext_DEPENDENCIES) src/$(am__dirstamp)
+ @rm -f src/chcontext$(EXEEXT)
+ $(LINK) $(src_chcontext_LDFLAGS) $(src_chcontext_OBJECTS) $(src_chcontext_LDADD) $(LIBS)
+src/fakerunlevel.$(OBJEXT): src/$(am__dirstamp) \
+ src/$(DEPDIR)/$(am__dirstamp)
+src/fakerunlevel$(EXEEXT): $(src_fakerunlevel_OBJECTS) $(src_fakerunlevel_DEPENDENCIES) src/$(am__dirstamp)
+ @rm -f src/fakerunlevel$(EXEEXT)
+ $(LINK) $(src_fakerunlevel_LDFLAGS) $(src_fakerunlevel_OBJECTS) $(src_fakerunlevel_LDADD) $(LIBS)
+src/filetime.$(OBJEXT): src/$(am__dirstamp) \
+ src/$(DEPDIR)/$(am__dirstamp)
+src/filetime$(EXEEXT): $(src_filetime_OBJECTS) $(src_filetime_DEPENDENCIES) src/$(am__dirstamp)
+ @rm -f src/filetime$(EXEEXT)
+ $(LINK) $(src_filetime_LDFLAGS) $(src_filetime_OBJECTS) $(src_filetime_LDADD) $(LIBS)
+src/ifspec.$(OBJEXT): src/$(am__dirstamp) \
+ src/$(DEPDIR)/$(am__dirstamp)
+src/ifspec$(EXEEXT): $(src_ifspec_OBJECTS) $(src_ifspec_DEPENDENCIES) src/$(am__dirstamp)
+ @rm -f src/ifspec$(EXEEXT)
+ $(LINK) $(src_ifspec_LDFLAGS) $(src_ifspec_OBJECTS) $(src_ifspec_LDADD) $(LIBS)
+src/listdevip.$(OBJEXT): src/$(am__dirstamp) \
+ src/$(DEPDIR)/$(am__dirstamp)
+src/listdevip$(EXEEXT): $(src_listdevip_OBJECTS) $(src_listdevip_DEPENDENCIES) src/$(am__dirstamp)
+ @rm -f src/listdevip$(EXEEXT)
+ $(LINK) $(src_listdevip_LDFLAGS) $(src_listdevip_OBJECTS) $(src_listdevip_LDADD) $(LIBS)
+src/parserpmdump.$(OBJEXT): src/$(am__dirstamp) \
+ src/$(DEPDIR)/$(am__dirstamp)
+src/parserpmdump$(EXEEXT): $(src_parserpmdump_OBJECTS) $(src_parserpmdump_DEPENDENCIES) src/$(am__dirstamp)
+ @rm -f src/parserpmdump$(EXEEXT)
+ $(LINK) $(src_parserpmdump_LDFLAGS) $(src_parserpmdump_OBJECTS) $(src_parserpmdump_LDADD) $(LIBS)
+src/readlink.$(OBJEXT): src/$(am__dirstamp) \
+ src/$(DEPDIR)/$(am__dirstamp)
+src/readlink$(EXEEXT): $(src_readlink_OBJECTS) $(src_readlink_DEPENDENCIES) src/$(am__dirstamp)
+ @rm -f src/readlink$(EXEEXT)
+ $(LINK) $(src_readlink_LDFLAGS) $(src_readlink_OBJECTS) $(src_readlink_LDADD) $(LIBS)
+src/src_rebootmgr-rebootmgr.$(OBJEXT): src/$(am__dirstamp) \
+ src/$(DEPDIR)/$(am__dirstamp)
+src/rebootmgr$(EXEEXT): $(src_rebootmgr_OBJECTS) $(src_rebootmgr_DEPENDENCIES) src/$(am__dirstamp)
+ @rm -f src/rebootmgr$(EXEEXT)
+ $(LINK) $(src_rebootmgr_LDFLAGS) $(src_rebootmgr_OBJECTS) $(src_rebootmgr_LDADD) $(LIBS)
+src/reducecap.$(OBJEXT): src/$(am__dirstamp) \
+ src/$(DEPDIR)/$(am__dirstamp)
+src/reducecap$(EXEEXT): $(src_reducecap_OBJECTS) $(src_reducecap_DEPENDENCIES) src/$(am__dirstamp)
+ @rm -f src/reducecap$(EXEEXT)
+ $(LINK) $(src_reducecap_LDFLAGS) $(src_reducecap_OBJECTS) $(src_reducecap_LDADD) $(LIBS)
+src/showattr.$(OBJEXT): src/$(am__dirstamp) \
+ src/$(DEPDIR)/$(am__dirstamp)
+src/showattr$(EXEEXT): $(src_showattr_OBJECTS) $(src_showattr_DEPENDENCIES) src/$(am__dirstamp)
+ @rm -f src/showattr$(EXEEXT)
+ $(LINK) $(src_showattr_LDFLAGS) $(src_showattr_OBJECTS) $(src_showattr_LDADD) $(LIBS)
+src/showperm.$(OBJEXT): src/$(am__dirstamp) \
+ src/$(DEPDIR)/$(am__dirstamp)
+src/showperm$(EXEEXT): $(src_showperm_OBJECTS) $(src_showperm_DEPENDENCIES) src/$(am__dirstamp)
+ @rm -f src/showperm$(EXEEXT)
+ $(LINK) $(src_showperm_LDFLAGS) $(src_showperm_OBJECTS) $(src_showperm_LDADD) $(LIBS)
+src/vbuild.$(OBJEXT): src/$(am__dirstamp) \
+ src/$(DEPDIR)/$(am__dirstamp)
+src/vutil.$(OBJEXT): src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp)
+src/vbuild$(EXEEXT): $(src_vbuild_OBJECTS) $(src_vbuild_DEPENDENCIES) src/$(am__dirstamp)
+ @rm -f src/vbuild$(EXEEXT)
+ $(CXXLINK) $(src_vbuild_LDFLAGS) $(src_vbuild_OBJECTS) $(src_vbuild_LDADD) $(LIBS)
+src/vcheck.$(OBJEXT): src/$(am__dirstamp) \
+ src/$(DEPDIR)/$(am__dirstamp)
+src/vcheck$(EXEEXT): $(src_vcheck_OBJECTS) $(src_vcheck_DEPENDENCIES) src/$(am__dirstamp)
+ @rm -f src/vcheck$(EXEEXT)
+ $(CXXLINK) $(src_vcheck_LDFLAGS) $(src_vcheck_OBJECTS) $(src_vcheck_LDADD) $(LIBS)
+src/vdu.$(OBJEXT): src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp)
+src/vdu$(EXEEXT): $(src_vdu_OBJECTS) $(src_vdu_DEPENDENCIES) src/$(am__dirstamp)
+ @rm -f src/vdu$(EXEEXT)
+ $(LINK) $(src_vdu_LDFLAGS) $(src_vdu_OBJECTS) $(src_vdu_LDADD) $(LIBS)
+src/vfiles.$(OBJEXT): src/$(am__dirstamp) \
+ src/$(DEPDIR)/$(am__dirstamp)
+src/vfiles$(EXEEXT): $(src_vfiles_OBJECTS) $(src_vfiles_DEPENDENCIES) src/$(am__dirstamp)
+ @rm -f src/vfiles$(EXEEXT)
+ $(CXXLINK) $(src_vfiles_LDFLAGS) $(src_vfiles_OBJECTS) $(src_vfiles_LDADD) $(LIBS)
+src/src_vkill-vkill.$(OBJEXT): src/$(am__dirstamp) \
+ src/$(DEPDIR)/$(am__dirstamp)
+src/vkill$(EXEEXT): $(src_vkill_OBJECTS) $(src_vkill_DEPENDENCIES) src/$(am__dirstamp)
+ @rm -f src/vkill$(EXEEXT)
+ $(LINK) $(src_vkill_LDFLAGS) $(src_vkill_OBJECTS) $(src_vkill_LDADD) $(LIBS)
+src/vlimit.$(OBJEXT): src/$(am__dirstamp) \
+ src/$(DEPDIR)/$(am__dirstamp)
+src/vlimit$(EXEEXT): $(src_vlimit_OBJECTS) $(src_vlimit_DEPENDENCIES) src/$(am__dirstamp)
+ @rm -f src/vlimit$(EXEEXT)
+ $(LINK) $(src_vlimit_LDFLAGS) $(src_vlimit_OBJECTS) $(src_vlimit_LDADD) $(LIBS)
+src/vreboot.$(OBJEXT): src/$(am__dirstamp) \
+ src/$(DEPDIR)/$(am__dirstamp)
+src/vreboot$(EXEEXT): $(src_vreboot_OBJECTS) $(src_vreboot_DEPENDENCIES) src/$(am__dirstamp)
+ @rm -f src/vreboot$(EXEEXT)
+ $(LINK) $(src_vreboot_LDFLAGS) $(src_vreboot_OBJECTS) $(src_vreboot_LDADD) $(LIBS)
+src/vserver-stat.$(OBJEXT): src/$(am__dirstamp) \
+ src/$(DEPDIR)/$(am__dirstamp)
+src/vserver-stat$(EXEEXT): $(src_vserver_stat_OBJECTS) $(src_vserver_stat_DEPENDENCIES) src/$(am__dirstamp)
+ @rm -f src/vserver-stat$(EXEEXT)
+ $(LINK) $(src_vserver_stat_LDFLAGS) $(src_vserver_stat_OBJECTS) $(src_vserver_stat_LDADD) $(LIBS)
+src/src_vunify-vunify.$(OBJEXT): src/$(am__dirstamp) \
+ src/$(DEPDIR)/$(am__dirstamp)
+src/src_vunify-vutil.$(OBJEXT): src/$(am__dirstamp) \
+ src/$(DEPDIR)/$(am__dirstamp)
+src/vunify$(EXEEXT): $(src_vunify_OBJECTS) $(src_vunify_DEPENDENCIES) src/$(am__dirstamp)
+ @rm -f src/vunify$(EXEEXT)
+ $(CXXLINK) $(src_vunify_LDFLAGS) $(src_vunify_OBJECTS) $(src_vunify_LDADD) $(LIBS)
+tests/$(am__dirstamp):
+ @$(mkdir_p) tests
+ @: > tests/$(am__dirstamp)
+tests/$(DEPDIR)/$(am__dirstamp):
+ @$(mkdir_p) tests/$(DEPDIR)
+ @: > tests/$(DEPDIR)/$(am__dirstamp)
+tests/escaperoot.$(OBJEXT): tests/$(am__dirstamp) \
+ tests/$(DEPDIR)/$(am__dirstamp)
+tests/escaperoot$(EXEEXT): $(tests_escaperoot_OBJECTS) $(tests_escaperoot_DEPENDENCIES) tests/$(am__dirstamp)
+ @rm -f tests/escaperoot$(EXEEXT)
+ $(CXXLINK) $(tests_escaperoot_LDFLAGS) $(tests_escaperoot_OBJECTS) $(tests_escaperoot_LDADD) $(LIBS)
+tests/forkbomb.$(OBJEXT): tests/$(am__dirstamp) \
+ tests/$(DEPDIR)/$(am__dirstamp)
+tests/forkbomb$(EXEEXT): $(tests_forkbomb_OBJECTS) $(tests_forkbomb_DEPENDENCIES) tests/$(am__dirstamp)
+ @rm -f tests/forkbomb$(EXEEXT)
+ $(CXXLINK) $(tests_forkbomb_LDFLAGS) $(tests_forkbomb_OBJECTS) $(tests_forkbomb_LDADD) $(LIBS)
+tests/testipc.$(OBJEXT): tests/$(am__dirstamp) \
+ tests/$(DEPDIR)/$(am__dirstamp)
+tests/testipc$(EXEEXT): $(tests_testipc_OBJECTS) $(tests_testipc_DEPENDENCIES) tests/$(am__dirstamp)
+ @rm -f tests/testipc$(EXEEXT)
+ $(CXXLINK) $(tests_testipc_LDFLAGS) $(tests_testipc_OBJECTS) $(tests_testipc_LDADD) $(LIBS)
+tests/testlimit.$(OBJEXT): tests/$(am__dirstamp) \
+ tests/$(DEPDIR)/$(am__dirstamp)
+tests/testlimit$(EXEEXT): $(tests_testlimit_OBJECTS) $(tests_testlimit_DEPENDENCIES) tests/$(am__dirstamp)
+ @rm -f tests/testlimit$(EXEEXT)
+ $(CXXLINK) $(tests_testlimit_LDFLAGS) $(tests_testlimit_OBJECTS) $(tests_testlimit_LDADD) $(LIBS)
+tests/testopenf.$(OBJEXT): tests/$(am__dirstamp) \
+ tests/$(DEPDIR)/$(am__dirstamp)
+tests/testopenf$(EXEEXT): $(tests_testopenf_OBJECTS) $(tests_testopenf_DEPENDENCIES) tests/$(am__dirstamp)
+ @rm -f tests/testopenf$(EXEEXT)
+ $(CXXLINK) $(tests_testopenf_LDFLAGS) $(tests_testopenf_OBJECTS) $(tests_testopenf_LDADD) $(LIBS)
+install-legacySCRIPTS: $(legacy_SCRIPTS)
+ @$(NORMAL_INSTALL)
+ $(mkdir_p) $(DESTDIR)$(legacydir)
+ @list='$(legacy_SCRIPTS)'; for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ if test -f $$d$$p; then \
+ f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \
+ echo " $(legacySCRIPT_INSTALL) $$d$$p $(DESTDIR)$(legacydir)/$$f"; \
+ $(legacySCRIPT_INSTALL) $$d$$p $(DESTDIR)$(legacydir)/$$f; \
+ else :; fi; \
+ done
+
+uninstall-legacySCRIPTS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(legacy_SCRIPTS)'; for p in $$list; do \
+ f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \
+ echo " rm -f $(DESTDIR)$(legacydir)/$$f"; \
+ rm -f $(DESTDIR)$(legacydir)/$$f; \
+ done
+install-pkglibSCRIPTS: $(pkglib_SCRIPTS)
+ @$(NORMAL_INSTALL)
+ $(mkdir_p) $(DESTDIR)$(pkglibdir)
+ @list='$(pkglib_SCRIPTS)'; for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ if test -f $$d$$p; then \
+ f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \
+ echo " $(pkglibSCRIPT_INSTALL) $$d$$p $(DESTDIR)$(pkglibdir)/$$f"; \
+ $(pkglibSCRIPT_INSTALL) $$d$$p $(DESTDIR)$(pkglibdir)/$$f; \
+ else :; fi; \
+ done
+
+uninstall-pkglibSCRIPTS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(pkglib_SCRIPTS)'; for p in $$list; do \
+ f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \
+ echo " rm -f $(DESTDIR)$(pkglibdir)/$$f"; \
+ rm -f $(DESTDIR)$(pkglibdir)/$$f; \
+ done
+install-sbinSCRIPTS: $(sbin_SCRIPTS)
+ @$(NORMAL_INSTALL)
+ $(mkdir_p) $(DESTDIR)$(sbindir)
+ @list='$(sbin_SCRIPTS)'; for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ if test -f $$d$$p; then \
+ f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \
+ echo " $(sbinSCRIPT_INSTALL) $$d$$p $(DESTDIR)$(sbindir)/$$f"; \
+ $(sbinSCRIPT_INSTALL) $$d$$p $(DESTDIR)$(sbindir)/$$f; \
+ else :; fi; \
+ done
+
+uninstall-sbinSCRIPTS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(sbin_SCRIPTS)'; for p in $$list; do \
+ f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \
+ echo " rm -f $(DESTDIR)$(sbindir)/$$f"; \
+ rm -f $(DESTDIR)$(sbindir)/$$f; \
+ done
+install-sysvSCRIPTS: $(sysv_SCRIPTS)
+ @$(NORMAL_INSTALL)
+ $(mkdir_p) $(DESTDIR)$(sysvdir)
+ @list='$(sysv_SCRIPTS)'; for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ if test -f $$d$$p; then \
+ f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \
+ echo " $(sysvSCRIPT_INSTALL) $$d$$p $(DESTDIR)$(sysvdir)/$$f"; \
+ $(sysvSCRIPT_INSTALL) $$d$$p $(DESTDIR)$(sysvdir)/$$f; \
+ else :; fi; \
+ done
+
+uninstall-sysvSCRIPTS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(sysv_SCRIPTS)'; for p in $$list; do \
+ f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \
+ echo " rm -f $(DESTDIR)$(sysvdir)/$$f"; \
+ rm -f $(DESTDIR)$(sysvdir)/$$f; \
+ done
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+ -rm -f lib/lib_libvserver_a-checkversion.$(OBJEXT)
+ -rm -f lib/lib_libvserver_a-getctx.$(OBJEXT)
+ -rm -f lib/lib_libvserver_a-getversion.$(OBJEXT)
+ -rm -f lib/lib_libvserver_a-syscall.$(OBJEXT)
+ -rm -f lib/lib_libvserver_a-syscall_kill.$(OBJEXT)
+ -rm -f lib/lib_libvserver_a-syscall_rlimit.$(OBJEXT)
+ -rm -f lib/lib_libvserver_a-uint2str.$(OBJEXT)
+ -rm -f src/capchroot.$(OBJEXT)
+ -rm -f src/chbind.$(OBJEXT)
+ -rm -f src/chcontext.$(OBJEXT)
+ -rm -f src/fakerunlevel.$(OBJEXT)
+ -rm -f src/filetime.$(OBJEXT)
+ -rm -f src/ifspec.$(OBJEXT)
+ -rm -f src/listdevip.$(OBJEXT)
+ -rm -f src/parserpmdump.$(OBJEXT)
+ -rm -f src/readlink.$(OBJEXT)
+ -rm -f src/reducecap.$(OBJEXT)
+ -rm -f src/showattr.$(OBJEXT)
+ -rm -f src/showperm.$(OBJEXT)
+ -rm -f src/src_rebootmgr-rebootmgr.$(OBJEXT)
+ -rm -f src/src_vkill-vkill.$(OBJEXT)
+ -rm -f src/src_vunify-vunify.$(OBJEXT)
+ -rm -f src/src_vunify-vutil.$(OBJEXT)
+ -rm -f src/vbuild.$(OBJEXT)
+ -rm -f src/vcheck.$(OBJEXT)
+ -rm -f src/vdu.$(OBJEXT)
+ -rm -f src/vfiles.$(OBJEXT)
+ -rm -f src/vlimit.$(OBJEXT)
+ -rm -f src/vreboot.$(OBJEXT)
+ -rm -f src/vserver-stat.$(OBJEXT)
+ -rm -f src/vutil.$(OBJEXT)
+ -rm -f tests/escaperoot.$(OBJEXT)
+ -rm -f tests/forkbomb.$(OBJEXT)
+ -rm -f tests/testipc.$(OBJEXT)
+ -rm -f tests/testlimit.$(OBJEXT)
+ -rm -f tests/testopenf.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/lib_libvserver_a-checkversion.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/lib_libvserver_a-getctx.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/lib_libvserver_a-getversion.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/lib_libvserver_a-syscall.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/lib_libvserver_a-syscall_kill.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/lib_libvserver_a-syscall_rlimit.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/lib_libvserver_a-uint2str.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/capchroot.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/chbind.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/chcontext.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/fakerunlevel.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/filetime.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/ifspec.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/listdevip.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/parserpmdump.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/readlink.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/reducecap.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/showattr.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/showperm.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/src_rebootmgr-rebootmgr.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/src_vkill-vkill.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/src_vunify-vunify.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/src_vunify-vutil.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/vbuild.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/vcheck.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/vdu.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/vfiles.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/vlimit.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/vreboot.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/vserver-stat.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/vutil.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@tests/$(DEPDIR)/escaperoot.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@tests/$(DEPDIR)/forkbomb.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@tests/$(DEPDIR)/testipc.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@tests/$(DEPDIR)/testlimit.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@tests/$(DEPDIR)/testopenf.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(COMPILE) -c -o $@ $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+lib/lib_libvserver_a-syscall.o: lib/syscall.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libvserver_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/lib_libvserver_a-syscall.o -MD -MP -MF "lib/$(DEPDIR)/lib_libvserver_a-syscall.Tpo" -c -o lib/lib_libvserver_a-syscall.o `test -f 'lib/syscall.c' || echo '$(srcdir)/'`lib/syscall.c; \
+@am__fastdepCC_TRUE@ then mv -f "lib/$(DEPDIR)/lib_libvserver_a-syscall.Tpo" "lib/$(DEPDIR)/lib_libvserver_a-syscall.Po"; else rm -f "lib/$(DEPDIR)/lib_libvserver_a-syscall.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='lib/syscall.c' object='lib/lib_libvserver_a-syscall.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='lib/$(DEPDIR)/lib_libvserver_a-syscall.Po' tmpdepfile='lib/$(DEPDIR)/lib_libvserver_a-syscall.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libvserver_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/lib_libvserver_a-syscall.o `test -f 'lib/syscall.c' || echo '$(srcdir)/'`lib/syscall.c
+
+lib/lib_libvserver_a-syscall.obj: lib/syscall.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libvserver_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/lib_libvserver_a-syscall.obj -MD -MP -MF "lib/$(DEPDIR)/lib_libvserver_a-syscall.Tpo" -c -o lib/lib_libvserver_a-syscall.obj `if test -f 'lib/syscall.c'; then $(CYGPATH_W) 'lib/syscall.c'; else $(CYGPATH_W) '$(srcdir)/lib/syscall.c'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "lib/$(DEPDIR)/lib_libvserver_a-syscall.Tpo" "lib/$(DEPDIR)/lib_libvserver_a-syscall.Po"; else rm -f "lib/$(DEPDIR)/lib_libvserver_a-syscall.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='lib/syscall.c' object='lib/lib_libvserver_a-syscall.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='lib/$(DEPDIR)/lib_libvserver_a-syscall.Po' tmpdepfile='lib/$(DEPDIR)/lib_libvserver_a-syscall.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libvserver_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/lib_libvserver_a-syscall.obj `if test -f 'lib/syscall.c'; then $(CYGPATH_W) 'lib/syscall.c'; else $(CYGPATH_W) '$(srcdir)/lib/syscall.c'; fi`
+
+lib/lib_libvserver_a-syscall_rlimit.o: lib/syscall_rlimit.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libvserver_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/lib_libvserver_a-syscall_rlimit.o -MD -MP -MF "lib/$(DEPDIR)/lib_libvserver_a-syscall_rlimit.Tpo" -c -o lib/lib_libvserver_a-syscall_rlimit.o `test -f 'lib/syscall_rlimit.c' || echo '$(srcdir)/'`lib/syscall_rlimit.c; \
+@am__fastdepCC_TRUE@ then mv -f "lib/$(DEPDIR)/lib_libvserver_a-syscall_rlimit.Tpo" "lib/$(DEPDIR)/lib_libvserver_a-syscall_rlimit.Po"; else rm -f "lib/$(DEPDIR)/lib_libvserver_a-syscall_rlimit.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='lib/syscall_rlimit.c' object='lib/lib_libvserver_a-syscall_rlimit.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='lib/$(DEPDIR)/lib_libvserver_a-syscall_rlimit.Po' tmpdepfile='lib/$(DEPDIR)/lib_libvserver_a-syscall_rlimit.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libvserver_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/lib_libvserver_a-syscall_rlimit.o `test -f 'lib/syscall_rlimit.c' || echo '$(srcdir)/'`lib/syscall_rlimit.c
+
+lib/lib_libvserver_a-syscall_rlimit.obj: lib/syscall_rlimit.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libvserver_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/lib_libvserver_a-syscall_rlimit.obj -MD -MP -MF "lib/$(DEPDIR)/lib_libvserver_a-syscall_rlimit.Tpo" -c -o lib/lib_libvserver_a-syscall_rlimit.obj `if test -f 'lib/syscall_rlimit.c'; then $(CYGPATH_W) 'lib/syscall_rlimit.c'; else $(CYGPATH_W) '$(srcdir)/lib/syscall_rlimit.c'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "lib/$(DEPDIR)/lib_libvserver_a-syscall_rlimit.Tpo" "lib/$(DEPDIR)/lib_libvserver_a-syscall_rlimit.Po"; else rm -f "lib/$(DEPDIR)/lib_libvserver_a-syscall_rlimit.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='lib/syscall_rlimit.c' object='lib/lib_libvserver_a-syscall_rlimit.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='lib/$(DEPDIR)/lib_libvserver_a-syscall_rlimit.Po' tmpdepfile='lib/$(DEPDIR)/lib_libvserver_a-syscall_rlimit.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libvserver_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/lib_libvserver_a-syscall_rlimit.obj `if test -f 'lib/syscall_rlimit.c'; then $(CYGPATH_W) 'lib/syscall_rlimit.c'; else $(CYGPATH_W) '$(srcdir)/lib/syscall_rlimit.c'; fi`
+
+lib/lib_libvserver_a-syscall_kill.o: lib/syscall_kill.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libvserver_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/lib_libvserver_a-syscall_kill.o -MD -MP -MF "lib/$(DEPDIR)/lib_libvserver_a-syscall_kill.Tpo" -c -o lib/lib_libvserver_a-syscall_kill.o `test -f 'lib/syscall_kill.c' || echo '$(srcdir)/'`lib/syscall_kill.c; \
+@am__fastdepCC_TRUE@ then mv -f "lib/$(DEPDIR)/lib_libvserver_a-syscall_kill.Tpo" "lib/$(DEPDIR)/lib_libvserver_a-syscall_kill.Po"; else rm -f "lib/$(DEPDIR)/lib_libvserver_a-syscall_kill.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='lib/syscall_kill.c' object='lib/lib_libvserver_a-syscall_kill.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='lib/$(DEPDIR)/lib_libvserver_a-syscall_kill.Po' tmpdepfile='lib/$(DEPDIR)/lib_libvserver_a-syscall_kill.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libvserver_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/lib_libvserver_a-syscall_kill.o `test -f 'lib/syscall_kill.c' || echo '$(srcdir)/'`lib/syscall_kill.c
+
+lib/lib_libvserver_a-syscall_kill.obj: lib/syscall_kill.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libvserver_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/lib_libvserver_a-syscall_kill.obj -MD -MP -MF "lib/$(DEPDIR)/lib_libvserver_a-syscall_kill.Tpo" -c -o lib/lib_libvserver_a-syscall_kill.obj `if test -f 'lib/syscall_kill.c'; then $(CYGPATH_W) 'lib/syscall_kill.c'; else $(CYGPATH_W) '$(srcdir)/lib/syscall_kill.c'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "lib/$(DEPDIR)/lib_libvserver_a-syscall_kill.Tpo" "lib/$(DEPDIR)/lib_libvserver_a-syscall_kill.Po"; else rm -f "lib/$(DEPDIR)/lib_libvserver_a-syscall_kill.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='lib/syscall_kill.c' object='lib/lib_libvserver_a-syscall_kill.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='lib/$(DEPDIR)/lib_libvserver_a-syscall_kill.Po' tmpdepfile='lib/$(DEPDIR)/lib_libvserver_a-syscall_kill.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libvserver_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/lib_libvserver_a-syscall_kill.obj `if test -f 'lib/syscall_kill.c'; then $(CYGPATH_W) 'lib/syscall_kill.c'; else $(CYGPATH_W) '$(srcdir)/lib/syscall_kill.c'; fi`
+
+lib/lib_libvserver_a-checkversion.o: lib/checkversion.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libvserver_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/lib_libvserver_a-checkversion.o -MD -MP -MF "lib/$(DEPDIR)/lib_libvserver_a-checkversion.Tpo" -c -o lib/lib_libvserver_a-checkversion.o `test -f 'lib/checkversion.c' || echo '$(srcdir)/'`lib/checkversion.c; \
+@am__fastdepCC_TRUE@ then mv -f "lib/$(DEPDIR)/lib_libvserver_a-checkversion.Tpo" "lib/$(DEPDIR)/lib_libvserver_a-checkversion.Po"; else rm -f "lib/$(DEPDIR)/lib_libvserver_a-checkversion.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='lib/checkversion.c' object='lib/lib_libvserver_a-checkversion.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='lib/$(DEPDIR)/lib_libvserver_a-checkversion.Po' tmpdepfile='lib/$(DEPDIR)/lib_libvserver_a-checkversion.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libvserver_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/lib_libvserver_a-checkversion.o `test -f 'lib/checkversion.c' || echo '$(srcdir)/'`lib/checkversion.c
+
+lib/lib_libvserver_a-checkversion.obj: lib/checkversion.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libvserver_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/lib_libvserver_a-checkversion.obj -MD -MP -MF "lib/$(DEPDIR)/lib_libvserver_a-checkversion.Tpo" -c -o lib/lib_libvserver_a-checkversion.obj `if test -f 'lib/checkversion.c'; then $(CYGPATH_W) 'lib/checkversion.c'; else $(CYGPATH_W) '$(srcdir)/lib/checkversion.c'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "lib/$(DEPDIR)/lib_libvserver_a-checkversion.Tpo" "lib/$(DEPDIR)/lib_libvserver_a-checkversion.Po"; else rm -f "lib/$(DEPDIR)/lib_libvserver_a-checkversion.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='lib/checkversion.c' object='lib/lib_libvserver_a-checkversion.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='lib/$(DEPDIR)/lib_libvserver_a-checkversion.Po' tmpdepfile='lib/$(DEPDIR)/lib_libvserver_a-checkversion.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libvserver_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/lib_libvserver_a-checkversion.obj `if test -f 'lib/checkversion.c'; then $(CYGPATH_W) 'lib/checkversion.c'; else $(CYGPATH_W) '$(srcdir)/lib/checkversion.c'; fi`
+
+lib/lib_libvserver_a-getctx.o: lib/getctx.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libvserver_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/lib_libvserver_a-getctx.o -MD -MP -MF "lib/$(DEPDIR)/lib_libvserver_a-getctx.Tpo" -c -o lib/lib_libvserver_a-getctx.o `test -f 'lib/getctx.c' || echo '$(srcdir)/'`lib/getctx.c; \
+@am__fastdepCC_TRUE@ then mv -f "lib/$(DEPDIR)/lib_libvserver_a-getctx.Tpo" "lib/$(DEPDIR)/lib_libvserver_a-getctx.Po"; else rm -f "lib/$(DEPDIR)/lib_libvserver_a-getctx.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='lib/getctx.c' object='lib/lib_libvserver_a-getctx.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='lib/$(DEPDIR)/lib_libvserver_a-getctx.Po' tmpdepfile='lib/$(DEPDIR)/lib_libvserver_a-getctx.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libvserver_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/lib_libvserver_a-getctx.o `test -f 'lib/getctx.c' || echo '$(srcdir)/'`lib/getctx.c
+
+lib/lib_libvserver_a-getctx.obj: lib/getctx.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libvserver_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/lib_libvserver_a-getctx.obj -MD -MP -MF "lib/$(DEPDIR)/lib_libvserver_a-getctx.Tpo" -c -o lib/lib_libvserver_a-getctx.obj `if test -f 'lib/getctx.c'; then $(CYGPATH_W) 'lib/getctx.c'; else $(CYGPATH_W) '$(srcdir)/lib/getctx.c'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "lib/$(DEPDIR)/lib_libvserver_a-getctx.Tpo" "lib/$(DEPDIR)/lib_libvserver_a-getctx.Po"; else rm -f "lib/$(DEPDIR)/lib_libvserver_a-getctx.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='lib/getctx.c' object='lib/lib_libvserver_a-getctx.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='lib/$(DEPDIR)/lib_libvserver_a-getctx.Po' tmpdepfile='lib/$(DEPDIR)/lib_libvserver_a-getctx.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libvserver_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/lib_libvserver_a-getctx.obj `if test -f 'lib/getctx.c'; then $(CYGPATH_W) 'lib/getctx.c'; else $(CYGPATH_W) '$(srcdir)/lib/getctx.c'; fi`
+
+lib/lib_libvserver_a-getversion.o: lib/getversion.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libvserver_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/lib_libvserver_a-getversion.o -MD -MP -MF "lib/$(DEPDIR)/lib_libvserver_a-getversion.Tpo" -c -o lib/lib_libvserver_a-getversion.o `test -f 'lib/getversion.c' || echo '$(srcdir)/'`lib/getversion.c; \
+@am__fastdepCC_TRUE@ then mv -f "lib/$(DEPDIR)/lib_libvserver_a-getversion.Tpo" "lib/$(DEPDIR)/lib_libvserver_a-getversion.Po"; else rm -f "lib/$(DEPDIR)/lib_libvserver_a-getversion.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='lib/getversion.c' object='lib/lib_libvserver_a-getversion.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='lib/$(DEPDIR)/lib_libvserver_a-getversion.Po' tmpdepfile='lib/$(DEPDIR)/lib_libvserver_a-getversion.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libvserver_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/lib_libvserver_a-getversion.o `test -f 'lib/getversion.c' || echo '$(srcdir)/'`lib/getversion.c
+
+lib/lib_libvserver_a-getversion.obj: lib/getversion.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libvserver_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/lib_libvserver_a-getversion.obj -MD -MP -MF "lib/$(DEPDIR)/lib_libvserver_a-getversion.Tpo" -c -o lib/lib_libvserver_a-getversion.obj `if test -f 'lib/getversion.c'; then $(CYGPATH_W) 'lib/getversion.c'; else $(CYGPATH_W) '$(srcdir)/lib/getversion.c'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "lib/$(DEPDIR)/lib_libvserver_a-getversion.Tpo" "lib/$(DEPDIR)/lib_libvserver_a-getversion.Po"; else rm -f "lib/$(DEPDIR)/lib_libvserver_a-getversion.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='lib/getversion.c' object='lib/lib_libvserver_a-getversion.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='lib/$(DEPDIR)/lib_libvserver_a-getversion.Po' tmpdepfile='lib/$(DEPDIR)/lib_libvserver_a-getversion.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libvserver_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/lib_libvserver_a-getversion.obj `if test -f 'lib/getversion.c'; then $(CYGPATH_W) 'lib/getversion.c'; else $(CYGPATH_W) '$(srcdir)/lib/getversion.c'; fi`
+
+lib/lib_libvserver_a-uint2str.o: lib/uint2str.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libvserver_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/lib_libvserver_a-uint2str.o -MD -MP -MF "lib/$(DEPDIR)/lib_libvserver_a-uint2str.Tpo" -c -o lib/lib_libvserver_a-uint2str.o `test -f 'lib/uint2str.c' || echo '$(srcdir)/'`lib/uint2str.c; \
+@am__fastdepCC_TRUE@ then mv -f "lib/$(DEPDIR)/lib_libvserver_a-uint2str.Tpo" "lib/$(DEPDIR)/lib_libvserver_a-uint2str.Po"; else rm -f "lib/$(DEPDIR)/lib_libvserver_a-uint2str.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='lib/uint2str.c' object='lib/lib_libvserver_a-uint2str.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='lib/$(DEPDIR)/lib_libvserver_a-uint2str.Po' tmpdepfile='lib/$(DEPDIR)/lib_libvserver_a-uint2str.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libvserver_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/lib_libvserver_a-uint2str.o `test -f 'lib/uint2str.c' || echo '$(srcdir)/'`lib/uint2str.c
+
+lib/lib_libvserver_a-uint2str.obj: lib/uint2str.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libvserver_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib/lib_libvserver_a-uint2str.obj -MD -MP -MF "lib/$(DEPDIR)/lib_libvserver_a-uint2str.Tpo" -c -o lib/lib_libvserver_a-uint2str.obj `if test -f 'lib/uint2str.c'; then $(CYGPATH_W) 'lib/uint2str.c'; else $(CYGPATH_W) '$(srcdir)/lib/uint2str.c'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "lib/$(DEPDIR)/lib_libvserver_a-uint2str.Tpo" "lib/$(DEPDIR)/lib_libvserver_a-uint2str.Po"; else rm -f "lib/$(DEPDIR)/lib_libvserver_a-uint2str.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='lib/uint2str.c' object='lib/lib_libvserver_a-uint2str.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='lib/$(DEPDIR)/lib_libvserver_a-uint2str.Po' tmpdepfile='lib/$(DEPDIR)/lib_libvserver_a-uint2str.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libvserver_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib/lib_libvserver_a-uint2str.obj `if test -f 'lib/uint2str.c'; then $(CYGPATH_W) 'lib/uint2str.c'; else $(CYGPATH_W) '$(srcdir)/lib/uint2str.c'; fi`
+
+src/capchroot.o: src/capchroot.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/capchroot.o -MD -MP -MF "src/$(DEPDIR)/capchroot.Tpo" -c -o src/capchroot.o `test -f 'src/capchroot.c' || echo '$(srcdir)/'`src/capchroot.c; \
+@am__fastdepCC_TRUE@ then mv -f "src/$(DEPDIR)/capchroot.Tpo" "src/$(DEPDIR)/capchroot.Po"; else rm -f "src/$(DEPDIR)/capchroot.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src/capchroot.c' object='src/capchroot.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='src/$(DEPDIR)/capchroot.Po' tmpdepfile='src/$(DEPDIR)/capchroot.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/capchroot.o `test -f 'src/capchroot.c' || echo '$(srcdir)/'`src/capchroot.c
+
+src/capchroot.obj: src/capchroot.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/capchroot.obj -MD -MP -MF "src/$(DEPDIR)/capchroot.Tpo" -c -o src/capchroot.obj `if test -f 'src/capchroot.c'; then $(CYGPATH_W) 'src/capchroot.c'; else $(CYGPATH_W) '$(srcdir)/src/capchroot.c'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "src/$(DEPDIR)/capchroot.Tpo" "src/$(DEPDIR)/capchroot.Po"; else rm -f "src/$(DEPDIR)/capchroot.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src/capchroot.c' object='src/capchroot.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='src/$(DEPDIR)/capchroot.Po' tmpdepfile='src/$(DEPDIR)/capchroot.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/capchroot.obj `if test -f 'src/capchroot.c'; then $(CYGPATH_W) 'src/capchroot.c'; else $(CYGPATH_W) '$(srcdir)/src/capchroot.c'; fi`
+
+src/chbind.o: src/chbind.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/chbind.o -MD -MP -MF "src/$(DEPDIR)/chbind.Tpo" -c -o src/chbind.o `test -f 'src/chbind.c' || echo '$(srcdir)/'`src/chbind.c; \
+@am__fastdepCC_TRUE@ then mv -f "src/$(DEPDIR)/chbind.Tpo" "src/$(DEPDIR)/chbind.Po"; else rm -f "src/$(DEPDIR)/chbind.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src/chbind.c' object='src/chbind.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='src/$(DEPDIR)/chbind.Po' tmpdepfile='src/$(DEPDIR)/chbind.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/chbind.o `test -f 'src/chbind.c' || echo '$(srcdir)/'`src/chbind.c
+
+src/chbind.obj: src/chbind.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/chbind.obj -MD -MP -MF "src/$(DEPDIR)/chbind.Tpo" -c -o src/chbind.obj `if test -f 'src/chbind.c'; then $(CYGPATH_W) 'src/chbind.c'; else $(CYGPATH_W) '$(srcdir)/src/chbind.c'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "src/$(DEPDIR)/chbind.Tpo" "src/$(DEPDIR)/chbind.Po"; else rm -f "src/$(DEPDIR)/chbind.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src/chbind.c' object='src/chbind.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='src/$(DEPDIR)/chbind.Po' tmpdepfile='src/$(DEPDIR)/chbind.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/chbind.obj `if test -f 'src/chbind.c'; then $(CYGPATH_W) 'src/chbind.c'; else $(CYGPATH_W) '$(srcdir)/src/chbind.c'; fi`
+
+src/chcontext.o: src/chcontext.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/chcontext.o -MD -MP -MF "src/$(DEPDIR)/chcontext.Tpo" -c -o src/chcontext.o `test -f 'src/chcontext.c' || echo '$(srcdir)/'`src/chcontext.c; \
+@am__fastdepCC_TRUE@ then mv -f "src/$(DEPDIR)/chcontext.Tpo" "src/$(DEPDIR)/chcontext.Po"; else rm -f "src/$(DEPDIR)/chcontext.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src/chcontext.c' object='src/chcontext.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='src/$(DEPDIR)/chcontext.Po' tmpdepfile='src/$(DEPDIR)/chcontext.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/chcontext.o `test -f 'src/chcontext.c' || echo '$(srcdir)/'`src/chcontext.c
+
+src/chcontext.obj: src/chcontext.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/chcontext.obj -MD -MP -MF "src/$(DEPDIR)/chcontext.Tpo" -c -o src/chcontext.obj `if test -f 'src/chcontext.c'; then $(CYGPATH_W) 'src/chcontext.c'; else $(CYGPATH_W) '$(srcdir)/src/chcontext.c'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "src/$(DEPDIR)/chcontext.Tpo" "src/$(DEPDIR)/chcontext.Po"; else rm -f "src/$(DEPDIR)/chcontext.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src/chcontext.c' object='src/chcontext.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='src/$(DEPDIR)/chcontext.Po' tmpdepfile='src/$(DEPDIR)/chcontext.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/chcontext.obj `if test -f 'src/chcontext.c'; then $(CYGPATH_W) 'src/chcontext.c'; else $(CYGPATH_W) '$(srcdir)/src/chcontext.c'; fi`
+
+src/fakerunlevel.o: src/fakerunlevel.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/fakerunlevel.o -MD -MP -MF "src/$(DEPDIR)/fakerunlevel.Tpo" -c -o src/fakerunlevel.o `test -f 'src/fakerunlevel.c' || echo '$(srcdir)/'`src/fakerunlevel.c; \
+@am__fastdepCC_TRUE@ then mv -f "src/$(DEPDIR)/fakerunlevel.Tpo" "src/$(DEPDIR)/fakerunlevel.Po"; else rm -f "src/$(DEPDIR)/fakerunlevel.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src/fakerunlevel.c' object='src/fakerunlevel.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='src/$(DEPDIR)/fakerunlevel.Po' tmpdepfile='src/$(DEPDIR)/fakerunlevel.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/fakerunlevel.o `test -f 'src/fakerunlevel.c' || echo '$(srcdir)/'`src/fakerunlevel.c
+
+src/fakerunlevel.obj: src/fakerunlevel.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/fakerunlevel.obj -MD -MP -MF "src/$(DEPDIR)/fakerunlevel.Tpo" -c -o src/fakerunlevel.obj `if test -f 'src/fakerunlevel.c'; then $(CYGPATH_W) 'src/fakerunlevel.c'; else $(CYGPATH_W) '$(srcdir)/src/fakerunlevel.c'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "src/$(DEPDIR)/fakerunlevel.Tpo" "src/$(DEPDIR)/fakerunlevel.Po"; else rm -f "src/$(DEPDIR)/fakerunlevel.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src/fakerunlevel.c' object='src/fakerunlevel.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='src/$(DEPDIR)/fakerunlevel.Po' tmpdepfile='src/$(DEPDIR)/fakerunlevel.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/fakerunlevel.obj `if test -f 'src/fakerunlevel.c'; then $(CYGPATH_W) 'src/fakerunlevel.c'; else $(CYGPATH_W) '$(srcdir)/src/fakerunlevel.c'; fi`
+
+src/filetime.o: src/filetime.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/filetime.o -MD -MP -MF "src/$(DEPDIR)/filetime.Tpo" -c -o src/filetime.o `test -f 'src/filetime.c' || echo '$(srcdir)/'`src/filetime.c; \
+@am__fastdepCC_TRUE@ then mv -f "src/$(DEPDIR)/filetime.Tpo" "src/$(DEPDIR)/filetime.Po"; else rm -f "src/$(DEPDIR)/filetime.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src/filetime.c' object='src/filetime.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='src/$(DEPDIR)/filetime.Po' tmpdepfile='src/$(DEPDIR)/filetime.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/filetime.o `test -f 'src/filetime.c' || echo '$(srcdir)/'`src/filetime.c
+
+src/filetime.obj: src/filetime.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/filetime.obj -MD -MP -MF "src/$(DEPDIR)/filetime.Tpo" -c -o src/filetime.obj `if test -f 'src/filetime.c'; then $(CYGPATH_W) 'src/filetime.c'; else $(CYGPATH_W) '$(srcdir)/src/filetime.c'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "src/$(DEPDIR)/filetime.Tpo" "src/$(DEPDIR)/filetime.Po"; else rm -f "src/$(DEPDIR)/filetime.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src/filetime.c' object='src/filetime.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='src/$(DEPDIR)/filetime.Po' tmpdepfile='src/$(DEPDIR)/filetime.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/filetime.obj `if test -f 'src/filetime.c'; then $(CYGPATH_W) 'src/filetime.c'; else $(CYGPATH_W) '$(srcdir)/src/filetime.c'; fi`
+
+src/ifspec.o: src/ifspec.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/ifspec.o -MD -MP -MF "src/$(DEPDIR)/ifspec.Tpo" -c -o src/ifspec.o `test -f 'src/ifspec.c' || echo '$(srcdir)/'`src/ifspec.c; \
+@am__fastdepCC_TRUE@ then mv -f "src/$(DEPDIR)/ifspec.Tpo" "src/$(DEPDIR)/ifspec.Po"; else rm -f "src/$(DEPDIR)/ifspec.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src/ifspec.c' object='src/ifspec.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='src/$(DEPDIR)/ifspec.Po' tmpdepfile='src/$(DEPDIR)/ifspec.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/ifspec.o `test -f 'src/ifspec.c' || echo '$(srcdir)/'`src/ifspec.c
+
+src/ifspec.obj: src/ifspec.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/ifspec.obj -MD -MP -MF "src/$(DEPDIR)/ifspec.Tpo" -c -o src/ifspec.obj `if test -f 'src/ifspec.c'; then $(CYGPATH_W) 'src/ifspec.c'; else $(CYGPATH_W) '$(srcdir)/src/ifspec.c'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "src/$(DEPDIR)/ifspec.Tpo" "src/$(DEPDIR)/ifspec.Po"; else rm -f "src/$(DEPDIR)/ifspec.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src/ifspec.c' object='src/ifspec.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='src/$(DEPDIR)/ifspec.Po' tmpdepfile='src/$(DEPDIR)/ifspec.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/ifspec.obj `if test -f 'src/ifspec.c'; then $(CYGPATH_W) 'src/ifspec.c'; else $(CYGPATH_W) '$(srcdir)/src/ifspec.c'; fi`
+
+src/listdevip.o: src/listdevip.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/listdevip.o -MD -MP -MF "src/$(DEPDIR)/listdevip.Tpo" -c -o src/listdevip.o `test -f 'src/listdevip.c' || echo '$(srcdir)/'`src/listdevip.c; \
+@am__fastdepCC_TRUE@ then mv -f "src/$(DEPDIR)/listdevip.Tpo" "src/$(DEPDIR)/listdevip.Po"; else rm -f "src/$(DEPDIR)/listdevip.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src/listdevip.c' object='src/listdevip.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='src/$(DEPDIR)/listdevip.Po' tmpdepfile='src/$(DEPDIR)/listdevip.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/listdevip.o `test -f 'src/listdevip.c' || echo '$(srcdir)/'`src/listdevip.c
+
+src/listdevip.obj: src/listdevip.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/listdevip.obj -MD -MP -MF "src/$(DEPDIR)/listdevip.Tpo" -c -o src/listdevip.obj `if test -f 'src/listdevip.c'; then $(CYGPATH_W) 'src/listdevip.c'; else $(CYGPATH_W) '$(srcdir)/src/listdevip.c'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "src/$(DEPDIR)/listdevip.Tpo" "src/$(DEPDIR)/listdevip.Po"; else rm -f "src/$(DEPDIR)/listdevip.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src/listdevip.c' object='src/listdevip.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='src/$(DEPDIR)/listdevip.Po' tmpdepfile='src/$(DEPDIR)/listdevip.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/listdevip.obj `if test -f 'src/listdevip.c'; then $(CYGPATH_W) 'src/listdevip.c'; else $(CYGPATH_W) '$(srcdir)/src/listdevip.c'; fi`
+
+src/parserpmdump.o: src/parserpmdump.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/parserpmdump.o -MD -MP -MF "src/$(DEPDIR)/parserpmdump.Tpo" -c -o src/parserpmdump.o `test -f 'src/parserpmdump.c' || echo '$(srcdir)/'`src/parserpmdump.c; \
+@am__fastdepCC_TRUE@ then mv -f "src/$(DEPDIR)/parserpmdump.Tpo" "src/$(DEPDIR)/parserpmdump.Po"; else rm -f "src/$(DEPDIR)/parserpmdump.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src/parserpmdump.c' object='src/parserpmdump.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='src/$(DEPDIR)/parserpmdump.Po' tmpdepfile='src/$(DEPDIR)/parserpmdump.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/parserpmdump.o `test -f 'src/parserpmdump.c' || echo '$(srcdir)/'`src/parserpmdump.c
+
+src/parserpmdump.obj: src/parserpmdump.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/parserpmdump.obj -MD -MP -MF "src/$(DEPDIR)/parserpmdump.Tpo" -c -o src/parserpmdump.obj `if test -f 'src/parserpmdump.c'; then $(CYGPATH_W) 'src/parserpmdump.c'; else $(CYGPATH_W) '$(srcdir)/src/parserpmdump.c'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "src/$(DEPDIR)/parserpmdump.Tpo" "src/$(DEPDIR)/parserpmdump.Po"; else rm -f "src/$(DEPDIR)/parserpmdump.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src/parserpmdump.c' object='src/parserpmdump.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='src/$(DEPDIR)/parserpmdump.Po' tmpdepfile='src/$(DEPDIR)/parserpmdump.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/parserpmdump.obj `if test -f 'src/parserpmdump.c'; then $(CYGPATH_W) 'src/parserpmdump.c'; else $(CYGPATH_W) '$(srcdir)/src/parserpmdump.c'; fi`
+
+src/readlink.o: src/readlink.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/readlink.o -MD -MP -MF "src/$(DEPDIR)/readlink.Tpo" -c -o src/readlink.o `test -f 'src/readlink.c' || echo '$(srcdir)/'`src/readlink.c; \
+@am__fastdepCC_TRUE@ then mv -f "src/$(DEPDIR)/readlink.Tpo" "src/$(DEPDIR)/readlink.Po"; else rm -f "src/$(DEPDIR)/readlink.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src/readlink.c' object='src/readlink.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='src/$(DEPDIR)/readlink.Po' tmpdepfile='src/$(DEPDIR)/readlink.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/readlink.o `test -f 'src/readlink.c' || echo '$(srcdir)/'`src/readlink.c
+
+src/readlink.obj: src/readlink.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/readlink.obj -MD -MP -MF "src/$(DEPDIR)/readlink.Tpo" -c -o src/readlink.obj `if test -f 'src/readlink.c'; then $(CYGPATH_W) 'src/readlink.c'; else $(CYGPATH_W) '$(srcdir)/src/readlink.c'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "src/$(DEPDIR)/readlink.Tpo" "src/$(DEPDIR)/readlink.Po"; else rm -f "src/$(DEPDIR)/readlink.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src/readlink.c' object='src/readlink.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='src/$(DEPDIR)/readlink.Po' tmpdepfile='src/$(DEPDIR)/readlink.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/readlink.obj `if test -f 'src/readlink.c'; then $(CYGPATH_W) 'src/readlink.c'; else $(CYGPATH_W) '$(srcdir)/src/readlink.c'; fi`
+
+src/src_rebootmgr-rebootmgr.o: src/rebootmgr.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_rebootmgr_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/src_rebootmgr-rebootmgr.o -MD -MP -MF "src/$(DEPDIR)/src_rebootmgr-rebootmgr.Tpo" -c -o src/src_rebootmgr-rebootmgr.o `test -f 'src/rebootmgr.c' || echo '$(srcdir)/'`src/rebootmgr.c; \
+@am__fastdepCC_TRUE@ then mv -f "src/$(DEPDIR)/src_rebootmgr-rebootmgr.Tpo" "src/$(DEPDIR)/src_rebootmgr-rebootmgr.Po"; else rm -f "src/$(DEPDIR)/src_rebootmgr-rebootmgr.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src/rebootmgr.c' object='src/src_rebootmgr-rebootmgr.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='src/$(DEPDIR)/src_rebootmgr-rebootmgr.Po' tmpdepfile='src/$(DEPDIR)/src_rebootmgr-rebootmgr.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_rebootmgr_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/src_rebootmgr-rebootmgr.o `test -f 'src/rebootmgr.c' || echo '$(srcdir)/'`src/rebootmgr.c
+
+src/src_rebootmgr-rebootmgr.obj: src/rebootmgr.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_rebootmgr_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/src_rebootmgr-rebootmgr.obj -MD -MP -MF "src/$(DEPDIR)/src_rebootmgr-rebootmgr.Tpo" -c -o src/src_rebootmgr-rebootmgr.obj `if test -f 'src/rebootmgr.c'; then $(CYGPATH_W) 'src/rebootmgr.c'; else $(CYGPATH_W) '$(srcdir)/src/rebootmgr.c'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "src/$(DEPDIR)/src_rebootmgr-rebootmgr.Tpo" "src/$(DEPDIR)/src_rebootmgr-rebootmgr.Po"; else rm -f "src/$(DEPDIR)/src_rebootmgr-rebootmgr.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src/rebootmgr.c' object='src/src_rebootmgr-rebootmgr.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='src/$(DEPDIR)/src_rebootmgr-rebootmgr.Po' tmpdepfile='src/$(DEPDIR)/src_rebootmgr-rebootmgr.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_rebootmgr_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/src_rebootmgr-rebootmgr.obj `if test -f 'src/rebootmgr.c'; then $(CYGPATH_W) 'src/rebootmgr.c'; else $(CYGPATH_W) '$(srcdir)/src/rebootmgr.c'; fi`
+
+src/reducecap.o: src/reducecap.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/reducecap.o -MD -MP -MF "src/$(DEPDIR)/reducecap.Tpo" -c -o src/reducecap.o `test -f 'src/reducecap.c' || echo '$(srcdir)/'`src/reducecap.c; \
+@am__fastdepCC_TRUE@ then mv -f "src/$(DEPDIR)/reducecap.Tpo" "src/$(DEPDIR)/reducecap.Po"; else rm -f "src/$(DEPDIR)/reducecap.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src/reducecap.c' object='src/reducecap.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='src/$(DEPDIR)/reducecap.Po' tmpdepfile='src/$(DEPDIR)/reducecap.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/reducecap.o `test -f 'src/reducecap.c' || echo '$(srcdir)/'`src/reducecap.c
+
+src/reducecap.obj: src/reducecap.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/reducecap.obj -MD -MP -MF "src/$(DEPDIR)/reducecap.Tpo" -c -o src/reducecap.obj `if test -f 'src/reducecap.c'; then $(CYGPATH_W) 'src/reducecap.c'; else $(CYGPATH_W) '$(srcdir)/src/reducecap.c'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "src/$(DEPDIR)/reducecap.Tpo" "src/$(DEPDIR)/reducecap.Po"; else rm -f "src/$(DEPDIR)/reducecap.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src/reducecap.c' object='src/reducecap.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='src/$(DEPDIR)/reducecap.Po' tmpdepfile='src/$(DEPDIR)/reducecap.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/reducecap.obj `if test -f 'src/reducecap.c'; then $(CYGPATH_W) 'src/reducecap.c'; else $(CYGPATH_W) '$(srcdir)/src/reducecap.c'; fi`
+
+src/showattr.o: src/showattr.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/showattr.o -MD -MP -MF "src/$(DEPDIR)/showattr.Tpo" -c -o src/showattr.o `test -f 'src/showattr.c' || echo '$(srcdir)/'`src/showattr.c; \
+@am__fastdepCC_TRUE@ then mv -f "src/$(DEPDIR)/showattr.Tpo" "src/$(DEPDIR)/showattr.Po"; else rm -f "src/$(DEPDIR)/showattr.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src/showattr.c' object='src/showattr.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='src/$(DEPDIR)/showattr.Po' tmpdepfile='src/$(DEPDIR)/showattr.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/showattr.o `test -f 'src/showattr.c' || echo '$(srcdir)/'`src/showattr.c
+
+src/showattr.obj: src/showattr.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/showattr.obj -MD -MP -MF "src/$(DEPDIR)/showattr.Tpo" -c -o src/showattr.obj `if test -f 'src/showattr.c'; then $(CYGPATH_W) 'src/showattr.c'; else $(CYGPATH_W) '$(srcdir)/src/showattr.c'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "src/$(DEPDIR)/showattr.Tpo" "src/$(DEPDIR)/showattr.Po"; else rm -f "src/$(DEPDIR)/showattr.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src/showattr.c' object='src/showattr.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='src/$(DEPDIR)/showattr.Po' tmpdepfile='src/$(DEPDIR)/showattr.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/showattr.obj `if test -f 'src/showattr.c'; then $(CYGPATH_W) 'src/showattr.c'; else $(CYGPATH_W) '$(srcdir)/src/showattr.c'; fi`
+
+src/showperm.o: src/showperm.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/showperm.o -MD -MP -MF "src/$(DEPDIR)/showperm.Tpo" -c -o src/showperm.o `test -f 'src/showperm.c' || echo '$(srcdir)/'`src/showperm.c; \
+@am__fastdepCC_TRUE@ then mv -f "src/$(DEPDIR)/showperm.Tpo" "src/$(DEPDIR)/showperm.Po"; else rm -f "src/$(DEPDIR)/showperm.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src/showperm.c' object='src/showperm.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='src/$(DEPDIR)/showperm.Po' tmpdepfile='src/$(DEPDIR)/showperm.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/showperm.o `test -f 'src/showperm.c' || echo '$(srcdir)/'`src/showperm.c
+
+src/showperm.obj: src/showperm.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/showperm.obj -MD -MP -MF "src/$(DEPDIR)/showperm.Tpo" -c -o src/showperm.obj `if test -f 'src/showperm.c'; then $(CYGPATH_W) 'src/showperm.c'; else $(CYGPATH_W) '$(srcdir)/src/showperm.c'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "src/$(DEPDIR)/showperm.Tpo" "src/$(DEPDIR)/showperm.Po"; else rm -f "src/$(DEPDIR)/showperm.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src/showperm.c' object='src/showperm.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='src/$(DEPDIR)/showperm.Po' tmpdepfile='src/$(DEPDIR)/showperm.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/showperm.obj `if test -f 'src/showperm.c'; then $(CYGPATH_W) 'src/showperm.c'; else $(CYGPATH_W) '$(srcdir)/src/showperm.c'; fi`
+
+src/vdu.o: src/vdu.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/vdu.o -MD -MP -MF "src/$(DEPDIR)/vdu.Tpo" -c -o src/vdu.o `test -f 'src/vdu.c' || echo '$(srcdir)/'`src/vdu.c; \
+@am__fastdepCC_TRUE@ then mv -f "src/$(DEPDIR)/vdu.Tpo" "src/$(DEPDIR)/vdu.Po"; else rm -f "src/$(DEPDIR)/vdu.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src/vdu.c' object='src/vdu.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='src/$(DEPDIR)/vdu.Po' tmpdepfile='src/$(DEPDIR)/vdu.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/vdu.o `test -f 'src/vdu.c' || echo '$(srcdir)/'`src/vdu.c
+
+src/vdu.obj: src/vdu.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/vdu.obj -MD -MP -MF "src/$(DEPDIR)/vdu.Tpo" -c -o src/vdu.obj `if test -f 'src/vdu.c'; then $(CYGPATH_W) 'src/vdu.c'; else $(CYGPATH_W) '$(srcdir)/src/vdu.c'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "src/$(DEPDIR)/vdu.Tpo" "src/$(DEPDIR)/vdu.Po"; else rm -f "src/$(DEPDIR)/vdu.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src/vdu.c' object='src/vdu.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='src/$(DEPDIR)/vdu.Po' tmpdepfile='src/$(DEPDIR)/vdu.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/vdu.obj `if test -f 'src/vdu.c'; then $(CYGPATH_W) 'src/vdu.c'; else $(CYGPATH_W) '$(srcdir)/src/vdu.c'; fi`
+
+src/src_vkill-vkill.o: src/vkill.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_vkill_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/src_vkill-vkill.o -MD -MP -MF "src/$(DEPDIR)/src_vkill-vkill.Tpo" -c -o src/src_vkill-vkill.o `test -f 'src/vkill.c' || echo '$(srcdir)/'`src/vkill.c; \
+@am__fastdepCC_TRUE@ then mv -f "src/$(DEPDIR)/src_vkill-vkill.Tpo" "src/$(DEPDIR)/src_vkill-vkill.Po"; else rm -f "src/$(DEPDIR)/src_vkill-vkill.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src/vkill.c' object='src/src_vkill-vkill.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='src/$(DEPDIR)/src_vkill-vkill.Po' tmpdepfile='src/$(DEPDIR)/src_vkill-vkill.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_vkill_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/src_vkill-vkill.o `test -f 'src/vkill.c' || echo '$(srcdir)/'`src/vkill.c
+
+src/src_vkill-vkill.obj: src/vkill.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_vkill_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/src_vkill-vkill.obj -MD -MP -MF "src/$(DEPDIR)/src_vkill-vkill.Tpo" -c -o src/src_vkill-vkill.obj `if test -f 'src/vkill.c'; then $(CYGPATH_W) 'src/vkill.c'; else $(CYGPATH_W) '$(srcdir)/src/vkill.c'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "src/$(DEPDIR)/src_vkill-vkill.Tpo" "src/$(DEPDIR)/src_vkill-vkill.Po"; else rm -f "src/$(DEPDIR)/src_vkill-vkill.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src/vkill.c' object='src/src_vkill-vkill.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='src/$(DEPDIR)/src_vkill-vkill.Po' tmpdepfile='src/$(DEPDIR)/src_vkill-vkill.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_vkill_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/src_vkill-vkill.obj `if test -f 'src/vkill.c'; then $(CYGPATH_W) 'src/vkill.c'; else $(CYGPATH_W) '$(srcdir)/src/vkill.c'; fi`
+
+src/vlimit.o: src/vlimit.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/vlimit.o -MD -MP -MF "src/$(DEPDIR)/vlimit.Tpo" -c -o src/vlimit.o `test -f 'src/vlimit.c' || echo '$(srcdir)/'`src/vlimit.c; \
+@am__fastdepCC_TRUE@ then mv -f "src/$(DEPDIR)/vlimit.Tpo" "src/$(DEPDIR)/vlimit.Po"; else rm -f "src/$(DEPDIR)/vlimit.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src/vlimit.c' object='src/vlimit.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='src/$(DEPDIR)/vlimit.Po' tmpdepfile='src/$(DEPDIR)/vlimit.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/vlimit.o `test -f 'src/vlimit.c' || echo '$(srcdir)/'`src/vlimit.c
+
+src/vlimit.obj: src/vlimit.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/vlimit.obj -MD -MP -MF "src/$(DEPDIR)/vlimit.Tpo" -c -o src/vlimit.obj `if test -f 'src/vlimit.c'; then $(CYGPATH_W) 'src/vlimit.c'; else $(CYGPATH_W) '$(srcdir)/src/vlimit.c'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "src/$(DEPDIR)/vlimit.Tpo" "src/$(DEPDIR)/vlimit.Po"; else rm -f "src/$(DEPDIR)/vlimit.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src/vlimit.c' object='src/vlimit.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='src/$(DEPDIR)/vlimit.Po' tmpdepfile='src/$(DEPDIR)/vlimit.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/vlimit.obj `if test -f 'src/vlimit.c'; then $(CYGPATH_W) 'src/vlimit.c'; else $(CYGPATH_W) '$(srcdir)/src/vlimit.c'; fi`
+
+src/vreboot.o: src/vreboot.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/vreboot.o -MD -MP -MF "src/$(DEPDIR)/vreboot.Tpo" -c -o src/vreboot.o `test -f 'src/vreboot.c' || echo '$(srcdir)/'`src/vreboot.c; \
+@am__fastdepCC_TRUE@ then mv -f "src/$(DEPDIR)/vreboot.Tpo" "src/$(DEPDIR)/vreboot.Po"; else rm -f "src/$(DEPDIR)/vreboot.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src/vreboot.c' object='src/vreboot.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='src/$(DEPDIR)/vreboot.Po' tmpdepfile='src/$(DEPDIR)/vreboot.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/vreboot.o `test -f 'src/vreboot.c' || echo '$(srcdir)/'`src/vreboot.c
+
+src/vreboot.obj: src/vreboot.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/vreboot.obj -MD -MP -MF "src/$(DEPDIR)/vreboot.Tpo" -c -o src/vreboot.obj `if test -f 'src/vreboot.c'; then $(CYGPATH_W) 'src/vreboot.c'; else $(CYGPATH_W) '$(srcdir)/src/vreboot.c'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "src/$(DEPDIR)/vreboot.Tpo" "src/$(DEPDIR)/vreboot.Po"; else rm -f "src/$(DEPDIR)/vreboot.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src/vreboot.c' object='src/vreboot.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='src/$(DEPDIR)/vreboot.Po' tmpdepfile='src/$(DEPDIR)/vreboot.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/vreboot.obj `if test -f 'src/vreboot.c'; then $(CYGPATH_W) 'src/vreboot.c'; else $(CYGPATH_W) '$(srcdir)/src/vreboot.c'; fi`
+
+src/vserver-stat.o: src/vserver-stat.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/vserver-stat.o -MD -MP -MF "src/$(DEPDIR)/vserver-stat.Tpo" -c -o src/vserver-stat.o `test -f 'src/vserver-stat.c' || echo '$(srcdir)/'`src/vserver-stat.c; \
+@am__fastdepCC_TRUE@ then mv -f "src/$(DEPDIR)/vserver-stat.Tpo" "src/$(DEPDIR)/vserver-stat.Po"; else rm -f "src/$(DEPDIR)/vserver-stat.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src/vserver-stat.c' object='src/vserver-stat.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='src/$(DEPDIR)/vserver-stat.Po' tmpdepfile='src/$(DEPDIR)/vserver-stat.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/vserver-stat.o `test -f 'src/vserver-stat.c' || echo '$(srcdir)/'`src/vserver-stat.c
+
+src/vserver-stat.obj: src/vserver-stat.c
+@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/vserver-stat.obj -MD -MP -MF "src/$(DEPDIR)/vserver-stat.Tpo" -c -o src/vserver-stat.obj `if test -f 'src/vserver-stat.c'; then $(CYGPATH_W) 'src/vserver-stat.c'; else $(CYGPATH_W) '$(srcdir)/src/vserver-stat.c'; fi`; \
+@am__fastdepCC_TRUE@ then mv -f "src/$(DEPDIR)/vserver-stat.Tpo" "src/$(DEPDIR)/vserver-stat.Po"; else rm -f "src/$(DEPDIR)/vserver-stat.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='src/vserver-stat.c' object='src/vserver-stat.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='src/$(DEPDIR)/vserver-stat.Po' tmpdepfile='src/$(DEPDIR)/vserver-stat.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/vserver-stat.obj `if test -f 'src/vserver-stat.c'; then $(CYGPATH_W) 'src/vserver-stat.c'; else $(CYGPATH_W) '$(srcdir)/src/vserver-stat.c'; fi`
+
+.cc.o:
+@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
+@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $<
+
+.cc.obj:
+@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
+@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+src/vbuild.o: src/vbuild.cc
+@am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/vbuild.o -MD -MP -MF "src/$(DEPDIR)/vbuild.Tpo" -c -o src/vbuild.o `test -f 'src/vbuild.cc' || echo '$(srcdir)/'`src/vbuild.cc; \
+@am__fastdepCXX_TRUE@ then mv -f "src/$(DEPDIR)/vbuild.Tpo" "src/$(DEPDIR)/vbuild.Po"; else rm -f "src/$(DEPDIR)/vbuild.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='src/vbuild.cc' object='src/vbuild.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='src/$(DEPDIR)/vbuild.Po' tmpdepfile='src/$(DEPDIR)/vbuild.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/vbuild.o `test -f 'src/vbuild.cc' || echo '$(srcdir)/'`src/vbuild.cc
+
+src/vbuild.obj: src/vbuild.cc
+@am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/vbuild.obj -MD -MP -MF "src/$(DEPDIR)/vbuild.Tpo" -c -o src/vbuild.obj `if test -f 'src/vbuild.cc'; then $(CYGPATH_W) 'src/vbuild.cc'; else $(CYGPATH_W) '$(srcdir)/src/vbuild.cc'; fi`; \
+@am__fastdepCXX_TRUE@ then mv -f "src/$(DEPDIR)/vbuild.Tpo" "src/$(DEPDIR)/vbuild.Po"; else rm -f "src/$(DEPDIR)/vbuild.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='src/vbuild.cc' object='src/vbuild.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='src/$(DEPDIR)/vbuild.Po' tmpdepfile='src/$(DEPDIR)/vbuild.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/vbuild.obj `if test -f 'src/vbuild.cc'; then $(CYGPATH_W) 'src/vbuild.cc'; else $(CYGPATH_W) '$(srcdir)/src/vbuild.cc'; fi`
+
+src/vutil.o: src/vutil.cc
+@am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/vutil.o -MD -MP -MF "src/$(DEPDIR)/vutil.Tpo" -c -o src/vutil.o `test -f 'src/vutil.cc' || echo '$(srcdir)/'`src/vutil.cc; \
+@am__fastdepCXX_TRUE@ then mv -f "src/$(DEPDIR)/vutil.Tpo" "src/$(DEPDIR)/vutil.Po"; else rm -f "src/$(DEPDIR)/vutil.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='src/vutil.cc' object='src/vutil.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='src/$(DEPDIR)/vutil.Po' tmpdepfile='src/$(DEPDIR)/vutil.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/vutil.o `test -f 'src/vutil.cc' || echo '$(srcdir)/'`src/vutil.cc
+
+src/vutil.obj: src/vutil.cc
+@am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/vutil.obj -MD -MP -MF "src/$(DEPDIR)/vutil.Tpo" -c -o src/vutil.obj `if test -f 'src/vutil.cc'; then $(CYGPATH_W) 'src/vutil.cc'; else $(CYGPATH_W) '$(srcdir)/src/vutil.cc'; fi`; \
+@am__fastdepCXX_TRUE@ then mv -f "src/$(DEPDIR)/vutil.Tpo" "src/$(DEPDIR)/vutil.Po"; else rm -f "src/$(DEPDIR)/vutil.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='src/vutil.cc' object='src/vutil.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='src/$(DEPDIR)/vutil.Po' tmpdepfile='src/$(DEPDIR)/vutil.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/vutil.obj `if test -f 'src/vutil.cc'; then $(CYGPATH_W) 'src/vutil.cc'; else $(CYGPATH_W) '$(srcdir)/src/vutil.cc'; fi`
+
+src/vcheck.o: src/vcheck.cc
+@am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/vcheck.o -MD -MP -MF "src/$(DEPDIR)/vcheck.Tpo" -c -o src/vcheck.o `test -f 'src/vcheck.cc' || echo '$(srcdir)/'`src/vcheck.cc; \
+@am__fastdepCXX_TRUE@ then mv -f "src/$(DEPDIR)/vcheck.Tpo" "src/$(DEPDIR)/vcheck.Po"; else rm -f "src/$(DEPDIR)/vcheck.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='src/vcheck.cc' object='src/vcheck.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='src/$(DEPDIR)/vcheck.Po' tmpdepfile='src/$(DEPDIR)/vcheck.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/vcheck.o `test -f 'src/vcheck.cc' || echo '$(srcdir)/'`src/vcheck.cc
+
+src/vcheck.obj: src/vcheck.cc
+@am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/vcheck.obj -MD -MP -MF "src/$(DEPDIR)/vcheck.Tpo" -c -o src/vcheck.obj `if test -f 'src/vcheck.cc'; then $(CYGPATH_W) 'src/vcheck.cc'; else $(CYGPATH_W) '$(srcdir)/src/vcheck.cc'; fi`; \
+@am__fastdepCXX_TRUE@ then mv -f "src/$(DEPDIR)/vcheck.Tpo" "src/$(DEPDIR)/vcheck.Po"; else rm -f "src/$(DEPDIR)/vcheck.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='src/vcheck.cc' object='src/vcheck.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='src/$(DEPDIR)/vcheck.Po' tmpdepfile='src/$(DEPDIR)/vcheck.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/vcheck.obj `if test -f 'src/vcheck.cc'; then $(CYGPATH_W) 'src/vcheck.cc'; else $(CYGPATH_W) '$(srcdir)/src/vcheck.cc'; fi`
+
+src/vfiles.o: src/vfiles.cc
+@am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/vfiles.o -MD -MP -MF "src/$(DEPDIR)/vfiles.Tpo" -c -o src/vfiles.o `test -f 'src/vfiles.cc' || echo '$(srcdir)/'`src/vfiles.cc; \
+@am__fastdepCXX_TRUE@ then mv -f "src/$(DEPDIR)/vfiles.Tpo" "src/$(DEPDIR)/vfiles.Po"; else rm -f "src/$(DEPDIR)/vfiles.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='src/vfiles.cc' object='src/vfiles.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='src/$(DEPDIR)/vfiles.Po' tmpdepfile='src/$(DEPDIR)/vfiles.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/vfiles.o `test -f 'src/vfiles.cc' || echo '$(srcdir)/'`src/vfiles.cc
+
+src/vfiles.obj: src/vfiles.cc
+@am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/vfiles.obj -MD -MP -MF "src/$(DEPDIR)/vfiles.Tpo" -c -o src/vfiles.obj `if test -f 'src/vfiles.cc'; then $(CYGPATH_W) 'src/vfiles.cc'; else $(CYGPATH_W) '$(srcdir)/src/vfiles.cc'; fi`; \
+@am__fastdepCXX_TRUE@ then mv -f "src/$(DEPDIR)/vfiles.Tpo" "src/$(DEPDIR)/vfiles.Po"; else rm -f "src/$(DEPDIR)/vfiles.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='src/vfiles.cc' object='src/vfiles.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='src/$(DEPDIR)/vfiles.Po' tmpdepfile='src/$(DEPDIR)/vfiles.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/vfiles.obj `if test -f 'src/vfiles.cc'; then $(CYGPATH_W) 'src/vfiles.cc'; else $(CYGPATH_W) '$(srcdir)/src/vfiles.cc'; fi`
+
+src/src_vunify-vunify.o: src/vunify.cc
+@am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_vunify_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/src_vunify-vunify.o -MD -MP -MF "src/$(DEPDIR)/src_vunify-vunify.Tpo" -c -o src/src_vunify-vunify.o `test -f 'src/vunify.cc' || echo '$(srcdir)/'`src/vunify.cc; \
+@am__fastdepCXX_TRUE@ then mv -f "src/$(DEPDIR)/src_vunify-vunify.Tpo" "src/$(DEPDIR)/src_vunify-vunify.Po"; else rm -f "src/$(DEPDIR)/src_vunify-vunify.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='src/vunify.cc' object='src/src_vunify-vunify.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='src/$(DEPDIR)/src_vunify-vunify.Po' tmpdepfile='src/$(DEPDIR)/src_vunify-vunify.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_vunify_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/src_vunify-vunify.o `test -f 'src/vunify.cc' || echo '$(srcdir)/'`src/vunify.cc
+
+src/src_vunify-vunify.obj: src/vunify.cc
+@am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_vunify_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/src_vunify-vunify.obj -MD -MP -MF "src/$(DEPDIR)/src_vunify-vunify.Tpo" -c -o src/src_vunify-vunify.obj `if test -f 'src/vunify.cc'; then $(CYGPATH_W) 'src/vunify.cc'; else $(CYGPATH_W) '$(srcdir)/src/vunify.cc'; fi`; \
+@am__fastdepCXX_TRUE@ then mv -f "src/$(DEPDIR)/src_vunify-vunify.Tpo" "src/$(DEPDIR)/src_vunify-vunify.Po"; else rm -f "src/$(DEPDIR)/src_vunify-vunify.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='src/vunify.cc' object='src/src_vunify-vunify.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='src/$(DEPDIR)/src_vunify-vunify.Po' tmpdepfile='src/$(DEPDIR)/src_vunify-vunify.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_vunify_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/src_vunify-vunify.obj `if test -f 'src/vunify.cc'; then $(CYGPATH_W) 'src/vunify.cc'; else $(CYGPATH_W) '$(srcdir)/src/vunify.cc'; fi`
+
+src/src_vunify-vutil.o: src/vutil.cc
+@am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_vunify_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/src_vunify-vutil.o -MD -MP -MF "src/$(DEPDIR)/src_vunify-vutil.Tpo" -c -o src/src_vunify-vutil.o `test -f 'src/vutil.cc' || echo '$(srcdir)/'`src/vutil.cc; \
+@am__fastdepCXX_TRUE@ then mv -f "src/$(DEPDIR)/src_vunify-vutil.Tpo" "src/$(DEPDIR)/src_vunify-vutil.Po"; else rm -f "src/$(DEPDIR)/src_vunify-vutil.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='src/vutil.cc' object='src/src_vunify-vutil.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='src/$(DEPDIR)/src_vunify-vutil.Po' tmpdepfile='src/$(DEPDIR)/src_vunify-vutil.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_vunify_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/src_vunify-vutil.o `test -f 'src/vutil.cc' || echo '$(srcdir)/'`src/vutil.cc
+
+src/src_vunify-vutil.obj: src/vutil.cc
+@am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_vunify_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/src_vunify-vutil.obj -MD -MP -MF "src/$(DEPDIR)/src_vunify-vutil.Tpo" -c -o src/src_vunify-vutil.obj `if test -f 'src/vutil.cc'; then $(CYGPATH_W) 'src/vutil.cc'; else $(CYGPATH_W) '$(srcdir)/src/vutil.cc'; fi`; \
+@am__fastdepCXX_TRUE@ then mv -f "src/$(DEPDIR)/src_vunify-vutil.Tpo" "src/$(DEPDIR)/src_vunify-vutil.Po"; else rm -f "src/$(DEPDIR)/src_vunify-vutil.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='src/vutil.cc' object='src/src_vunify-vutil.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='src/$(DEPDIR)/src_vunify-vutil.Po' tmpdepfile='src/$(DEPDIR)/src_vunify-vutil.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_vunify_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/src_vunify-vutil.obj `if test -f 'src/vutil.cc'; then $(CYGPATH_W) 'src/vutil.cc'; else $(CYGPATH_W) '$(srcdir)/src/vutil.cc'; fi`
+
+tests/escaperoot.o: tests/escaperoot.cc
+@am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT tests/escaperoot.o -MD -MP -MF "tests/$(DEPDIR)/escaperoot.Tpo" -c -o tests/escaperoot.o `test -f 'tests/escaperoot.cc' || echo '$(srcdir)/'`tests/escaperoot.cc; \
+@am__fastdepCXX_TRUE@ then mv -f "tests/$(DEPDIR)/escaperoot.Tpo" "tests/$(DEPDIR)/escaperoot.Po"; else rm -f "tests/$(DEPDIR)/escaperoot.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='tests/escaperoot.cc' object='tests/escaperoot.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='tests/$(DEPDIR)/escaperoot.Po' tmpdepfile='tests/$(DEPDIR)/escaperoot.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o tests/escaperoot.o `test -f 'tests/escaperoot.cc' || echo '$(srcdir)/'`tests/escaperoot.cc
+
+tests/escaperoot.obj: tests/escaperoot.cc
+@am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT tests/escaperoot.obj -MD -MP -MF "tests/$(DEPDIR)/escaperoot.Tpo" -c -o tests/escaperoot.obj `if test -f 'tests/escaperoot.cc'; then $(CYGPATH_W) 'tests/escaperoot.cc'; else $(CYGPATH_W) '$(srcdir)/tests/escaperoot.cc'; fi`; \
+@am__fastdepCXX_TRUE@ then mv -f "tests/$(DEPDIR)/escaperoot.Tpo" "tests/$(DEPDIR)/escaperoot.Po"; else rm -f "tests/$(DEPDIR)/escaperoot.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='tests/escaperoot.cc' object='tests/escaperoot.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='tests/$(DEPDIR)/escaperoot.Po' tmpdepfile='tests/$(DEPDIR)/escaperoot.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o tests/escaperoot.obj `if test -f 'tests/escaperoot.cc'; then $(CYGPATH_W) 'tests/escaperoot.cc'; else $(CYGPATH_W) '$(srcdir)/tests/escaperoot.cc'; fi`
+
+tests/forkbomb.o: tests/forkbomb.cc
+@am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT tests/forkbomb.o -MD -MP -MF "tests/$(DEPDIR)/forkbomb.Tpo" -c -o tests/forkbomb.o `test -f 'tests/forkbomb.cc' || echo '$(srcdir)/'`tests/forkbomb.cc; \
+@am__fastdepCXX_TRUE@ then mv -f "tests/$(DEPDIR)/forkbomb.Tpo" "tests/$(DEPDIR)/forkbomb.Po"; else rm -f "tests/$(DEPDIR)/forkbomb.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='tests/forkbomb.cc' object='tests/forkbomb.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='tests/$(DEPDIR)/forkbomb.Po' tmpdepfile='tests/$(DEPDIR)/forkbomb.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o tests/forkbomb.o `test -f 'tests/forkbomb.cc' || echo '$(srcdir)/'`tests/forkbomb.cc
+
+tests/forkbomb.obj: tests/forkbomb.cc
+@am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT tests/forkbomb.obj -MD -MP -MF "tests/$(DEPDIR)/forkbomb.Tpo" -c -o tests/forkbomb.obj `if test -f 'tests/forkbomb.cc'; then $(CYGPATH_W) 'tests/forkbomb.cc'; else $(CYGPATH_W) '$(srcdir)/tests/forkbomb.cc'; fi`; \
+@am__fastdepCXX_TRUE@ then mv -f "tests/$(DEPDIR)/forkbomb.Tpo" "tests/$(DEPDIR)/forkbomb.Po"; else rm -f "tests/$(DEPDIR)/forkbomb.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='tests/forkbomb.cc' object='tests/forkbomb.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='tests/$(DEPDIR)/forkbomb.Po' tmpdepfile='tests/$(DEPDIR)/forkbomb.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o tests/forkbomb.obj `if test -f 'tests/forkbomb.cc'; then $(CYGPATH_W) 'tests/forkbomb.cc'; else $(CYGPATH_W) '$(srcdir)/tests/forkbomb.cc'; fi`
+
+tests/testipc.o: tests/testipc.cc
+@am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT tests/testipc.o -MD -MP -MF "tests/$(DEPDIR)/testipc.Tpo" -c -o tests/testipc.o `test -f 'tests/testipc.cc' || echo '$(srcdir)/'`tests/testipc.cc; \
+@am__fastdepCXX_TRUE@ then mv -f "tests/$(DEPDIR)/testipc.Tpo" "tests/$(DEPDIR)/testipc.Po"; else rm -f "tests/$(DEPDIR)/testipc.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='tests/testipc.cc' object='tests/testipc.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='tests/$(DEPDIR)/testipc.Po' tmpdepfile='tests/$(DEPDIR)/testipc.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o tests/testipc.o `test -f 'tests/testipc.cc' || echo '$(srcdir)/'`tests/testipc.cc
+
+tests/testipc.obj: tests/testipc.cc
+@am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT tests/testipc.obj -MD -MP -MF "tests/$(DEPDIR)/testipc.Tpo" -c -o tests/testipc.obj `if test -f 'tests/testipc.cc'; then $(CYGPATH_W) 'tests/testipc.cc'; else $(CYGPATH_W) '$(srcdir)/tests/testipc.cc'; fi`; \
+@am__fastdepCXX_TRUE@ then mv -f "tests/$(DEPDIR)/testipc.Tpo" "tests/$(DEPDIR)/testipc.Po"; else rm -f "tests/$(DEPDIR)/testipc.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='tests/testipc.cc' object='tests/testipc.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='tests/$(DEPDIR)/testipc.Po' tmpdepfile='tests/$(DEPDIR)/testipc.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o tests/testipc.obj `if test -f 'tests/testipc.cc'; then $(CYGPATH_W) 'tests/testipc.cc'; else $(CYGPATH_W) '$(srcdir)/tests/testipc.cc'; fi`
+
+tests/testlimit.o: tests/testlimit.cc
+@am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT tests/testlimit.o -MD -MP -MF "tests/$(DEPDIR)/testlimit.Tpo" -c -o tests/testlimit.o `test -f 'tests/testlimit.cc' || echo '$(srcdir)/'`tests/testlimit.cc; \
+@am__fastdepCXX_TRUE@ then mv -f "tests/$(DEPDIR)/testlimit.Tpo" "tests/$(DEPDIR)/testlimit.Po"; else rm -f "tests/$(DEPDIR)/testlimit.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='tests/testlimit.cc' object='tests/testlimit.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='tests/$(DEPDIR)/testlimit.Po' tmpdepfile='tests/$(DEPDIR)/testlimit.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o tests/testlimit.o `test -f 'tests/testlimit.cc' || echo '$(srcdir)/'`tests/testlimit.cc
+
+tests/testlimit.obj: tests/testlimit.cc
+@am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT tests/testlimit.obj -MD -MP -MF "tests/$(DEPDIR)/testlimit.Tpo" -c -o tests/testlimit.obj `if test -f 'tests/testlimit.cc'; then $(CYGPATH_W) 'tests/testlimit.cc'; else $(CYGPATH_W) '$(srcdir)/tests/testlimit.cc'; fi`; \
+@am__fastdepCXX_TRUE@ then mv -f "tests/$(DEPDIR)/testlimit.Tpo" "tests/$(DEPDIR)/testlimit.Po"; else rm -f "tests/$(DEPDIR)/testlimit.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='tests/testlimit.cc' object='tests/testlimit.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='tests/$(DEPDIR)/testlimit.Po' tmpdepfile='tests/$(DEPDIR)/testlimit.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o tests/testlimit.obj `if test -f 'tests/testlimit.cc'; then $(CYGPATH_W) 'tests/testlimit.cc'; else $(CYGPATH_W) '$(srcdir)/tests/testlimit.cc'; fi`
+
+tests/testopenf.o: tests/testopenf.cc
+@am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT tests/testopenf.o -MD -MP -MF "tests/$(DEPDIR)/testopenf.Tpo" -c -o tests/testopenf.o `test -f 'tests/testopenf.cc' || echo '$(srcdir)/'`tests/testopenf.cc; \
+@am__fastdepCXX_TRUE@ then mv -f "tests/$(DEPDIR)/testopenf.Tpo" "tests/$(DEPDIR)/testopenf.Po"; else rm -f "tests/$(DEPDIR)/testopenf.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='tests/testopenf.cc' object='tests/testopenf.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='tests/$(DEPDIR)/testopenf.Po' tmpdepfile='tests/$(DEPDIR)/testopenf.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o tests/testopenf.o `test -f 'tests/testopenf.cc' || echo '$(srcdir)/'`tests/testopenf.cc
+
+tests/testopenf.obj: tests/testopenf.cc
+@am__fastdepCXX_TRUE@ if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT tests/testopenf.obj -MD -MP -MF "tests/$(DEPDIR)/testopenf.Tpo" -c -o tests/testopenf.obj `if test -f 'tests/testopenf.cc'; then $(CYGPATH_W) 'tests/testopenf.cc'; else $(CYGPATH_W) '$(srcdir)/tests/testopenf.cc'; fi`; \
+@am__fastdepCXX_TRUE@ then mv -f "tests/$(DEPDIR)/testopenf.Tpo" "tests/$(DEPDIR)/testopenf.Po"; else rm -f "tests/$(DEPDIR)/testopenf.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='tests/testopenf.cc' object='tests/testopenf.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='tests/$(DEPDIR)/testopenf.Po' tmpdepfile='tests/$(DEPDIR)/testopenf.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o tests/testopenf.obj `if test -f 'tests/testopenf.cc'; then $(CYGPATH_W) 'tests/testopenf.cc'; else $(CYGPATH_W) '$(srcdir)/tests/testopenf.cc'; fi`
+uninstall-info-am:
+install-man8: $(man8_MANS) $(man_MANS)
+ @$(NORMAL_INSTALL)
+ $(mkdir_p) $(DESTDIR)$(man8dir)
+ @list='$(man8_MANS) $(dist_man8_MANS) $(nodist_man8_MANS)'; \
+ l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+ for i in $$l2; do \
+ case "$$i" in \
+ *.8*) list="$$list $$i" ;; \
+ esac; \
+ done; \
+ for i in $$list; do \
+ if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \
+ else file=$$i; fi; \
+ ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+ case "$$ext" in \
+ 8*) ;; \
+ *) ext='8' ;; \
+ esac; \
+ inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+ inst=`echo $$inst | sed -e 's/^.*\///'`; \
+ inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+ echo " $(INSTALL_DATA) $$file $(DESTDIR)$(man8dir)/$$inst"; \
+ $(INSTALL_DATA) $$file $(DESTDIR)$(man8dir)/$$inst; \
+ done
+uninstall-man8:
+ @$(NORMAL_UNINSTALL)
+ @list='$(man8_MANS) $(dist_man8_MANS) $(nodist_man8_MANS)'; \
+ l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+ for i in $$l2; do \
+ case "$$i" in \
+ *.8*) list="$$list $$i" ;; \
+ esac; \
+ done; \
+ for i in $$list; do \
+ ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+ case "$$ext" in \
+ 8*) ;; \
+ *) ext='8' ;; \
+ esac; \
+ inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+ inst=`echo $$inst | sed -e 's/^.*\///'`; \
+ inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+ echo " rm -f $(DESTDIR)$(man8dir)/$$inst"; \
+ rm -f $(DESTDIR)$(man8dir)/$$inst; \
+ done
+install-pkglibDATA: $(pkglib_DATA)
+ @$(NORMAL_INSTALL)
+ $(mkdir_p) $(DESTDIR)$(pkglibdir)
+ @list='$(pkglib_DATA)'; for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ f="`echo $$p | sed -e 's|^.*/||'`"; \
+ echo " $(pkglibDATA_INSTALL) $$d$$p $(DESTDIR)$(pkglibdir)/$$f"; \
+ $(pkglibDATA_INSTALL) $$d$$p $(DESTDIR)$(pkglibdir)/$$f; \
+ done
+
+uninstall-pkglibDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(pkglib_DATA)'; for p in $$list; do \
+ f="`echo $$p | sed -e 's|^.*/||'`"; \
+ echo " rm -f $(DESTDIR)$(pkglibdir)/$$f"; \
+ rm -f $(DESTDIR)$(pkglibdir)/$$f; \
+ done
+install-scriptscfgDATA: $(scriptscfg_DATA)
+ @$(NORMAL_INSTALL)
+ $(mkdir_p) $(DESTDIR)$(scriptscfgdir)
+ @list='$(scriptscfg_DATA)'; for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ f="`echo $$p | sed -e 's|^.*/||'`"; \
+ echo " $(scriptscfgDATA_INSTALL) $$d$$p $(DESTDIR)$(scriptscfgdir)/$$f"; \
+ $(scriptscfgDATA_INSTALL) $$d$$p $(DESTDIR)$(scriptscfgdir)/$$f; \
+ done
+
+uninstall-scriptscfgDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(scriptscfg_DATA)'; for p in $$list; do \
+ f="`echo $$p | sed -e 's|^.*/||'`"; \
+ echo " rm -f $(DESTDIR)$(scriptscfgdir)/$$f"; \
+ rm -f $(DESTDIR)$(scriptscfgdir)/$$f; \
+ done
+install-sysconfDATA: $(sysconf_DATA)
+ @$(NORMAL_INSTALL)
+ $(mkdir_p) $(DESTDIR)$(sysconfdir)
+ @list='$(sysconf_DATA)'; for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ f="`echo $$p | sed -e 's|^.*/||'`"; \
+ echo " $(sysconfDATA_INSTALL) $$d$$p $(DESTDIR)$(sysconfdir)/$$f"; \
+ $(sysconfDATA_INSTALL) $$d$$p $(DESTDIR)$(sysconfdir)/$$f; \
+ done
+
+uninstall-sysconfDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(sysconf_DATA)'; for p in $$list; do \
+ f="`echo $$p | sed -e 's|^.*/||'`"; \
+ echo " rm -f $(DESTDIR)$(sysconfdir)/$$f"; \
+ rm -f $(DESTDIR)$(sysconfdir)/$$f; \
+ done
+install-vservercfgDATA: $(vservercfg_DATA)
+ @$(NORMAL_INSTALL)
+ $(mkdir_p) $(DESTDIR)$(vservercfgdir)
+ @list='$(vservercfg_DATA)'; for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ f="`echo $$p | sed -e 's|^.*/||'`"; \
+ echo " $(vservercfgDATA_INSTALL) $$d$$p $(DESTDIR)$(vservercfgdir)/$$f"; \
+ $(vservercfgDATA_INSTALL) $$d$$p $(DESTDIR)$(vservercfgdir)/$$f; \
+ done
+
+uninstall-vservercfgDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(vservercfg_DATA)'; for p in $$list; do \
+ f="`echo $$p | sed -e 's|^.*/||'`"; \
+ echo " rm -f $(DESTDIR)$(vservercfgdir)/$$f"; \
+ rm -f $(DESTDIR)$(vservercfgdir)/$$f; \
+ done
+install-includeHEADERS: $(include_HEADERS)
+ @$(NORMAL_INSTALL)
+ $(mkdir_p) $(DESTDIR)$(includedir)
+ @list='$(include_HEADERS)'; for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ f="`echo $$p | sed -e 's|^.*/||'`"; \
+ echo " $(includeHEADERS_INSTALL) $$d$$p $(DESTDIR)$(includedir)/$$f"; \
+ $(includeHEADERS_INSTALL) $$d$$p $(DESTDIR)$(includedir)/$$f; \
+ done
+
+uninstall-includeHEADERS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(include_HEADERS)'; for p in $$list; do \
+ f="`echo $$p | sed -e 's|^.*/||'`"; \
+ echo " rm -f $(DESTDIR)$(includedir)/$$f"; \
+ rm -f $(DESTDIR)$(includedir)/$$f; \
+ done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ test -z "$(ETAGS_ARGS)$$tags$$unique" \
+ || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$tags $$unique
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$tags $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && cd $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ $(am__remove_distdir)
+ mkdir $(distdir)
+ $(mkdir_p) $(distdir)/. $(distdir)/distrib $(distdir)/doc $(distdir)/lib $(distdir)/linuxconf $(distdir)/m4 $(distdir)/man $(distdir)/scripts $(distdir)/src $(distdir)/sysv $(distdir)/tests
+ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+ list='$(DISTFILES)'; for file in $$list; do \
+ case $$file in \
+ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+ esac; \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+ dir="/$$dir"; \
+ $(mkdir_p) "$(distdir)$$dir"; \
+ else \
+ dir=''; \
+ fi; \
+ if test -d $$d/$$file; then \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+ fi; \
+ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+ else \
+ test -f $(distdir)/$$file \
+ || cp -p $$d/$$file $(distdir)/$$file \
+ || exit 1; \
+ fi; \
+ done
+ -find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \
+ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
+ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \
+ ! -type d ! -perm -444 -exec $(SHELL) $(install_sh) -c -m a+r {} {} \; \
+ || chmod -R a+r $(distdir)
+dist-gzip: distdir
+ $(AMTAR) chof - $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
+ $(am__remove_distdir)
+dist-bzip2: distdir
+ $(AMTAR) chof - $(distdir) | bzip2 -9 -c >$(distdir).tar.bz2
+ $(am__remove_distdir)
+
+dist-tarZ: distdir
+ $(AMTAR) chof - $(distdir) | compress -c >$(distdir).tar.Z
+ $(am__remove_distdir)
+
+dist-shar: distdir
+ shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
+ $(am__remove_distdir)
+
+dist-zip: distdir
+ -rm -f $(distdir).zip
+ zip -rq $(distdir).zip $(distdir)
+ $(am__remove_distdir)
+
+dist dist-all: distdir
+ $(AMTAR) chof - $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
+ $(AMTAR) chof - $(distdir) | bzip2 -9 -c >$(distdir).tar.bz2
+ $(am__remove_distdir)
+
+# This target untars the dist file and tries a VPATH configuration. Then
+# it guarantees that the distribution is self-contained by making another
+# tarfile.
+distcheck: dist
+ case '$(DIST_ARCHIVES)' in \
+ *.tar.gz*) \
+ GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(AMTAR) xf - ;;\
+ *.tar.bz2*) \
+ bunzip2 -c $(distdir).tar.bz2 | $(AMTAR) xf - ;;\
+ *.tar.Z*) \
+ uncompress -c $(distdir).tar.Z | $(AMTAR) xf - ;;\
+ *.shar.gz*) \
+ GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | unshar ;;\
+ *.zip*) \
+ unzip $(distdir).zip ;;\
+ esac
+ chmod -R a-w $(distdir); chmod a+w $(distdir)
+ mkdir $(distdir)/_build
+ mkdir $(distdir)/_inst
+ chmod a-w $(distdir)
+ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
+ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
+ && cd $(distdir)/_build \
+ && ../configure --srcdir=.. --prefix="$$dc_install_base" \
+ $(DISTCHECK_CONFIGURE_FLAGS) \
+ && $(MAKE) $(AM_MAKEFLAGS) \
+ && $(MAKE) $(AM_MAKEFLAGS) dvi \
+ && $(MAKE) $(AM_MAKEFLAGS) check \
+ && $(MAKE) $(AM_MAKEFLAGS) install \
+ && $(MAKE) $(AM_MAKEFLAGS) installcheck \
+ && $(MAKE) $(AM_MAKEFLAGS) uninstall \
+ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \
+ distuninstallcheck \
+ && chmod -R a-w "$$dc_install_base" \
+ && ({ \
+ (cd ../.. && $(mkdir_p) "$$dc_destdir") \
+ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
+ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
+ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
+ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
+ } || { rm -rf "$$dc_destdir"; exit 1; }) \
+ && rm -rf "$$dc_destdir" \
+ && $(MAKE) $(AM_MAKEFLAGS) dist \
+ && rm -rf $(DIST_ARCHIVES) \
+ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck
+ $(am__remove_distdir)
+ @(echo "$(distdir) archives ready for distribution: "; \
+ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
+ sed -e '1{h;s/./=/g;p;x;}' -e '$${p;x;}'
+distuninstallcheck:
+ @cd $(distuninstallcheck_dir) \
+ && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \
+ || { echo "ERROR: files left after uninstall:" ; \
+ if test -n "$(DESTDIR)"; then \
+ echo " (check DESTDIR support)"; \
+ fi ; \
+ $(distuninstallcheck_listfiles) ; \
+ exit 1; } >&2
+distcleancheck: distclean
+ @if test '$(srcdir)' = . ; then \
+ echo "ERROR: distcleancheck can only run from a VPATH build" ; \
+ exit 1 ; \
+ fi
+ @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
+ || { echo "ERROR: files left in build directory after distclean:" ; \
+ $(distcleancheck_listfiles) ; \
+ exit 1; } >&2
+check-am: all-am
+check: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) check-am
+all-am: Makefile $(LIBRARIES) $(PROGRAMS) $(SCRIPTS) $(MANS) $(DATA) \
+ $(HEADERS) config.h
+installdirs:
+ $(mkdir_p) $(DESTDIR)$(libdir) $(DESTDIR)$(pkglibdir) $(DESTDIR)$(sbindir) $(DESTDIR)$(legacydir) $(DESTDIR)$(pkglibdir) $(DESTDIR)$(sbindir) $(DESTDIR)$(sysvdir) $(DESTDIR)$(man8dir) $(DESTDIR)$(pkglibdir) $(DESTDIR)$(scriptscfgdir) $(DESTDIR)$(sysconfdir) $(DESTDIR)$(vservercfgdir) $(DESTDIR)$(includedir)
+install: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -rm -f $(CONFIG_CLEAN_FILES)
+ -rm -f tests/$(am__dirstamp)
+ -rm -f lib/$(am__dirstamp)
+ -rm -f src/$(am__dirstamp)
+ -rm -f tests/$(DEPDIR)/$(am__dirstamp)
+ -rm -f lib/$(DEPDIR)/$(am__dirstamp)
+ -rm -f src/$(DEPDIR)/$(am__dirstamp)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+ -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
+clean: clean-am
+
+clean-am: clean-generic clean-libLIBRARIES clean-noinstPROGRAMS \
+ clean-pkglibPROGRAMS clean-sbinPROGRAMS mostlyclean-am
+
+distclean: distclean-am
+ -rm -f $(am__CONFIG_DISTCLEAN_FILES)
+ -rm -rf lib/$(DEPDIR) src/$(DEPDIR) tests/$(DEPDIR)
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-hdr distclean-local distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am: install-includeHEADERS install-legacySCRIPTS \
+ install-man install-scriptscfgDATA install-sysvSCRIPTS \
+ install-vservercfgDATA
+
+install-exec-am: install-libLIBRARIES install-pkglibDATA \
+ install-pkglibPROGRAMS install-pkglibSCRIPTS \
+ install-sbinPROGRAMS install-sbinSCRIPTS install-sysconfDATA
+
+install-info: install-info-am
+
+install-man: install-man8
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f $(am__CONFIG_DISTCLEAN_FILES)
+ -rm -rf $(top_srcdir)/autom4te.cache
+ -rm -rf lib/$(DEPDIR) src/$(DEPDIR) tests/$(DEPDIR)
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-includeHEADERS uninstall-info-am \
+ uninstall-legacySCRIPTS uninstall-libLIBRARIES uninstall-man \
+ uninstall-pkglibDATA uninstall-pkglibPROGRAMS \
+ uninstall-pkglibSCRIPTS uninstall-sbinPROGRAMS \
+ uninstall-sbinSCRIPTS uninstall-scriptscfgDATA \
+ uninstall-sysconfDATA uninstall-sysvSCRIPTS \
+ uninstall-vservercfgDATA
+
+uninstall-man: uninstall-man8
+
+.PHONY: CTAGS GTAGS all all-am am--refresh check check-am clean \
+ clean-generic clean-libLIBRARIES clean-noinstPROGRAMS \
+ clean-pkglibPROGRAMS clean-sbinPROGRAMS ctags dist dist-all \
+ dist-bzip2 dist-gzip dist-shar dist-tarZ dist-zip distcheck \
+ distclean distclean-compile distclean-generic distclean-hdr \
+ distclean-local distclean-tags distcleancheck distdir \
+ distuninstallcheck dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-exec \
+ install-exec-am install-includeHEADERS install-info \
+ install-info-am install-legacySCRIPTS install-libLIBRARIES \
+ install-man install-man8 install-pkglibDATA \
+ install-pkglibPROGRAMS install-pkglibSCRIPTS \
+ install-sbinPROGRAMS install-sbinSCRIPTS \
+ install-scriptscfgDATA install-strip install-sysconfDATA \
+ install-sysvSCRIPTS install-vservercfgDATA installcheck \
+ installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \
+ uninstall-am uninstall-includeHEADERS uninstall-info-am \
+ uninstall-legacySCRIPTS uninstall-libLIBRARIES uninstall-man \
+ uninstall-man8 uninstall-pkglibDATA uninstall-pkglibPROGRAMS \
+ uninstall-pkglibSCRIPTS uninstall-sbinPROGRAMS \
+ uninstall-sbinSCRIPTS uninstall-scriptscfgDATA \
+ uninstall-sysconfDATA uninstall-sysvSCRIPTS \
+ uninstall-vservercfgDATA
+
+
+linuxcaps.h: ${kernelincludedir}/linux/capability.h Makefile
+ @rm -f $@
+ echo '#include <stdint.h>' >$@.tmp
+ sed -e 's!^#include .*!!g;s!\<__u32\>!uint32_t!g;s!\<__user\>!!g;' $< >>$@.tmp
+ @-chmod --reference $< $@.tmp &>/dev/null
+ mv -f $@.tmp $@
+ @chmod a-w $@
+
+linuxvirtual.h:
+@ENSC_ENABLE_INTERNAL_HEADERS_TRUE@ ln -sf '$(top_srcdir)/lib/virtual.h' '$@'
+@ENSC_ENABLE_INTERNAL_HEADERS_FALSE@ ln -sf '$(kernelincludedir)/linux/virtual.h' '$@' && test -e '$@' || \
+@ENSC_ENABLE_INTERNAL_HEADERS_FALSE@ ln -sf '$(top_srcdir)/lib/virtual.h' '$@'
+
+#install-data-hook: $(DESTDIR)$(pkglibdir)/setattr
+
+#$(DESTDIR)$(pkglibdir)/setattr:
+# ln -s showattr '$@'
+
+src/setattr$(EXEEXT): src/showattr$(EXEEXT)
+ @rm -f '$@'
+ ln -s showattr$(EXEEXT) '$@'
+
+scripts/%: scripts/%.subst
+ @mkdir -p $$(dirname '$@')
+ sed -e 's!@'PKGLIBDIR'@!$(pkglibdir)!g; \
+ s!@'SBINDIR'@!$(sbindir)!g; \
+ s!@'VSERVERDIR'@!$(vserverdir)!g' '$<' >'$@.tmp'
+ @-chmod --reference='$<' '$@.tmp'
+ @-rm -f '$@'
+ mv '$@.tmp' '$@'
+ @chmod a-w '$@'
+
+sysv/%: sysv/%.subst
+ @mkdir -p $$(dirname '$@')
+ sed -e 's!/usr/lib/util-vserver!$(pkglibdir)!g; \
+ s!^USR_SBIN=/usr/sbin$$!USR_SBIN=$(sbindir)!g; \
+ s!^VROOTDIR=/vservers$$!VROOTDIR=$(vserverdir)!g; \
+ ' '$<' >'$@.tmp'
+ if cmp -s '$<' '$@.tmp'; then \
+ cp -p '$<' '$@'; \
+ else \
+ mv -f '$@.tmp' '$@'; \
+ fi
+ -rm -f '$@.tmp'
+ @chmod a-w '$@'
+
+@ENSC_ENABLE_LINUXCONF_TRUE@linuxconf/%: linuxconf/%.subst
+@ENSC_ENABLE_LINUXCONF_TRUE@ @mkdir -p $$(dirname '$@')
+@ENSC_ENABLE_LINUXCONF_TRUE@ sed -e 's!@'PKGLIBDIR'@!$(pkglibdir)!g; \
+@ENSC_ENABLE_LINUXCONF_TRUE@ s!@'SBINDIR'@!$(sbindir)!g' '$<' >'$@.tmp'
+@ENSC_ENABLE_LINUXCONF_TRUE@ @-chmod --reference='$<' '$@.tmp'
+@ENSC_ENABLE_LINUXCONF_TRUE@ @-rm -f '$@'
+@ENSC_ENABLE_LINUXCONF_TRUE@ mv '$@.tmp' '$@'
+@ENSC_ENABLE_LINUXCONF_TRUE@ @chmod a-w '$@'
+
+gpgsig:
+ gpg --armor --detach-sign $(distdir).tar.bz2
+
+$(BUILT_SOURCES) config.h: .X$(subst /,_,$(sysconfdir))-up-to-date
+
+distclean-local: distclean-uptodate
+
+distclean-uptodate:
+ @rm -f .*-up-to-date
+
+.%-up-to-date:
+ @rm -f .*-up-to-date
+ @touch -t 197001020000 '$@'
+ @$(MAKE) -s clean $(BUILT_SOURCES)
+
+ChangeLog.sed:
+ test "$(srcdir)" != "."
+
+@HAVE_CVS2CL_TRUE@ChangeLog: Makefile
+@HAVE_CVS2CL_TRUE@ if test "$(srcdir)" = "." -a -d CVS; then \
+@HAVE_CVS2CL_TRUE@ $(CVS2CL) $(CVS2CL_ALLFLAGS) -f $@; \
+@HAVE_CVS2CL_TRUE@ fi
+@HAVE_CVS2CL_FALSE@@HAVE_RCS2LOG_TRUE@ChangeLog: ChangeLog.sed Makefile
+@HAVE_CVS2CL_FALSE@@HAVE_RCS2LOG_TRUE@ if test "$(srcdir)" = "." -a -d CVS; then \
+@HAVE_CVS2CL_FALSE@@HAVE_RCS2LOG_TRUE@ $(RCS2LOG) -l 0 -c /dev/stdout | sed -f $< >$@; \
+@HAVE_CVS2CL_FALSE@@HAVE_RCS2LOG_TRUE@ fi
+
+.PHONY: ChangeLog
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
--- /dev/null
+Version 0.29
+============
+
+ - further compilation fixes
+
+ - adapted the 'vserver ... build' command to the new barrier
+ mechanism
+
+
+
+Version 0.28
+============
+
+ - BUGFIX: fixed context creation when both fakeinit-flag and a
+ static context is wanted; previous versions ignored the fakeinit
+ flag in this situation
+
+ - BUGFIX: vserver-copy: autodetect mktemp/tempfile (reported by
+ DUCLOS Andre)
+
+ - FEATURE: allow to override start/stop commands of vservers
+ (patch by Erik Smit)
+
+ - BUGFIX: call 'chkconfig' to fix initscripts *after* generating
+ the configuration (reported by DUCLOS Andre)
+
+ - call programs with 'exec' on vserver's 'suexec' command (patch
+ by Alec Thomas)
+
+ - improved e2fsprogs header detection
+
+ - API-CHANGE: removed argument from vc_get_version() since the
+ only supported category is VC_CAT_COMPAT
+
+
+Version 0.27
+============
+
+ - added new 'vkill' implementation which uses the syscall from
+ vserver 1.1.6+.
+
+ - BUGFIX: fixed typo in vc_get_version() wrapper which caused an
+ infinite recursive call of this function; this should not have
+ affected any userspace program
+
+ - BUGFIX: 'vps' accepts multiple arguments now (from Debian patch)
+
+ - vc_ctx_kill() was added
+
+ - chrootsafe() code was removed since such a functionality seems
+ to be impossible
+
+ - use 'vserver' instead of 'virtual_context' as the syscall name;
+ this will fix problems with architectures where the syscall is not
+ at #273.
+
+ - BUGFIX: fixed '--enable-apis' ./configure option; formerly, only
+ 'ALL' or none were possible
+
+ - moved some old, unused programs/scripts into a seperate 'legacy'/
+ directory
+
+ - BUGFIX: /dev/pts will be mounted with correct options now
+
+ - added support for Slackware's init-method (thanks to Stephen
+ Pearce for the patch)
+
+ - API-CHANGE: followed kernel patches and renamed 'ctx_t' datatype
+ to 'xid_t'.
+
+
+Version 0.26
+============
+
+ - BUGFIX: uninitialized variables in 'ifspec' were fixed and
+ error-messages will be given out when ioctl() on the requested
+ interface fails (thanks to Herbert Poetzl)
+
+ - BUGFIX: fixed vc_get_rlimit_mask() to return the queried
+ values. This step was missing in 0.25 which returned the
+ error-code only.
+
+ - use the shipped 'virtual.h' header on default instead of the
+ kernel version. The old Behavior can be restored with the
+ '--disable-internal-headers' ./configure option
+
+
+Version 0.25
+============
+
+ - BUGFIX: this version fixes handling of ctx >= 32768
+
+ - experimental support for new resource-limit syscall was add
+ (vserver >= 1.1.3); the new 'vlimit' tool replaces 'setctxlimit'
+
+ - some man-pages were added and init-scripts improved (taken from
+ Debian patches provided by Sam Vilain)
+
+ - basic Gentoo support was added to the 'vserver' script (thanks to
+ "Allen D. Parker II")
+
+ - compilation fixes for kernel 2.6 headers
+
+ - set mode/owner of /var/run/utmp (owner is customizable through
+ $UTMP_GROUP)
+
+
+Version 0.24
+============
+
+ - updated to new syscall API (patch c17h and later)
+
+ - revived copy-all-mode for 'vserver ... build' (can be disabled
+ with $UTIL_VSERVER_AVOID_COPY)
+
+ - use '-HS' ulimit switch for newly created vservers
+
+ - added QUOTACTL capability, removed OPENDEV capability
+
+ - location of vservers-rootdir can now be configured through a
+ '--with-vrootdir' configure switch; it defaults still to
+ '/vservers'
+
+ - build of 'newvserver' linuxconf-module is conditionalized since
+ it is unsupported and will be dropped in future versions. To
+ enable it. call './configure' with '--enable-linuxconf'.
+
+
+version 0.23.6
+==============
+
+ - fixed '--level' option on 'vserver ... chkconfig'
--- /dev/null
+Build-Requirements:
+
+ * at least gcc-2.95 (C and C++ frontends)
+
+ * when using 2.6 kernel-headers, the 'e2fsprogs' headers are
+ required. RHL/Fedora Core ships them in the 'e2fsprogs-devel'
+ package, Mandrake in 'libext2fs2-devel'.
+
+ Using these headers with kernel 2.4 will not hurt and can prevent
+ problems, so they are strongly recommended.
--- /dev/null
+I want to thank
+
+Jacques Gelinas <jack@solucorp.qc.ca>,
+ who wrote and maintains the 'vserver' package on which util-vserver
+ is based on
+
+Sam Vilain,
+ for providing man-pages and patches used in the Debian package
+
+
+all the other people, who contributed to the original 'vserver' package
--- /dev/null
+# generated automatically by aclocal 1.8.2 -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
+# Free Software Foundation, Inc.
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+# -*- Autoconf -*-
+# Copyright (C) 2002, 2003 Free Software Foundation, Inc.
+# Generated from amversion.in; do not edit by hand.
+
+# 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, 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., 59 Temple Place - Suite 330, Boston, MA
+
+# AM_AUTOMAKE_VERSION(VERSION)
+# ----------------------------
+# Automake X.Y traces this macro to ensure aclocal.m4 has been
+# generated from the m4 files accompanying Automake X.Y.
+AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version="1.8"])
+
+# AM_SET_CURRENT_AUTOMAKE_VERSION
+# -------------------------------
+# Call AM_AUTOMAKE_VERSION so it can be traced.
+# This function is AC_REQUIREd by AC_INIT_AUTOMAKE.
+AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
+ [AM_AUTOMAKE_VERSION([1.8.2])])
+
+# AM_AUX_DIR_EXPAND
+
+# Copyright (C) 2001, 2003 Free Software Foundation, Inc.
+
+# 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, 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., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
+# $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to
+# `$srcdir', `$srcdir/..', or `$srcdir/../..'.
+#
+# Of course, Automake must honor this variable whenever it calls a
+# tool from the auxiliary directory. The problem is that $srcdir (and
+# therefore $ac_aux_dir as well) can be either absolute or relative,
+# depending on how configure is run. This is pretty annoying, since
+# it makes $ac_aux_dir quite unusable in subdirectories: in the top
+# source directory, any form will work fine, but in subdirectories a
+# relative path needs to be adjusted first.
+#
+# $ac_aux_dir/missing
+# fails when called from a subdirectory if $ac_aux_dir is relative
+# $top_srcdir/$ac_aux_dir/missing
+# fails if $ac_aux_dir is absolute,
+# fails when called from a subdirectory in a VPATH build with
+# a relative $ac_aux_dir
+#
+# The reason of the latter failure is that $top_srcdir and $ac_aux_dir
+# are both prefixed by $srcdir. In an in-source build this is usually
+# harmless because $srcdir is `.', but things will broke when you
+# start a VPATH build or use an absolute $srcdir.
+#
+# So we could use something similar to $top_srcdir/$ac_aux_dir/missing,
+# iff we strip the leading $srcdir from $ac_aux_dir. That would be:
+# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"`
+# and then we would define $MISSING as
+# MISSING="\${SHELL} $am_aux_dir/missing"
+# This will work as long as MISSING is not called from configure, because
+# unfortunately $(top_srcdir) has no meaning in configure.
+# However there are other variables, like CC, which are often used in
+# configure, and could therefore not use this "fixed" $ac_aux_dir.
+#
+# Another solution, used here, is to always expand $ac_aux_dir to an
+# absolute PATH. The drawback is that using absolute paths prevent a
+# configured tree to be moved without reconfiguration.
+
+AC_DEFUN([AM_AUX_DIR_EXPAND],
+[dnl Rely on autoconf to set up CDPATH properly.
+AC_PREREQ([2.50])dnl
+# expand $ac_aux_dir to an absolute path
+am_aux_dir=`cd $ac_aux_dir && pwd`
+])
+
+# AM_CONDITIONAL -*- Autoconf -*-
+
+# Copyright (C) 1997, 2000, 2001, 2003 Free Software Foundation, Inc.
+
+# 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, 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., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+# serial 6
+
+# AM_CONDITIONAL(NAME, SHELL-CONDITION)
+# -------------------------------------
+# Define a conditional.
+AC_DEFUN([AM_CONDITIONAL],
+[AC_PREREQ(2.52)dnl
+ ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])],
+ [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
+AC_SUBST([$1_TRUE])
+AC_SUBST([$1_FALSE])
+if $2; then
+ $1_TRUE=
+ $1_FALSE='#'
+else
+ $1_TRUE='#'
+ $1_FALSE=
+fi
+AC_CONFIG_COMMANDS_PRE(
+[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then
+ AC_MSG_ERROR([conditional "$1" was never defined.
+Usually this means the macro was only invoked conditionally.])
+fi])])
+
+# serial 6 -*- Autoconf -*-
+
+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004
+# Free Software Foundation, Inc.
+
+# 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, 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., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+
+# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be
+# written in clear, in which case automake, when reading aclocal.m4,
+# will think it sees a *use*, and therefore will trigger all it's
+# C support machinery. Also note that it means that autoscan, seeing
+# CC etc. in the Makefile, will ask for an AC_PROG_CC use...
+
+
+
+# _AM_DEPENDENCIES(NAME)
+# ----------------------
+# See how the compiler implements dependency checking.
+# NAME is "CC", "CXX", "GCJ", or "OBJC".
+# We try a few techniques and use that to set a single cache variable.
+#
+# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was
+# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular
+# dependency, and given that the user is not expected to run this macro,
+# just rely on AC_PROG_CC.
+AC_DEFUN([_AM_DEPENDENCIES],
+[AC_REQUIRE([AM_SET_DEPDIR])dnl
+AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl
+AC_REQUIRE([AM_MAKE_INCLUDE])dnl
+AC_REQUIRE([AM_DEP_TRACK])dnl
+
+ifelse([$1], CC, [depcc="$CC" am_compiler_list=],
+ [$1], CXX, [depcc="$CXX" am_compiler_list=],
+ [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'],
+ [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'],
+ [depcc="$$1" am_compiler_list=])
+
+AC_CACHE_CHECK([dependency style of $depcc],
+ [am_cv_$1_dependencies_compiler_type],
+[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+ # We make a subdir and do the tests there. Otherwise we can end up
+ # making bogus files that we don't know about and never remove. For
+ # instance it was reported that on HP-UX the gcc test will end up
+ # making a dummy file named `D' -- because `-MD' means `put the output
+ # in D'.
+ mkdir conftest.dir
+ # Copy depcomp to subdir because otherwise we won't find it if we're
+ # using a relative directory.
+ cp "$am_depcomp" conftest.dir
+ cd conftest.dir
+ # We will build objects and dependencies in a subdirectory because
+ # it helps to detect inapplicable dependency modes. For instance
+ # both Tru64's cc and ICC support -MD to output dependencies as a
+ # side effect of compilation, but ICC will put the dependencies in
+ # the current directory while Tru64 will put them in the object
+ # directory.
+ mkdir sub
+
+ am_cv_$1_dependencies_compiler_type=none
+ if test "$am_compiler_list" = ""; then
+ am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp`
+ fi
+ for depmode in $am_compiler_list; do
+ # Setup a source with many dependencies, because some compilers
+ # like to wrap large dependency lists on column 80 (with \), and
+ # we should not choose a depcomp mode which is confused by this.
+ #
+ # We need to recreate these files for each test, as the compiler may
+ # overwrite some of them when testing with obscure command lines.
+ # This happens at least with the AIX C compiler.
+ : > sub/conftest.c
+ for i in 1 2 3 4 5 6; do
+ echo '#include "conftst'$i'.h"' >> sub/conftest.c
+ : > sub/conftst$i.h
+ done
+ echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+ case $depmode in
+ nosideeffect)
+ # after this tag, mechanisms are not by side-effect, so they'll
+ # only be used when explicitly requested
+ if test "x$enable_dependency_tracking" = xyes; then
+ continue
+ else
+ break
+ fi
+ ;;
+ none) break ;;
+ esac
+ # We check with `-c' and `-o' for the sake of the "dashmstdout"
+ # mode. It turns out that the SunPro C++ compiler does not properly
+ # handle `-M -o', and we need to detect this.
+ if depmode=$depmode \
+ source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \
+ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+ $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \
+ >/dev/null 2>conftest.err &&
+ grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 &&
+ ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+ # icc doesn't choke on unknown options, it will just issue warnings
+ # (even with -Werror). So we grep stderr for any message
+ # that says an option was ignored.
+ if grep 'ignoring option' conftest.err >/dev/null 2>&1; then :; else
+ am_cv_$1_dependencies_compiler_type=$depmode
+ break
+ fi
+ fi
+ done
+
+ cd ..
+ rm -rf conftest.dir
+else
+ am_cv_$1_dependencies_compiler_type=none
+fi
+])
+AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type])
+AM_CONDITIONAL([am__fastdep$1], [
+ test "x$enable_dependency_tracking" != xno \
+ && test "$am_cv_$1_dependencies_compiler_type" = gcc3])
+])
+
+
+# AM_SET_DEPDIR
+# -------------
+# Choose a directory name for dependency files.
+# This macro is AC_REQUIREd in _AM_DEPENDENCIES
+AC_DEFUN([AM_SET_DEPDIR],
+[AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl
+])
+
+
+# AM_DEP_TRACK
+# ------------
+AC_DEFUN([AM_DEP_TRACK],
+[AC_ARG_ENABLE(dependency-tracking,
+[ --disable-dependency-tracking speeds up one-time build
+ --enable-dependency-tracking do not reject slow dependency extractors])
+if test "x$enable_dependency_tracking" != xno; then
+ am_depcomp="$ac_aux_dir/depcomp"
+ AMDEPBACKSLASH='\'
+fi
+AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
+AC_SUBST([AMDEPBACKSLASH])
+])
+
+# Generate code to set up dependency tracking. -*- Autoconf -*-
+
+# Copyright (C) 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
+
+# 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, 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., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+#serial 2
+
+# _AM_OUTPUT_DEPENDENCY_COMMANDS
+# ------------------------------
+AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
+[for mf in $CONFIG_FILES; do
+ # Strip MF so we end up with the name of the file.
+ mf=`echo "$mf" | sed -e 's/:.*$//'`
+ # Check whether this is an Automake generated Makefile or not.
+ # We used to match only the files named `Makefile.in', but
+ # some people rename them; so instead we look at the file content.
+ # Grep'ing the first line is not enough: some people post-process
+ # each Makefile.in and add a new line on top of each file to say so.
+ # So let's grep whole file.
+ if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then
+ dirpart=`AS_DIRNAME("$mf")`
+ else
+ continue
+ fi
+ grep '^DEP_FILES *= *[[^ @%:@]]' < "$mf" > /dev/null || continue
+ # Extract the definition of DEP_FILES from the Makefile without
+ # running `make'.
+ DEPDIR=`sed -n -e '/^DEPDIR = / s///p' < "$mf"`
+ test -z "$DEPDIR" && continue
+ # When using ansi2knr, U may be empty or an underscore; expand it
+ U=`sed -n -e '/^U = / s///p' < "$mf"`
+ test -d "$dirpart/$DEPDIR" || mkdir "$dirpart/$DEPDIR"
+ # We invoke sed twice because it is the simplest approach to
+ # changing $(DEPDIR) to its actual value in the expansion.
+ for file in `sed -n -e '
+ /^DEP_FILES = .*\\\\$/ {
+ s/^DEP_FILES = //
+ :loop
+ s/\\\\$//
+ p
+ n
+ /\\\\$/ b loop
+ p
+ }
+ /^DEP_FILES = / s/^DEP_FILES = //p' < "$mf" | \
+ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
+ # Make sure the directory exists.
+ test -f "$dirpart/$file" && continue
+ fdir=`AS_DIRNAME(["$file"])`
+ AS_MKDIR_P([$dirpart/$fdir])
+ # echo "creating $dirpart/$file"
+ echo '# dummy' > "$dirpart/$file"
+ done
+done
+])# _AM_OUTPUT_DEPENDENCY_COMMANDS
+
+
+# AM_OUTPUT_DEPENDENCY_COMMANDS
+# -----------------------------
+# This macro should only be invoked once -- use via AC_REQUIRE.
+#
+# This code is only required when automatic dependency tracking
+# is enabled. FIXME. This creates each `.P' file that we will
+# need in order to bootstrap the dependency handling code.
+AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
+[AC_CONFIG_COMMANDS([depfiles],
+ [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS],
+ [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"])
+])
+
+# Do all the work for Automake. -*- Autoconf -*-
+
+# This macro actually does too much some checks are only needed if
+# your package does certain things. But this isn't really a big deal.
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
+# Free Software Foundation, Inc.
+
+# 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, 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., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+# serial 11
+
+# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
+# AM_INIT_AUTOMAKE([OPTIONS])
+# -----------------------------------------------
+# The call with PACKAGE and VERSION arguments is the old style
+# call (pre autoconf-2.50), which is being phased out. PACKAGE
+# and VERSION should now be passed to AC_INIT and removed from
+# the call to AM_INIT_AUTOMAKE.
+# We support both call styles for the transition. After
+# the next Automake release, Autoconf can make the AC_INIT
+# arguments mandatory, and then we can depend on a new Autoconf
+# release and drop the old call support.
+AC_DEFUN([AM_INIT_AUTOMAKE],
+[AC_PREREQ([2.58])dnl
+dnl Autoconf wants to disallow AM_ names. We explicitly allow
+dnl the ones we care about.
+m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
+AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl
+AC_REQUIRE([AC_PROG_INSTALL])dnl
+# test to see if srcdir already configured
+if test "`cd $srcdir && pwd`" != "`pwd`" &&
+ test -f $srcdir/config.status; then
+ AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
+fi
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+ if (cygpath --version) >/dev/null 2>/dev/null; then
+ CYGPATH_W='cygpath -w'
+ else
+ CYGPATH_W=echo
+ fi
+fi
+AC_SUBST([CYGPATH_W])
+
+# Define the identity of the package.
+dnl Distinguish between old-style and new-style calls.
+m4_ifval([$2],
+[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
+ AC_SUBST([PACKAGE], [$1])dnl
+ AC_SUBST([VERSION], [$2])],
+[_AM_SET_OPTIONS([$1])dnl
+ AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl
+ AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl
+
+_AM_IF_OPTION([no-define],,
+[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
+ AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl
+
+# Some tools Automake needs.
+AC_REQUIRE([AM_SANITY_CHECK])dnl
+AC_REQUIRE([AC_ARG_PROGRAM])dnl
+AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version})
+AM_MISSING_PROG(AUTOCONF, autoconf)
+AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version})
+AM_MISSING_PROG(AUTOHEADER, autoheader)
+AM_MISSING_PROG(MAKEINFO, makeinfo)
+AM_MISSING_PROG(AMTAR, tar)
+AM_PROG_INSTALL_SH
+AM_PROG_INSTALL_STRIP
+AC_REQUIRE([AM_PROG_MKDIR_P])dnl
+# We need awk for the "check" target. The system "awk" is bad on
+# some platforms.
+AC_REQUIRE([AC_PROG_AWK])dnl
+AC_REQUIRE([AC_PROG_MAKE_SET])dnl
+AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+
+_AM_IF_OPTION([no-dependencies],,
+[AC_PROVIDE_IFELSE([AC_PROG_CC],
+ [_AM_DEPENDENCIES(CC)],
+ [define([AC_PROG_CC],
+ defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_CXX],
+ [_AM_DEPENDENCIES(CXX)],
+ [define([AC_PROG_CXX],
+ defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl
+])
+])
+
+
+# When config.status generates a header, we must update the stamp-h file.
+# This file resides in the same directory as the config header
+# that is generated. The stamp files are numbered to have different names.
+
+# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the
+# loop where config.status creates the headers, so we can generate
+# our stamp files there.
+AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK],
+[# Compute $1's index in $config_headers.
+_am_stamp_count=1
+for _am_header in $config_headers :; do
+ case $_am_header in
+ $1 | $1:* )
+ break ;;
+ * )
+ _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+ esac
+done
+echo "timestamp for $1" >`AS_DIRNAME([$1])`/stamp-h[]$_am_stamp_count])
+
+# AM_PROG_INSTALL_SH
+# ------------------
+# Define $install_sh.
+
+# Copyright (C) 2001, 2003 Free Software Foundation, Inc.
+
+# 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, 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., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+AC_DEFUN([AM_PROG_INSTALL_SH],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+install_sh=${install_sh-"$am_aux_dir/install-sh"}
+AC_SUBST(install_sh)])
+
+# -*- Autoconf -*-
+# Copyright (C) 2003 Free Software Foundation, Inc.
+
+# 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, 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., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+# serial 1
+
+# Check whether the underlying file-system supports filenames
+# with a leading dot. For instance MS-DOS doesn't.
+AC_DEFUN([AM_SET_LEADING_DOT],
+[rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+ am__leading_dot=.
+else
+ am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+AC_SUBST([am__leading_dot])])
+
+# Add --enable-maintainer-mode option to configure.
+# From Jim Meyering
+
+# Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004
+# Free Software Foundation, Inc.
+
+# 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, 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., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+# serial 3
+
+AC_DEFUN([AM_MAINTAINER_MODE],
+[AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles])
+ dnl maintainer-mode is disabled by default
+ AC_ARG_ENABLE(maintainer-mode,
+[ --enable-maintainer-mode enable make rules and dependencies not useful
+ (and sometimes confusing) to the casual installer],
+ USE_MAINTAINER_MODE=$enableval,
+ USE_MAINTAINER_MODE=no)
+ AC_MSG_RESULT([$USE_MAINTAINER_MODE])
+ AM_CONDITIONAL(MAINTAINER_MODE, [test $USE_MAINTAINER_MODE = yes])
+ MAINT=$MAINTAINER_MODE_TRUE
+ AC_SUBST(MAINT)dnl
+]
+)
+
+AU_DEFUN([jm_MAINTAINER_MODE], [AM_MAINTAINER_MODE])
+
+# Check to see how 'make' treats includes. -*- Autoconf -*-
+
+# Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
+
+# 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, 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., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+# serial 2
+
+# AM_MAKE_INCLUDE()
+# -----------------
+# Check to see how make treats includes.
+AC_DEFUN([AM_MAKE_INCLUDE],
+[am_make=${MAKE-make}
+cat > confinc << 'END'
+am__doit:
+ @echo done
+.PHONY: am__doit
+END
+# If we don't find an include directive, just comment out the code.
+AC_MSG_CHECKING([for style of include used by $am_make])
+am__include="#"
+am__quote=
+_am_result=none
+# First try GNU make style include.
+echo "include confinc" > confmf
+# We grep out `Entering directory' and `Leaving directory'
+# messages which can occur if `w' ends up in MAKEFLAGS.
+# In particular we don't look at `^make:' because GNU make might
+# be invoked under some other name (usually "gmake"), in which
+# case it prints its new name instead of `make'.
+if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then
+ am__include=include
+ am__quote=
+ _am_result=GNU
+fi
+# Now try BSD make style include.
+if test "$am__include" = "#"; then
+ echo '.include "confinc"' > confmf
+ if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then
+ am__include=.include
+ am__quote="\""
+ _am_result=BSD
+ fi
+fi
+AC_SUBST([am__include])
+AC_SUBST([am__quote])
+AC_MSG_RESULT([$_am_result])
+rm -f confinc confmf
+])
+
+# serial 2
+
+# AM_PROG_CC_C_O
+# --------------
+# Like AC_PROG_CC_C_O, but changed for automake.
+
+# Copyright (C) 1999, 2000, 2001, 2003 Free Software Foundation, Inc.
+
+# 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, 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., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+AC_DEFUN([AM_PROG_CC_C_O],
+[AC_REQUIRE([AC_PROG_CC_C_O])dnl
+AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+# FIXME: we rely on the cache variable name because
+# there is no other way.
+set dummy $CC
+ac_cc=`echo $[2] | sed ['s/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/']`
+if eval "test \"`echo '$ac_cv_prog_cc_'${ac_cc}_c_o`\" != yes"; then
+ # Losing compiler, so override with the script.
+ # FIXME: It is wrong to rewrite CC.
+ # But if we don't then we get into trouble of one sort or another.
+ # A longer-term fix would be to have automake use am__CC in this case,
+ # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)"
+ CC="$am_aux_dir/compile $CC"
+fi
+])
+
+# -*- Autoconf -*-
+
+
+# Copyright (C) 1997, 1999, 2000, 2001, 2003 Free Software Foundation, Inc.
+
+# 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, 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., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+# serial 3
+
+# AM_MISSING_PROG(NAME, PROGRAM)
+# ------------------------------
+AC_DEFUN([AM_MISSING_PROG],
+[AC_REQUIRE([AM_MISSING_HAS_RUN])
+$1=${$1-"${am_missing_run}$2"}
+AC_SUBST($1)])
+
+
+# AM_MISSING_HAS_RUN
+# ------------------
+# Define MISSING if not defined so far and test if it supports --run.
+# If it does, set am_missing_run to use it, otherwise, to nothing.
+AC_DEFUN([AM_MISSING_HAS_RUN],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing"
+# Use eval to expand $SHELL
+if eval "$MISSING --run true"; then
+ am_missing_run="$MISSING --run "
+else
+ am_missing_run=
+ AC_MSG_WARN([`missing' script is too old or missing])
+fi
+])
+
+# AM_PROG_MKDIR_P
+# ---------------
+# Check whether `mkdir -p' is supported, fallback to mkinstalldirs otherwise.
+
+# Copyright (C) 2003, 2004 Free Software Foundation, Inc.
+
+# 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, 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., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+# Automake 1.8 used `mkdir -m 0755 -p --' to ensure that directories
+# created by `make install' are always world readable, even if the
+# installer happens to have an overly restrictive umask (e.g. 077).
+# This was a mistake. There are at least two reasons why we must not
+# use `-m 0755':
+# - it causes special bits like SGID to be ignored,
+# - it may be too restrictive (some setups expect 775 directories).
+#
+# Do not use -m 0755 and let people choose whatever they expect by
+# setting umask.
+AC_DEFUN([AM_PROG_MKDIR_P],
+[if mkdir -p -- . 2>/dev/null; then
+ # Keeping the `.' argument allows $(mkdir_p) to be used without
+ # argument. Indeed, we sometimes output rules like
+ # $(mkdir_p) $(somedir)
+ # where $(somedir) is conditionally defined.
+ # (`test -n '$(somedir)' && $(mkdir_p) $(somedir)' is a more
+ # expensive solution, as it forces Make to start a sub-shell.)
+ mkdir_p='mkdir -p -- .'
+else
+ # On NextStep and OpenStep, the `mkdir' command does not
+ # recognize any option. It will interpret all options as
+ # directories to create, and then abort because `.' already
+ # exists.
+ for d in ./-p ./--;
+ do
+ test -d $d && rmdir $d
+ done
+ # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists.
+ if test -f "$ac_aux_dir/mkinstalldirs"; then
+ mkdir_p='$(mkinstalldirs)'
+ else
+ mkdir_p='$(install_sh) -d'
+ fi
+fi
+AC_SUBST([mkdir_p])])
+
+# Helper functions for option handling. -*- Autoconf -*-
+
+# Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
+
+# 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, 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., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+# serial 2
+
+# _AM_MANGLE_OPTION(NAME)
+# -----------------------
+AC_DEFUN([_AM_MANGLE_OPTION],
+[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])
+
+# _AM_SET_OPTION(NAME)
+# ------------------------------
+# Set option NAME. Presently that only means defining a flag for this option.
+AC_DEFUN([_AM_SET_OPTION],
+[m4_define(_AM_MANGLE_OPTION([$1]), 1)])
+
+# _AM_SET_OPTIONS(OPTIONS)
+# ----------------------------------
+# OPTIONS is a space-separated list of Automake options.
+AC_DEFUN([_AM_SET_OPTIONS],
+[AC_FOREACH([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
+
+# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET])
+# -------------------------------------------
+# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
+AC_DEFUN([_AM_IF_OPTION],
+[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
+
+#
+# Check to make sure that the build environment is sane.
+#
+
+# Copyright (C) 1996, 1997, 2000, 2001, 2003 Free Software Foundation, Inc.
+
+# 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, 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., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+# serial 3
+
+# AM_SANITY_CHECK
+# ---------------
+AC_DEFUN([AM_SANITY_CHECK],
+[AC_MSG_CHECKING([whether build environment is sane])
+# Just in case
+sleep 1
+echo timestamp > conftest.file
+# Do `set' in a subshell so we don't clobber the current shell's
+# arguments. Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+ set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null`
+ if test "$[*]" = "X"; then
+ # -L didn't work.
+ set X `ls -t $srcdir/configure conftest.file`
+ fi
+ rm -f conftest.file
+ if test "$[*]" != "X $srcdir/configure conftest.file" \
+ && test "$[*]" != "X conftest.file $srcdir/configure"; then
+
+ # If neither matched, then we have a broken ls. This can happen
+ # if, for instance, CONFIG_SHELL is bash and it inherits a
+ # broken ls alias from the environment. This has actually
+ # happened. Such a system could not be considered "sane".
+ AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken
+alias in your environment])
+ fi
+
+ test "$[2]" = conftest.file
+ )
+then
+ # Ok.
+ :
+else
+ AC_MSG_ERROR([newly created file is older than distributed files!
+Check your system clock])
+fi
+AC_MSG_RESULT(yes)])
+
+# AM_PROG_INSTALL_STRIP
+
+# Copyright (C) 2001, 2003 Free Software Foundation, Inc.
+
+# 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, 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., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+# One issue with vendor `install' (even GNU) is that you can't
+# specify the program used to strip binaries. This is especially
+# annoying in cross-compiling environments, where the build's strip
+# is unlikely to handle the host's binaries.
+# Fortunately install-sh will honor a STRIPPROG variable, so we
+# always use install-sh in `make install-strip', and initialize
+# STRIPPROG with the value of the STRIP variable (set by the user).
+AC_DEFUN([AM_PROG_INSTALL_STRIP],
+[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
+# Installed binaries are usually stripped using `strip' when the user
+# run `make install-strip'. However `strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the `STRIP' environment variable to overrule this program.
+dnl Don't test for $cross_compiling = yes, because it might be `maybe'.
+if test "$cross_compiling" != no; then
+ AC_CHECK_TOOL([STRIP], [strip], :)
+fi
+INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s"
+AC_SUBST([INSTALL_STRIP_PROGRAM])])
+
+m4_include([m4/ensc_cflags.m4])
+m4_include([m4/ensc_changelog.m4])
+m4_include([m4/ensc_e2fscheck.m4])
+m4_include([m4/ensc_kerneldir.m4])
+m4_include([m4/ensc_syscall.m4])
+m4_include([m4/ensc_uv_vrootdir.m4])
--- /dev/null
+// $Id: compat.h,v 1.1.4.3 2003/12/30 13:47:56 ensc Exp $ --*- c++ -*--
+
+// Copyright (C) 2003 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+//
+// 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; version 2 of the License.
+//
+// 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+
+#ifndef H_UTIL_VSERVER_COMPAT_H
+#define H_UTIL_VSERVER_COMPAT_H
+
+#if defined(__GNUC__)
+# define UNUSED __attribute__((__unused__))
+# define NORETURN __attribute__((__noreturn__))
+# if __GNUC__ >= 3
+# define ALWAYSINLINE __attribute__((__always_inline__))
+# else
+# define ALWAYSINLINE
+# endif
+#else
+# define UNUSED
+# define NORETURN
+# define ALWAYSINLINE
+#endif
+
+#if !defined(HAVE_DECL_MS_MOVE) || !(HAVE_DECL_MS_MOVE)
+ // from <linux/fs.h>
+# define MS_MOVE 8192
+#endif
+
+#ifndef HAVE_XID_T
+#include <stdint.h>
+typedef uint32_t xid_t;
+#endif
+
+#endif // H_UTIL_VSERVER_COMPAT_H
--- /dev/null
+#! /bin/sh
+# Wrapper for compilers which do not understand `-c -o'.
+
+scriptversion=2003-11-09.00
+
+# Copyright (C) 1999, 2000, 2003 Free Software Foundation, Inc.
+# Written by Tom Tromey <tromey@cygnus.com>.
+#
+# 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, 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# This file is maintained in Automake, please report
+# bugs to <bug-automake@gnu.org> or send patches to
+# <automake-patches@gnu.org>.
+
+case $1 in
+ '')
+ echo "$0: No command. Try \`$0 --help' for more information." 1>&2
+ exit 1;
+ ;;
+ -h | --h*)
+ cat <<\EOF
+Usage: compile [--help] [--version] PROGRAM [ARGS]
+
+Wrapper for compilers which do not understand `-c -o'.
+Remove `-o dest.o' from ARGS, run PROGRAM with the remaining
+arguments, and rename the output as expected.
+
+If you are trying to build a whole package this is not the
+right script to run: please start by reading the file `INSTALL'.
+
+Report bugs to <bug-automake@gnu.org>.
+EOF
+ exit 0
+ ;;
+ -v | --v*)
+ echo "compile $scriptversion"
+ exit 0
+ ;;
+esac
+
+
+prog=$1
+shift
+
+ofile=
+cfile=
+args=
+while test $# -gt 0; do
+ case "$1" in
+ -o)
+ # configure might choose to run compile as `compile cc -o foo foo.c'.
+ # So we do something ugly here.
+ ofile=$2
+ shift
+ case "$ofile" in
+ *.o | *.obj)
+ ;;
+ *)
+ args="$args -o $ofile"
+ ofile=
+ ;;
+ esac
+ ;;
+ *.c)
+ cfile=$1
+ args="$args $1"
+ ;;
+ *)
+ args="$args $1"
+ ;;
+ esac
+ shift
+done
+
+if test -z "$ofile" || test -z "$cfile"; then
+ # If no `-o' option was seen then we might have been invoked from a
+ # pattern rule where we don't need one. That is ok -- this is a
+ # normal compilation that the losing compiler can handle. If no
+ # `.c' file was seen then we are probably linking. That is also
+ # ok.
+ exec "$prog" $args
+fi
+
+# Name of file we expect compiler to create.
+cofile=`echo $cfile | sed -e 's|^.*/||' -e 's/\.c$/.o/'`
+
+# Create the lock directory.
+# Note: use `[/.-]' here to ensure that we don't use the same name
+# that we are using for the .o file. Also, base the name on the expected
+# object file name, since that is what matters with a parallel build.
+lockdir=`echo $cofile | sed -e 's|[/.-]|_|g'`.d
+while true; do
+ if mkdir $lockdir > /dev/null 2>&1; then
+ break
+ fi
+ sleep 1
+done
+# FIXME: race condition here if user kills between mkdir and trap.
+trap "rmdir $lockdir; exit 1" 1 2 15
+
+# Run the compile.
+"$prog" $args
+status=$?
+
+if test -f "$cofile"; then
+ mv "$cofile" "$ofile"
+fi
+
+rmdir $lockdir
+exit $status
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-end: "$"
+# End:
--- /dev/null
+/* config.h.in. Generated from configure.ac by autoheader. */
+
+/* define when <ext2fs/ext2_fs.h> is usable */
+#undef ENSC_HAVE_EXT2FS_EXT2_FS_H
+
+/* define when <linux/ext2_fs.h> is usable */
+#undef ENSC_HAVE_LINUX_EXT2_FS_H
+
+/* Define to 1 when the fast syscall(2) invocation does not work */
+#undef ENSC_SYSCALL_TRADITIONAL
+
+/* Define to 1 if you have the declaration of `MS_MOVE', and to 0 if you
+ don't. */
+#undef HAVE_DECL_MS_MOVE
+
+/* Define to 1 if you have the <inttypes.h> header file. */
+#undef HAVE_INTTYPES_H
+
+/* Define to 1 if you have the <memory.h> header file. */
+#undef HAVE_MEMORY_H
+
+/* Define to 1 if you have the <stdint.h> header file. */
+#undef HAVE_STDINT_H
+
+/* Define to 1 if you have the <stdlib.h> header file. */
+#undef HAVE_STDLIB_H
+
+/* Define to 1 if you have the <strings.h> header file. */
+#undef HAVE_STRINGS_H
+
+/* Define to 1 if you have the <string.h> header file. */
+#undef HAVE_STRING_H
+
+/* Define to 1 if you have the <sys/stat.h> header file. */
+#undef HAVE_SYS_STAT_H
+
+/* Define to 1 if you have the <sys/types.h> header file. */
+#undef HAVE_SYS_TYPES_H
+
+/* Define to 1 if you have the <unistd.h> header file. */
+#undef HAVE_UNISTD_H
+
+/* Define to 1 if you have the `vserver' function. */
+#undef HAVE_VSERVER
+
+/* Define to 1 if the system has the type `xid_t'. */
+#undef HAVE_XID_T
+
+/* Define to 1 if your C compiler doesn't accept -c and -o together. */
+#undef NO_MINUS_C_MINUS_O
+
+/* Name of package */
+#undef PACKAGE
+
+/* Define to the address where bug reports for this package should be sent. */
+#undef PACKAGE_BUGREPORT
+
+/* Define to the full name of this package. */
+#undef PACKAGE_NAME
+
+/* Define to the full name and version of this package. */
+#undef PACKAGE_STRING
+
+/* Define to the one symbol short name of this package. */
+#undef PACKAGE_TARNAME
+
+/* Define to the version of this package. */
+#undef PACKAGE_VERSION
+
+/* Define to 1 if you have the ANSI C header files. */
+#undef STDC_HEADERS
+
+/* Enable support for compatibily syscall API */
+#undef VC_ENABLE_API_COMPAT
+
+/* Enable support for old, /proc parsing API */
+#undef VC_ENABLE_API_LEGACY
+
+/* Enable support for API of vserver 1.1.x */
+#undef VC_ENABLE_API_V11
+
+/* Version number of package */
+#undef VERSION
+
+
+#if defined(__pic__) && defined(__i386) && !defined(ENSC_SYSCALL_TRADITIONAL)
+# define ENSC_SYSCALL_TRADITIONAL 1
+#endif
--- /dev/null
+#! /bin/sh
+# Guess values for system-dependent variables and create Makefiles.
+# Generated by GNU Autoconf 2.59 for util-vserver 0.29.
+#
+# Report bugs to <enrico.scholz@informatik.tu-chemnitz.de>.
+#
+# Copyright (C) 2003 Free Software Foundation, Inc.
+# This configure script is free software; the Free Software Foundation
+# gives unlimited permission to copy, distribute and modify it.
+## --------------------- ##
+## M4sh Initialization. ##
+## --------------------- ##
+
+# Be Bourne compatible
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+ emulate sh
+ NULLCMD=:
+ # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '${1+"$@"}'='"$@"'
+elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
+ set -o posix
+fi
+DUALCASE=1; export DUALCASE # for MKS sh
+
+# Support unset when possible.
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+ as_unset=unset
+else
+ as_unset=false
+fi
+
+
+# Work around bugs in pre-3.0 UWIN ksh.
+$as_unset ENV MAIL MAILPATH
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+for as_var in \
+ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
+ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
+ LC_TELEPHONE LC_TIME
+do
+ if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
+ eval $as_var=C; export $as_var
+ else
+ $as_unset $as_var
+ fi
+done
+
+# Required to use basename.
+if expr a : '\(a\)' >/dev/null 2>&1; then
+ as_expr=expr
+else
+ as_expr=false
+fi
+
+if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then
+ as_basename=basename
+else
+ as_basename=false
+fi
+
+
+# Name of the executable.
+as_me=`$as_basename "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+ X"$0" : 'X\(//\)$' \| \
+ X"$0" : 'X\(/\)$' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X/"$0" |
+ sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; }
+ /^X\/\(\/\/\)$/{ s//\1/; q; }
+ /^X\/\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`
+
+
+# PATH needs CR, and LINENO needs CR and PATH.
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ echo "#! /bin/sh" >conf$$.sh
+ echo "exit 0" >>conf$$.sh
+ chmod +x conf$$.sh
+ if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+ PATH_SEPARATOR=';'
+ else
+ PATH_SEPARATOR=:
+ fi
+ rm -f conf$$.sh
+fi
+
+
+ as_lineno_1=$LINENO
+ as_lineno_2=$LINENO
+ as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+ test "x$as_lineno_1" != "x$as_lineno_2" &&
+ test "x$as_lineno_3" = "x$as_lineno_2" || {
+ # Find who we are. Look in the path if we contain no path at all
+ # relative or not.
+ case $0 in
+ *[\\/]* ) as_myself=$0 ;;
+ *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+done
+
+ ;;
+ esac
+ # We did not find ourselves, most probably we were run as `sh COMMAND'
+ # in which case we are not to be found in the path.
+ if test "x$as_myself" = x; then
+ as_myself=$0
+ fi
+ if test ! -f "$as_myself"; then
+ { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2
+ { (exit 1); exit 1; }; }
+ fi
+ case $CONFIG_SHELL in
+ '')
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for as_base in sh bash ksh sh5; do
+ case $as_dir in
+ /*)
+ if ("$as_dir/$as_base" -c '
+ as_lineno_1=$LINENO
+ as_lineno_2=$LINENO
+ as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+ test "x$as_lineno_1" != "x$as_lineno_2" &&
+ test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then
+ $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; }
+ $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; }
+ CONFIG_SHELL=$as_dir/$as_base
+ export CONFIG_SHELL
+ exec "$CONFIG_SHELL" "$0" ${1+"$@"}
+ fi;;
+ esac
+ done
+done
+;;
+ esac
+
+ # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
+ # uniformly replaced by the line number. The first 'sed' inserts a
+ # line-number line before each line; the second 'sed' does the real
+ # work. The second script uses 'N' to pair each line-number line
+ # with the numbered line, and appends trailing '-' during
+ # substitution so that $LINENO is not a special case at line end.
+ # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
+ # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-)
+ sed '=' <$as_myself |
+ sed '
+ N
+ s,$,-,
+ : loop
+ s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3,
+ t loop
+ s,-$,,
+ s,^['$as_cr_digits']*\n,,
+ ' >$as_me.lineno &&
+ chmod +x $as_me.lineno ||
+ { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
+ { (exit 1); exit 1; }; }
+
+ # Don't try to exec as it changes $[0], causing all sort of problems
+ # (the dirname of $[0] is not the place where we might find the
+ # original and so on. Autoconf is especially sensible to this).
+ . ./$as_me.lineno
+ # Exit status is that of the last command.
+ exit
+}
+
+
+case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
+ *c*,-n*) ECHO_N= ECHO_C='
+' ECHO_T=' ' ;;
+ *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;;
+ *) ECHO_N= ECHO_C='\c' ECHO_T= ;;
+esac
+
+if expr a : '\(a\)' >/dev/null 2>&1; then
+ as_expr=expr
+else
+ as_expr=false
+fi
+
+rm -f conf$$ conf$$.exe conf$$.file
+echo >conf$$.file
+if ln -s conf$$.file conf$$ 2>/dev/null; then
+ # We could just check for DJGPP; but this test a) works b) is more generic
+ # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
+ if test -f conf$$.exe; then
+ # Don't use ln at all; we don't have any links
+ as_ln_s='cp -p'
+ else
+ as_ln_s='ln -s'
+ fi
+elif ln conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s=ln
+else
+ as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.file
+
+if mkdir -p . 2>/dev/null; then
+ as_mkdir_p=:
+else
+ test -d ./-p && rmdir ./-p
+ as_mkdir_p=false
+fi
+
+as_executable_p="test -f"
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+# IFS
+# We need space, tab and new line, in precisely that order.
+as_nl='
+'
+IFS=" $as_nl"
+
+# CDPATH.
+$as_unset CDPATH
+
+
+# Name of the host.
+# hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
+# so uname gets run too.
+ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
+
+exec 6>&1
+
+#
+# Initializations.
+#
+ac_default_prefix=/usr/local
+ac_config_libobj_dir=.
+cross_compiling=no
+subdirs=
+MFLAGS=
+MAKEFLAGS=
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+# Maximum number of lines to put in a shell here document.
+# This variable seems obsolete. It should probably be removed, and
+# only ac_max_sed_lines should be used.
+: ${ac_max_here_lines=38}
+
+# Identity of this package.
+PACKAGE_NAME='util-vserver'
+PACKAGE_TARNAME='util-vserver'
+PACKAGE_VERSION='0.29'
+PACKAGE_STRING='util-vserver 0.29'
+PACKAGE_BUGREPORT='enrico.scholz@informatik.tu-chemnitz.de'
+
+ac_unique_file="src/capchroot.c"
+# Factoring default headers for most tests.
+ac_includes_default="\
+#include <stdio.h>
+#if HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#if HAVE_SYS_STAT_H
+# include <sys/stat.h>
+#endif
+#if STDC_HEADERS
+# include <stdlib.h>
+# include <stddef.h>
+#else
+# if HAVE_STDLIB_H
+# include <stdlib.h>
+# endif
+#endif
+#if HAVE_STRING_H
+# if !STDC_HEADERS && HAVE_MEMORY_H
+# include <memory.h>
+# endif
+# include <string.h>
+#endif
+#if HAVE_STRINGS_H
+# include <strings.h>
+#endif
+#if HAVE_INTTYPES_H
+# include <inttypes.h>
+#else
+# if HAVE_STDINT_H
+# include <stdint.h>
+# endif
+#endif
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#endif"
+
+ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO AMTAR install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT CXX CXXFLAGS LDFLAGS CPPFLAGS ac_ct_CXX EXEEXT OBJEXT DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CXXDEPMODE am__fastdepCXX_TRUE am__fastdepCXX_FALSE CC CFLAGS ac_ct_CC CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE LN_S RANLIB ac_ct_RANLIB kernelincludedir vserverdir CVS2CL_TAG CVS2CL HAVE_CVS2CL_TRUE HAVE_CVS2CL_FALSE RCS2LOG HAVE_RCS2LOG_TRUE HAVE_RCS2LOG_FALSE ENSC_ENABLE_LINUXCONF_TRUE ENSC_ENABLE_LINUXCONF_FALSE ENSC_ENABLE_INTERNAL_HEADERS_TRUE ENSC_ENABLE_INTERNAL_HEADERS_FALSE CXXCPP EGREP LIBOBJS LTLIBOBJS'
+ac_subst_files=''
+
+# Initialize some variables set by options.
+ac_init_help=
+ac_init_version=false
+# The variables have the same names as the options, with
+# dashes changed to underlines.
+cache_file=/dev/null
+exec_prefix=NONE
+no_create=
+no_recursion=
+prefix=NONE
+program_prefix=NONE
+program_suffix=NONE
+program_transform_name=s,x,x,
+silent=
+site=
+srcdir=
+verbose=
+x_includes=NONE
+x_libraries=NONE
+
+# Installation directory options.
+# These are left unexpanded so users can "make install exec_prefix=/foo"
+# and all the variables that are supposed to be based on exec_prefix
+# by default will actually change.
+# Use braces instead of parens because sh, perl, etc. also accept them.
+bindir='${exec_prefix}/bin'
+sbindir='${exec_prefix}/sbin'
+libexecdir='${exec_prefix}/libexec'
+datadir='${prefix}/share'
+sysconfdir='${prefix}/etc'
+sharedstatedir='${prefix}/com'
+localstatedir='${prefix}/var'
+libdir='${exec_prefix}/lib'
+includedir='${prefix}/include'
+oldincludedir='/usr/include'
+infodir='${prefix}/info'
+mandir='${prefix}/man'
+
+ac_prev=
+for ac_option
+do
+ # If the previous option needs an argument, assign it.
+ if test -n "$ac_prev"; then
+ eval "$ac_prev=\$ac_option"
+ ac_prev=
+ continue
+ fi
+
+ ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'`
+
+ # Accept the important Cygnus configure options, so we can diagnose typos.
+
+ case $ac_option in
+
+ -bindir | --bindir | --bindi | --bind | --bin | --bi)
+ ac_prev=bindir ;;
+ -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
+ bindir=$ac_optarg ;;
+
+ -build | --build | --buil | --bui | --bu)
+ ac_prev=build_alias ;;
+ -build=* | --build=* | --buil=* | --bui=* | --bu=*)
+ build_alias=$ac_optarg ;;
+
+ -cache-file | --cache-file | --cache-fil | --cache-fi \
+ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+ ac_prev=cache_file ;;
+ -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
+ cache_file=$ac_optarg ;;
+
+ --config-cache | -C)
+ cache_file=config.cache ;;
+
+ -datadir | --datadir | --datadi | --datad | --data | --dat | --da)
+ ac_prev=datadir ;;
+ -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \
+ | --da=*)
+ datadir=$ac_optarg ;;
+
+ -disable-* | --disable-*)
+ ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+ { echo "$as_me: error: invalid feature name: $ac_feature" >&2
+ { (exit 1); exit 1; }; }
+ ac_feature=`echo $ac_feature | sed 's/-/_/g'`
+ eval "enable_$ac_feature=no" ;;
+
+ -enable-* | --enable-*)
+ ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+ { echo "$as_me: error: invalid feature name: $ac_feature" >&2
+ { (exit 1); exit 1; }; }
+ ac_feature=`echo $ac_feature | sed 's/-/_/g'`
+ case $ac_option in
+ *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
+ *) ac_optarg=yes ;;
+ esac
+ eval "enable_$ac_feature='$ac_optarg'" ;;
+
+ -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
+ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
+ | --exec | --exe | --ex)
+ ac_prev=exec_prefix ;;
+ -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
+ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
+ | --exec=* | --exe=* | --ex=*)
+ exec_prefix=$ac_optarg ;;
+
+ -gas | --gas | --ga | --g)
+ # Obsolete; use --with-gas.
+ with_gas=yes ;;
+
+ -help | --help | --hel | --he | -h)
+ ac_init_help=long ;;
+ -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
+ ac_init_help=recursive ;;
+ -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
+ ac_init_help=short ;;
+
+ -host | --host | --hos | --ho)
+ ac_prev=host_alias ;;
+ -host=* | --host=* | --hos=* | --ho=*)
+ host_alias=$ac_optarg ;;
+
+ -includedir | --includedir | --includedi | --included | --include \
+ | --includ | --inclu | --incl | --inc)
+ ac_prev=includedir ;;
+ -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
+ | --includ=* | --inclu=* | --incl=* | --inc=*)
+ includedir=$ac_optarg ;;
+
+ -infodir | --infodir | --infodi | --infod | --info | --inf)
+ ac_prev=infodir ;;
+ -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
+ infodir=$ac_optarg ;;
+
+ -libdir | --libdir | --libdi | --libd)
+ ac_prev=libdir ;;
+ -libdir=* | --libdir=* | --libdi=* | --libd=*)
+ libdir=$ac_optarg ;;
+
+ -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
+ | --libexe | --libex | --libe)
+ ac_prev=libexecdir ;;
+ -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
+ | --libexe=* | --libex=* | --libe=*)
+ libexecdir=$ac_optarg ;;
+
+ -localstatedir | --localstatedir | --localstatedi | --localstated \
+ | --localstate | --localstat | --localsta | --localst \
+ | --locals | --local | --loca | --loc | --lo)
+ ac_prev=localstatedir ;;
+ -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
+ | --localstate=* | --localstat=* | --localsta=* | --localst=* \
+ | --locals=* | --local=* | --loca=* | --loc=* | --lo=*)
+ localstatedir=$ac_optarg ;;
+
+ -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
+ ac_prev=mandir ;;
+ -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
+ mandir=$ac_optarg ;;
+
+ -nfp | --nfp | --nf)
+ # Obsolete; use --without-fp.
+ with_fp=no ;;
+
+ -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+ | --no-cr | --no-c | -n)
+ no_create=yes ;;
+
+ -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
+ no_recursion=yes ;;
+
+ -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
+ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
+ | --oldin | --oldi | --old | --ol | --o)
+ ac_prev=oldincludedir ;;
+ -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
+ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
+ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
+ oldincludedir=$ac_optarg ;;
+
+ -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+ ac_prev=prefix ;;
+ -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+ prefix=$ac_optarg ;;
+
+ -program-prefix | --program-prefix | --program-prefi | --program-pref \
+ | --program-pre | --program-pr | --program-p)
+ ac_prev=program_prefix ;;
+ -program-prefix=* | --program-prefix=* | --program-prefi=* \
+ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
+ program_prefix=$ac_optarg ;;
+
+ -program-suffix | --program-suffix | --program-suffi | --program-suff \
+ | --program-suf | --program-su | --program-s)
+ ac_prev=program_suffix ;;
+ -program-suffix=* | --program-suffix=* | --program-suffi=* \
+ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
+ program_suffix=$ac_optarg ;;
+
+ -program-transform-name | --program-transform-name \
+ | --program-transform-nam | --program-transform-na \
+ | --program-transform-n | --program-transform- \
+ | --program-transform | --program-transfor \
+ | --program-transfo | --program-transf \
+ | --program-trans | --program-tran \
+ | --progr-tra | --program-tr | --program-t)
+ ac_prev=program_transform_name ;;
+ -program-transform-name=* | --program-transform-name=* \
+ | --program-transform-nam=* | --program-transform-na=* \
+ | --program-transform-n=* | --program-transform-=* \
+ | --program-transform=* | --program-transfor=* \
+ | --program-transfo=* | --program-transf=* \
+ | --program-trans=* | --program-tran=* \
+ | --progr-tra=* | --program-tr=* | --program-t=*)
+ program_transform_name=$ac_optarg ;;
+
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil)
+ silent=yes ;;
+
+ -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
+ ac_prev=sbindir ;;
+ -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
+ | --sbi=* | --sb=*)
+ sbindir=$ac_optarg ;;
+
+ -sharedstatedir | --sharedstatedir | --sharedstatedi \
+ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
+ | --sharedst | --shareds | --shared | --share | --shar \
+ | --sha | --sh)
+ ac_prev=sharedstatedir ;;
+ -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
+ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
+ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
+ | --sha=* | --sh=*)
+ sharedstatedir=$ac_optarg ;;
+
+ -site | --site | --sit)
+ ac_prev=site ;;
+ -site=* | --site=* | --sit=*)
+ site=$ac_optarg ;;
+
+ -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+ ac_prev=srcdir ;;
+ -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+ srcdir=$ac_optarg ;;
+
+ -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
+ | --syscon | --sysco | --sysc | --sys | --sy)
+ ac_prev=sysconfdir ;;
+ -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
+ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
+ sysconfdir=$ac_optarg ;;
+
+ -target | --target | --targe | --targ | --tar | --ta | --t)
+ ac_prev=target_alias ;;
+ -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
+ target_alias=$ac_optarg ;;
+
+ -v | -verbose | --verbose | --verbos | --verbo | --verb)
+ verbose=yes ;;
+
+ -version | --version | --versio | --versi | --vers | -V)
+ ac_init_version=: ;;
+
+ -with-* | --with-*)
+ ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+ { echo "$as_me: error: invalid package name: $ac_package" >&2
+ { (exit 1); exit 1; }; }
+ ac_package=`echo $ac_package| sed 's/-/_/g'`
+ case $ac_option in
+ *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
+ *) ac_optarg=yes ;;
+ esac
+ eval "with_$ac_package='$ac_optarg'" ;;
+
+ -without-* | --without-*)
+ ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+ { echo "$as_me: error: invalid package name: $ac_package" >&2
+ { (exit 1); exit 1; }; }
+ ac_package=`echo $ac_package | sed 's/-/_/g'`
+ eval "with_$ac_package=no" ;;
+
+ --x)
+ # Obsolete; use --with-x.
+ with_x=yes ;;
+
+ -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
+ | --x-incl | --x-inc | --x-in | --x-i)
+ ac_prev=x_includes ;;
+ -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
+ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
+ x_includes=$ac_optarg ;;
+
+ -x-libraries | --x-libraries | --x-librarie | --x-librari \
+ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
+ ac_prev=x_libraries ;;
+ -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
+ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
+ x_libraries=$ac_optarg ;;
+
+ -*) { echo "$as_me: error: unrecognized option: $ac_option
+Try \`$0 --help' for more information." >&2
+ { (exit 1); exit 1; }; }
+ ;;
+
+ *=*)
+ ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null &&
+ { echo "$as_me: error: invalid variable name: $ac_envvar" >&2
+ { (exit 1); exit 1; }; }
+ ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`
+ eval "$ac_envvar='$ac_optarg'"
+ export $ac_envvar ;;
+
+ *)
+ # FIXME: should be removed in autoconf 3.0.
+ echo "$as_me: WARNING: you should use --build, --host, --target" >&2
+ expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+ echo "$as_me: WARNING: invalid host type: $ac_option" >&2
+ : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
+ ;;
+
+ esac
+done
+
+if test -n "$ac_prev"; then
+ ac_option=--`echo $ac_prev | sed 's/_/-/g'`
+ { echo "$as_me: error: missing argument to $ac_option" >&2
+ { (exit 1); exit 1; }; }
+fi
+
+# Be sure to have absolute paths.
+for ac_var in exec_prefix prefix
+do
+ eval ac_val=$`echo $ac_var`
+ case $ac_val in
+ [\\/$]* | ?:[\\/]* | NONE | '' ) ;;
+ *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
+ { (exit 1); exit 1; }; };;
+ esac
+done
+
+# Be sure to have absolute paths.
+for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \
+ localstatedir libdir includedir oldincludedir infodir mandir
+do
+ eval ac_val=$`echo $ac_var`
+ case $ac_val in
+ [\\/$]* | ?:[\\/]* ) ;;
+ *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
+ { (exit 1); exit 1; }; };;
+ esac
+done
+
+# There might be people who depend on the old broken behavior: `$host'
+# used to hold the argument of --host etc.
+# FIXME: To remove some day.
+build=$build_alias
+host=$host_alias
+target=$target_alias
+
+# FIXME: To remove some day.
+if test "x$host_alias" != x; then
+ if test "x$build_alias" = x; then
+ cross_compiling=maybe
+ echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host.
+ If a cross compiler is detected then cross compile mode will be used." >&2
+ elif test "x$build_alias" != "x$host_alias"; then
+ cross_compiling=yes
+ fi
+fi
+
+ac_tool_prefix=
+test -n "$host_alias" && ac_tool_prefix=$host_alias-
+
+test "$silent" = yes && exec 6>/dev/null
+
+
+# Find the source files, if location was not specified.
+if test -z "$srcdir"; then
+ ac_srcdir_defaulted=yes
+ # Try the directory containing this script, then its parent.
+ ac_confdir=`(dirname "$0") 2>/dev/null ||
+$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$0" : 'X\(//\)[^/]' \| \
+ X"$0" : 'X\(//\)$' \| \
+ X"$0" : 'X\(/\)' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X"$0" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+ /^X\(\/\/\)$/{ s//\1/; q; }
+ /^X\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`
+ srcdir=$ac_confdir
+ if test ! -r $srcdir/$ac_unique_file; then
+ srcdir=..
+ fi
+else
+ ac_srcdir_defaulted=no
+fi
+if test ! -r $srcdir/$ac_unique_file; then
+ if test "$ac_srcdir_defaulted" = yes; then
+ { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2
+ { (exit 1); exit 1; }; }
+ else
+ { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2
+ { (exit 1); exit 1; }; }
+ fi
+fi
+(cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null ||
+ { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2
+ { (exit 1); exit 1; }; }
+srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'`
+ac_env_build_alias_set=${build_alias+set}
+ac_env_build_alias_value=$build_alias
+ac_cv_env_build_alias_set=${build_alias+set}
+ac_cv_env_build_alias_value=$build_alias
+ac_env_host_alias_set=${host_alias+set}
+ac_env_host_alias_value=$host_alias
+ac_cv_env_host_alias_set=${host_alias+set}
+ac_cv_env_host_alias_value=$host_alias
+ac_env_target_alias_set=${target_alias+set}
+ac_env_target_alias_value=$target_alias
+ac_cv_env_target_alias_set=${target_alias+set}
+ac_cv_env_target_alias_value=$target_alias
+ac_env_CXX_set=${CXX+set}
+ac_env_CXX_value=$CXX
+ac_cv_env_CXX_set=${CXX+set}
+ac_cv_env_CXX_value=$CXX
+ac_env_CXXFLAGS_set=${CXXFLAGS+set}
+ac_env_CXXFLAGS_value=$CXXFLAGS
+ac_cv_env_CXXFLAGS_set=${CXXFLAGS+set}
+ac_cv_env_CXXFLAGS_value=$CXXFLAGS
+ac_env_LDFLAGS_set=${LDFLAGS+set}
+ac_env_LDFLAGS_value=$LDFLAGS
+ac_cv_env_LDFLAGS_set=${LDFLAGS+set}
+ac_cv_env_LDFLAGS_value=$LDFLAGS
+ac_env_CPPFLAGS_set=${CPPFLAGS+set}
+ac_env_CPPFLAGS_value=$CPPFLAGS
+ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set}
+ac_cv_env_CPPFLAGS_value=$CPPFLAGS
+ac_env_CC_set=${CC+set}
+ac_env_CC_value=$CC
+ac_cv_env_CC_set=${CC+set}
+ac_cv_env_CC_value=$CC
+ac_env_CFLAGS_set=${CFLAGS+set}
+ac_env_CFLAGS_value=$CFLAGS
+ac_cv_env_CFLAGS_set=${CFLAGS+set}
+ac_cv_env_CFLAGS_value=$CFLAGS
+ac_env_CXXCPP_set=${CXXCPP+set}
+ac_env_CXXCPP_value=$CXXCPP
+ac_cv_env_CXXCPP_set=${CXXCPP+set}
+ac_cv_env_CXXCPP_value=$CXXCPP
+
+#
+# Report the --help message.
+#
+if test "$ac_init_help" = "long"; then
+ # Omit some internal or obsolete options to make the list less imposing.
+ # This message is too long to be a string in the A/UX 3.1 sh.
+ cat <<_ACEOF
+\`configure' configures util-vserver 0.29 to adapt to many kinds of systems.
+
+Usage: $0 [OPTION]... [VAR=VALUE]...
+
+To assign environment variables (e.g., CC, CFLAGS...), specify them as
+VAR=VALUE. See below for descriptions of some of the useful variables.
+
+Defaults for the options are specified in brackets.
+
+Configuration:
+ -h, --help display this help and exit
+ --help=short display options specific to this package
+ --help=recursive display the short help of all the included packages
+ -V, --version display version information and exit
+ -q, --quiet, --silent do not print \`checking...' messages
+ --cache-file=FILE cache test results in FILE [disabled]
+ -C, --config-cache alias for \`--cache-file=config.cache'
+ -n, --no-create do not create output files
+ --srcdir=DIR find the sources in DIR [configure dir or \`..']
+
+_ACEOF
+
+ cat <<_ACEOF
+Installation directories:
+ --prefix=PREFIX install architecture-independent files in PREFIX
+ [$ac_default_prefix]
+ --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
+ [PREFIX]
+
+By default, \`make install' will install all the files in
+\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify
+an installation prefix other than \`$ac_default_prefix' using \`--prefix',
+for instance \`--prefix=\$HOME'.
+
+For better control, use the options below.
+
+Fine tuning of the installation directories:
+ --bindir=DIR user executables [EPREFIX/bin]
+ --sbindir=DIR system admin executables [EPREFIX/sbin]
+ --libexecdir=DIR program executables [EPREFIX/libexec]
+ --datadir=DIR read-only architecture-independent data [PREFIX/share]
+ --sysconfdir=DIR read-only single-machine data [PREFIX/etc]
+ --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
+ --localstatedir=DIR modifiable single-machine data [PREFIX/var]
+ --libdir=DIR object code libraries [EPREFIX/lib]
+ --includedir=DIR C header files [PREFIX/include]
+ --oldincludedir=DIR C header files for non-gcc [/usr/include]
+ --infodir=DIR info documentation [PREFIX/info]
+ --mandir=DIR man documentation [PREFIX/man]
+_ACEOF
+
+ cat <<\_ACEOF
+
+Program names:
+ --program-prefix=PREFIX prepend PREFIX to installed program names
+ --program-suffix=SUFFIX append SUFFIX to installed program names
+ --program-transform-name=PROGRAM run sed PROGRAM on installed program names
+_ACEOF
+fi
+
+if test -n "$ac_init_help"; then
+ case $ac_init_help in
+ short | recursive ) echo "Configuration of util-vserver 0.29:";;
+ esac
+ cat <<\_ACEOF
+
+Optional Features:
+ --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
+ --enable-FEATURE[=ARG] include FEATURE [ARG=yes]
+ --enable-maintainer-mode enable make rules and dependencies not useful
+ (and sometimes confusing) to the casual installer
+ --disable-dependency-tracking speeds up one-time build
+ --enable-dependency-tracking do not reject slow dependency extractors
+ --enable-linuxconf enable 'newvserver' linuxconf module (default: no)
+ --disable-internal-headers
+ use vserver specific headers from the kernel instead
+ of the shipped versions (default: no)
+ --enable-apis=APIS enable support for the given apis; possible values
+ are: legacy,compat,v11,ALL (default: ALL)
+
+Optional Packages:
+ --with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
+ --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
+ --with-kerneldir=DIR assume kernelsources in DIR (default:
+ /lib/modules/<current>/build)
+ --with-vrootdir=DIR place vservers under DIR (default: /vservers)
+ --with-syscall=METHOD call syscall(2) with the specified METHOD; valid
+ values are 'fast', 'traditional' and 'auto'
+ (default: auto)
+
+Some influential environment variables:
+ CXX C++ compiler command
+ CXXFLAGS C++ compiler flags
+ LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a
+ nonstandard directory <lib dir>
+ CPPFLAGS C/C++ preprocessor flags, e.g. -I<include dir> if you have
+ headers in a nonstandard directory <include dir>
+ CC C compiler command
+ CFLAGS C compiler flags
+ CXXCPP C++ preprocessor
+
+Use these variables to override the choices made by `configure' or to help
+it to find libraries and programs with nonstandard names/locations.
+
+Report bugs to <enrico.scholz@informatik.tu-chemnitz.de>.
+_ACEOF
+fi
+
+if test "$ac_init_help" = "recursive"; then
+ # If there are subdirs, report their specific --help.
+ ac_popdir=`pwd`
+ for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
+ test -d $ac_dir || continue
+ ac_builddir=.
+
+if test "$ac_dir" != .; then
+ ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
+ # A "../" for each directory in $ac_dir_suffix.
+ ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
+else
+ ac_dir_suffix= ac_top_builddir=
+fi
+
+case $srcdir in
+ .) # No --srcdir option. We are building in place.
+ ac_srcdir=.
+ if test -z "$ac_top_builddir"; then
+ ac_top_srcdir=.
+ else
+ ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
+ fi ;;
+ [\\/]* | ?:[\\/]* ) # Absolute path.
+ ac_srcdir=$srcdir$ac_dir_suffix;
+ ac_top_srcdir=$srcdir ;;
+ *) # Relative path.
+ ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
+ ac_top_srcdir=$ac_top_builddir$srcdir ;;
+esac
+
+# Do not use `cd foo && pwd` to compute absolute paths, because
+# the directories may not exist.
+case `pwd` in
+.) ac_abs_builddir="$ac_dir";;
+*)
+ case "$ac_dir" in
+ .) ac_abs_builddir=`pwd`;;
+ [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
+ *) ac_abs_builddir=`pwd`/"$ac_dir";;
+ esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_builddir=${ac_top_builddir}.;;
+*)
+ case ${ac_top_builddir}. in
+ .) ac_abs_top_builddir=$ac_abs_builddir;;
+ [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
+ *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
+ esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_srcdir=$ac_srcdir;;
+*)
+ case $ac_srcdir in
+ .) ac_abs_srcdir=$ac_abs_builddir;;
+ [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
+ *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
+ esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_srcdir=$ac_top_srcdir;;
+*)
+ case $ac_top_srcdir in
+ .) ac_abs_top_srcdir=$ac_abs_builddir;;
+ [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
+ *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
+ esac;;
+esac
+
+ cd $ac_dir
+ # Check for guested configure; otherwise get Cygnus style configure.
+ if test -f $ac_srcdir/configure.gnu; then
+ echo
+ $SHELL $ac_srcdir/configure.gnu --help=recursive
+ elif test -f $ac_srcdir/configure; then
+ echo
+ $SHELL $ac_srcdir/configure --help=recursive
+ elif test -f $ac_srcdir/configure.ac ||
+ test -f $ac_srcdir/configure.in; then
+ echo
+ $ac_configure --help
+ else
+ echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
+ fi
+ cd $ac_popdir
+ done
+fi
+
+test -n "$ac_init_help" && exit 0
+if $ac_init_version; then
+ cat <<\_ACEOF
+util-vserver configure 0.29
+generated by GNU Autoconf 2.59
+
+Copyright (C) 2003 Free Software Foundation, Inc.
+This configure script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it.
+_ACEOF
+ exit 0
+fi
+exec 5>config.log
+cat >&5 <<_ACEOF
+This file contains any messages produced by compilers while
+running configure, to aid debugging if configure makes a mistake.
+
+It was created by util-vserver $as_me 0.29, which was
+generated by GNU Autoconf 2.59. Invocation command line was
+
+ $ $0 $@
+
+_ACEOF
+{
+cat <<_ASUNAME
+## --------- ##
+## Platform. ##
+## --------- ##
+
+hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
+/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown`
+
+/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown`
+/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
+hostinfo = `(hostinfo) 2>/dev/null || echo unknown`
+/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown`
+/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown`
+/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown`
+
+_ASUNAME
+
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ echo "PATH: $as_dir"
+done
+
+} >&5
+
+cat >&5 <<_ACEOF
+
+
+## ----------- ##
+## Core tests. ##
+## ----------- ##
+
+_ACEOF
+
+
+# Keep a trace of the command line.
+# Strip out --no-create and --no-recursion so they do not pile up.
+# Strip out --silent because we don't want to record it for future runs.
+# Also quote any args containing shell meta-characters.
+# Make two passes to allow for proper duplicate-argument suppression.
+ac_configure_args=
+ac_configure_args0=
+ac_configure_args1=
+ac_sep=
+ac_must_keep_next=false
+for ac_pass in 1 2
+do
+ for ac_arg
+ do
+ case $ac_arg in
+ -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil)
+ continue ;;
+ *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
+ ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ esac
+ case $ac_pass in
+ 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;;
+ 2)
+ ac_configure_args1="$ac_configure_args1 '$ac_arg'"
+ if test $ac_must_keep_next = true; then
+ ac_must_keep_next=false # Got value, back to normal.
+ else
+ case $ac_arg in
+ *=* | --config-cache | -C | -disable-* | --disable-* \
+ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
+ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
+ | -with-* | --with-* | -without-* | --without-* | --x)
+ case "$ac_configure_args0 " in
+ "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
+ esac
+ ;;
+ -* ) ac_must_keep_next=true ;;
+ esac
+ fi
+ ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'"
+ # Get rid of the leading space.
+ ac_sep=" "
+ ;;
+ esac
+ done
+done
+$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; }
+$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; }
+
+# When interrupted or exit'd, cleanup temporary files, and complete
+# config.log. We remove comments because anyway the quotes in there
+# would cause problems or look ugly.
+# WARNING: Be sure not to use single quotes in there, as some shells,
+# such as our DU 5.0 friend, will then `close' the trap.
+trap 'exit_status=$?
+ # Save into config.log some information that might help in debugging.
+ {
+ echo
+
+ cat <<\_ASBOX
+## ---------------- ##
+## Cache variables. ##
+## ---------------- ##
+_ASBOX
+ echo
+ # The following way of writing the cache mishandles newlines in values,
+{
+ (set) 2>&1 |
+ case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in
+ *ac_space=\ *)
+ sed -n \
+ "s/'"'"'/'"'"'\\\\'"'"''"'"'/g;
+ s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p"
+ ;;
+ *)
+ sed -n \
+ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
+ ;;
+ esac;
+}
+ echo
+
+ cat <<\_ASBOX
+## ----------------- ##
+## Output variables. ##
+## ----------------- ##
+_ASBOX
+ echo
+ for ac_var in $ac_subst_vars
+ do
+ eval ac_val=$`echo $ac_var`
+ echo "$ac_var='"'"'$ac_val'"'"'"
+ done | sort
+ echo
+
+ if test -n "$ac_subst_files"; then
+ cat <<\_ASBOX
+## ------------- ##
+## Output files. ##
+## ------------- ##
+_ASBOX
+ echo
+ for ac_var in $ac_subst_files
+ do
+ eval ac_val=$`echo $ac_var`
+ echo "$ac_var='"'"'$ac_val'"'"'"
+ done | sort
+ echo
+ fi
+
+ if test -s confdefs.h; then
+ cat <<\_ASBOX
+## ----------- ##
+## confdefs.h. ##
+## ----------- ##
+_ASBOX
+ echo
+ sed "/^$/d" confdefs.h | sort
+ echo
+ fi
+ test "$ac_signal" != 0 &&
+ echo "$as_me: caught signal $ac_signal"
+ echo "$as_me: exit $exit_status"
+ } >&5
+ rm -f core *.core &&
+ rm -rf conftest* confdefs* conf$$* $ac_clean_files &&
+ exit $exit_status
+ ' 0
+for ac_signal in 1 2 13 15; do
+ trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal
+done
+ac_signal=0
+
+# confdefs.h avoids OS command line length limits that DEFS can exceed.
+rm -rf conftest* confdefs.h
+# AIX cpp loses on an empty file, so make sure it contains at least a newline.
+echo >confdefs.h
+
+# Predefined preprocessor variables.
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_NAME "$PACKAGE_NAME"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_VERSION "$PACKAGE_VERSION"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_STRING "$PACKAGE_STRING"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
+_ACEOF
+
+
+# Let the site file select an alternate cache file if it wants to.
+# Prefer explicitly selected file to automatically selected ones.
+if test -z "$CONFIG_SITE"; then
+ if test "x$prefix" != xNONE; then
+ CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site"
+ else
+ CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
+ fi
+fi
+for ac_site_file in $CONFIG_SITE; do
+ if test -r "$ac_site_file"; then
+ { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5
+echo "$as_me: loading site script $ac_site_file" >&6;}
+ sed 's/^/| /' "$ac_site_file" >&5
+ . "$ac_site_file"
+ fi
+done
+
+if test -r "$cache_file"; then
+ # Some versions of bash will fail to source /dev/null (special
+ # files actually), so we avoid doing that.
+ if test -f "$cache_file"; then
+ { echo "$as_me:$LINENO: loading cache $cache_file" >&5
+echo "$as_me: loading cache $cache_file" >&6;}
+ case $cache_file in
+ [\\/]* | ?:[\\/]* ) . $cache_file;;
+ *) . ./$cache_file;;
+ esac
+ fi
+else
+ { echo "$as_me:$LINENO: creating cache $cache_file" >&5
+echo "$as_me: creating cache $cache_file" >&6;}
+ >$cache_file
+fi
+
+# Check that the precious variables saved in the cache have kept the same
+# value.
+ac_cache_corrupted=false
+for ac_var in `(set) 2>&1 |
+ sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do
+ eval ac_old_set=\$ac_cv_env_${ac_var}_set
+ eval ac_new_set=\$ac_env_${ac_var}_set
+ eval ac_old_val="\$ac_cv_env_${ac_var}_value"
+ eval ac_new_val="\$ac_env_${ac_var}_value"
+ case $ac_old_set,$ac_new_set in
+ set,)
+ { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
+echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
+ ac_cache_corrupted=: ;;
+ ,set)
+ { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5
+echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
+ ac_cache_corrupted=: ;;
+ ,);;
+ *)
+ if test "x$ac_old_val" != "x$ac_new_val"; then
+ { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5
+echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
+ { echo "$as_me:$LINENO: former value: $ac_old_val" >&5
+echo "$as_me: former value: $ac_old_val" >&2;}
+ { echo "$as_me:$LINENO: current value: $ac_new_val" >&5
+echo "$as_me: current value: $ac_new_val" >&2;}
+ ac_cache_corrupted=:
+ fi;;
+ esac
+ # Pass precious variables to config.status.
+ if test "$ac_new_set" = set; then
+ case $ac_new_val in
+ *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
+ ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
+ *) ac_arg=$ac_var=$ac_new_val ;;
+ esac
+ case " $ac_configure_args " in
+ *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy.
+ *) ac_configure_args="$ac_configure_args '$ac_arg'" ;;
+ esac
+ fi
+done
+if $ac_cache_corrupted; then
+ { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5
+echo "$as_me: error: changes in the environment can compromise the build" >&2;}
+ { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5
+echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ac_config_headers="$ac_config_headers config.h"
+
+
+am__api_version="1.8"
+ac_aux_dir=
+for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do
+ if test -f $ac_dir/install-sh; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/install-sh -c"
+ break
+ elif test -f $ac_dir/install.sh; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/install.sh -c"
+ break
+ elif test -f $ac_dir/shtool; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/shtool install -c"
+ break
+ fi
+done
+if test -z "$ac_aux_dir"; then
+ { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5
+echo "$as_me: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+ac_config_guess="$SHELL $ac_aux_dir/config.guess"
+ac_config_sub="$SHELL $ac_aux_dir/config.sub"
+ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure.
+
+# Find a good install program. We prefer a C program (faster),
+# so one script is as good as another. But avoid the broken or
+# incompatible versions:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AmigaOS /C/install, which installs bootblocks on floppy discs
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# OS/2's system install, which has a completely different semantic
+# ./install, which can be erroneously created by make from ./install.sh.
+echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5
+echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6
+if test -z "$INSTALL"; then
+if test "${ac_cv_path_install+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ # Account for people who put trailing slashes in PATH elements.
+case $as_dir/ in
+ ./ | .// | /cC/* | \
+ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+ ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \
+ /usr/ucb/* ) ;;
+ *)
+ # OSF1 and SCO ODT 3.0 have their own names for install.
+ # Don't use installbsd from OSF since it installs stuff as root
+ # by default.
+ for ac_prog in ginstall scoinst install; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
+ if test $ac_prog = install &&
+ grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+ # AIX install. It has an incompatible calling convention.
+ :
+ elif test $ac_prog = install &&
+ grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+ # program-specific install script used by HP pwplus--don't use.
+ :
+ else
+ ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+ break 3
+ fi
+ fi
+ done
+ done
+ ;;
+esac
+done
+
+
+fi
+ if test "${ac_cv_path_install+set}" = set; then
+ INSTALL=$ac_cv_path_install
+ else
+ # As a last resort, use the slow shell script. We don't cache a
+ # path for INSTALL within a source directory, because that will
+ # break other packages using the cache if that directory is
+ # removed, or if the path is relative.
+ INSTALL=$ac_install_sh
+ fi
+fi
+echo "$as_me:$LINENO: result: $INSTALL" >&5
+echo "${ECHO_T}$INSTALL" >&6
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+echo "$as_me:$LINENO: checking whether build environment is sane" >&5
+echo $ECHO_N "checking whether build environment is sane... $ECHO_C" >&6
+# Just in case
+sleep 1
+echo timestamp > conftest.file
+# Do `set' in a subshell so we don't clobber the current shell's
+# arguments. Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+ set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null`
+ if test "$*" = "X"; then
+ # -L didn't work.
+ set X `ls -t $srcdir/configure conftest.file`
+ fi
+ rm -f conftest.file
+ if test "$*" != "X $srcdir/configure conftest.file" \
+ && test "$*" != "X conftest.file $srcdir/configure"; then
+
+ # If neither matched, then we have a broken ls. This can happen
+ # if, for instance, CONFIG_SHELL is bash and it inherits a
+ # broken ls alias from the environment. This has actually
+ # happened. Such a system could not be considered "sane".
+ { { echo "$as_me:$LINENO: error: ls -t appears to fail. Make sure there is not a broken
+alias in your environment" >&5
+echo "$as_me: error: ls -t appears to fail. Make sure there is not a broken
+alias in your environment" >&2;}
+ { (exit 1); exit 1; }; }
+ fi
+
+ test "$2" = conftest.file
+ )
+then
+ # Ok.
+ :
+else
+ { { echo "$as_me:$LINENO: error: newly created file is older than distributed files!
+Check your system clock" >&5
+echo "$as_me: error: newly created file is older than distributed files!
+Check your system clock" >&2;}
+ { (exit 1); exit 1; }; }
+fi
+echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+test "$program_prefix" != NONE &&
+ program_transform_name="s,^,$program_prefix,;$program_transform_name"
+# Use a double $ so make ignores it.
+test "$program_suffix" != NONE &&
+ program_transform_name="s,\$,$program_suffix,;$program_transform_name"
+# Double any \ or $. echo might interpret backslashes.
+# By default was `s,x,x', remove it if useless.
+cat <<\_ACEOF >conftest.sed
+s/[\\$]/&&/g;s/;s,x,x,$//
+_ACEOF
+program_transform_name=`echo $program_transform_name | sed -f conftest.sed`
+rm conftest.sed
+
+# expand $ac_aux_dir to an absolute path
+am_aux_dir=`cd $ac_aux_dir && pwd`
+
+test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing"
+# Use eval to expand $SHELL
+if eval "$MISSING --run true"; then
+ am_missing_run="$MISSING --run "
+else
+ am_missing_run=
+ { echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5
+echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;}
+fi
+
+if mkdir -p -- . 2>/dev/null; then
+ # Keeping the `.' argument allows $(mkdir_p) to be used without
+ # argument. Indeed, we sometimes output rules like
+ # $(mkdir_p) $(somedir)
+ # where $(somedir) is conditionally defined.
+ # (`test -n '$(somedir)' && $(mkdir_p) $(somedir)' is a more
+ # expensive solution, as it forces Make to start a sub-shell.)
+ mkdir_p='mkdir -p -- .'
+else
+ # On NextStep and OpenStep, the `mkdir' command does not
+ # recognize any option. It will interpret all options as
+ # directories to create, and then abort because `.' already
+ # exists.
+ for d in ./-p ./--;
+ do
+ test -d $d && rmdir $d
+ done
+ # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists.
+ if test -f "$ac_aux_dir/mkinstalldirs"; then
+ mkdir_p='$(mkinstalldirs)'
+ else
+ mkdir_p='$(install_sh) -d'
+ fi
+fi
+
+for ac_prog in gawk mawk nawk awk
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_AWK+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$AWK"; then
+ ac_cv_prog_AWK="$AWK" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_AWK="$ac_prog"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+AWK=$ac_cv_prog_AWK
+if test -n "$AWK"; then
+ echo "$as_me:$LINENO: result: $AWK" >&5
+echo "${ECHO_T}$AWK" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ test -n "$AWK" && break
+done
+
+echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5
+echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6
+set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,:./+-,___p_,'`
+if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.make <<\_ACEOF
+all:
+ @echo 'ac_maketemp="$(MAKE)"'
+_ACEOF
+# GNU make sometimes prints "make[1]: Entering...", which would confuse us.
+eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=`
+if test -n "$ac_maketemp"; then
+ eval ac_cv_prog_make_${ac_make}_set=yes
+else
+ eval ac_cv_prog_make_${ac_make}_set=no
+fi
+rm -f conftest.make
+fi
+if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+ SET_MAKE=
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+ SET_MAKE="MAKE=${MAKE-make}"
+fi
+
+rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+ am__leading_dot=.
+else
+ am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+
+# test to see if srcdir already configured
+if test "`cd $srcdir && pwd`" != "`pwd`" &&
+ test -f $srcdir/config.status; then
+ { { echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5
+echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+ if (cygpath --version) >/dev/null 2>/dev/null; then
+ CYGPATH_W='cygpath -w'
+ else
+ CYGPATH_W=echo
+ fi
+fi
+
+
+# Define the identity of the package.
+ PACKAGE='util-vserver'
+ VERSION='0.29'
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE "$PACKAGE"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define VERSION "$VERSION"
+_ACEOF
+
+# Some tools Automake needs.
+
+ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"}
+
+
+AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"}
+
+
+AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"}
+
+
+AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"}
+
+
+MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
+
+
+AMTAR=${AMTAR-"${am_missing_run}tar"}
+
+install_sh=${install_sh-"$am_aux_dir/install-sh"}
+
+# Installed binaries are usually stripped using `strip' when the user
+# run `make install-strip'. However `strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the `STRIP' environment variable to overrule this program.
+if test "$cross_compiling" != no; then
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
+set dummy ${ac_tool_prefix}strip; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_STRIP+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$STRIP"; then
+ ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_STRIP="${ac_tool_prefix}strip"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+STRIP=$ac_cv_prog_STRIP
+if test -n "$STRIP"; then
+ echo "$as_me:$LINENO: result: $STRIP" >&5
+echo "${ECHO_T}$STRIP" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$ac_cv_prog_STRIP"; then
+ ac_ct_STRIP=$STRIP
+ # Extract the first word of "strip", so it can be a program name with args.
+set dummy strip; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$ac_ct_STRIP"; then
+ ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_STRIP="strip"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+ test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":"
+fi
+fi
+ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
+if test -n "$ac_ct_STRIP"; then
+ echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5
+echo "${ECHO_T}$ac_ct_STRIP" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ STRIP=$ac_ct_STRIP
+else
+ STRIP="$ac_cv_prog_STRIP"
+fi
+
+fi
+INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s"
+
+# We need awk for the "check" target. The system "awk" is bad on
+# some platforms.
+
+
+
+echo "$as_me:$LINENO: checking whether to enable maintainer-specific portions of Makefiles" >&5
+echo $ECHO_N "checking whether to enable maintainer-specific portions of Makefiles... $ECHO_C" >&6
+ # Check whether --enable-maintainer-mode or --disable-maintainer-mode was given.
+if test "${enable_maintainer_mode+set}" = set; then
+ enableval="$enable_maintainer_mode"
+ USE_MAINTAINER_MODE=$enableval
+else
+ USE_MAINTAINER_MODE=no
+fi;
+ echo "$as_me:$LINENO: result: $USE_MAINTAINER_MODE" >&5
+echo "${ECHO_T}$USE_MAINTAINER_MODE" >&6
+
+
+if test $USE_MAINTAINER_MODE = yes; then
+ MAINTAINER_MODE_TRUE=
+ MAINTAINER_MODE_FALSE='#'
+else
+ MAINTAINER_MODE_TRUE='#'
+ MAINTAINER_MODE_FALSE=
+fi
+
+ MAINT=$MAINTAINER_MODE_TRUE
+
+
+
+
+# Checks for programs.
+ac_ext=cc
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+ for ac_prog in $CCC g++ c++ gpp aCC CC cxx cc++ cl FCC KCC RCC xlC_r xlC
+ do
+ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CXX+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$CXX"; then
+ ac_cv_prog_CXX="$CXX" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CXX="$ac_tool_prefix$ac_prog"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+CXX=$ac_cv_prog_CXX
+if test -n "$CXX"; then
+ echo "$as_me:$LINENO: result: $CXX" >&5
+echo "${ECHO_T}$CXX" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ test -n "$CXX" && break
+ done
+fi
+if test -z "$CXX"; then
+ ac_ct_CXX=$CXX
+ for ac_prog in $CCC g++ c++ gpp aCC CC cxx cc++ cl FCC KCC RCC xlC_r xlC
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$ac_ct_CXX"; then
+ ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CXX="$ac_prog"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+ac_ct_CXX=$ac_cv_prog_ac_ct_CXX
+if test -n "$ac_ct_CXX"; then
+ echo "$as_me:$LINENO: result: $ac_ct_CXX" >&5
+echo "${ECHO_T}$ac_ct_CXX" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ test -n "$ac_ct_CXX" && break
+done
+test -n "$ac_ct_CXX" || ac_ct_CXX="g++"
+
+ CXX=$ac_ct_CXX
+fi
+
+
+# Provide some information about the compiler.
+echo "$as_me:$LINENO:" \
+ "checking for C++ compiler version" >&5
+ac_compiler=`set X $ac_compile; echo $2`
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
+ (eval $ac_compiler --version </dev/null >&5) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v </dev/null >&5\"") >&5
+ (eval $ac_compiler -v </dev/null >&5) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V </dev/null >&5\"") >&5
+ (eval $ac_compiler -V </dev/null >&5) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files a.out a.exe b.out"
+# Try to create an executable without -o first, disregard a.out.
+# It will help us diagnose broken compilers, and finding out an intuition
+# of exeext.
+echo "$as_me:$LINENO: checking for C++ compiler default output file name" >&5
+echo $ECHO_N "checking for C++ compiler default output file name... $ECHO_C" >&6
+ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
+if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5
+ (eval $ac_link_default) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; then
+ # Find the output, starting from the most likely. This scheme is
+# not robust to junk in `.', hence go to wildcards (a.*) only as a last
+# resort.
+
+# Be careful to initialize this variable, since it used to be cached.
+# Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile.
+ac_cv_exeext=
+# b.out is created by i960 compilers.
+for ac_file in a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out
+do
+ test -f "$ac_file" || continue
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj )
+ ;;
+ conftest.$ac_ext )
+ # This is the source file.
+ ;;
+ [ab].out )
+ # We found the default executable, but exeext='' is most
+ # certainly right.
+ break;;
+ *.* )
+ ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+ # FIXME: I believe we export ac_cv_exeext for Libtool,
+ # but it would be cool to find out if it's true. Does anybody
+ # maintain Libtool? --akim.
+ export ac_cv_exeext
+ break;;
+ * )
+ break;;
+ esac
+done
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { echo "$as_me:$LINENO: error: C++ compiler cannot create executables
+See \`config.log' for more details." >&5
+echo "$as_me: error: C++ compiler cannot create executables
+See \`config.log' for more details." >&2;}
+ { (exit 77); exit 77; }; }
+fi
+
+ac_exeext=$ac_cv_exeext
+echo "$as_me:$LINENO: result: $ac_file" >&5
+echo "${ECHO_T}$ac_file" >&6
+
+# Check the compiler produces executables we can run. If not, either
+# the compiler is broken, or we cross compile.
+echo "$as_me:$LINENO: checking whether the C++ compiler works" >&5
+echo $ECHO_N "checking whether the C++ compiler works... $ECHO_C" >&6
+# FIXME: These cross compiler hacks should be removed for Autoconf 3.0
+# If not cross compiling, check that we can run a simple program.
+if test "$cross_compiling" != yes; then
+ if { ac_try='./$ac_file'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ cross_compiling=no
+ else
+ if test "$cross_compiling" = maybe; then
+ cross_compiling=yes
+ else
+ { { echo "$as_me:$LINENO: error: cannot run C++ compiled programs.
+If you meant to cross compile, use \`--host'.
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot run C++ compiled programs.
+If you meant to cross compile, use \`--host'.
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
+ fi
+ fi
+fi
+echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+
+rm -f a.out a.exe conftest$ac_cv_exeext b.out
+ac_clean_files=$ac_clean_files_save
+# Check the compiler produces executables we can run. If not, either
+# the compiler is broken, or we cross compile.
+echo "$as_me:$LINENO: checking whether we are cross compiling" >&5
+echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6
+echo "$as_me:$LINENO: result: $cross_compiling" >&5
+echo "${ECHO_T}$cross_compiling" >&6
+
+echo "$as_me:$LINENO: checking for suffix of executables" >&5
+echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; then
+ # If both `conftest.exe' and `conftest' are `present' (well, observable)
+# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will
+# work properly (i.e., refer to `conftest.exe'), while it won't with
+# `rm'.
+for ac_file in conftest.exe conftest conftest.*; do
+ test -f "$ac_file" || continue
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;;
+ *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+ export ac_cv_exeext
+ break;;
+ * ) break;;
+ esac
+done
+else
+ { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+rm -f conftest$ac_cv_exeext
+echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5
+echo "${ECHO_T}$ac_cv_exeext" >&6
+
+rm -f conftest.$ac_ext
+EXEEXT=$ac_cv_exeext
+ac_exeext=$EXEEXT
+echo "$as_me:$LINENO: checking for suffix of object files" >&5
+echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6
+if test "${ac_cv_objext+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.o conftest.obj
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; then
+ for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;;
+ *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
+ break;;
+ esac
+done
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute suffix of object files: cannot compile
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+rm -f conftest.$ac_cv_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_objext" >&5
+echo "${ECHO_T}$ac_cv_objext" >&6
+OBJEXT=$ac_cv_objext
+ac_objext=$OBJEXT
+echo "$as_me:$LINENO: checking whether we are using the GNU C++ compiler" >&5
+echo $ECHO_N "checking whether we are using the GNU C++ compiler... $ECHO_C" >&6
+if test "${ac_cv_cxx_compiler_gnu+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+#ifndef __GNUC__
+ choke me
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_cxx_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_compiler_gnu=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_compiler_gnu=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_cxx_compiler_gnu=$ac_compiler_gnu
+
+fi
+echo "$as_me:$LINENO: result: $ac_cv_cxx_compiler_gnu" >&5
+echo "${ECHO_T}$ac_cv_cxx_compiler_gnu" >&6
+GXX=`test $ac_compiler_gnu = yes && echo yes`
+ac_test_CXXFLAGS=${CXXFLAGS+set}
+ac_save_CXXFLAGS=$CXXFLAGS
+CXXFLAGS="-g"
+echo "$as_me:$LINENO: checking whether $CXX accepts -g" >&5
+echo $ECHO_N "checking whether $CXX accepts -g... $ECHO_C" >&6
+if test "${ac_cv_prog_cxx_g+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_cxx_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_prog_cxx_g=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_prog_cxx_g=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_prog_cxx_g" >&5
+echo "${ECHO_T}$ac_cv_prog_cxx_g" >&6
+if test "$ac_test_CXXFLAGS" = set; then
+ CXXFLAGS=$ac_save_CXXFLAGS
+elif test $ac_cv_prog_cxx_g = yes; then
+ if test "$GXX" = yes; then
+ CXXFLAGS="-g -O2"
+ else
+ CXXFLAGS="-g"
+ fi
+else
+ if test "$GXX" = yes; then
+ CXXFLAGS="-O2"
+ else
+ CXXFLAGS=
+ fi
+fi
+for ac_declaration in \
+ '' \
+ 'extern "C" void std::exit (int) throw (); using std::exit;' \
+ 'extern "C" void std::exit (int); using std::exit;' \
+ 'extern "C" void exit (int) throw ();' \
+ 'extern "C" void exit (int);' \
+ 'void exit (int);'
+do
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_declaration
+#include <stdlib.h>
+int
+main ()
+{
+exit (42);
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_cxx_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ :
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+continue
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_declaration
+int
+main ()
+{
+exit (42);
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_cxx_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ break
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+rm -f conftest*
+if test -n "$ac_declaration"; then
+ echo '#ifdef __cplusplus' >>confdefs.h
+ echo $ac_declaration >>confdefs.h
+ echo '#endif' >>confdefs.h
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+DEPDIR="${am__leading_dot}deps"
+
+ ac_config_commands="$ac_config_commands depfiles"
+
+
+am_make=${MAKE-make}
+cat > confinc << 'END'
+am__doit:
+ @echo done
+.PHONY: am__doit
+END
+# If we don't find an include directive, just comment out the code.
+echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5
+echo $ECHO_N "checking for style of include used by $am_make... $ECHO_C" >&6
+am__include="#"
+am__quote=
+_am_result=none
+# First try GNU make style include.
+echo "include confinc" > confmf
+# We grep out `Entering directory' and `Leaving directory'
+# messages which can occur if `w' ends up in MAKEFLAGS.
+# In particular we don't look at `^make:' because GNU make might
+# be invoked under some other name (usually "gmake"), in which
+# case it prints its new name instead of `make'.
+if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then
+ am__include=include
+ am__quote=
+ _am_result=GNU
+fi
+# Now try BSD make style include.
+if test "$am__include" = "#"; then
+ echo '.include "confinc"' > confmf
+ if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then
+ am__include=.include
+ am__quote="\""
+ _am_result=BSD
+ fi
+fi
+
+
+echo "$as_me:$LINENO: result: $_am_result" >&5
+echo "${ECHO_T}$_am_result" >&6
+rm -f confinc confmf
+
+# Check whether --enable-dependency-tracking or --disable-dependency-tracking was given.
+if test "${enable_dependency_tracking+set}" = set; then
+ enableval="$enable_dependency_tracking"
+
+fi;
+if test "x$enable_dependency_tracking" != xno; then
+ am_depcomp="$ac_aux_dir/depcomp"
+ AMDEPBACKSLASH='\'
+fi
+
+
+if test "x$enable_dependency_tracking" != xno; then
+ AMDEP_TRUE=
+ AMDEP_FALSE='#'
+else
+ AMDEP_TRUE='#'
+ AMDEP_FALSE=
+fi
+
+
+
+
+depcc="$CXX" am_compiler_list=
+
+echo "$as_me:$LINENO: checking dependency style of $depcc" >&5
+echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6
+if test "${am_cv_CXX_dependencies_compiler_type+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+ # We make a subdir and do the tests there. Otherwise we can end up
+ # making bogus files that we don't know about and never remove. For
+ # instance it was reported that on HP-UX the gcc test will end up
+ # making a dummy file named `D' -- because `-MD' means `put the output
+ # in D'.
+ mkdir conftest.dir
+ # Copy depcomp to subdir because otherwise we won't find it if we're
+ # using a relative directory.
+ cp "$am_depcomp" conftest.dir
+ cd conftest.dir
+ # We will build objects and dependencies in a subdirectory because
+ # it helps to detect inapplicable dependency modes. For instance
+ # both Tru64's cc and ICC support -MD to output dependencies as a
+ # side effect of compilation, but ICC will put the dependencies in
+ # the current directory while Tru64 will put them in the object
+ # directory.
+ mkdir sub
+
+ am_cv_CXX_dependencies_compiler_type=none
+ if test "$am_compiler_list" = ""; then
+ am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+ fi
+ for depmode in $am_compiler_list; do
+ # Setup a source with many dependencies, because some compilers
+ # like to wrap large dependency lists on column 80 (with \), and
+ # we should not choose a depcomp mode which is confused by this.
+ #
+ # We need to recreate these files for each test, as the compiler may
+ # overwrite some of them when testing with obscure command lines.
+ # This happens at least with the AIX C compiler.
+ : > sub/conftest.c
+ for i in 1 2 3 4 5 6; do
+ echo '#include "conftst'$i'.h"' >> sub/conftest.c
+ : > sub/conftst$i.h
+ done
+ echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+ case $depmode in
+ nosideeffect)
+ # after this tag, mechanisms are not by side-effect, so they'll
+ # only be used when explicitly requested
+ if test "x$enable_dependency_tracking" = xyes; then
+ continue
+ else
+ break
+ fi
+ ;;
+ none) break ;;
+ esac
+ # We check with `-c' and `-o' for the sake of the "dashmstdout"
+ # mode. It turns out that the SunPro C++ compiler does not properly
+ # handle `-M -o', and we need to detect this.
+ if depmode=$depmode \
+ source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \
+ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+ $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \
+ >/dev/null 2>conftest.err &&
+ grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 &&
+ ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+ # icc doesn't choke on unknown options, it will just issue warnings
+ # (even with -Werror). So we grep stderr for any message
+ # that says an option was ignored.
+ if grep 'ignoring option' conftest.err >/dev/null 2>&1; then :; else
+ am_cv_CXX_dependencies_compiler_type=$depmode
+ break
+ fi
+ fi
+ done
+
+ cd ..
+ rm -rf conftest.dir
+else
+ am_cv_CXX_dependencies_compiler_type=none
+fi
+
+fi
+echo "$as_me:$LINENO: result: $am_cv_CXX_dependencies_compiler_type" >&5
+echo "${ECHO_T}$am_cv_CXX_dependencies_compiler_type" >&6
+CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type
+
+
+
+if
+ test "x$enable_dependency_tracking" != xno \
+ && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then
+ am__fastdepCXX_TRUE=
+ am__fastdepCXX_FALSE='#'
+else
+ am__fastdepCXX_TRUE='#'
+ am__fastdepCXX_FALSE=
+fi
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}gcc; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="${ac_tool_prefix}gcc"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+ ac_ct_CC=$CC
+ # Extract the first word of "gcc", so it can be a program name with args.
+set dummy gcc; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CC="gcc"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ CC=$ac_ct_CC
+else
+ CC="$ac_cv_prog_CC"
+fi
+
+if test -z "$CC"; then
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}cc; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="${ac_tool_prefix}cc"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+ ac_ct_CC=$CC
+ # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CC="cc"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ CC=$ac_ct_CC
+else
+ CC="$ac_cv_prog_CC"
+fi
+
+fi
+if test -z "$CC"; then
+ # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+ ac_prog_rejected=no
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
+ ac_prog_rejected=yes
+ continue
+ fi
+ ac_cv_prog_CC="cc"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+if test $ac_prog_rejected = yes; then
+ # We found a bogon in the path, so make sure we never use it.
+ set dummy $ac_cv_prog_CC
+ shift
+ if test $# != 0; then
+ # We chose a different compiler from the bogus one.
+ # However, it has the same basename, so the bogon will be chosen
+ # first if we set CC to just the basename; use the full file name.
+ shift
+ ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
+ fi
+fi
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$CC"; then
+ if test -n "$ac_tool_prefix"; then
+ for ac_prog in cl
+ do
+ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ test -n "$CC" && break
+ done
+fi
+if test -z "$CC"; then
+ ac_ct_CC=$CC
+ for ac_prog in cl
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CC="$ac_prog"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ test -n "$ac_ct_CC" && break
+done
+
+ CC=$ac_ct_CC
+fi
+
+fi
+
+
+test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH
+See \`config.log' for more details." >&5
+echo "$as_me: error: no acceptable C compiler found in \$PATH
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
+
+# Provide some information about the compiler.
+echo "$as_me:$LINENO:" \
+ "checking for C compiler version" >&5
+ac_compiler=`set X $ac_compile; echo $2`
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
+ (eval $ac_compiler --version </dev/null >&5) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v </dev/null >&5\"") >&5
+ (eval $ac_compiler -v </dev/null >&5) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V </dev/null >&5\"") >&5
+ (eval $ac_compiler -V </dev/null >&5) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }
+
+echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5
+echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6
+if test "${ac_cv_c_compiler_gnu+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+#ifndef __GNUC__
+ choke me
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_compiler_gnu=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_compiler_gnu=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_c_compiler_gnu=$ac_compiler_gnu
+
+fi
+echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5
+echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6
+GCC=`test $ac_compiler_gnu = yes && echo yes`
+ac_test_CFLAGS=${CFLAGS+set}
+ac_save_CFLAGS=$CFLAGS
+CFLAGS="-g"
+echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5
+echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6
+if test "${ac_cv_prog_cc_g+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_prog_cc_g=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_prog_cc_g=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5
+echo "${ECHO_T}$ac_cv_prog_cc_g" >&6
+if test "$ac_test_CFLAGS" = set; then
+ CFLAGS=$ac_save_CFLAGS
+elif test $ac_cv_prog_cc_g = yes; then
+ if test "$GCC" = yes; then
+ CFLAGS="-g -O2"
+ else
+ CFLAGS="-g"
+ fi
+else
+ if test "$GCC" = yes; then
+ CFLAGS="-O2"
+ else
+ CFLAGS=
+ fi
+fi
+echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5
+echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6
+if test "${ac_cv_prog_cc_stdc+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_cv_prog_cc_stdc=no
+ac_save_CC=$CC
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <stdarg.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */
+struct buf { int x; };
+FILE * (*rcsopen) (struct buf *, struct stat *, int);
+static char *e (p, i)
+ char **p;
+ int i;
+{
+ return p[i];
+}
+static char *f (char * (*g) (char **, int), char **p, ...)
+{
+ char *s;
+ va_list v;
+ va_start (v,p);
+ s = g (p, va_arg (v,int));
+ va_end (v);
+ return s;
+}
+
+/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has
+ function prototypes and stuff, but not '\xHH' hex character constants.
+ These don't provoke an error unfortunately, instead are silently treated
+ as 'x'. The following induces an error, until -std1 is added to get
+ proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an
+ array size at least. It's necessary to write '\x00'==0 to get something
+ that's true only with -std1. */
+int osf4_cc_array ['\x00' == 0 ? 1 : -1];
+
+int test (int i, double x);
+struct s1 {int (*f) (int a);};
+struct s2 {int (*f) (double a);};
+int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
+int argc;
+char **argv;
+int
+main ()
+{
+return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1];
+ ;
+ return 0;
+}
+_ACEOF
+# Don't try gcc -ansi; that turns off useful extensions and
+# breaks some systems' header files.
+# AIX -qlanglvl=ansi
+# Ultrix and OSF/1 -std1
+# HP-UX 10.20 and later -Ae
+# HP-UX older versions -Aa -D_HPUX_SOURCE
+# SVR4 -Xc -D__EXTENSIONS__
+for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+do
+ CC="$ac_save_CC $ac_arg"
+ rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_prog_cc_stdc=$ac_arg
+break
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext
+done
+rm -f conftest.$ac_ext conftest.$ac_objext
+CC=$ac_save_CC
+
+fi
+
+case "x$ac_cv_prog_cc_stdc" in
+ x|xno)
+ echo "$as_me:$LINENO: result: none needed" >&5
+echo "${ECHO_T}none needed" >&6 ;;
+ *)
+ echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5
+echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6
+ CC="$CC $ac_cv_prog_cc_stdc" ;;
+esac
+
+# Some people use a C++ compiler to compile C. Since we use `exit',
+# in C++ we need to declare it. In case someone uses the same compiler
+# for both compiling C and C++ we need to have the C++ compiler decide
+# the declaration of exit, since it's the most demanding environment.
+cat >conftest.$ac_ext <<_ACEOF
+#ifndef __cplusplus
+ choke me
+#endif
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ for ac_declaration in \
+ '' \
+ 'extern "C" void std::exit (int) throw (); using std::exit;' \
+ 'extern "C" void std::exit (int); using std::exit;' \
+ 'extern "C" void exit (int) throw ();' \
+ 'extern "C" void exit (int);' \
+ 'void exit (int);'
+do
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_declaration
+#include <stdlib.h>
+int
+main ()
+{
+exit (42);
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ :
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+continue
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_declaration
+int
+main ()
+{
+exit (42);
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ break
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+rm -f conftest*
+if test -n "$ac_declaration"; then
+ echo '#ifdef __cplusplus' >>confdefs.h
+ echo $ac_declaration >>confdefs.h
+ echo '#endif' >>confdefs.h
+fi
+
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+depcc="$CC" am_compiler_list=
+
+echo "$as_me:$LINENO: checking dependency style of $depcc" >&5
+echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6
+if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+ # We make a subdir and do the tests there. Otherwise we can end up
+ # making bogus files that we don't know about and never remove. For
+ # instance it was reported that on HP-UX the gcc test will end up
+ # making a dummy file named `D' -- because `-MD' means `put the output
+ # in D'.
+ mkdir conftest.dir
+ # Copy depcomp to subdir because otherwise we won't find it if we're
+ # using a relative directory.
+ cp "$am_depcomp" conftest.dir
+ cd conftest.dir
+ # We will build objects and dependencies in a subdirectory because
+ # it helps to detect inapplicable dependency modes. For instance
+ # both Tru64's cc and ICC support -MD to output dependencies as a
+ # side effect of compilation, but ICC will put the dependencies in
+ # the current directory while Tru64 will put them in the object
+ # directory.
+ mkdir sub
+
+ am_cv_CC_dependencies_compiler_type=none
+ if test "$am_compiler_list" = ""; then
+ am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+ fi
+ for depmode in $am_compiler_list; do
+ # Setup a source with many dependencies, because some compilers
+ # like to wrap large dependency lists on column 80 (with \), and
+ # we should not choose a depcomp mode which is confused by this.
+ #
+ # We need to recreate these files for each test, as the compiler may
+ # overwrite some of them when testing with obscure command lines.
+ # This happens at least with the AIX C compiler.
+ : > sub/conftest.c
+ for i in 1 2 3 4 5 6; do
+ echo '#include "conftst'$i'.h"' >> sub/conftest.c
+ : > sub/conftst$i.h
+ done
+ echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+ case $depmode in
+ nosideeffect)
+ # after this tag, mechanisms are not by side-effect, so they'll
+ # only be used when explicitly requested
+ if test "x$enable_dependency_tracking" = xyes; then
+ continue
+ else
+ break
+ fi
+ ;;
+ none) break ;;
+ esac
+ # We check with `-c' and `-o' for the sake of the "dashmstdout"
+ # mode. It turns out that the SunPro C++ compiler does not properly
+ # handle `-M -o', and we need to detect this.
+ if depmode=$depmode \
+ source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \
+ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+ $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \
+ >/dev/null 2>conftest.err &&
+ grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 &&
+ ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+ # icc doesn't choke on unknown options, it will just issue warnings
+ # (even with -Werror). So we grep stderr for any message
+ # that says an option was ignored.
+ if grep 'ignoring option' conftest.err >/dev/null 2>&1; then :; else
+ am_cv_CC_dependencies_compiler_type=$depmode
+ break
+ fi
+ fi
+ done
+
+ cd ..
+ rm -rf conftest.dir
+else
+ am_cv_CC_dependencies_compiler_type=none
+fi
+
+fi
+echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5
+echo "${ECHO_T}$am_cv_CC_dependencies_compiler_type" >&6
+CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
+
+
+
+if
+ test "x$enable_dependency_tracking" != xno \
+ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then
+ am__fastdepCC_TRUE=
+ am__fastdepCC_FALSE='#'
+else
+ am__fastdepCC_TRUE='#'
+ am__fastdepCC_FALSE=
+fi
+
+
+# Find a good install program. We prefer a C program (faster),
+# so one script is as good as another. But avoid the broken or
+# incompatible versions:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AmigaOS /C/install, which installs bootblocks on floppy discs
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# OS/2's system install, which has a completely different semantic
+# ./install, which can be erroneously created by make from ./install.sh.
+echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5
+echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6
+if test -z "$INSTALL"; then
+if test "${ac_cv_path_install+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ # Account for people who put trailing slashes in PATH elements.
+case $as_dir/ in
+ ./ | .// | /cC/* | \
+ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+ ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \
+ /usr/ucb/* ) ;;
+ *)
+ # OSF1 and SCO ODT 3.0 have their own names for install.
+ # Don't use installbsd from OSF since it installs stuff as root
+ # by default.
+ for ac_prog in ginstall scoinst install; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
+ if test $ac_prog = install &&
+ grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+ # AIX install. It has an incompatible calling convention.
+ :
+ elif test $ac_prog = install &&
+ grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+ # program-specific install script used by HP pwplus--don't use.
+ :
+ else
+ ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+ break 3
+ fi
+ fi
+ done
+ done
+ ;;
+esac
+done
+
+
+fi
+ if test "${ac_cv_path_install+set}" = set; then
+ INSTALL=$ac_cv_path_install
+ else
+ # As a last resort, use the slow shell script. We don't cache a
+ # path for INSTALL within a source directory, because that will
+ # break other packages using the cache if that directory is
+ # removed, or if the path is relative.
+ INSTALL=$ac_install_sh
+ fi
+fi
+echo "$as_me:$LINENO: result: $INSTALL" >&5
+echo "${ECHO_T}$INSTALL" >&6
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+echo "$as_me:$LINENO: checking whether ln -s works" >&5
+echo $ECHO_N "checking whether ln -s works... $ECHO_C" >&6
+LN_S=$as_ln_s
+if test "$LN_S" = "ln -s"; then
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+else
+ echo "$as_me:$LINENO: result: no, using $LN_S" >&5
+echo "${ECHO_T}no, using $LN_S" >&6
+fi
+
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ranlib; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_RANLIB+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$RANLIB"; then
+ ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+RANLIB=$ac_cv_prog_RANLIB
+if test -n "$RANLIB"; then
+ echo "$as_me:$LINENO: result: $RANLIB" >&5
+echo "${ECHO_T}$RANLIB" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$ac_cv_prog_RANLIB"; then
+ ac_ct_RANLIB=$RANLIB
+ # Extract the first word of "ranlib", so it can be a program name with args.
+set dummy ranlib; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$ac_ct_RANLIB"; then
+ ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_RANLIB="ranlib"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+ test -z "$ac_cv_prog_ac_ct_RANLIB" && ac_cv_prog_ac_ct_RANLIB=":"
+fi
+fi
+ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
+if test -n "$ac_ct_RANLIB"; then
+ echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5
+echo "${ECHO_T}$ac_ct_RANLIB" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ RANLIB=$ac_ct_RANLIB
+else
+ RANLIB="$ac_cv_prog_RANLIB"
+fi
+
+if test "x$CC" != xcc; then
+ echo "$as_me:$LINENO: checking whether $CC and cc understand -c and -o together" >&5
+echo $ECHO_N "checking whether $CC and cc understand -c and -o together... $ECHO_C" >&6
+else
+ echo "$as_me:$LINENO: checking whether cc understands -c and -o together" >&5
+echo $ECHO_N "checking whether cc understands -c and -o together... $ECHO_C" >&6
+fi
+set dummy $CC; ac_cc=`echo $2 |
+ sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'`
+if eval "test \"\${ac_cv_prog_cc_${ac_cc}_c_o+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+# Make sure it works both with $CC and with simple cc.
+# We do the test twice because some compilers refuse to overwrite an
+# existing .o file with -o, though they will create one.
+ac_try='$CC -c conftest.$ac_ext -o conftest.$ac_objext >&5'
+if { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ test -f conftest.$ac_objext && { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); };
+then
+ eval ac_cv_prog_cc_${ac_cc}_c_o=yes
+ if test "x$CC" != xcc; then
+ # Test first that cc exists at all.
+ if { ac_try='cc -c conftest.$ac_ext >&5'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_try='cc -c conftest.$ac_ext -o conftest.$ac_objext >&5'
+ if { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ test -f conftest.$ac_objext && { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); };
+ then
+ # cc works too.
+ :
+ else
+ # cc exists but doesn't like -o.
+ eval ac_cv_prog_cc_${ac_cc}_c_o=no
+ fi
+ fi
+ fi
+else
+ eval ac_cv_prog_cc_${ac_cc}_c_o=no
+fi
+rm -f conftest*
+
+fi
+if eval "test \"`echo '$ac_cv_prog_cc_'${ac_cc}_c_o`\" = yes"; then
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+
+cat >>confdefs.h <<\_ACEOF
+#define NO_MINUS_C_MINUS_O 1
+_ACEOF
+
+fi
+
+# FIXME: we rely on the cache variable name because
+# there is no other way.
+set dummy $CC
+ac_cc=`echo $2 | sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'`
+if eval "test \"`echo '$ac_cv_prog_cc_'${ac_cc}_c_o`\" != yes"; then
+ # Losing compiler, so override with the script.
+ # FIXME: It is wrong to rewrite CC.
+ # But if we don't then we get into trouble of one sort or another.
+ # A longer-term fix would be to have automake use am__CC in this case,
+ # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)"
+ CC="$am_aux_dir/compile $CC"
+fi
+
+
+
+
+
+ warn_flags="-Werror -W"
+ echo "$as_me:$LINENO: checking whether the C-compiler accepts ${warn_flags}" >&5
+echo $ECHO_N "checking whether the C-compiler accepts ${warn_flags}... $ECHO_C" >&6
+ ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+ old_CFLAGS="${CFLAGS}"
+ CFLAGS="$warn_flags"
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+inline static void f(){}
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ensc_sys_compilerwarnflags_C=${warn_flags}
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ensc_sys_compilerwarnflags_C=
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+ CFLAGS="$old_CFLAGS"
+
+ if test x"${ensc_sys_compilerwarnflags_C}" = x; then
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+ else
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+ fi
+
+
+
+
+
+echo 'void f(){}' > conftest.c
+ for i in -std=c99 -Wall -pedantic -W -Wno-unused-parameter
+ do
+ echo "$as_me:$LINENO: checking whether $CC accepts $i" >&5
+echo $ECHO_N "checking whether $CC accepts $i... $ECHO_C" >&6
+ if test -z "`${CC} ${ensc_sys_compilerwarnflags_C} $i -c conftest.c 2>&1`"
+ then
+ CFLAGS="${CFLAGS} $i"
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+ else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+ fi
+ done
+ rm -f conftest.c conftest.o
+
+
+
+
+ warn_flags="-Werror -W"
+ echo "$as_me:$LINENO: checking whether the C++-compiler accepts ${warn_flags}" >&5
+echo $ECHO_N "checking whether the C++-compiler accepts ${warn_flags}... $ECHO_C" >&6
+ ac_ext=cc
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+ old_CFLAGS="${CXXFLAGS}"
+ CXXFLAGS="$warn_flags"
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+inline static void f(){}
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_cxx_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ensc_sys_compilerwarnflags_CXX=${warn_flags}
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ensc_sys_compilerwarnflags_CXX=
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+ CXXFLAGS="$old_CFLAGS"
+
+ if test x"${ensc_sys_compilerwarnflags_CXX}" = x; then
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+ else
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+ fi
+
+
+
+
+
+ echo 'void f(){}' > conftest.cc
+ for i in -ansi -Wall -pedantic -W -fmessage-length=0
+ do
+ echo "$as_me:$LINENO: checking whether $CXX accepts $i" >&5
+echo $ECHO_N "checking whether $CXX accepts $i... $ECHO_C" >&6
+ if test -z "`${CXX} ${ensc_sys_compilerwarnflags_CXX} $i -c conftest.cc 2>&1`"
+ then
+ CXXFLAGS="${CXXFLAGS} $i"
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+ else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+ fi
+ done
+ rm -f conftest.cc conftest.o
+
+
+
+
+ echo "$as_me:$LINENO: checking for linux kernel dir" >&5
+echo $ECHO_N "checking for linux kernel dir... $ECHO_C" >&6
+if test "${ensc_cv_path_kerneldir+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+
+# Check whether --with-kerneldir or --without-kerneldir was given.
+if test "${with_kerneldir+set}" = set; then
+ withval="$with_kerneldir"
+ case "$withval" in
+ yes|no) { { echo "$as_me:$LINENO: error: '$withval' is not a valid value for kerneldir" >&5
+echo "$as_me: error: '$withval' is not a valid value for kerneldir" >&2;}
+ { (exit 1); exit 1; }; };;
+ *) ensc_cv_path_kerneldir=$withval;;
+ esac
+else
+ ensc_cv_path_kerneldir=
+ for i in /lib/modules/$(uname -r)/build /usr/src/linux /usr; do
+ test -e $i/include/linux/version.h && { ensc_cv_path_kerneldir=$i; break; }
+ done
+fi;
+
+fi
+echo "$as_me:$LINENO: result: $ensc_cv_path_kerneldir" >&5
+echo "${ECHO_T}$ensc_cv_path_kerneldir" >&6
+
+ test "$ensc_cv_path_kerneldir" -a -e "$ensc_cv_path_kerneldir"/include/linux/version.h || {
+ { { echo "$as_me:$LINENO: error: Can not find kernelsources" >&5
+echo "$as_me: error: Can not find kernelsources" >&2;}
+ { (exit 1); exit 1; }; }
+ }
+
+
+
+
+ echo "$as_me:$LINENO: checking for linux kernel headers" >&5
+echo $ECHO_N "checking for linux kernel headers... $ECHO_C" >&6
+if test "${ensc_cv_path_kernelheaders+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+ ensc_cv_path_kernelheaders=$ensc_cv_path_kerneldir/include
+
+fi
+echo "$as_me:$LINENO: result: $ensc_cv_path_kernelheaders" >&5
+echo "${ECHO_T}$ensc_cv_path_kernelheaders" >&6
+
+ kernelincludedir=$ensc_cv_path_kernelheaders
+
+
+
+ echo "$as_me:$LINENO: checking which vserver-rootdir is to use" >&5
+echo $ECHO_N "checking which vserver-rootdir is to use... $ECHO_C" >&6
+
+# Check whether --with-vrootdir or --without-vrootdir was given.
+if test "${with_vrootdir+set}" = set; then
+ withval="$with_vrootdir"
+ case "$withval" in
+ yes|no) { { echo "$as_me:$LINENO: error: '$withval' is not a valid value for vrootdir" >&5
+echo "$as_me: error: '$withval' is not a valid value for vrootdir" >&2;}
+ { (exit 1); exit 1; }; };;
+ *) ensc_uv_path_vrootdir=$withval;;
+ esac
+else
+ ensc_uv_path_vrootdir=/vservers
+fi;
+ echo "$as_me:$LINENO: result: $ensc_uv_path_vrootdir" >&5
+echo "${ECHO_T}$ensc_uv_path_vrootdir" >&6
+
+ if test x"vserverdir" != x; then
+ vserverdir=$ensc_uv_path_vrootdir
+
+ fi
+
+
+ if test x"SYSCALL_SWITCH" != x; then
+ CVS2CL_TAG='-F SYSCALL_SWITCH'
+
+ fi
+
+ for ac_prog in cvs2cl
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CVS2CL+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$CVS2CL"; then
+ ac_cv_prog_CVS2CL="$CVS2CL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CVS2CL="$ac_prog"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+CVS2CL=$ac_cv_prog_CVS2CL
+if test -n "$CVS2CL"; then
+ echo "$as_me:$LINENO: result: $CVS2CL" >&5
+echo "${ECHO_T}$CVS2CL" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ test -n "$CVS2CL" && break
+done
+
+
+
+if test x"$CVS2CL" != x; then
+ HAVE_CVS2CL_TRUE=
+ HAVE_CVS2CL_FALSE='#'
+else
+ HAVE_CVS2CL_TRUE='#'
+ HAVE_CVS2CL_FALSE=
+fi
+
+
+ for ac_prog in rcs2log
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_RCS2LOG+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$RCS2LOG"; then
+ ac_cv_prog_RCS2LOG="$RCS2LOG" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_RCS2LOG="$ac_prog"
+ echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+done
+
+fi
+fi
+RCS2LOG=$ac_cv_prog_RCS2LOG
+if test -n "$RCS2LOG"; then
+ echo "$as_me:$LINENO: result: $RCS2LOG" >&5
+echo "${ECHO_T}$RCS2LOG" >&6
+else
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ test -n "$RCS2LOG" && break
+done
+
+
+
+if test x"$RCS2LOG" != x; then
+ HAVE_RCS2LOG_TRUE=
+ HAVE_RCS2LOG_FALSE='#'
+else
+ HAVE_RCS2LOG_TRUE='#'
+ HAVE_RCS2LOG_FALSE=
+fi
+
+
+
+echo "$as_me:$LINENO: checking whether to enable linuxconf modules" >&5
+echo $ECHO_N "checking whether to enable linuxconf modules... $ECHO_C" >&6
+# Check whether --enable-linuxconf or --disable-linuxconf was given.
+if test "${enable_linuxconf+set}" = set; then
+ enableval="$enable_linuxconf"
+ case "$enableval" in
+ yes|no) ;;
+ *) { { echo "$as_me:$LINENO: error: '$i' is not a supported value for '--enable-linuxconf'" >&5
+echo "$as_me: error: '$i' is not a supported value for '--enable-linuxconf'" >&2;}
+ { (exit 1); exit 1; }; };;
+ esac
+else
+ enable_linuxconf=no
+fi;
+
+
+
+if test x"$enable_linuxconf" = xyes; then
+ ENSC_ENABLE_LINUXCONF_TRUE=
+ ENSC_ENABLE_LINUXCONF_FALSE='#'
+else
+ ENSC_ENABLE_LINUXCONF_TRUE='#'
+ ENSC_ENABLE_LINUXCONF_FALSE=
+fi
+
+echo "$as_me:$LINENO: result: $enable_linuxconf" >&5
+echo "${ECHO_T}$enable_linuxconf" >&6
+
+
+echo "$as_me:$LINENO: checking whether to use internal kernel headers" >&5
+echo $ECHO_N "checking whether to use internal kernel headers... $ECHO_C" >&6
+# Check whether --enable-internal-headers or --disable-internal-headers was given.
+if test "${enable_internal_headers+set}" = set; then
+ enableval="$enable_internal_headers"
+ case "$enableval" in
+ yes|no) ;;
+ *) { { echo "$as_me:$LINENO: error: '$i' is not a supported value for '--disable-internal-headers'" >&5
+echo "$as_me: error: '$i' is not a supported value for '--disable-internal-headers'" >&2;}
+ { (exit 1); exit 1; }; };;
+ esac
+else
+ enable_internal_headers=yes
+fi;
+
+
+
+if test x"$enable_internal_headers" = xyes; then
+ ENSC_ENABLE_INTERNAL_HEADERS_TRUE=
+ ENSC_ENABLE_INTERNAL_HEADERS_FALSE='#'
+else
+ ENSC_ENABLE_INTERNAL_HEADERS_TRUE='#'
+ ENSC_ENABLE_INTERNAL_HEADERS_FALSE=
+fi
+
+echo "$as_me:$LINENO: result: $enable_internal_headers" >&5
+echo "${ECHO_T}$enable_internal_headers" >&6
+
+
+echo "$as_me:$LINENO: checking for supported APIs" >&5
+echo $ECHO_N "checking for supported APIs... $ECHO_C" >&6
+# Check whether --enable-apis or --disable-apis was given.
+if test "${enable_apis+set}" = set; then
+ enableval="$enable_apis"
+
+else
+ enable_apis=ALL
+fi;
+
+test x"$enable_apis" != xALL || enable_apis='legacy,compat,v11'
+old_IFS=$IFS
+IFS=,;
+for i in $enable_apis; do
+ case "$i" in
+ compat)
+cat >>confdefs.h <<\_ACEOF
+#define VC_ENABLE_API_COMPAT 1
+_ACEOF
+;;
+ legacy)
+cat >>confdefs.h <<\_ACEOF
+#define VC_ENABLE_API_LEGACY 1
+_ACEOF
+;;
+ v11)
+cat >>confdefs.h <<\_ACEOF
+#define VC_ENABLE_API_V11 1
+_ACEOF
+;;
+ *) { { echo "$as_me:$LINENO: error: '$i' is not a supported API" >&5
+echo "$as_me: error: '$i' is not a supported API" >&2;}
+ { (exit 1); exit 1; }; };;
+ esac
+done
+IFS=$old_IFS
+echo "$as_me:$LINENO: result: $enable_apis" >&5
+echo "${ECHO_T}$enable_apis" >&6
+
+
+
+ echo "$as_me:$LINENO: checking for syscall(2) invocation method" >&5
+echo $ECHO_N "checking for syscall(2) invocation method... $ECHO_C" >&6
+
+# Check whether --with-syscall or --without-syscall was given.
+if test "${with_syscall+set}" = set; then
+ withval="$with_syscall"
+
+else
+ with_syscall=auto
+fi;
+ echo "$as_me:$LINENO: result: $with_syscall" >&5
+echo "${ECHO_T}$with_syscall" >&6
+
+ case x"$with_syscall" in
+ xauto)
+ echo "$as_me:$LINENO: checking which syscall(2) invocation works" >&5
+echo $ECHO_N "checking which syscall(2) invocation works... $ECHO_C" >&6
+if test "${ensc_cv_test_syscall+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+ old_CPPFLAGS=$CPPFLAGS
+ CPPFLAGS="-I$ensc_cv_path_kernelheaders"
+ ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+ cat >conftest.$ac_ext <<_ACEOF
+
+#include <asm/unistd.h>
+#include <syscall.h>
+#include <errno.h>
+#define __NR_foo0 300
+#define __NR_foo1 301
+#define __NR_foo2 302
+#define __NR_foo3 303
+#define __NR_foo4 304
+#define __NR_foo5 305
+inline static _syscall0(int, foo0)
+inline static _syscall1(int, foo1, int, a)
+inline static _syscall2(int, foo2, int, a, int, b)
+inline static _syscall3(int, foo3, int, a, int, b, int, c)
+inline static _syscall4(int, foo4, int, a, int, b, int, c, int, d)
+inline static _syscall5(int, foo5, int, a, int, b, int, c, int, d, int, e)
+
+int main() {
+ return foo0() || \
+ foo1(1) || \
+ foo2(1,2) || \
+ foo3(1,2,3) || \
+ foo4(1,2,3,4) || \
+ foo5(1,2,3,4,5);
+}
+
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ensc_cv_test_syscall=fast
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ensc_cv_test_syscall=traditional
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+ ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+ CPPFLAGS=$old_CPPFLAGS
+
+fi
+echo "$as_me:$LINENO: result: $ensc_cv_test_syscall" >&5
+echo "${ECHO_T}$ensc_cv_test_syscall" >&6
+ with_syscall=$ensc_cv_test_syscall
+ ;;
+ xfast|xtraditional)
+ ;;
+ *)
+ { { echo "$as_me:$LINENO: error: '$with_syscall' is not a valid value for '--with-syscall'" >&5
+echo "$as_me: error: '$with_syscall' is not a valid value for '--with-syscall'" >&2;}
+ { (exit 1); exit 1; }; }
+ ;;
+ esac
+
+ if test x"$with_syscall" = xtraditional; then
+
+cat >>confdefs.h <<\_ACEOF
+#define ENSC_SYSCALL_TRADITIONAL 1
+_ACEOF
+
+ fi
+
+
+
+
+ac_ext=cc
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+echo "$as_me:$LINENO: checking how to run the C++ preprocessor" >&5
+echo $ECHO_N "checking how to run the C++ preprocessor... $ECHO_C" >&6
+if test -z "$CXXCPP"; then
+ if test "${ac_cv_prog_CXXCPP+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ # Double quotes because CXXCPP needs to be expanded
+ for CXXCPP in "$CXX -E" "/lib/cpp"
+ do
+ ac_preproc_ok=false
+for ac_cxx_preproc_warn_flag in '' yes
+do
+ # Use a header file that comes with gcc, so configuring glibc
+ # with a fresh cross-compiler works.
+ # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ # <limits.h> exists even on freestanding compilers.
+ # On the NeXT, cc -E runs the code through the compiler's parser,
+ # not just through cpp. "Syntax error" is here to catch this case.
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+ Syntax error
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_cxx_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ :
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.$ac_ext
+
+ # OK, works on sane cases. Now check whether non-existent headers
+ # can be detected and how.
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <ac_nonexistent.h>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_cxx_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ # Broken: success on invalid input.
+continue
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then
+ break
+fi
+
+ done
+ ac_cv_prog_CXXCPP=$CXXCPP
+
+fi
+ CXXCPP=$ac_cv_prog_CXXCPP
+else
+ ac_cv_prog_CXXCPP=$CXXCPP
+fi
+echo "$as_me:$LINENO: result: $CXXCPP" >&5
+echo "${ECHO_T}$CXXCPP" >&6
+ac_preproc_ok=false
+for ac_cxx_preproc_warn_flag in '' yes
+do
+ # Use a header file that comes with gcc, so configuring glibc
+ # with a fresh cross-compiler works.
+ # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ # <limits.h> exists even on freestanding compilers.
+ # On the NeXT, cc -E runs the code through the compiler's parser,
+ # not just through cpp. "Syntax error" is here to catch this case.
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+ Syntax error
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_cxx_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ :
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.$ac_ext
+
+ # OK, works on sane cases. Now check whether non-existent headers
+ # can be detected and how.
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <ac_nonexistent.h>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_cxx_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ # Broken: success on invalid input.
+continue
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then
+ :
+else
+ { { echo "$as_me:$LINENO: error: C++ preprocessor \"$CXXCPP\" fails sanity check
+See \`config.log' for more details." >&5
+echo "$as_me: error: C++ preprocessor \"$CXXCPP\" fails sanity check
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+ac_ext=cc
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+
+echo "$as_me:$LINENO: checking for egrep" >&5
+echo $ECHO_N "checking for egrep... $ECHO_C" >&6
+if test "${ac_cv_prog_egrep+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if echo a | (grep -E '(a|b)') >/dev/null 2>&1
+ then ac_cv_prog_egrep='grep -E'
+ else ac_cv_prog_egrep='egrep'
+ fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_prog_egrep" >&5
+echo "${ECHO_T}$ac_cv_prog_egrep" >&6
+ EGREP=$ac_cv_prog_egrep
+
+
+echo "$as_me:$LINENO: checking for ANSI C header files" >&5
+echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6
+if test "${ac_cv_header_stdc+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <float.h>
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_cxx_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_header_stdc=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_header_stdc=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+if test $ac_cv_header_stdc = yes; then
+ # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <string.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "memchr" >/dev/null 2>&1; then
+ :
+else
+ ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+ # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <stdlib.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "free" >/dev/null 2>&1; then
+ :
+else
+ ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+ # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
+ if test "$cross_compiling" = yes; then
+ :
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <ctype.h>
+#if ((' ' & 0x0FF) == 0x020)
+# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+#else
+# define ISLOWER(c) \
+ (('a' <= (c) && (c) <= 'i') \
+ || ('j' <= (c) && (c) <= 'r') \
+ || ('s' <= (c) && (c) <= 'z'))
+# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
+#endif
+
+#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
+int
+main ()
+{
+ int i;
+ for (i = 0; i < 256; i++)
+ if (XOR (islower (i), ISLOWER (i))
+ || toupper (i) != TOUPPER (i))
+ exit(2);
+ exit (0);
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ :
+else
+ echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+ac_cv_header_stdc=no
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5
+echo "${ECHO_T}$ac_cv_header_stdc" >&6
+if test $ac_cv_header_stdc = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define STDC_HEADERS 1
+_ACEOF
+
+fi
+
+# On IRIX 5.3, sys/types and inttypes.h are conflicting.
+
+
+
+
+
+
+
+
+
+for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
+ inttypes.h stdint.h unistd.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_cxx_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ eval "$as_ac_Header=yes"
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+eval "$as_ac_Header=no"
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+
+ ac_ext=cc
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+ echo "$as_me:$LINENO: checking for ext2fs-headers" >&5
+echo $ECHO_N "checking for ext2fs-headers... $ECHO_C" >&6
+if test "${ensc_cv_test_ext2fs_header+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <ext2fs/ext2_fs.h>
+ int main() { return 0; }
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_cxx_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ensc_cv_test_ext2fs_header=e2fsprogs
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <linux/ext2_fs.h>
+ int main() { return 0; }
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_cxx_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ensc_cv_test_ext2fs_header=kernel
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+ ensc_cv_test_ext2fs_header=none
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ensc_cv_test_ext2fs_header" >&5
+echo "${ECHO_T}$ensc_cv_test_ext2fs_header" >&6
+
+ case x"$ensc_cv_test_ext2fs_header" in
+ (xe2fsprogs)
+ if test "${ac_cv_header_ext2fs_ext2_fs_h+set}" = set; then
+ echo "$as_me:$LINENO: checking for ext2fs/ext2_fs.h" >&5
+echo $ECHO_N "checking for ext2fs/ext2_fs.h... $ECHO_C" >&6
+if test "${ac_cv_header_ext2fs_ext2_fs_h+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: $ac_cv_header_ext2fs_ext2_fs_h" >&5
+echo "${ECHO_T}$ac_cv_header_ext2fs_ext2_fs_h" >&6
+else
+ # Is the header compilable?
+echo "$as_me:$LINENO: checking ext2fs/ext2_fs.h usability" >&5
+echo $ECHO_N "checking ext2fs/ext2_fs.h usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+#include <ext2fs/ext2_fs.h>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_cxx_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_header_compiler=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking ext2fs/ext2_fs.h presence" >&5
+echo $ECHO_N "checking ext2fs/ext2_fs.h presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <ext2fs/ext2_fs.h>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_cxx_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ ac_header_preproc=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So? What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in
+ yes:no: )
+ { echo "$as_me:$LINENO: WARNING: ext2fs/ext2_fs.h: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: ext2fs/ext2_fs.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
+ { echo "$as_me:$LINENO: WARNING: ext2fs/ext2_fs.h: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: ext2fs/ext2_fs.h: proceeding with the compiler's result" >&2;}
+ ac_header_preproc=yes
+ ;;
+ no:yes:* )
+ { echo "$as_me:$LINENO: WARNING: ext2fs/ext2_fs.h: present but cannot be compiled" >&5
+echo "$as_me: WARNING: ext2fs/ext2_fs.h: present but cannot be compiled" >&2;}
+ { echo "$as_me:$LINENO: WARNING: ext2fs/ext2_fs.h: check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: ext2fs/ext2_fs.h: check for missing prerequisite headers?" >&2;}
+ { echo "$as_me:$LINENO: WARNING: ext2fs/ext2_fs.h: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: ext2fs/ext2_fs.h: see the Autoconf documentation" >&2;}
+ { echo "$as_me:$LINENO: WARNING: ext2fs/ext2_fs.h: section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: ext2fs/ext2_fs.h: section \"Present But Cannot Be Compiled\"" >&2;}
+ { echo "$as_me:$LINENO: WARNING: ext2fs/ext2_fs.h: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: ext2fs/ext2_fs.h: proceeding with the preprocessor's result" >&2;}
+ { echo "$as_me:$LINENO: WARNING: ext2fs/ext2_fs.h: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: ext2fs/ext2_fs.h: in the future, the compiler will take precedence" >&2;}
+ (
+ cat <<\_ASBOX
+## ------------------------------------------------------ ##
+## Report this to enrico.scholz@informatik.tu-chemnitz.de ##
+## ------------------------------------------------------ ##
+_ASBOX
+ ) |
+ sed "s/^/$as_me: WARNING: /" >&2
+ ;;
+esac
+echo "$as_me:$LINENO: checking for ext2fs/ext2_fs.h" >&5
+echo $ECHO_N "checking for ext2fs/ext2_fs.h... $ECHO_C" >&6
+if test "${ac_cv_header_ext2fs_ext2_fs_h+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_cv_header_ext2fs_ext2_fs_h=$ac_header_preproc
+fi
+echo "$as_me:$LINENO: result: $ac_cv_header_ext2fs_ext2_fs_h" >&5
+echo "${ECHO_T}$ac_cv_header_ext2fs_ext2_fs_h" >&6
+
+fi
+if test $ac_cv_header_ext2fs_ext2_fs_h = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define ENSC_HAVE_EXT2FS_EXT2_FS_H 1
+_ACEOF
+
+else
+ { { echo "$as_me:$LINENO: error: unexpected error while checkin for <ext2fs/ext2_fs.h>
+See \`config.log' for more details." >&5
+echo "$as_me: error: unexpected error while checkin for <ext2fs/ext2_fs.h>
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+
+ ;;
+ (xkernel)
+ if test "${ac_cv_header_linux_ext2_fs_h+set}" = set; then
+ echo "$as_me:$LINENO: checking for linux/ext2_fs.h" >&5
+echo $ECHO_N "checking for linux/ext2_fs.h... $ECHO_C" >&6
+if test "${ac_cv_header_linux_ext2_fs_h+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: $ac_cv_header_linux_ext2_fs_h" >&5
+echo "${ECHO_T}$ac_cv_header_linux_ext2_fs_h" >&6
+else
+ # Is the header compilable?
+echo "$as_me:$LINENO: checking linux/ext2_fs.h usability" >&5
+echo $ECHO_N "checking linux/ext2_fs.h usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+#include <linux/ext2_fs.h>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_cxx_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_header_compiler=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking linux/ext2_fs.h presence" >&5
+echo $ECHO_N "checking linux/ext2_fs.h presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <linux/ext2_fs.h>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_cxx_preproc_warn_flag
+ ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ ac_header_preproc=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So? What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in
+ yes:no: )
+ { echo "$as_me:$LINENO: WARNING: linux/ext2_fs.h: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: linux/ext2_fs.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
+ { echo "$as_me:$LINENO: WARNING: linux/ext2_fs.h: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: linux/ext2_fs.h: proceeding with the compiler's result" >&2;}
+ ac_header_preproc=yes
+ ;;
+ no:yes:* )
+ { echo "$as_me:$LINENO: WARNING: linux/ext2_fs.h: present but cannot be compiled" >&5
+echo "$as_me: WARNING: linux/ext2_fs.h: present but cannot be compiled" >&2;}
+ { echo "$as_me:$LINENO: WARNING: linux/ext2_fs.h: check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: linux/ext2_fs.h: check for missing prerequisite headers?" >&2;}
+ { echo "$as_me:$LINENO: WARNING: linux/ext2_fs.h: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: linux/ext2_fs.h: see the Autoconf documentation" >&2;}
+ { echo "$as_me:$LINENO: WARNING: linux/ext2_fs.h: section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: linux/ext2_fs.h: section \"Present But Cannot Be Compiled\"" >&2;}
+ { echo "$as_me:$LINENO: WARNING: linux/ext2_fs.h: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: linux/ext2_fs.h: proceeding with the preprocessor's result" >&2;}
+ { echo "$as_me:$LINENO: WARNING: linux/ext2_fs.h: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: linux/ext2_fs.h: in the future, the compiler will take precedence" >&2;}
+ (
+ cat <<\_ASBOX
+## ------------------------------------------------------ ##
+## Report this to enrico.scholz@informatik.tu-chemnitz.de ##
+## ------------------------------------------------------ ##
+_ASBOX
+ ) |
+ sed "s/^/$as_me: WARNING: /" >&2
+ ;;
+esac
+echo "$as_me:$LINENO: checking for linux/ext2_fs.h" >&5
+echo $ECHO_N "checking for linux/ext2_fs.h... $ECHO_C" >&6
+if test "${ac_cv_header_linux_ext2_fs_h+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_cv_header_linux_ext2_fs_h=$ac_header_preproc
+fi
+echo "$as_me:$LINENO: result: $ac_cv_header_linux_ext2_fs_h" >&5
+echo "${ECHO_T}$ac_cv_header_linux_ext2_fs_h" >&6
+
+fi
+if test $ac_cv_header_linux_ext2_fs_h = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define ENSC_HAVE_LINUX_EXT2_FS_H 1
+_ACEOF
+
+else
+ { { echo "$as_me:$LINENO: error: unexpected error while checkin for <linux/ext2_fs.h>
+See \`config.log' for more details." >&5
+echo "$as_me: error: unexpected error while checkin for <linux/ext2_fs.h>
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+
+ ;;
+ (*)
+ { { echo "$as_me:$LINENO: error:
+ext2fs headers were not found, or they are not usable. This can have
+the following reasons:
+
+* you have neither the e2fsprogs nor the kernel headers installed
+
+* kernel headers are broken (e.g. these of linux 2.6 are known to be)
+ and you do not have e2fsprogs headers installed; please try to
+ install e2fsprogs-devel (for Red Hat) or e2fsprogs-dev (for Debian)
+ in this case
+
+* kernel headers are broken and your e2fsprogs headers are too old;
+ until version 1.27 (inclusive), they are using reserved C++ keywords
+
+* kernel headers are broken and your e2fsprogs headers are too new;
+ recent (January 2004) BK snapshots of e2fsprogs are unusable for
+ C++, for details and a solution see
+ https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=112448
+
+
+In the latter two cases you have the following options:
+* fix the headers manually, or
+* install a stable version of e2fsprogs (e.g. 1.34), or
+* use good kernel headers (from linux 2.4.x)
+
+See \`config.log' for more details." >&5
+echo "$as_me: error:
+ext2fs headers were not found, or they are not usable. This can have
+the following reasons:
+
+* you have neither the e2fsprogs nor the kernel headers installed
+
+* kernel headers are broken (e.g. these of linux 2.6 are known to be)
+ and you do not have e2fsprogs headers installed; please try to
+ install e2fsprogs-devel (for Red Hat) or e2fsprogs-dev (for Debian)
+ in this case
+
+* kernel headers are broken and your e2fsprogs headers are too old;
+ until version 1.27 (inclusive), they are using reserved C++ keywords
+
+* kernel headers are broken and your e2fsprogs headers are too new;
+ recent (January 2004) BK snapshots of e2fsprogs are unusable for
+ C++, for details and a solution see
+ https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=112448
+
+
+In the latter two cases you have the following options:
+* fix the headers manually, or
+* install a stable version of e2fsprogs (e.g. 1.34), or
+* use good kernel headers (from linux 2.4.x)
+
+See \`config.log' for more details." >&2;}
+ { (exit 1); exit 1; }; }
+ ;;
+ esac
+ ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+
+for ac_func in vserver
+do
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
+if eval "test \"\${$as_ac_var+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define $ac_func innocuous_$ac_func
+
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char $ac_func (); below.
+ Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ <limits.h> exists even on freestanding compilers. */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef $ac_func
+
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char $ac_func ();
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+choke me
+#else
+char (*f) () = $ac_func;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != $ac_func;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ eval "$as_ac_var=yes"
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+eval "$as_ac_var=no"
+fi
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+ cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+echo "$as_me:$LINENO: checking whether MS_MOVE is declared" >&5
+echo $ECHO_N "checking whether MS_MOVE is declared... $ECHO_C" >&6
+if test "${ac_cv_have_decl_MS_MOVE+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <linux/fs.h>
+
+int
+main ()
+{
+#ifndef MS_MOVE
+ char *p = (char *) MS_MOVE;
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_have_decl_MS_MOVE=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_have_decl_MS_MOVE=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_have_decl_MS_MOVE" >&5
+echo "${ECHO_T}$ac_cv_have_decl_MS_MOVE" >&6
+if test $ac_cv_have_decl_MS_MOVE = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_MS_MOVE 1
+_ACEOF
+
+
+else
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_MS_MOVE 0
+_ACEOF
+
+
+fi
+
+
+echo "$as_me:$LINENO: checking for xid_t" >&5
+echo $ECHO_N "checking for xid_t... $ECHO_C" >&6
+if test "${ac_cv_type_xid_t+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <sys/types.h>
+
+int
+main ()
+{
+if ((xid_t *) 0)
+ return 0;
+if (sizeof (xid_t))
+ return 0;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_type_xid_t=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_type_xid_t=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_type_xid_t" >&5
+echo "${ECHO_T}$ac_cv_type_xid_t" >&6
+if test $ac_cv_type_xid_t = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_XID_T 1
+_ACEOF
+
+
+fi
+
+
+ ac_config_files="$ac_config_files util-vserver.spec Makefile"
+
+cat >confcache <<\_ACEOF
+# This file is a shell script that caches the results of configure
+# tests run on this system so they can be shared between configure
+# scripts and configure runs, see configure's option --config-cache.
+# It is not useful on other systems. If it contains results you don't
+# want to keep, you may remove or edit it.
+#
+# config.status only pays attention to the cache file if you give it
+# the --recheck option to rerun configure.
+#
+# `ac_cv_env_foo' variables (set or unset) will be overridden when
+# loading this file, other *unset* `ac_cv_foo' will be assigned the
+# following values.
+
+_ACEOF
+
+# The following way of writing the cache mishandles newlines in values,
+# but we know of no workaround that is simple, portable, and efficient.
+# So, don't put newlines in cache variables' values.
+# Ultrix sh set writes to stderr and can't be redirected directly,
+# and sets the high bit in the cache file unless we assign to the vars.
+{
+ (set) 2>&1 |
+ case `(ac_space=' '; set | grep ac_space) 2>&1` in
+ *ac_space=\ *)
+ # `set' does not quote correctly, so add quotes (double-quote
+ # substitution turns \\\\ into \\, and sed turns \\ into \).
+ sed -n \
+ "s/'/'\\\\''/g;
+ s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
+ ;;
+ *)
+ # `set' quotes correctly as required by POSIX, so do not add quotes.
+ sed -n \
+ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
+ ;;
+ esac;
+} |
+ sed '
+ t clear
+ : clear
+ s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
+ t end
+ /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
+ : end' >>confcache
+if diff $cache_file confcache >/dev/null 2>&1; then :; else
+ if test -w $cache_file; then
+ test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file"
+ cat confcache >$cache_file
+ else
+ echo "not updating unwritable cache $cache_file"
+ fi
+fi
+rm -f confcache
+
+test "x$prefix" = xNONE && prefix=$ac_default_prefix
+# Let make expand exec_prefix.
+test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+
+# VPATH may cause trouble with some makes, so we remove $(srcdir),
+# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and
+# trailing colons and then remove the whole line if VPATH becomes empty
+# (actually we leave an empty line to preserve line numbers).
+if test "x$srcdir" = x.; then
+ ac_vpsub='/^[ ]*VPATH[ ]*=/{
+s/:*\$(srcdir):*/:/;
+s/:*\${srcdir}:*/:/;
+s/:*@srcdir@:*/:/;
+s/^\([^=]*=[ ]*\):*/\1/;
+s/:*$//;
+s/^[^=]*=[ ]*$//;
+}'
+fi
+
+DEFS=-DHAVE_CONFIG_H
+
+ac_libobjs=
+ac_ltlibobjs=
+for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
+ # 1. Remove the extension, and $U if already installed.
+ ac_i=`echo "$ac_i" |
+ sed 's/\$U\././;s/\.o$//;s/\.obj$//'`
+ # 2. Add them.
+ ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext"
+ ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo'
+done
+LIBOBJS=$ac_libobjs
+
+LTLIBOBJS=$ac_ltlibobjs
+
+
+if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then
+ { { echo "$as_me:$LINENO: error: conditional \"MAINTAINER_MODE\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"MAINTAINER_MODE\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then
+ { { echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"AMDEP\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then
+ { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCXX\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"am__fastdepCXX\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
+ { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"am__fastdepCC\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+if test -z "${HAVE_CVS2CL_TRUE}" && test -z "${HAVE_CVS2CL_FALSE}"; then
+ { { echo "$as_me:$LINENO: error: conditional \"HAVE_CVS2CL\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"HAVE_CVS2CL\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+if test -z "${HAVE_RCS2LOG_TRUE}" && test -z "${HAVE_RCS2LOG_FALSE}"; then
+ { { echo "$as_me:$LINENO: error: conditional \"HAVE_RCS2LOG\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"HAVE_RCS2LOG\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+if test -z "${ENSC_ENABLE_LINUXCONF_TRUE}" && test -z "${ENSC_ENABLE_LINUXCONF_FALSE}"; then
+ { { echo "$as_me:$LINENO: error: conditional \"ENSC_ENABLE_LINUXCONF\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"ENSC_ENABLE_LINUXCONF\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+if test -z "${ENSC_ENABLE_INTERNAL_HEADERS_TRUE}" && test -z "${ENSC_ENABLE_INTERNAL_HEADERS_FALSE}"; then
+ { { echo "$as_me:$LINENO: error: conditional \"ENSC_ENABLE_INTERNAL_HEADERS\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"ENSC_ENABLE_INTERNAL_HEADERS\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+: ${CONFIG_STATUS=./config.status}
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files $CONFIG_STATUS"
+{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5
+echo "$as_me: creating $CONFIG_STATUS" >&6;}
+cat >$CONFIG_STATUS <<_ACEOF
+#! $SHELL
+# Generated by $as_me.
+# Run this file to recreate the current configuration.
+# Compiler output produced by configure, useful for debugging
+# configure, is in config.log if it exists.
+
+debug=false
+ac_cs_recheck=false
+ac_cs_silent=false
+SHELL=\${CONFIG_SHELL-$SHELL}
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+## --------------------- ##
+## M4sh Initialization. ##
+## --------------------- ##
+
+# Be Bourne compatible
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+ emulate sh
+ NULLCMD=:
+ # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '${1+"$@"}'='"$@"'
+elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
+ set -o posix
+fi
+DUALCASE=1; export DUALCASE # for MKS sh
+
+# Support unset when possible.
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+ as_unset=unset
+else
+ as_unset=false
+fi
+
+
+# Work around bugs in pre-3.0 UWIN ksh.
+$as_unset ENV MAIL MAILPATH
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+for as_var in \
+ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
+ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
+ LC_TELEPHONE LC_TIME
+do
+ if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
+ eval $as_var=C; export $as_var
+ else
+ $as_unset $as_var
+ fi
+done
+
+# Required to use basename.
+if expr a : '\(a\)' >/dev/null 2>&1; then
+ as_expr=expr
+else
+ as_expr=false
+fi
+
+if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then
+ as_basename=basename
+else
+ as_basename=false
+fi
+
+
+# Name of the executable.
+as_me=`$as_basename "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+ X"$0" : 'X\(//\)$' \| \
+ X"$0" : 'X\(/\)$' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X/"$0" |
+ sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; }
+ /^X\/\(\/\/\)$/{ s//\1/; q; }
+ /^X\/\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`
+
+
+# PATH needs CR, and LINENO needs CR and PATH.
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ echo "#! /bin/sh" >conf$$.sh
+ echo "exit 0" >>conf$$.sh
+ chmod +x conf$$.sh
+ if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+ PATH_SEPARATOR=';'
+ else
+ PATH_SEPARATOR=:
+ fi
+ rm -f conf$$.sh
+fi
+
+
+ as_lineno_1=$LINENO
+ as_lineno_2=$LINENO
+ as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+ test "x$as_lineno_1" != "x$as_lineno_2" &&
+ test "x$as_lineno_3" = "x$as_lineno_2" || {
+ # Find who we are. Look in the path if we contain no path at all
+ # relative or not.
+ case $0 in
+ *[\\/]* ) as_myself=$0 ;;
+ *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+done
+
+ ;;
+ esac
+ # We did not find ourselves, most probably we were run as `sh COMMAND'
+ # in which case we are not to be found in the path.
+ if test "x$as_myself" = x; then
+ as_myself=$0
+ fi
+ if test ! -f "$as_myself"; then
+ { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5
+echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;}
+ { (exit 1); exit 1; }; }
+ fi
+ case $CONFIG_SHELL in
+ '')
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for as_base in sh bash ksh sh5; do
+ case $as_dir in
+ /*)
+ if ("$as_dir/$as_base" -c '
+ as_lineno_1=$LINENO
+ as_lineno_2=$LINENO
+ as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+ test "x$as_lineno_1" != "x$as_lineno_2" &&
+ test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then
+ $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; }
+ $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; }
+ CONFIG_SHELL=$as_dir/$as_base
+ export CONFIG_SHELL
+ exec "$CONFIG_SHELL" "$0" ${1+"$@"}
+ fi;;
+ esac
+ done
+done
+;;
+ esac
+
+ # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
+ # uniformly replaced by the line number. The first 'sed' inserts a
+ # line-number line before each line; the second 'sed' does the real
+ # work. The second script uses 'N' to pair each line-number line
+ # with the numbered line, and appends trailing '-' during
+ # substitution so that $LINENO is not a special case at line end.
+ # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
+ # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-)
+ sed '=' <$as_myself |
+ sed '
+ N
+ s,$,-,
+ : loop
+ s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3,
+ t loop
+ s,-$,,
+ s,^['$as_cr_digits']*\n,,
+ ' >$as_me.lineno &&
+ chmod +x $as_me.lineno ||
+ { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5
+echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;}
+ { (exit 1); exit 1; }; }
+
+ # Don't try to exec as it changes $[0], causing all sort of problems
+ # (the dirname of $[0] is not the place where we might find the
+ # original and so on. Autoconf is especially sensible to this).
+ . ./$as_me.lineno
+ # Exit status is that of the last command.
+ exit
+}
+
+
+case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
+ *c*,-n*) ECHO_N= ECHO_C='
+' ECHO_T=' ' ;;
+ *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;;
+ *) ECHO_N= ECHO_C='\c' ECHO_T= ;;
+esac
+
+if expr a : '\(a\)' >/dev/null 2>&1; then
+ as_expr=expr
+else
+ as_expr=false
+fi
+
+rm -f conf$$ conf$$.exe conf$$.file
+echo >conf$$.file
+if ln -s conf$$.file conf$$ 2>/dev/null; then
+ # We could just check for DJGPP; but this test a) works b) is more generic
+ # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
+ if test -f conf$$.exe; then
+ # Don't use ln at all; we don't have any links
+ as_ln_s='cp -p'
+ else
+ as_ln_s='ln -s'
+ fi
+elif ln conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s=ln
+else
+ as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.file
+
+if mkdir -p . 2>/dev/null; then
+ as_mkdir_p=:
+else
+ test -d ./-p && rmdir ./-p
+ as_mkdir_p=false
+fi
+
+as_executable_p="test -f"
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+# IFS
+# We need space, tab and new line, in precisely that order.
+as_nl='
+'
+IFS=" $as_nl"
+
+# CDPATH.
+$as_unset CDPATH
+
+exec 6>&1
+
+# Open the log real soon, to keep \$[0] and so on meaningful, and to
+# report actual input values of CONFIG_FILES etc. instead of their
+# values after options handling. Logging --version etc. is OK.
+exec 5>>config.log
+{
+ echo
+ sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
+## Running $as_me. ##
+_ASBOX
+} >&5
+cat >&5 <<_CSEOF
+
+This file was extended by util-vserver $as_me 0.29, which was
+generated by GNU Autoconf 2.59. Invocation command line was
+
+ CONFIG_FILES = $CONFIG_FILES
+ CONFIG_HEADERS = $CONFIG_HEADERS
+ CONFIG_LINKS = $CONFIG_LINKS
+ CONFIG_COMMANDS = $CONFIG_COMMANDS
+ $ $0 $@
+
+_CSEOF
+echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5
+echo >&5
+_ACEOF
+
+# Files that config.status was made for.
+if test -n "$ac_config_files"; then
+ echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS
+fi
+
+if test -n "$ac_config_headers"; then
+ echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS
+fi
+
+if test -n "$ac_config_links"; then
+ echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS
+fi
+
+if test -n "$ac_config_commands"; then
+ echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS
+fi
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+
+ac_cs_usage="\
+\`$as_me' instantiates files from templates according to the
+current configuration.
+
+Usage: $0 [OPTIONS] [FILE]...
+
+ -h, --help print this help, then exit
+ -V, --version print version number, then exit
+ -q, --quiet do not print progress messages
+ -d, --debug don't remove temporary files
+ --recheck update $as_me by reconfiguring in the same conditions
+ --file=FILE[:TEMPLATE]
+ instantiate the configuration file FILE
+ --header=FILE[:TEMPLATE]
+ instantiate the configuration header FILE
+
+Configuration files:
+$config_files
+
+Configuration headers:
+$config_headers
+
+Configuration commands:
+$config_commands
+
+Report bugs to <bug-autoconf@gnu.org>."
+_ACEOF
+
+cat >>$CONFIG_STATUS <<_ACEOF
+ac_cs_version="\\
+util-vserver config.status 0.29
+configured by $0, generated by GNU Autoconf 2.59,
+ with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\"
+
+Copyright (C) 2003 Free Software Foundation, Inc.
+This config.status script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it."
+srcdir=$srcdir
+INSTALL="$INSTALL"
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+# If no file are specified by the user, then we need to provide default
+# value. By we need to know if files were specified by the user.
+ac_need_defaults=:
+while test $# != 0
+do
+ case $1 in
+ --*=*)
+ ac_option=`expr "x$1" : 'x\([^=]*\)='`
+ ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'`
+ ac_shift=:
+ ;;
+ -*)
+ ac_option=$1
+ ac_optarg=$2
+ ac_shift=shift
+ ;;
+ *) # This is not an option, so the user has probably given explicit
+ # arguments.
+ ac_option=$1
+ ac_need_defaults=false;;
+ esac
+
+ case $ac_option in
+ # Handling of the options.
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+ -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+ ac_cs_recheck=: ;;
+ --version | --vers* | -V )
+ echo "$ac_cs_version"; exit 0 ;;
+ --he | --h)
+ # Conflict between --help and --header
+ { { echo "$as_me:$LINENO: error: ambiguous option: $1
+Try \`$0 --help' for more information." >&5
+echo "$as_me: error: ambiguous option: $1
+Try \`$0 --help' for more information." >&2;}
+ { (exit 1); exit 1; }; };;
+ --help | --hel | -h )
+ echo "$ac_cs_usage"; exit 0 ;;
+ --debug | --d* | -d )
+ debug=: ;;
+ --file | --fil | --fi | --f )
+ $ac_shift
+ CONFIG_FILES="$CONFIG_FILES $ac_optarg"
+ ac_need_defaults=false;;
+ --header | --heade | --head | --hea )
+ $ac_shift
+ CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg"
+ ac_need_defaults=false;;
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil | --si | --s)
+ ac_cs_silent=: ;;
+
+ # This is an error.
+ -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1
+Try \`$0 --help' for more information." >&5
+echo "$as_me: error: unrecognized option: $1
+Try \`$0 --help' for more information." >&2;}
+ { (exit 1); exit 1; }; } ;;
+
+ *) ac_config_targets="$ac_config_targets $1" ;;
+
+ esac
+ shift
+done
+
+ac_configure_extra_args=
+
+if $ac_cs_silent; then
+ exec 6>/dev/null
+ ac_configure_extra_args="$ac_configure_extra_args --silent"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF
+if \$ac_cs_recheck; then
+ echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6
+ exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+fi
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<_ACEOF
+#
+# INIT-COMMANDS section.
+#
+
+AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"
+
+_ACEOF
+
+
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+for ac_config_target in $ac_config_targets
+do
+ case "$ac_config_target" in
+ # Handling of arguments.
+ "util-vserver.spec" ) CONFIG_FILES="$CONFIG_FILES util-vserver.spec" ;;
+ "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;;
+ "depfiles" ) CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
+ "config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;;
+ *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5
+echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
+ { (exit 1); exit 1; }; };;
+ esac
+done
+
+# If the user did not use the arguments to specify the items to instantiate,
+# then the envvar interface is used. Set only those that are not.
+# We use the long form for the default assignment because of an extremely
+# bizarre bug on SunOS 4.1.3.
+if $ac_need_defaults; then
+ test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
+ test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
+ test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands
+fi
+
+# Have a temporary directory for convenience. Make it in the build tree
+# simply because there is no reason to put it here, and in addition,
+# creating and moving files from /tmp can sometimes cause problems.
+# Create a temporary directory, and hook for its removal unless debugging.
+$debug ||
+{
+ trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0
+ trap '{ (exit 1); exit 1; }' 1 2 13 15
+}
+
+# Create a (secure) tmp directory for tmp files.
+
+{
+ tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` &&
+ test -n "$tmp" && test -d "$tmp"
+} ||
+{
+ tmp=./confstat$$-$RANDOM
+ (umask 077 && mkdir $tmp)
+} ||
+{
+ echo "$me: cannot create a temporary directory in ." >&2
+ { (exit 1); exit 1; }
+}
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<_ACEOF
+
+#
+# CONFIG_FILES section.
+#
+
+# No need to generate the scripts if there are no CONFIG_FILES.
+# This happens for instance when ./config.status config.h
+if test -n "\$CONFIG_FILES"; then
+ # Protect against being on the right side of a sed subst in config.status.
+ sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g;
+ s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF
+s,@SHELL@,$SHELL,;t t
+s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t
+s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t
+s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t
+s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t
+s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t
+s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t
+s,@exec_prefix@,$exec_prefix,;t t
+s,@prefix@,$prefix,;t t
+s,@program_transform_name@,$program_transform_name,;t t
+s,@bindir@,$bindir,;t t
+s,@sbindir@,$sbindir,;t t
+s,@libexecdir@,$libexecdir,;t t
+s,@datadir@,$datadir,;t t
+s,@sysconfdir@,$sysconfdir,;t t
+s,@sharedstatedir@,$sharedstatedir,;t t
+s,@localstatedir@,$localstatedir,;t t
+s,@libdir@,$libdir,;t t
+s,@includedir@,$includedir,;t t
+s,@oldincludedir@,$oldincludedir,;t t
+s,@infodir@,$infodir,;t t
+s,@mandir@,$mandir,;t t
+s,@build_alias@,$build_alias,;t t
+s,@host_alias@,$host_alias,;t t
+s,@target_alias@,$target_alias,;t t
+s,@DEFS@,$DEFS,;t t
+s,@ECHO_C@,$ECHO_C,;t t
+s,@ECHO_N@,$ECHO_N,;t t
+s,@ECHO_T@,$ECHO_T,;t t
+s,@LIBS@,$LIBS,;t t
+s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t
+s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t
+s,@INSTALL_DATA@,$INSTALL_DATA,;t t
+s,@CYGPATH_W@,$CYGPATH_W,;t t
+s,@PACKAGE@,$PACKAGE,;t t
+s,@VERSION@,$VERSION,;t t
+s,@ACLOCAL@,$ACLOCAL,;t t
+s,@AUTOCONF@,$AUTOCONF,;t t
+s,@AUTOMAKE@,$AUTOMAKE,;t t
+s,@AUTOHEADER@,$AUTOHEADER,;t t
+s,@MAKEINFO@,$MAKEINFO,;t t
+s,@AMTAR@,$AMTAR,;t t
+s,@install_sh@,$install_sh,;t t
+s,@STRIP@,$STRIP,;t t
+s,@ac_ct_STRIP@,$ac_ct_STRIP,;t t
+s,@INSTALL_STRIP_PROGRAM@,$INSTALL_STRIP_PROGRAM,;t t
+s,@mkdir_p@,$mkdir_p,;t t
+s,@AWK@,$AWK,;t t
+s,@SET_MAKE@,$SET_MAKE,;t t
+s,@am__leading_dot@,$am__leading_dot,;t t
+s,@MAINTAINER_MODE_TRUE@,$MAINTAINER_MODE_TRUE,;t t
+s,@MAINTAINER_MODE_FALSE@,$MAINTAINER_MODE_FALSE,;t t
+s,@MAINT@,$MAINT,;t t
+s,@CXX@,$CXX,;t t
+s,@CXXFLAGS@,$CXXFLAGS,;t t
+s,@LDFLAGS@,$LDFLAGS,;t t
+s,@CPPFLAGS@,$CPPFLAGS,;t t
+s,@ac_ct_CXX@,$ac_ct_CXX,;t t
+s,@EXEEXT@,$EXEEXT,;t t
+s,@OBJEXT@,$OBJEXT,;t t
+s,@DEPDIR@,$DEPDIR,;t t
+s,@am__include@,$am__include,;t t
+s,@am__quote@,$am__quote,;t t
+s,@AMDEP_TRUE@,$AMDEP_TRUE,;t t
+s,@AMDEP_FALSE@,$AMDEP_FALSE,;t t
+s,@AMDEPBACKSLASH@,$AMDEPBACKSLASH,;t t
+s,@CXXDEPMODE@,$CXXDEPMODE,;t t
+s,@am__fastdepCXX_TRUE@,$am__fastdepCXX_TRUE,;t t
+s,@am__fastdepCXX_FALSE@,$am__fastdepCXX_FALSE,;t t
+s,@CC@,$CC,;t t
+s,@CFLAGS@,$CFLAGS,;t t
+s,@ac_ct_CC@,$ac_ct_CC,;t t
+s,@CCDEPMODE@,$CCDEPMODE,;t t
+s,@am__fastdepCC_TRUE@,$am__fastdepCC_TRUE,;t t
+s,@am__fastdepCC_FALSE@,$am__fastdepCC_FALSE,;t t
+s,@LN_S@,$LN_S,;t t
+s,@RANLIB@,$RANLIB,;t t
+s,@ac_ct_RANLIB@,$ac_ct_RANLIB,;t t
+s,@kernelincludedir@,$kernelincludedir,;t t
+s,@vserverdir@,$vserverdir,;t t
+s,@CVS2CL_TAG@,$CVS2CL_TAG,;t t
+s,@CVS2CL@,$CVS2CL,;t t
+s,@HAVE_CVS2CL_TRUE@,$HAVE_CVS2CL_TRUE,;t t
+s,@HAVE_CVS2CL_FALSE@,$HAVE_CVS2CL_FALSE,;t t
+s,@RCS2LOG@,$RCS2LOG,;t t
+s,@HAVE_RCS2LOG_TRUE@,$HAVE_RCS2LOG_TRUE,;t t
+s,@HAVE_RCS2LOG_FALSE@,$HAVE_RCS2LOG_FALSE,;t t
+s,@ENSC_ENABLE_LINUXCONF_TRUE@,$ENSC_ENABLE_LINUXCONF_TRUE,;t t
+s,@ENSC_ENABLE_LINUXCONF_FALSE@,$ENSC_ENABLE_LINUXCONF_FALSE,;t t
+s,@ENSC_ENABLE_INTERNAL_HEADERS_TRUE@,$ENSC_ENABLE_INTERNAL_HEADERS_TRUE,;t t
+s,@ENSC_ENABLE_INTERNAL_HEADERS_FALSE@,$ENSC_ENABLE_INTERNAL_HEADERS_FALSE,;t t
+s,@CXXCPP@,$CXXCPP,;t t
+s,@EGREP@,$EGREP,;t t
+s,@LIBOBJS@,$LIBOBJS,;t t
+s,@LTLIBOBJS@,$LTLIBOBJS,;t t
+CEOF
+
+_ACEOF
+
+ cat >>$CONFIG_STATUS <<\_ACEOF
+ # Split the substitutions into bite-sized pieces for seds with
+ # small command number limits, like on Digital OSF/1 and HP-UX.
+ ac_max_sed_lines=48
+ ac_sed_frag=1 # Number of current file.
+ ac_beg=1 # First line for current file.
+ ac_end=$ac_max_sed_lines # Line after last line for current file.
+ ac_more_lines=:
+ ac_sed_cmds=
+ while $ac_more_lines; do
+ if test $ac_beg -gt 1; then
+ sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
+ else
+ sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
+ fi
+ if test ! -s $tmp/subs.frag; then
+ ac_more_lines=false
+ else
+ # The purpose of the label and of the branching condition is to
+ # speed up the sed processing (if there are no `@' at all, there
+ # is no need to browse any of the substitutions).
+ # These are the two extra sed commands mentioned above.
+ (echo ':t
+ /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed
+ if test -z "$ac_sed_cmds"; then
+ ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed"
+ else
+ ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed"
+ fi
+ ac_sed_frag=`expr $ac_sed_frag + 1`
+ ac_beg=$ac_end
+ ac_end=`expr $ac_end + $ac_max_sed_lines`
+ fi
+ done
+ if test -z "$ac_sed_cmds"; then
+ ac_sed_cmds=cat
+ fi
+fi # test -n "$CONFIG_FILES"
+
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue
+ # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
+ case $ac_file in
+ - | *:- | *:-:* ) # input from stdin
+ cat >$tmp/stdin
+ ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+ ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+ *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+ ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+ * ) ac_file_in=$ac_file.in ;;
+ esac
+
+ # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories.
+ ac_dir=`(dirname "$ac_file") 2>/dev/null ||
+$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$ac_file" : 'X\(//\)[^/]' \| \
+ X"$ac_file" : 'X\(//\)$' \| \
+ X"$ac_file" : 'X\(/\)' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X"$ac_file" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+ /^X\(\/\/\)$/{ s//\1/; q; }
+ /^X\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`
+ { if $as_mkdir_p; then
+ mkdir -p "$ac_dir"
+ else
+ as_dir="$ac_dir"
+ as_dirs=
+ while test ! -d "$as_dir"; do
+ as_dirs="$as_dir $as_dirs"
+ as_dir=`(dirname "$as_dir") 2>/dev/null ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_dir" : 'X\(//\)[^/]' \| \
+ X"$as_dir" : 'X\(//\)$' \| \
+ X"$as_dir" : 'X\(/\)' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X"$as_dir" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+ /^X\(\/\/\)$/{ s//\1/; q; }
+ /^X\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`
+ done
+ test ! -n "$as_dirs" || mkdir $as_dirs
+ fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
+echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
+ { (exit 1); exit 1; }; }; }
+
+ ac_builddir=.
+
+if test "$ac_dir" != .; then
+ ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
+ # A "../" for each directory in $ac_dir_suffix.
+ ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
+else
+ ac_dir_suffix= ac_top_builddir=
+fi
+
+case $srcdir in
+ .) # No --srcdir option. We are building in place.
+ ac_srcdir=.
+ if test -z "$ac_top_builddir"; then
+ ac_top_srcdir=.
+ else
+ ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
+ fi ;;
+ [\\/]* | ?:[\\/]* ) # Absolute path.
+ ac_srcdir=$srcdir$ac_dir_suffix;
+ ac_top_srcdir=$srcdir ;;
+ *) # Relative path.
+ ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
+ ac_top_srcdir=$ac_top_builddir$srcdir ;;
+esac
+
+# Do not use `cd foo && pwd` to compute absolute paths, because
+# the directories may not exist.
+case `pwd` in
+.) ac_abs_builddir="$ac_dir";;
+*)
+ case "$ac_dir" in
+ .) ac_abs_builddir=`pwd`;;
+ [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
+ *) ac_abs_builddir=`pwd`/"$ac_dir";;
+ esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_builddir=${ac_top_builddir}.;;
+*)
+ case ${ac_top_builddir}. in
+ .) ac_abs_top_builddir=$ac_abs_builddir;;
+ [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
+ *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
+ esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_srcdir=$ac_srcdir;;
+*)
+ case $ac_srcdir in
+ .) ac_abs_srcdir=$ac_abs_builddir;;
+ [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
+ *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
+ esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_srcdir=$ac_top_srcdir;;
+*)
+ case $ac_top_srcdir in
+ .) ac_abs_top_srcdir=$ac_abs_builddir;;
+ [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
+ *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
+ esac;;
+esac
+
+
+ case $INSTALL in
+ [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
+ *) ac_INSTALL=$ac_top_builddir$INSTALL ;;
+ esac
+
+ if test x"$ac_file" != x-; then
+ { echo "$as_me:$LINENO: creating $ac_file" >&5
+echo "$as_me: creating $ac_file" >&6;}
+ rm -f "$ac_file"
+ fi
+ # Let's still pretend it is `configure' which instantiates (i.e., don't
+ # use $as_me), people would be surprised to read:
+ # /* config.h. Generated by config.status. */
+ if test x"$ac_file" = x-; then
+ configure_input=
+ else
+ configure_input="$ac_file. "
+ fi
+ configure_input=$configure_input"Generated from `echo $ac_file_in |
+ sed 's,.*/,,'` by configure."
+
+ # First look for the input files in the build tree, otherwise in the
+ # src tree.
+ ac_file_inputs=`IFS=:
+ for f in $ac_file_in; do
+ case $f in
+ -) echo $tmp/stdin ;;
+ [\\/$]*)
+ # Absolute (can't be DOS-style, as IFS=:)
+ test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+ { (exit 1); exit 1; }; }
+ echo "$f";;
+ *) # Relative
+ if test -f "$f"; then
+ # Build tree
+ echo "$f"
+ elif test -f "$srcdir/$f"; then
+ # Source tree
+ echo "$srcdir/$f"
+ else
+ # /dev/null tree
+ { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+ { (exit 1); exit 1; }; }
+ fi;;
+ esac
+ done` || { (exit 1); exit 1; }
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF
+ sed "$ac_vpsub
+$extrasub
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+:t
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
+s,@configure_input@,$configure_input,;t t
+s,@srcdir@,$ac_srcdir,;t t
+s,@abs_srcdir@,$ac_abs_srcdir,;t t
+s,@top_srcdir@,$ac_top_srcdir,;t t
+s,@abs_top_srcdir@,$ac_abs_top_srcdir,;t t
+s,@builddir@,$ac_builddir,;t t
+s,@abs_builddir@,$ac_abs_builddir,;t t
+s,@top_builddir@,$ac_top_builddir,;t t
+s,@abs_top_builddir@,$ac_abs_top_builddir,;t t
+s,@INSTALL@,$ac_INSTALL,;t t
+" $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out
+ rm -f $tmp/stdin
+ if test x"$ac_file" != x-; then
+ mv $tmp/out $ac_file
+ else
+ cat $tmp/out
+ rm -f $tmp/out
+ fi
+
+done
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+
+#
+# CONFIG_HEADER section.
+#
+
+# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where
+# NAME is the cpp macro being defined and VALUE is the value it is being given.
+#
+# ac_d sets the value in "#define NAME VALUE" lines.
+ac_dA='s,^\([ ]*\)#\([ ]*define[ ][ ]*\)'
+ac_dB='[ ].*$,\1#\2'
+ac_dC=' '
+ac_dD=',;t'
+# ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE".
+ac_uA='s,^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)'
+ac_uB='$,\1#\2define\3'
+ac_uC=' '
+ac_uD=',;t'
+
+for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue
+ # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
+ case $ac_file in
+ - | *:- | *:-:* ) # input from stdin
+ cat >$tmp/stdin
+ ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+ ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+ *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+ ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+ * ) ac_file_in=$ac_file.in ;;
+ esac
+
+ test x"$ac_file" != x- && { echo "$as_me:$LINENO: creating $ac_file" >&5
+echo "$as_me: creating $ac_file" >&6;}
+
+ # First look for the input files in the build tree, otherwise in the
+ # src tree.
+ ac_file_inputs=`IFS=:
+ for f in $ac_file_in; do
+ case $f in
+ -) echo $tmp/stdin ;;
+ [\\/$]*)
+ # Absolute (can't be DOS-style, as IFS=:)
+ test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+ { (exit 1); exit 1; }; }
+ # Do quote $f, to prevent DOS paths from being IFS'd.
+ echo "$f";;
+ *) # Relative
+ if test -f "$f"; then
+ # Build tree
+ echo "$f"
+ elif test -f "$srcdir/$f"; then
+ # Source tree
+ echo "$srcdir/$f"
+ else
+ # /dev/null tree
+ { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+ { (exit 1); exit 1; }; }
+ fi;;
+ esac
+ done` || { (exit 1); exit 1; }
+ # Remove the trailing spaces.
+ sed 's/[ ]*$//' $ac_file_inputs >$tmp/in
+
+_ACEOF
+
+# Transform confdefs.h into two sed scripts, `conftest.defines' and
+# `conftest.undefs', that substitutes the proper values into
+# config.h.in to produce config.h. The first handles `#define'
+# templates, and the second `#undef' templates.
+# And first: Protect against being on the right side of a sed subst in
+# config.status. Protect against being in an unquoted here document
+# in config.status.
+rm -f conftest.defines conftest.undefs
+# Using a here document instead of a string reduces the quoting nightmare.
+# Putting comments in sed scripts is not portable.
+#
+# `end' is used to avoid that the second main sed command (meant for
+# 0-ary CPP macros) applies to n-ary macro definitions.
+# See the Autoconf documentation for `clear'.
+cat >confdef2sed.sed <<\_ACEOF
+s/[\\&,]/\\&/g
+s,[\\$`],\\&,g
+t clear
+: clear
+s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*\)\(([^)]*)\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1\2${ac_dC}\3${ac_dD},gp
+t end
+s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp
+: end
+_ACEOF
+# If some macros were called several times there might be several times
+# the same #defines, which is useless. Nevertheless, we may not want to
+# sort them, since we want the *last* AC-DEFINE to be honored.
+uniq confdefs.h | sed -n -f confdef2sed.sed >conftest.defines
+sed 's/ac_d/ac_u/g' conftest.defines >conftest.undefs
+rm -f confdef2sed.sed
+
+# This sed command replaces #undef with comments. This is necessary, for
+# example, in the case of _POSIX_SOURCE, which is predefined and required
+# on some systems where configure will not decide to define it.
+cat >>conftest.undefs <<\_ACEOF
+s,^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */,
+_ACEOF
+
+# Break up conftest.defines because some shells have a limit on the size
+# of here documents, and old seds have small limits too (100 cmds).
+echo ' # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS
+echo ' if grep "^[ ]*#[ ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS
+echo ' # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS
+echo ' :' >>$CONFIG_STATUS
+rm -f conftest.tail
+while grep . conftest.defines >/dev/null
+do
+ # Write a limited-size here document to $tmp/defines.sed.
+ echo ' cat >$tmp/defines.sed <<CEOF' >>$CONFIG_STATUS
+ # Speed up: don't consider the non `#define' lines.
+ echo '/^[ ]*#[ ]*define/!b' >>$CONFIG_STATUS
+ # Work around the forget-to-reset-the-flag bug.
+ echo 't clr' >>$CONFIG_STATUS
+ echo ': clr' >>$CONFIG_STATUS
+ sed ${ac_max_here_lines}q conftest.defines >>$CONFIG_STATUS
+ echo 'CEOF
+ sed -f $tmp/defines.sed $tmp/in >$tmp/out
+ rm -f $tmp/in
+ mv $tmp/out $tmp/in
+' >>$CONFIG_STATUS
+ sed 1,${ac_max_here_lines}d conftest.defines >conftest.tail
+ rm -f conftest.defines
+ mv conftest.tail conftest.defines
+done
+rm -f conftest.defines
+echo ' fi # grep' >>$CONFIG_STATUS
+echo >>$CONFIG_STATUS
+
+# Break up conftest.undefs because some shells have a limit on the size
+# of here documents, and old seds have small limits too (100 cmds).
+echo ' # Handle all the #undef templates' >>$CONFIG_STATUS
+rm -f conftest.tail
+while grep . conftest.undefs >/dev/null
+do
+ # Write a limited-size here document to $tmp/undefs.sed.
+ echo ' cat >$tmp/undefs.sed <<CEOF' >>$CONFIG_STATUS
+ # Speed up: don't consider the non `#undef'
+ echo '/^[ ]*#[ ]*undef/!b' >>$CONFIG_STATUS
+ # Work around the forget-to-reset-the-flag bug.
+ echo 't clr' >>$CONFIG_STATUS
+ echo ': clr' >>$CONFIG_STATUS
+ sed ${ac_max_here_lines}q conftest.undefs >>$CONFIG_STATUS
+ echo 'CEOF
+ sed -f $tmp/undefs.sed $tmp/in >$tmp/out
+ rm -f $tmp/in
+ mv $tmp/out $tmp/in
+' >>$CONFIG_STATUS
+ sed 1,${ac_max_here_lines}d conftest.undefs >conftest.tail
+ rm -f conftest.undefs
+ mv conftest.tail conftest.undefs
+done
+rm -f conftest.undefs
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+ # Let's still pretend it is `configure' which instantiates (i.e., don't
+ # use $as_me), people would be surprised to read:
+ # /* config.h. Generated by config.status. */
+ if test x"$ac_file" = x-; then
+ echo "/* Generated by configure. */" >$tmp/config.h
+ else
+ echo "/* $ac_file. Generated by configure. */" >$tmp/config.h
+ fi
+ cat $tmp/in >>$tmp/config.h
+ rm -f $tmp/in
+ if test x"$ac_file" != x-; then
+ if diff $ac_file $tmp/config.h >/dev/null 2>&1; then
+ { echo "$as_me:$LINENO: $ac_file is unchanged" >&5
+echo "$as_me: $ac_file is unchanged" >&6;}
+ else
+ ac_dir=`(dirname "$ac_file") 2>/dev/null ||
+$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$ac_file" : 'X\(//\)[^/]' \| \
+ X"$ac_file" : 'X\(//\)$' \| \
+ X"$ac_file" : 'X\(/\)' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X"$ac_file" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+ /^X\(\/\/\)$/{ s//\1/; q; }
+ /^X\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`
+ { if $as_mkdir_p; then
+ mkdir -p "$ac_dir"
+ else
+ as_dir="$ac_dir"
+ as_dirs=
+ while test ! -d "$as_dir"; do
+ as_dirs="$as_dir $as_dirs"
+ as_dir=`(dirname "$as_dir") 2>/dev/null ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_dir" : 'X\(//\)[^/]' \| \
+ X"$as_dir" : 'X\(//\)$' \| \
+ X"$as_dir" : 'X\(/\)' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X"$as_dir" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+ /^X\(\/\/\)$/{ s//\1/; q; }
+ /^X\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`
+ done
+ test ! -n "$as_dirs" || mkdir $as_dirs
+ fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
+echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
+ { (exit 1); exit 1; }; }; }
+
+ rm -f $ac_file
+ mv $tmp/config.h $ac_file
+ fi
+ else
+ cat $tmp/config.h
+ rm -f $tmp/config.h
+ fi
+# Compute $ac_file's index in $config_headers.
+_am_stamp_count=1
+for _am_header in $config_headers :; do
+ case $_am_header in
+ $ac_file | $ac_file:* )
+ break ;;
+ * )
+ _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+ esac
+done
+echo "timestamp for $ac_file" >`(dirname $ac_file) 2>/dev/null ||
+$as_expr X$ac_file : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X$ac_file : 'X\(//\)[^/]' \| \
+ X$ac_file : 'X\(//\)$' \| \
+ X$ac_file : 'X\(/\)' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X$ac_file |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+ /^X\(\/\/\)$/{ s//\1/; q; }
+ /^X\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`/stamp-h$_am_stamp_count
+done
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+
+#
+# CONFIG_COMMANDS section.
+#
+for ac_file in : $CONFIG_COMMANDS; do test "x$ac_file" = x: && continue
+ ac_dest=`echo "$ac_file" | sed 's,:.*,,'`
+ ac_source=`echo "$ac_file" | sed 's,[^:]*:,,'`
+ ac_dir=`(dirname "$ac_dest") 2>/dev/null ||
+$as_expr X"$ac_dest" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$ac_dest" : 'X\(//\)[^/]' \| \
+ X"$ac_dest" : 'X\(//\)$' \| \
+ X"$ac_dest" : 'X\(/\)' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X"$ac_dest" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+ /^X\(\/\/\)$/{ s//\1/; q; }
+ /^X\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`
+ { if $as_mkdir_p; then
+ mkdir -p "$ac_dir"
+ else
+ as_dir="$ac_dir"
+ as_dirs=
+ while test ! -d "$as_dir"; do
+ as_dirs="$as_dir $as_dirs"
+ as_dir=`(dirname "$as_dir") 2>/dev/null ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_dir" : 'X\(//\)[^/]' \| \
+ X"$as_dir" : 'X\(//\)$' \| \
+ X"$as_dir" : 'X\(/\)' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X"$as_dir" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+ /^X\(\/\/\)$/{ s//\1/; q; }
+ /^X\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`
+ done
+ test ! -n "$as_dirs" || mkdir $as_dirs
+ fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
+echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
+ { (exit 1); exit 1; }; }; }
+
+ ac_builddir=.
+
+if test "$ac_dir" != .; then
+ ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
+ # A "../" for each directory in $ac_dir_suffix.
+ ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
+else
+ ac_dir_suffix= ac_top_builddir=
+fi
+
+case $srcdir in
+ .) # No --srcdir option. We are building in place.
+ ac_srcdir=.
+ if test -z "$ac_top_builddir"; then
+ ac_top_srcdir=.
+ else
+ ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
+ fi ;;
+ [\\/]* | ?:[\\/]* ) # Absolute path.
+ ac_srcdir=$srcdir$ac_dir_suffix;
+ ac_top_srcdir=$srcdir ;;
+ *) # Relative path.
+ ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
+ ac_top_srcdir=$ac_top_builddir$srcdir ;;
+esac
+
+# Do not use `cd foo && pwd` to compute absolute paths, because
+# the directories may not exist.
+case `pwd` in
+.) ac_abs_builddir="$ac_dir";;
+*)
+ case "$ac_dir" in
+ .) ac_abs_builddir=`pwd`;;
+ [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
+ *) ac_abs_builddir=`pwd`/"$ac_dir";;
+ esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_builddir=${ac_top_builddir}.;;
+*)
+ case ${ac_top_builddir}. in
+ .) ac_abs_top_builddir=$ac_abs_builddir;;
+ [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
+ *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
+ esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_srcdir=$ac_srcdir;;
+*)
+ case $ac_srcdir in
+ .) ac_abs_srcdir=$ac_abs_builddir;;
+ [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
+ *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
+ esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_srcdir=$ac_top_srcdir;;
+*)
+ case $ac_top_srcdir in
+ .) ac_abs_top_srcdir=$ac_abs_builddir;;
+ [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
+ *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
+ esac;;
+esac
+
+
+ { echo "$as_me:$LINENO: executing $ac_dest commands" >&5
+echo "$as_me: executing $ac_dest commands" >&6;}
+ case $ac_dest in
+ depfiles ) test x"$AMDEP_TRUE" != x"" || for mf in $CONFIG_FILES; do
+ # Strip MF so we end up with the name of the file.
+ mf=`echo "$mf" | sed -e 's/:.*$//'`
+ # Check whether this is an Automake generated Makefile or not.
+ # We used to match only the files named `Makefile.in', but
+ # some people rename them; so instead we look at the file content.
+ # Grep'ing the first line is not enough: some people post-process
+ # each Makefile.in and add a new line on top of each file to say so.
+ # So let's grep whole file.
+ if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then
+ dirpart=`(dirname "$mf") 2>/dev/null ||
+$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$mf" : 'X\(//\)[^/]' \| \
+ X"$mf" : 'X\(//\)$' \| \
+ X"$mf" : 'X\(/\)' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X"$mf" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+ /^X\(\/\/\)$/{ s//\1/; q; }
+ /^X\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`
+ else
+ continue
+ fi
+ grep '^DEP_FILES *= *[^ #]' < "$mf" > /dev/null || continue
+ # Extract the definition of DEP_FILES from the Makefile without
+ # running `make'.
+ DEPDIR=`sed -n -e '/^DEPDIR = / s///p' < "$mf"`
+ test -z "$DEPDIR" && continue
+ # When using ansi2knr, U may be empty or an underscore; expand it
+ U=`sed -n -e '/^U = / s///p' < "$mf"`
+ test -d "$dirpart/$DEPDIR" || mkdir "$dirpart/$DEPDIR"
+ # We invoke sed twice because it is the simplest approach to
+ # changing $(DEPDIR) to its actual value in the expansion.
+ for file in `sed -n -e '
+ /^DEP_FILES = .*\\\\$/ {
+ s/^DEP_FILES = //
+ :loop
+ s/\\\\$//
+ p
+ n
+ /\\\\$/ b loop
+ p
+ }
+ /^DEP_FILES = / s/^DEP_FILES = //p' < "$mf" | \
+ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
+ # Make sure the directory exists.
+ test -f "$dirpart/$file" && continue
+ fdir=`(dirname "$file") 2>/dev/null ||
+$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$file" : 'X\(//\)[^/]' \| \
+ X"$file" : 'X\(//\)$' \| \
+ X"$file" : 'X\(/\)' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X"$file" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+ /^X\(\/\/\)$/{ s//\1/; q; }
+ /^X\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`
+ { if $as_mkdir_p; then
+ mkdir -p $dirpart/$fdir
+ else
+ as_dir=$dirpart/$fdir
+ as_dirs=
+ while test ! -d "$as_dir"; do
+ as_dirs="$as_dir $as_dirs"
+ as_dir=`(dirname "$as_dir") 2>/dev/null ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_dir" : 'X\(//\)[^/]' \| \
+ X"$as_dir" : 'X\(//\)$' \| \
+ X"$as_dir" : 'X\(/\)' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X"$as_dir" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+ /^X\(\/\/\)$/{ s//\1/; q; }
+ /^X\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`
+ done
+ test ! -n "$as_dirs" || mkdir $as_dirs
+ fi || { { echo "$as_me:$LINENO: error: cannot create directory $dirpart/$fdir" >&5
+echo "$as_me: error: cannot create directory $dirpart/$fdir" >&2;}
+ { (exit 1); exit 1; }; }; }
+
+ # echo "creating $dirpart/$file"
+ echo '# dummy' > "$dirpart/$file"
+ done
+done
+ ;;
+ esac
+done
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+
+{ (exit 0); exit 0; }
+_ACEOF
+chmod +x $CONFIG_STATUS
+ac_clean_files=$ac_clean_files_save
+
+
+# configure is writing to config.log, and then calls config.status.
+# config.status does its own redirection, appending to config.log.
+# Unfortunately, on DOS this fails, as config.log is still kept open
+# by configure, so config.status won't be able to write to it; its
+# output is simply discarded. So we exec the FD to /dev/null,
+# effectively closing config.log, so it can be properly (re)opened and
+# appended to by config.status. When coming back to configure, we
+# need to make the FD available again.
+if test "$no_create" != yes; then
+ ac_cs_success=:
+ ac_config_status_args=
+ test "$silent" = yes &&
+ ac_config_status_args="$ac_config_status_args --quiet"
+ exec 5>/dev/null
+ $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
+ exec 5>>config.log
+ # Use ||, not &&, to avoid exiting from the if with $? = 1, which
+ # would make configure fail if this is the last instruction.
+ $ac_cs_success || { (exit 1); exit 1; }
+fi
+
--- /dev/null
+dnl $Id: configure.ac,v 1.1.2.1.2.31 2004/02/11 21:06:17 ensc Exp $
+
+dnl Copyright (C) 2003 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+dnl
+dnl This program is free software; you can redistribute it and/or modify
+dnl it under the terms of the GNU General Public License as published by
+dnl the Free Software Foundation; either version 2, or (at your option)
+dnl any later version.
+dnl
+dnl This program is distributed in the hope that it will be useful,
+dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
+dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+dnl GNU General Public License for more details.
+dnl
+dnl You should have received a copy of the GNU General Public License
+dnl along with this program; if not, write to the Free Software
+dnl Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+dnl
+dnl
+dnl As a special exception to the GNU General Public License, if you
+dnl distribute this file as part of a program that contains a configuration
+dnl script generated by Autoconf, you may include it under the same
+dnl distribution terms that you use for the rest of that program.
+dnl
+
+AC_PREREQ(2.57)
+
+AC_INIT(util-vserver, 0.29, enrico.scholz@informatik.tu-chemnitz.de)
+AC_CONFIG_SRCDIR([src/capchroot.c])
+AC_CONFIG_HEADER([config.h])
+
+AM_INIT_AUTOMAKE([gnu dist-bzip2 subdir-objects])
+AM_MAINTAINER_MODE
+
+
+# Checks for programs.
+AC_PROG_CXX
+AC_PROG_CC
+AC_PROG_INSTALL
+AC_PROG_LN_S
+AC_PROG_RANLIB
+AM_PROG_CC_C_O
+
+ENSC_CHECK_CC_FLAG([-std=c99 -Wall -pedantic -W -Wno-unused-parameter])
+ENSC_CHECK_CXX_FLAG([-ansi -Wall -pedantic -W -fmessage-length=0])
+
+AC_ARG_VAR(CC, [The C compiler])
+ENSC_KERNEL_HEADERS(kernelincludedir)
+ENSC_UV_VROOTDIR(vserverdir)
+ENSC_CHANGELOG([SYSCALL_SWITCH])
+
+dnl Check whether to enable linuxconf
+AC_MSG_CHECKING([whether to enable linuxconf modules])
+AC_ARG_ENABLE([linuxconf],
+ [AC_HELP_STRING([--enable-linuxconf],
+ [enable 'newvserver' linuxconf module (default: no)])],
+ [case "$enableval" in
+ yes|no) ;;
+ *) AC_MSG_ERROR(['$i' is not a supported value for '--enable-linuxconf']);;
+ esac],
+ [enable_linuxconf=no])
+
+AM_CONDITIONAL(ENSC_ENABLE_LINUXCONF, [test x"$enable_linuxconf" = xyes])
+AC_MSG_RESULT($enable_linuxconf)
+
+
+dnl Check whether to use external kernel headers
+AC_MSG_CHECKING([whether to use internal kernel headers])
+AC_ARG_ENABLE([internal-headers],
+ [AC_HELP_STRING([--disable-internal-headers],
+ [use vserver specific headers from the kernel instead of the shipped versions (default: no)])],
+ [case "$enableval" in
+ yes|no) ;;
+ *) AC_MSG_ERROR(['$i' is not a supported value for '--disable-internal-headers']);;
+ esac],
+ [enable_internal_headers=yes])
+
+AM_CONDITIONAL(ENSC_ENABLE_INTERNAL_HEADERS, [test x"$enable_internal_headers" = xyes])
+AC_MSG_RESULT([$enable_internal_headers])
+
+
+dnl Check for the APIs to be used
+AC_MSG_CHECKING([for supported APIs])
+AC_ARG_ENABLE([apis],
+ [AC_HELP_STRING([--enable-apis=APIS],
+ [enable support for the given apis; possible values are: legacy,compat,v11,ALL (default: ALL)])],
+ [],
+ [enable_apis=ALL])
+
+test x"$enable_apis" != xALL || enable_apis='legacy,compat,v11'
+old_IFS=$IFS
+IFS=,;
+for i in $enable_apis; do
+ case "$i" in
+ compat) AC_DEFINE(VC_ENABLE_API_COMPAT, 1, [Enable support for compatibily syscall API]);;
+ legacy) AC_DEFINE(VC_ENABLE_API_LEGACY, 1, [Enable support for old, /proc parsing API]);;
+ v11) AC_DEFINE(VC_ENABLE_API_V11, 1, [Enable support for API of vserver 1.1.x]);;
+ *) AC_MSG_ERROR(['$i' is not a supported API]);;
+ esac
+done
+IFS=$old_IFS
+AC_MSG_RESULT([$enable_apis])
+
+ENSC_SYSCALL
+ENSC_CHECK_EXT2FS_HEADER
+AC_CHECK_FUNCS([vserver])
+AC_CHECK_DECLS(MS_MOVE,,,[#include <linux/fs.h>])
+AC_CHECK_TYPES(xid_t,,,[#include <sys/types.h>])
+
+AC_CONFIG_FILES([util-vserver.spec Makefile])
+AC_OUTPUT
--- /dev/null
+#! /bin/sh
+# depcomp - compile a program generating dependencies as side-effects
+
+scriptversion=2003-11-08.23
+
+# Copyright (C) 1999, 2000, 2003 Free Software Foundation, Inc.
+
+# 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, 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., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
+
+case $1 in
+ '')
+ echo "$0: No command. Try \`$0 --help' for more information." 1>&2
+ exit 1;
+ ;;
+ -h | --h*)
+ cat <<\EOF
+Usage: depcomp [--help] [--version] PROGRAM [ARGS]
+
+Run PROGRAMS ARGS to compile a file, generating dependencies
+as side-effects.
+
+Environment variables:
+ depmode Dependency tracking mode.
+ source Source file read by `PROGRAMS ARGS'.
+ object Object file output by `PROGRAMS ARGS'.
+ depfile Dependency file to output.
+ tmpdepfile Temporary file to use when outputing dependencies.
+ libtool Whether libtool is used (yes/no).
+
+Report bugs to <bug-automake@gnu.org>.
+EOF
+ exit 0
+ ;;
+ -v | --v*)
+ echo "depcomp $scriptversion"
+ exit 0
+ ;;
+esac
+
+if test -z "$depmode" || test -z "$source" || test -z "$object"; then
+ echo "depcomp: Variables source, object and depmode must be set" 1>&2
+ exit 1
+fi
+# `libtool' can also be set to `yes' or `no'.
+
+if test -z "$depfile"; then
+ base=`echo "$object" | sed -e 's,^.*/,,' -e 's,\.\([^.]*\)$,.P\1,'`
+ dir=`echo "$object" | sed 's,/.*$,/,'`
+ if test "$dir" = "$object"; then
+ dir=
+ fi
+ # FIXME: should be _deps on DOS.
+ depfile="$dir.deps/$base"
+fi
+
+tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
+
+rm -f "$tmpdepfile"
+
+# Some modes work just like other modes, but use different flags. We
+# parameterize here, but still list the modes in the big case below,
+# to make depend.m4 easier to write. Note that we *cannot* use a case
+# here, because this file can only contain one case statement.
+if test "$depmode" = hp; then
+ # HP compiler uses -M and no extra arg.
+ gccflag=-M
+ depmode=gcc
+fi
+
+if test "$depmode" = dashXmstdout; then
+ # This is just like dashmstdout with a different argument.
+ dashmflag=-xM
+ depmode=dashmstdout
+fi
+
+case "$depmode" in
+gcc3)
+## gcc 3 implements dependency tracking that does exactly what
+## we want. Yay! Note: for some reason libtool 1.4 doesn't like
+## it if -MD -MP comes after the -MF stuff. Hmm.
+ "$@" -MT "$object" -MD -MP -MF "$tmpdepfile"
+ stat=$?
+ if test $stat -eq 0; then :
+ else
+ rm -f "$tmpdepfile"
+ exit $stat
+ fi
+ mv "$tmpdepfile" "$depfile"
+ ;;
+
+gcc)
+## There are various ways to get dependency output from gcc. Here's
+## why we pick this rather obscure method:
+## - Don't want to use -MD because we'd like the dependencies to end
+## up in a subdir. Having to rename by hand is ugly.
+## (We might end up doing this anyway to support other compilers.)
+## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
+## -MM, not -M (despite what the docs say).
+## - Using -M directly means running the compiler twice (even worse
+## than renaming).
+ if test -z "$gccflag"; then
+ gccflag=-MD,
+ fi
+ "$@" -Wp,"$gccflag$tmpdepfile"
+ stat=$?
+ if test $stat -eq 0; then :
+ else
+ rm -f "$tmpdepfile"
+ exit $stat
+ fi
+ rm -f "$depfile"
+ echo "$object : \\" > "$depfile"
+ alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
+## The second -e expression handles DOS-style file names with drive letters.
+ sed -e 's/^[^:]*: / /' \
+ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
+## This next piece of magic avoids the `deleted header file' problem.
+## The problem is that when a header file which appears in a .P file
+## is deleted, the dependency causes make to die (because there is
+## typically no way to rebuild the header). We avoid this by adding
+## dummy dependencies for each header file. Too bad gcc doesn't do
+## this for us directly.
+ tr ' ' '
+' < "$tmpdepfile" |
+## Some versions of gcc put a space before the `:'. On the theory
+## that the space means something, we add a space to the output as
+## well.
+## Some versions of the HPUX 10.20 sed can't process this invocation
+## correctly. Breaking it into two sed invocations is a workaround.
+ sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
+ rm -f "$tmpdepfile"
+ ;;
+
+hp)
+ # This case exists only to let depend.m4 do its work. It works by
+ # looking at the text of this script. This case will never be run,
+ # since it is checked for above.
+ exit 1
+ ;;
+
+sgi)
+ if test "$libtool" = yes; then
+ "$@" "-Wp,-MDupdate,$tmpdepfile"
+ else
+ "$@" -MDupdate "$tmpdepfile"
+ fi
+ stat=$?
+ if test $stat -eq 0; then :
+ else
+ rm -f "$tmpdepfile"
+ exit $stat
+ fi
+ rm -f "$depfile"
+
+ if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files
+ echo "$object : \\" > "$depfile"
+
+ # Clip off the initial element (the dependent). Don't try to be
+ # clever and replace this with sed code, as IRIX sed won't handle
+ # lines with more than a fixed number of characters (4096 in
+ # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines;
+ # the IRIX cc adds comments like `#:fec' to the end of the
+ # dependency line.
+ tr ' ' '
+' < "$tmpdepfile" \
+ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
+ tr '
+' ' ' >> $depfile
+ echo >> $depfile
+
+ # The second pass generates a dummy entry for each header file.
+ tr ' ' '
+' < "$tmpdepfile" \
+ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
+ >> $depfile
+ else
+ # The sourcefile does not contain any dependencies, so just
+ # store a dummy comment line, to avoid errors with the Makefile
+ # "include basename.Plo" scheme.
+ echo "#dummy" > "$depfile"
+ fi
+ rm -f "$tmpdepfile"
+ ;;
+
+aix)
+ # The C for AIX Compiler uses -M and outputs the dependencies
+ # in a .u file. In older versions, this file always lives in the
+ # current directory. Also, the AIX compiler puts `$object:' at the
+ # start of each line; $object doesn't have directory information.
+ # Version 6 uses the directory in both cases.
+ stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'`
+ tmpdepfile="$stripped.u"
+ if test "$libtool" = yes; then
+ "$@" -Wc,-M
+ else
+ "$@" -M
+ fi
+ stat=$?
+
+ if test -f "$tmpdepfile"; then :
+ else
+ stripped=`echo "$stripped" | sed 's,^.*/,,'`
+ tmpdepfile="$stripped.u"
+ fi
+
+ if test $stat -eq 0; then :
+ else
+ rm -f "$tmpdepfile"
+ exit $stat
+ fi
+
+ if test -f "$tmpdepfile"; then
+ outname="$stripped.o"
+ # Each line is of the form `foo.o: dependent.h'.
+ # Do two passes, one to just change these to
+ # `$object: dependent.h' and one to simply `dependent.h:'.
+ sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile"
+ sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile"
+ else
+ # The sourcefile does not contain any dependencies, so just
+ # store a dummy comment line, to avoid errors with the Makefile
+ # "include basename.Plo" scheme.
+ echo "#dummy" > "$depfile"
+ fi
+ rm -f "$tmpdepfile"
+ ;;
+
+icc)
+ # Intel's C compiler understands `-MD -MF file'. However on
+ # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
+ # ICC 7.0 will fill foo.d with something like
+ # foo.o: sub/foo.c
+ # foo.o: sub/foo.h
+ # which is wrong. We want:
+ # sub/foo.o: sub/foo.c
+ # sub/foo.o: sub/foo.h
+ # sub/foo.c:
+ # sub/foo.h:
+ # ICC 7.1 will output
+ # foo.o: sub/foo.c sub/foo.h
+ # and will wrap long lines using \ :
+ # foo.o: sub/foo.c ... \
+ # sub/foo.h ... \
+ # ...
+
+ "$@" -MD -MF "$tmpdepfile"
+ stat=$?
+ if test $stat -eq 0; then :
+ else
+ rm -f "$tmpdepfile"
+ exit $stat
+ fi
+ rm -f "$depfile"
+ # Each line is of the form `foo.o: dependent.h',
+ # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
+ # Do two passes, one to just change these to
+ # `$object: dependent.h' and one to simply `dependent.h:'.
+ sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
+ # Some versions of the HPUX 10.20 sed can't process this invocation
+ # correctly. Breaking it into two sed invocations is a workaround.
+ sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
+ sed -e 's/$/ :/' >> "$depfile"
+ rm -f "$tmpdepfile"
+ ;;
+
+tru64)
+ # The Tru64 compiler uses -MD to generate dependencies as a side
+ # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
+ # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
+ # dependencies in `foo.d' instead, so we check for that too.
+ # Subdirectories are respected.
+ dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
+ test "x$dir" = "x$object" && dir=
+ base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
+
+ if test "$libtool" = yes; then
+ tmpdepfile1="$dir.libs/$base.lo.d"
+ tmpdepfile2="$dir.libs/$base.d"
+ "$@" -Wc,-MD
+ else
+ tmpdepfile1="$dir$base.o.d"
+ tmpdepfile2="$dir$base.d"
+ "$@" -MD
+ fi
+
+ stat=$?
+ if test $stat -eq 0; then :
+ else
+ rm -f "$tmpdepfile1" "$tmpdepfile2"
+ exit $stat
+ fi
+
+ if test -f "$tmpdepfile1"; then
+ tmpdepfile="$tmpdepfile1"
+ else
+ tmpdepfile="$tmpdepfile2"
+ fi
+ if test -f "$tmpdepfile"; then
+ sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
+ # That's a tab and a space in the [].
+ sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
+ else
+ echo "#dummy" > "$depfile"
+ fi
+ rm -f "$tmpdepfile"
+ ;;
+
+#nosideeffect)
+ # This comment above is used by automake to tell side-effect
+ # dependency tracking mechanisms from slower ones.
+
+dashmstdout)
+ # Important note: in order to support this mode, a compiler *must*
+ # always write the preprocessed file to stdout, regardless of -o.
+ "$@" || exit $?
+
+ # Remove the call to Libtool.
+ if test "$libtool" = yes; then
+ while test $1 != '--mode=compile'; do
+ shift
+ done
+ shift
+ fi
+
+ # Remove `-o $object'.
+ IFS=" "
+ for arg
+ do
+ case $arg in
+ -o)
+ shift
+ ;;
+ $object)
+ shift
+ ;;
+ *)
+ set fnord "$@" "$arg"
+ shift # fnord
+ shift # $arg
+ ;;
+ esac
+ done
+
+ test -z "$dashmflag" && dashmflag=-M
+ # Require at least two characters before searching for `:'
+ # in the target name. This is to cope with DOS-style filenames:
+ # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
+ "$@" $dashmflag |
+ sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile"
+ rm -f "$depfile"
+ cat < "$tmpdepfile" > "$depfile"
+ tr ' ' '
+' < "$tmpdepfile" | \
+## Some versions of the HPUX 10.20 sed can't process this invocation
+## correctly. Breaking it into two sed invocations is a workaround.
+ sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
+ rm -f "$tmpdepfile"
+ ;;
+
+dashXmstdout)
+ # This case only exists to satisfy depend.m4. It is never actually
+ # run, as this mode is specially recognized in the preamble.
+ exit 1
+ ;;
+
+makedepend)
+ "$@" || exit $?
+ # Remove any Libtool call
+ if test "$libtool" = yes; then
+ while test $1 != '--mode=compile'; do
+ shift
+ done
+ shift
+ fi
+ # X makedepend
+ shift
+ cleared=no
+ for arg in "$@"; do
+ case $cleared in
+ no)
+ set ""; shift
+ cleared=yes ;;
+ esac
+ case "$arg" in
+ -D*|-I*)
+ set fnord "$@" "$arg"; shift ;;
+ # Strip any option that makedepend may not understand. Remove
+ # the object too, otherwise makedepend will parse it as a source file.
+ -*|$object)
+ ;;
+ *)
+ set fnord "$@" "$arg"; shift ;;
+ esac
+ done
+ obj_suffix="`echo $object | sed 's/^.*\././'`"
+ touch "$tmpdepfile"
+ ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
+ rm -f "$depfile"
+ cat < "$tmpdepfile" > "$depfile"
+ sed '1,2d' "$tmpdepfile" | tr ' ' '
+' | \
+## Some versions of the HPUX 10.20 sed can't process this invocation
+## correctly. Breaking it into two sed invocations is a workaround.
+ sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
+ rm -f "$tmpdepfile" "$tmpdepfile".bak
+ ;;
+
+cpp)
+ # Important note: in order to support this mode, a compiler *must*
+ # always write the preprocessed file to stdout.
+ "$@" || exit $?
+
+ # Remove the call to Libtool.
+ if test "$libtool" = yes; then
+ while test $1 != '--mode=compile'; do
+ shift
+ done
+ shift
+ fi
+
+ # Remove `-o $object'.
+ IFS=" "
+ for arg
+ do
+ case $arg in
+ -o)
+ shift
+ ;;
+ $object)
+ shift
+ ;;
+ *)
+ set fnord "$@" "$arg"
+ shift # fnord
+ shift # $arg
+ ;;
+ esac
+ done
+
+ "$@" -E |
+ sed -n '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
+ sed '$ s: \\$::' > "$tmpdepfile"
+ rm -f "$depfile"
+ echo "$object : \\" > "$depfile"
+ cat < "$tmpdepfile" >> "$depfile"
+ sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
+ rm -f "$tmpdepfile"
+ ;;
+
+msvisualcpp)
+ # Important note: in order to support this mode, a compiler *must*
+ # always write the preprocessed file to stdout, regardless of -o,
+ # because we must use -o when running libtool.
+ "$@" || exit $?
+ IFS=" "
+ for arg
+ do
+ case "$arg" in
+ "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
+ set fnord "$@"
+ shift
+ shift
+ ;;
+ *)
+ set fnord "$@" "$arg"
+ shift
+ shift
+ ;;
+ esac
+ done
+ "$@" -E |
+ sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile"
+ rm -f "$depfile"
+ echo "$object : \\" > "$depfile"
+ . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile"
+ echo " " >> "$depfile"
+ . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile"
+ rm -f "$tmpdepfile"
+ ;;
+
+none)
+ exec "$@"
+ ;;
+
+*)
+ echo "Unknown depmode $depmode" 1>&2
+ exit 1
+ ;;
+esac
+
+exit 0
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-end: "$"
+# End:
--- /dev/null
+## $Id: Makefile-files,v 1.1 2003/09/29 22:01:58 ensc Exp $ -*- makefile -*-
+
+## Copyright (C) 2003 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+##
+## 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, 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+distrib_SCRPTS = distrib/install-mdk8.2 \
+ distrib/install-post.sh \
+ distrib/install-pre.sh \
+ distrib/install-rh7.2 \
+ distrib/install-rh7.3 \
+ distrib/install-rh8.0 \
+ distrib/install-rh9.0 \
+ distrib/sample.sh
+
+distrib_DAT = distrib/mdk8.2-minimum \
+ distrib/rh7.3-minimum \
+ distrib/rh8.0-minimum \
+ distrib/rh9.0-minimum \
+ distrib/sample.conf
+
--- /dev/null
+#!/bin/sh
+# $Id: install-mdk8.2,v 1.1.4.1 2003/10/30 15:17:33 ensc Exp $ --*- sh -*--
+
+# Copyright (C) 2003 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+# based on install-mdk8.2 by Jacques Gelinas
+#
+# 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, 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+
+# This script creates a vserver from Mandrake 8.2 CD. Only
+# the first CD is used and must be mounted in /mnt/cdrom.
+# Specify the name of the vserver
+# "install-mdk8.2 test" will create /vservers/test
+
+: ${UTIL_VSERVER_VARS:=$(dirname $0)/util-vserver-vars}
+test -e "$UTIL_VSERVER_VARS" || {
+ echo "Can not find util-vserver installation; aborting..."
+ exit 1
+}
+. "$UTIL_VSERVER_VARS"
+
+USR_LIB_VSERVER=$PKGLIBDIR
+
+if [ $# -lt 1 ] ; then
+ echo install-mdk8.2 vserver-id [ type ]
+ echo type minimum means, minimum package for a server
+ echo type large means, all packages on the first CD
+elif [ -d $VROOTDIR/$1/var/lib/rpm ] ; then
+ echo $VROOTDIR/$1 already exist
+elif [ ! -d /mnt/cdrom/Mandrake/RPMS ] ; then
+ echo No rpms in /mnt/cdrom/Mandrake/RPMS. Is the CD mounted \?
+else
+ VROOT=$VROOTDIR/$1
+ $USR_LIB_VSERVER/install-pre.sh $1
+ mkdir -p $VROOT/proc
+ mount -t proc none $VROOT/proc
+ mkdir -p $VROOT/var/lib/rpm
+ rpm --root $VROOT --initdb
+ if [ "$2" = "minimum" ] ; then
+ echo `cat $USR_LIB_VSERVER/mdk8.2-minimum | wc -l` packages to install
+ cd /mnt/cdrom/Mandrake/RPMS
+ rpm --root $VROOT -Uvh `cat $USR_LIB_VSERVER/mdk8.2-minimum`
+ else
+ PKGS=`ls /mnt/cdrom/Mandrake/RPMS/*.i586.rpm | grep -v LPRng- \
+ | grep -v lpr-`
+
+ echo `(ls /mnt/cdrom/Mandrake/RPMS/*.noarch.rpm \
+ ;echo $PKGS) | wc -w` packages to install
+ rpm --root $VROOT -Uvh \
+ /mnt/cdrom/Mandrake/RPMS/*.noarch.rpm \
+ $PKGS --nodeps
+ fi
+ $USR_LIB_VSERVER/install-post.sh $1
+ umount $VROOT/proc
+fi
+
+
--- /dev/null
+#!/bin/sh
+
+# Copyright (C) 2003 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+# based on distrib/install-post by Jacques Gelinas
+#
+# 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, 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+# Complete the installation of a vserver
+: ${UTIL_VSERVER_VARS:=$(dirname $0)/util-vserver-vars}
+test -e "$UTIL_VSERVER_VARS" || {
+ echo "Can not find util-vserver installation; aborting..."
+ exit 1
+}
+. "$UTIL_VSERVER_VARS"
+
+USR_LIB_VSERVER=$PKGLIBDIR
+
+vserver_mknod()
+{
+ mknod $1 $2 $3 $4
+ chmod $5 $1
+}
+
+if [ $# != 1 ] ; then
+ echo install-post.sh vserver
+else
+ VROOT=$VROOTDIR/$1
+ rm -fr $VROOT/dev
+ mkdir $VROOT/dev && chmod 755 $VROOT/dev
+ mkdir $VROOT/dev/pts
+ vserver_mknod $VROOT/dev/null c 1 3 666
+ vserver_mknod $VROOT/dev/zero c 1 5 666
+ vserver_mknod $VROOT/dev/full c 1 7 666
+ vserver_mknod $VROOT/dev/random c 1 8 644
+ vserver_mknod $VROOT/dev/urandom c 1 9 644
+ vserver_mknod $VROOT/dev/tty c 5 0 666
+ vserver_mknod $VROOT/dev/ptmx c 5 2 666
+ test -f /etc/vservers/$1.conf || cp $USR_LIB_VSERVER/sample.conf /etc/vservers/$1.conf
+ test -f /etc/vservers/$1.sh || cp $USR_LIB_VSERVER/sample.sh /etc/vservers/$1.sh
+ echo NETWORKING=yes >$VROOT/etc/sysconfig/network
+ echo HOSTNAME=$1 >>$VROOT/etc/sysconfig/network
+ (
+ cd $VROOT/etc/rc.d/init.d || cd $VROOT/etc/init.d
+ for serv in *
+ do
+ case $serv in
+ *.bak|*~|functions|killall|halt|single)
+ ;;
+ *)
+ $USR_LIB_VSERVER/capchroot $VROOTDIR/$1 /sbin/chkconfig --level 2345 $serv off
+ ;;
+ esac
+ done
+ rm -f $VROOT/etc/rc.d/rc6.d/S*reboot
+ )
+ if [ ! -f $VROOT/etc/fstab ] ; then
+ echo /dev/hdv1 / ext2 defaults 1 1 >$VROOT/etc/fstab
+ echo /dev/hdv1 / ext2 rw 1 1 >$VROOT/etc/mtab
+ fi
+ cp -a $USR_LIB_VSERVER/vreboot $VROOT/sbin/.
+ ln -sf vreboot $VROOT/sbin/vhalt
+ if [ -x /etc/vservers/install-post.sh ]; then
+ /etc/vservers/install-post.sh $VROOT
+ fi
+fi
+
--- /dev/null
+#!/bin/sh
+
+# Copyright (C) 2003 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+# based on distrib/install-pre by Jacques Gelinas
+#
+# 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, 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+: ${UTIL_VSERVER_VARS:=$(dirname $0)/util-vserver-vars}
+test -e "$UTIL_VSERVER_VARS" || {
+ echo "Can not find util-vserver installation; aborting..."
+ exit 1
+}
+. "$UTIL_VSERVER_VARS"
+
+vserver_mknod()
+{
+ mknod $1 $2 $3 $4
+ chmod $5 $1
+}
+
+if [ $# != 1 ] ; then
+ echo install-pre.sh vserver
+else
+ mkdir -p /etc/vservers
+ mkdir -p $VROOTDIR 2>/dev/null
+ VROOT=$VROOTDIR/$1
+ mkdir -p -m755 $VROOT
+ chattr -t $VROOT
+ rm -fr $VROOT/dev
+ mkdir -p $VROOT/dev && chmod 755 $VROOT/dev
+ mkdir $VROOT/dev/pts
+ vserver_mknod $VROOT/dev/null c 1 3 666
+ vserver_mknod $VROOT/dev/zero c 1 5 666
+ vserver_mknod $VROOT/dev/full c 1 7 666
+ vserver_mknod $VROOT/dev/random c 1 8 644
+ vserver_mknod $VROOT/dev/urandom c 1 9 644
+ vserver_mknod $VROOT/dev/tty c 5 0 666
+ vserver_mknod $VROOT/dev/ptmx c 5 2 666
+ # We fake this device to help some package managers
+ touch $VROOT/dev/hdv1
+fi
+
--- /dev/null
+#!/bin/sh
+# $Id: install-rh7.2,v 1.1.4.2 2004/02/06 22:20:29 ensc Exp $ --*- sh -*--
+
+# Copyright (C) 2003 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+# based on distrib/install-rh7.2 by Jacques Gelinas
+#
+# 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, 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+# This script creates a vserver from RedHat 7.2 CD. Only
+# the first CD is used and must be mounted in /mnt/cdrom.
+# Specify the name of the vserver
+# "install-rh7.2 test" will create /vservers/test
+
+: ${UTIL_VSERVER_VARS:=$(dirname $0)/util-vserver-vars}
+test -e "$UTIL_VSERVER_VARS" || {
+ echo "Can not find util-vserver installation; aborting..."
+ exit 1
+}
+. "$UTIL_VSERVER_VARS"
+
+USR_LIB_VSERVER=$PKGLIBDIR
+
+if [ $# != 1 ] ; then
+ echo install-rh7.2 vserver-id
+elif [ -d $VROOTDIR/$1/var/lib/rpm ] ; then
+ echo $VROOTDIR/$1 already exist
+elif [ ! -d /mnt/cdrom/RedHat/RPMS ] ; then
+ echo No rpms in /mnt/cdrom/RedHat/RPMS. Is the CD mounted \?
+else
+ echo `ls /mnt/cdrom/RedHat/RPMS/*.noarch.rpm \
+ /mnt/cdrom/RedHat/RPMS/*.i386.rpm | wc -l` packages to install
+ VROOT=$VROOTDIR/$1
+ mkdir -p -m755 $VROOT
+ chattr -t $VROOT
+ mkdir -p $VROOT/proc
+ mount -t proc none $VROOT/proc
+ mkdir -p $VROOT/var/lib/rpm
+ rpm --root $VROOT --initdb
+ rpm --root $VROOT -Uvh \
+ /mnt/cdrom/RedHat/RPMS/*.noarch.rpm \
+ /mnt/cdrom/RedHat/RPMS/*.i386.rpm
+ $USR_LIB_VSERVER/install-post.sh $1
+ umount $VROOT/proc
+fi
+
+
--- /dev/null
+#!/bin/sh
+# $Id: install-rh7.3,v 1.1.4.2 2004/02/06 22:20:29 ensc Exp $ --*- sh -*--
+
+# Copyright (C) 2003 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+# based on distrib/install-rh7.3 by Jacques Gelinas
+#
+# 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, 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+# This script creates a vserver from RedHat 7.3 CD. Only
+# the first CD is used and must be mounted in /mnt/cdrom.
+# Specify the name of the vserver
+# "install-rh7.3 test" will create /vservers/test
+
+: ${UTIL_VSERVER_VARS:=$(dirname $0)/util-vserver-vars}
+test -e "$UTIL_VSERVER_VARS" || {
+ echo "Can not find util-vserver installation; aborting..."
+ exit 1
+}
+. "$UTIL_VSERVER_VARS"
+
+USR_LIB_VSERVER=$PKGLIBDIR
+
+if [ $# -lt 1 ] ; then
+ echo install-rh7.3 vserver-id [ type ]
+ echo type minimum means, minimum package for a server
+ echo type large means, all packages on the first CD
+elif [ -d $VROOTDIR/$1/var/lib/rpm ] ; then
+ echo $VROOTDIR/$1 already exist
+elif [ ! -d /mnt/cdrom/RedHat/RPMS ] ; then
+ echo No rpms in /mnt/cdrom/RedHat/RPMS. Is the CD mounted \?
+else
+ VROOT=$VROOTDIR/$1
+ mkdir -p -m755 $VROOT
+ chattr -t $VROOT
+ mkdir -p $VROOT/proc
+ mount -t proc none $VROOT/proc
+ mkdir -p $VROOT/var/lib/rpm
+ rpm --root $VROOT --initdb
+ if [ "$2" = "minimum" ] ; then
+ echo `cat $USR_LIB_VSERVER/rh7.3-minimum | wc -l` packages to install
+ cd /mnt/cdrom/RedHat/RPMS
+ rpm --root $VROOT -Uvh `cat $USR_LIB_VSERVER/rh7.3-minimum`
+ else
+ echo `ls /mnt/cdrom/RedHat/RPMS/*.noarch.rpm \
+ /mnt/cdrom/RedHat/RPMS/*.i386.rpm | wc -l` packages to install
+ rpm --root $VROOT -Uvh \
+ /mnt/cdrom/RedHat/RPMS/*.noarch.rpm \
+ /mnt/cdrom/RedHat/RPMS/*.i386.rpm --nodeps
+ fi
+ $USR_LIB_VSERVER/install-post.sh $1
+ umount $VROOT/proc
+fi
+
+
--- /dev/null
+#!/bin/sh
+
+# Copyright (C) 2003 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+# based on distrib/install-rh8.0 by Jacques Gelinas
+#
+# 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, 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+# This script creates a vserver from RedHat 8.0 CD. Only
+# the first CD is used and must be mounted in /mnt/cdrom.
+# Specify the name of the vserver
+# "install-rh8.0 test" will create /vservers/test
+
+: ${UTIL_VSERVER_VARS:=$(dirname $0)/util-vserver-vars}
+test -e "$UTIL_VSERVER_VARS" || {
+ echo "Can not find util-vserver installation; aborting..."
+ exit 1
+}
+. "$UTIL_VSERVER_VARS"
+
+USR_LIB_VSERVER=$PKGLIBDIR
+
+if [ $# -lt 1 ] ; then
+ echo install-rh8.0 vserver-id [ type ]
+ echo type minimum means, minimum package for a server
+ echo type large means, all packages on the first CD
+elif [ -d $VROOTDIR/$1/var/lib/rpm ] ; then
+ echo $VROOTDIR/$1 already exist
+elif [ ! -d /mnt/cdrom/RedHat/RPMS ] ; then
+ echo No rpms in /mnt/cdrom/RedHat/RPMS. Is the CD mounted \?
+else
+ VROOT=$VROOTDIR/$1
+ $USR_LIB_VSERVER/install-pre.sh $1
+ mkdir -p $VROOT/proc
+ mount -t proc none $VROOT/proc
+ mount -t devpts none $VROOT/dev/pts
+ mkdir -p $VROOT/var/lib/rpm
+ rpm --root $VROOT --initdb
+ if [ "$2" = "minimum" ] ; then
+ echo `cat $USR_LIB_VSERVER/rh8.0-minimum | wc -l` packages to install
+ cd /mnt/cdrom/RedHat/RPMS
+ rpm --root $VROOT -Uvh `cat $USR_LIB_VSERVER/rh8.0-minimum`
+ else
+ PKGS=`ls /mnt/cdrom/RedHat/RPMS/*.noarch.rpm \
+ /mnt/cdrom/RedHat/RPMS/*.i386.rpm`
+ for except in control-center iptables kernel-pcmcia-cs\
+ nfs-utils pciutils quota rp-pppoe tcpdump \
+ lokkit kudzu-devel pciutils-devel
+ do
+ PKGS=`ls $PKGS | grep -v $except`
+ done
+ echo `echo $PKGS | wc -w` packages to install
+ rpm --root $VROOT -Uvh $PKGS
+ fi
+ umount $VROOT/proc
+ umount $VROOT/dev/pts
+ $USR_LIB_VSERVER/install-post.sh $1
+fi
+
+
--- /dev/null
+#!/bin/sh
+
+# Copyright (C) 2003 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+# based on distrib/install-rh9.0 by Jacques Gelinas
+#
+# 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, 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+# This script creates a vserver from RedHat 9.0 CD. Only
+# the first CD is used and must be mounted in /mnt/cdrom.
+# Specify the name of the vserver
+# "install-rh9.0 test" will create /vservers/test
+
+: ${UTIL_VSERVER_VARS:=$(dirname $0)/util-vserver-vars}
+test -e "$UTIL_VSERVER_VARS" || {
+ echo "Can not find util-vserver installation; aborting..."
+ exit 1
+}
+. "$UTIL_VSERVER_VARS"
+
+USR_LIB_VSERVER=$PKGLIBDIR
+
+if [ $# -lt 1 ] ; then
+ echo install-rh9.0 vserver-id [ type ]
+ echo type minimum means, minimum package for a server
+ echo type large means, all packages on the first CD
+elif [ -d $VROOTDIR/$1/var/lib/rpm ] ; then
+ echo $VROOTDIR/$1 already exist
+elif [ ! -d /mnt/cdrom/RedHat/RPMS ] ; then
+ echo No rpms in /mnt/cdrom/RedHat/RPMS. Is the CD mounted \?
+else
+ VROOT=$VROOTDIR/$1
+ $USR_LIB_VSERVER/install-pre.sh $1
+ mkdir -p $VROOT/proc
+ mount -t proc none $VROOT/proc
+ mount -t devpts none $VROOT/dev/pts
+ mkdir -p $VROOT/var/lib/rpm
+ rpm --root $VROOT --initdb
+ if [ "$2" = "minimum" ] ; then
+ echo `cat $USR_LIB_VSERVER/rh9.0-minimum | wc -l` packages to install
+ cd /mnt/cdrom/RedHat/RPMS
+ rpm --root $VROOT -Uvh `cat $USR_LIB_VSERVER/rh9.0-minimum`
+ else
+ PKGS=`ls /mnt/cdrom/RedHat/RPMS/*.noarch.rpm \
+ /mnt/cdrom/RedHat/RPMS/*.i386.rpm`
+ for except in control-center iptables kernel-pcmcia-cs\
+ nfs-utils pciutils quota rp-pppoe tcpdump \
+ lokkit kudzu-devel pciutils-devel \
+ redhat-config-securitylevel redhat-config-nfs
+ do
+ PKGS=`ls $PKGS | grep -v $except`
+ done
+ echo `echo $PKGS | wc -w` packages to install
+ rpm --root $VROOT -Uvh $PKGS --nodeps
+ fi
+ umount $VROOT/proc
+ umount $VROOT/dev/pts
+ $USR_LIB_VSERVER/install-post.sh $1
+fi
+
+
--- /dev/null
+4Suite-0.11.1-8.i386.rpm
+Canna-3.5b2-62.i386.rpm
+Canna-libs-3.5b2-62.i386.rpm
+Distutils-1.0.2-2.noarch.rpm
+MAKEDEV-3.3-4.i386.rpm
+PyXML-0.7-4.i386.rpm
+SysVinit-2.84-2.i386.rpm
+a2ps-4.13b-19.i386.rpm
+alchemist-1.0.23-1.i386.rpm
+anacron-2.3-17.i386.rpm
+ash-0.3.7-2.i386.rpm
+at-3.1.8-23.i386.rpm
+audiofile-0.2.3-1.i386.rpm
+authconfig-4.2.8-4.i386.rpm
+basesystem-7.0-2.noarch.rpm
+bash-2.05a-13.i386.rpm
+bdflush-1.5-17.i386.rpm
+bzip2-1.0.2-2.i386.rpm
+bzip2-libs-1.0.2-2.i386.rpm
+chkconfig-1.3.5-3.i386.rpm
+cpio-2.4.2-26.i386.rpm
+cracklib-2.7-15.i386.rpm
+cracklib-dicts-2.7-15.i386.rpm
+crontabs-1.10-1.noarch.rpm
+cyrus-sasl-1.5.24-25.i386.rpm
+cyrus-sasl-md5-1.5.24-25.i386.rpm
+cyrus-sasl-plain-1.5.24-25.i386.rpm
+db1-1.85-8.i386.rpm
+db2-2.4.14-10.i386.rpm
+db3-3.3.11-6.i386.rpm
+dev-3.3-4.i386.rpm
+diffutils-2.7.2-5.i386.rpm
+dosfstools-2.8-1.i386.rpm
+e2fsprogs-1.27-3.i386.rpm
+ed-0.2-25.i386.rpm
+fam-2.6.7-6.i386.rpm
+file-3.37-5.i386.rpm
+filesystem-2.1.6-2.noarch.rpm
+fileutils-4.1-10.i386.rpm
+findutils-4.1.7-4.i386.rpm
+freetype-2.0.9-2.i386.rpm
+gawk-3.1.0-4.i386.rpm
+gdbm-1.8.0-14.i386.rpm
+glib-1.2.10-5.i386.rpm
+glib2-2.0.1-2.i386.rpm
+glibc-2.2.5-34.i386.rpm
+glibc-common-2.2.5-34.i386.rpm
+gnupg-1.0.6-5.i386.rpm
+grep-2.5.1-1.i386.rpm
+groff-1.17.2-12.i386.rpm
+groff-perl-1.17.2-12.i386.rpm
+gzip-1.3.3-1.i386.rpm
+htdig-3.2.0-2.011302.i386.rpm
+indexhtml-7.3-3.noarch.rpm
+info-4.1-1.i386.rpm
+initscripts-6.67-1.i386.rpm
+iputils-20020124-3.i386.rpm
+less-358-24.i386.rpm
+libcap-1.10-8.i386.rpm
+libghttp-1.0.9-2.i386.rpm
+libjpeg-6b-19.i386.rpm
+libmng-1.0.3-2.i386.rpm
+libogg-1.0rc3-1.i386.rpm
+libpng-1.0.12-2.i386.rpm
+libstdc++-2.96-110.i386.rpm
+libtermcap-2.0.8-28.i386.rpm
+libtiff-3.5.7-2.i386.rpm
+libtool-libs-1.4.2-7.i386.rpm
+libunicode-0.4-6.i386.rpm
+libuser-0.50.2-1.i386.rpm
+libvorbis-1.0rc3-1.i386.rpm
+libxml-1.8.17-3.i386.rpm
+libxml2-2.4.19-4.i386.rpm
+libxslt-1.0.15-1.i386.rpm
+logrotate-3.6.4-1.i386.rpm
+losetup-2.11n-12.i386.rpm
+m4-1.4.1-7.i386.rpm
+mailcap-2.1.9-2.noarch.rpm
+mailx-8.1.1-22.i386.rpm
+make-3.79.1-8.i386.rpm
+man-1.5j-6.i386.rpm
+man-pages-1.48-2.noarch.rpm
+mktemp-1.5-14.i386.rpm
+mount-2.11n-12.i386.rpm
+mpage-2.5.1-9.i386.rpm
+ncurses-5.2-26.i386.rpm
+netpbm-9.24-3.i386.rpm
+netpbm-progs-9.24-3.i386.rpm
+newt-0.50.35-1.i386.rpm
+nhpf-1.42-2.i386.rpm
+ntsysv-1.3.5-3.i386.rpm
+openldap-2.0.23-4.i386.rpm
+openssh-3.1p1-3.i386.rpm
+openssh-clients-3.1p1-3.i386.rpm
+openssl-0.9.6b-18.i386.rpm
+pam-0.75-32.i386.rpm
+passwd-0.67-1.i386.rpm
+patch-2.5.4-12.i386.rpm
+pcre-3.9-2.i386.rpm
+perl-5.6.1-34.99.6.i386.rpm
+perl-CGI-2.752-34.99.6.i386.rpm
+perl-CPAN-1.59_54-34.99.6.i386.rpm
+perl-DB_File-1.75-34.99.6.i386.rpm
+perl-DateManip-5.40-15.i386.rpm
+perl-Digest-MD5-2.16-15.i386.rpm
+perl-File-MMagic-1.13-14.i386.rpm
+perl-HTML-Parser-3.26-2.i386.rpm
+perl-HTML-Tagset-3.03-14.i386.rpm
+perl-MIME-Base64-2.12-14.i386.rpm
+perl-NDBM_File-1.75-34.99.6.i386.rpm
+perl-NKF-1.71-2.i386.rpm
+perl-Parse-Yapp-1.05-15.i386.rpm
+perl-Storable-1.0.14-15.i386.rpm
+perl-URI-1.17-16.i386.rpm
+perl-XML-Dumper-0.4-12.noarch.rpm
+perl-XML-Encoding-1.01-9.noarch.rpm
+perl-XML-Grove-0.46alpha-11.noarch.rpm
+perl-XML-Parser-2.30-15.i386.rpm
+perl-XML-Twig-2.02-9.noarch.rpm
+perl-libnet-1.0901-17.i386.rpm
+perl-libwww-perl-5.63-9.i386.rpm
+perl-libxml-enno-1.02-15.i386.rpm
+perl-libxml-perl-0.07-14.noarch.rpm
+pnm2ppa-1.04-2.i386.rpm
+popt-1.6.4-7x.18.i386.rpm
+portmap-4.0-41.i386.rpm
+procmail-3.22-5.i386.rpm
+procps-2.0.7-12.i386.rpm
+psmisc-20.2-2.i386.rpm
+pspell-0.12.2-8.i386.rpm
+psutils-1.17-13.i386.rpm
+pwdb-0.61.2-2.i386.rpm
+python-1.5.2-38.i386.rpm
+python-clap-1.0.0-3.noarch.rpm
+python-popt-0.8.8-7.x.2.i386.rpm
+python-xmlrpc-1.5.1-7.x.3.i386.rpm
+python2-2.2-16.i386.rpm
+readline-4.2a-4.i386.rpm
+redhat-release-7.3-1.noarch.rpm
+rootfiles-7.2-1.noarch.rpm
+rpm-4.0.4-7x.18.i386.rpm
+rpm-python-4.0.4-7x.18.i386.rpm
+sed-3.02-11.i386.rpm
+sendmail-8.11.6-15.i386.rpm
+setup-2.5.12-1.noarch.rpm
+sgml-common-0.6.3-9.noarch.rpm
+sh-utils-2.0.11-14.i386.rpm
+shadow-utils-20000902-7.i386.rpm
+slang-1.4.5-2.i386.rpm
+slocate-2.6-1.i386.rpm
+specspo-7.3-4.noarch.rpm
+sysklogd-1.4.1-8.i386.rpm
+tar-1.13.25-4.i386.rpm
+tcl-8.3.3-67.i386.rpm
+tcsh-6.10-6.i386.rpm
+termcap-11.0.1-10.noarch.rpm
+textutils-2.0.21-1.i386.rpm
+time-1.7-16.i386.rpm
+tmpwatch-2.8.3-1.i386.rpm
+umb-scheme-3.2-21.i386.rpm
+unzip-5.50-2.i386.rpm
+usermode-1.53-2.i386.rpm
+utempter-0.5.2-6.i386.rpm
+util-linux-2.11n-12.i386.rpm
+vim-common-6.1-2.i386.rpm
+vim-minimal-6.1-2.i386.rpm
+vixie-cron-3.0.1-64.i386.rpm
+which-2.13-3.i386.rpm
+words-2-18.noarch.rpm
+xinetd-2.3.4-0.8.i386.rpm
+xml-common-0.6.3-9.noarch.rpm
+zip-2.3-12.i386.rpm
+zlib-1.1.3-25.7.i386.rpm
+mingetty-1.00-1.i386.rpm
+iproute-2.4.7-1.i386.rpm
+modutils-2.4.14-3.i386.rpm
+gmp-4.0.1-3.i386.rpm
+expat-1.95.2-2.i386.rpm
+net-tools-1.60-4.i386.rpm
--- /dev/null
+4Suite-0.11.1-8.i386.rpm
+Canna-3.5b2-62.i386.rpm
+Canna-libs-3.5b2-62.i386.rpm
+Distutils-1.0.2-2.noarch.rpm
+MAKEDEV-3.3-4.i386.rpm
+PyXML-0.7-4.i386.rpm
+SysVinit-2.84-2.i386.rpm
+a2ps-4.13b-19.i386.rpm
+alchemist-1.0.23-1.i386.rpm
+anacron-2.3-17.i386.rpm
+ash-0.3.7-2.i386.rpm
+at-3.1.8-23.i386.rpm
+audiofile-0.2.3-1.i386.rpm
+authconfig-4.2.8-4.i386.rpm
+basesystem-7.0-2.noarch.rpm
+bash-2.05a-13.i386.rpm
+bdflush-1.5-17.i386.rpm
+bzip2-1.0.2-2.i386.rpm
+bzip2-libs-1.0.2-2.i386.rpm
+chkconfig-1.3.5-3.i386.rpm
+cpio-2.4.2-26.i386.rpm
+cracklib-2.7-15.i386.rpm
+cracklib-dicts-2.7-15.i386.rpm
+crontabs-1.10-1.noarch.rpm
+cyrus-sasl-1.5.24-25.i386.rpm
+cyrus-sasl-md5-1.5.24-25.i386.rpm
+cyrus-sasl-plain-1.5.24-25.i386.rpm
+db1-1.85-8.i386.rpm
+db2-2.4.14-10.i386.rpm
+db3-3.3.11-6.i386.rpm
+dev-3.3-4.i386.rpm
+diffutils-2.7.2-5.i386.rpm
+dosfstools-2.8-1.i386.rpm
+e2fsprogs-1.27-3.i386.rpm
+ed-0.2-25.i386.rpm
+fam-2.6.7-6.i386.rpm
+file-3.37-5.i386.rpm
+filesystem-2.1.6-2.noarch.rpm
+fileutils-4.1-10.i386.rpm
+findutils-4.1.7-4.i386.rpm
+freetype-2.0.9-2.i386.rpm
+gawk-3.1.0-4.i386.rpm
+gdbm-1.8.0-14.i386.rpm
+glib-1.2.10-5.i386.rpm
+glib2-2.0.1-2.i386.rpm
+glibc-2.2.5-34.i386.rpm
+glibc-common-2.2.5-34.i386.rpm
+gnupg-1.0.6-5.i386.rpm
+grep-2.5.1-1.i386.rpm
+groff-1.17.2-12.i386.rpm
+groff-perl-1.17.2-12.i386.rpm
+gzip-1.3.3-1.i386.rpm
+htdig-3.2.0-2.011302.i386.rpm
+indexhtml-7.3-3.noarch.rpm
+info-4.1-1.i386.rpm
+initscripts-6.67-1.i386.rpm
+iputils-20020124-3.i386.rpm
+less-358-24.i386.rpm
+libcap-1.10-8.i386.rpm
+libghttp-1.0.9-2.i386.rpm
+libjpeg-6b-19.i386.rpm
+libmng-1.0.3-2.i386.rpm
+libogg-1.0rc3-1.i386.rpm
+libpng-1.0.12-2.i386.rpm
+libstdc++-2.96-110.i386.rpm
+libtermcap-2.0.8-28.i386.rpm
+libtiff-3.5.7-2.i386.rpm
+libtool-libs-1.4.2-7.i386.rpm
+libunicode-0.4-6.i386.rpm
+libuser-0.50.2-1.i386.rpm
+libvorbis-1.0rc3-1.i386.rpm
+libxml-1.8.17-3.i386.rpm
+libxml2-2.4.19-4.i386.rpm
+libxslt-1.0.15-1.i386.rpm
+logrotate-3.6.4-1.i386.rpm
+losetup-2.11n-12.i386.rpm
+m4-1.4.1-7.i386.rpm
+mailcap-2.1.9-2.noarch.rpm
+mailx-8.1.1-22.i386.rpm
+make-3.79.1-8.i386.rpm
+man-1.5j-6.i386.rpm
+man-pages-1.48-2.noarch.rpm
+mktemp-1.5-14.i386.rpm
+mount-2.11n-12.i386.rpm
+mpage-2.5.1-9.i386.rpm
+ncurses-5.2-26.i386.rpm
+netpbm-9.24-3.i386.rpm
+netpbm-progs-9.24-3.i386.rpm
+newt-0.50.35-1.i386.rpm
+nhpf-1.42-2.i386.rpm
+ntsysv-1.3.5-3.i386.rpm
+openldap-2.0.23-4.i386.rpm
+openssh-3.1p1-3.i386.rpm
+openssh-clients-3.1p1-3.i386.rpm
+openssl-0.9.6b-18.i386.rpm
+pam-0.75-32.i386.rpm
+passwd-0.67-1.i386.rpm
+patch-2.5.4-12.i386.rpm
+pcre-3.9-2.i386.rpm
+perl-5.6.1-34.99.6.i386.rpm
+perl-CGI-2.752-34.99.6.i386.rpm
+perl-CPAN-1.59_54-34.99.6.i386.rpm
+perl-DB_File-1.75-34.99.6.i386.rpm
+perl-DateManip-5.40-15.i386.rpm
+perl-Digest-MD5-2.16-15.i386.rpm
+perl-File-MMagic-1.13-14.i386.rpm
+perl-HTML-Parser-3.26-2.i386.rpm
+perl-HTML-Tagset-3.03-14.i386.rpm
+perl-MIME-Base64-2.12-14.i386.rpm
+perl-NDBM_File-1.75-34.99.6.i386.rpm
+perl-NKF-1.71-2.i386.rpm
+perl-Parse-Yapp-1.05-15.i386.rpm
+perl-Storable-1.0.14-15.i386.rpm
+perl-URI-1.17-16.i386.rpm
+perl-XML-Dumper-0.4-12.noarch.rpm
+perl-XML-Encoding-1.01-9.noarch.rpm
+perl-XML-Grove-0.46alpha-11.noarch.rpm
+perl-XML-Parser-2.30-15.i386.rpm
+perl-XML-Twig-2.02-9.noarch.rpm
+perl-libnet-1.0901-17.i386.rpm
+perl-libwww-perl-5.63-9.i386.rpm
+perl-libxml-enno-1.02-15.i386.rpm
+perl-libxml-perl-0.07-14.noarch.rpm
+pnm2ppa-1.04-2.i386.rpm
+popt-1.6.4-7x.18.i386.rpm
+portmap-4.0-41.i386.rpm
+procmail-3.22-5.i386.rpm
+procps-2.0.7-12.i386.rpm
+psmisc-20.2-2.i386.rpm
+pspell-0.12.2-8.i386.rpm
+psutils-1.17-13.i386.rpm
+pwdb-0.61.2-2.i386.rpm
+python-1.5.2-38.i386.rpm
+python-clap-1.0.0-3.noarch.rpm
+python-popt-0.8.8-7.x.2.i386.rpm
+python-xmlrpc-1.5.1-7.x.3.i386.rpm
+python2-2.2-16.i386.rpm
+readline-4.2a-4.i386.rpm
+redhat-release-7.3-1.noarch.rpm
+rootfiles-7.2-1.noarch.rpm
+rpm-4.0.4-7x.18.i386.rpm
+rpm-python-4.0.4-7x.18.i386.rpm
+sed-3.02-11.i386.rpm
+sendmail-8.11.6-15.i386.rpm
+setup-2.5.12-1.noarch.rpm
+sgml-common-0.6.3-9.noarch.rpm
+sh-utils-2.0.11-14.i386.rpm
+shadow-utils-20000902-7.i386.rpm
+slang-1.4.5-2.i386.rpm
+slocate-2.6-1.i386.rpm
+specspo-7.3-4.noarch.rpm
+sysklogd-1.4.1-8.i386.rpm
+tar-1.13.25-4.i386.rpm
+tcl-8.3.3-67.i386.rpm
+tcsh-6.10-6.i386.rpm
+termcap-11.0.1-10.noarch.rpm
+textutils-2.0.21-1.i386.rpm
+time-1.7-16.i386.rpm
+tmpwatch-2.8.3-1.i386.rpm
+umb-scheme-3.2-21.i386.rpm
+unzip-5.50-2.i386.rpm
+usermode-1.53-2.i386.rpm
+utempter-0.5.2-6.i386.rpm
+util-linux-2.11n-12.i386.rpm
+vim-common-6.1-2.i386.rpm
+vim-minimal-6.1-2.i386.rpm
+vixie-cron-3.0.1-64.i386.rpm
+which-2.13-3.i386.rpm
+words-2-18.noarch.rpm
+xinetd-2.3.4-0.8.i386.rpm
+xml-common-0.6.3-9.noarch.rpm
+zip-2.3-12.i386.rpm
+zlib-1.1.3-25.7.i386.rpm
+mingetty-1.00-1.i386.rpm
+iproute-2.4.7-1.i386.rpm
+modutils-2.4.14-3.i386.rpm
+gmp-4.0.1-3.i386.rpm
+expat-1.95.2-2.i386.rpm
+net-tools-1.60-4.i386.rpm
--- /dev/null
+4Suite-[0-9]*.i386.rpm
+Canna-[0-9]*.i386.rpm
+Canna-libs-[0-9]*.i386.rpm
+Distutils-*.noarch.rpm
+MAKEDEV-[0-9]*.i386.rpm
+PyXML-[0-9]*.i386.rpm
+SysVinit-[0-9]*.i386.rpm
+a2ps-[0-9]*.i386.rpm
+alchemist-[0-9]*.i386.rpm
+anacron-[0-9]*.i386.rpm
+ash-[0-9]*.i386.rpm
+at-[0-9]*.i386.rpm
+audiofile-[0-9]*.i386.rpm
+authconfig-[0-9]*.i386.rpm
+basesystem-*.noarch.rpm
+bash-[0-9]*.i386.rpm
+bdflush-[0-9]*.i386.rpm
+bzip2-[0-9]*.i386.rpm
+bzip2-libs-[0-9]*.i386.rpm
+chkconfig-[0-9]*.i386.rpm
+cpio-[0-9]*.i386.rpm
+cracklib-[0-9]*.i386.rpm
+cracklib-dicts-[0-9]*.i386.rpm
+crontabs-*.noarch.rpm
+cyrus-sasl-[0-9]*.i386.rpm
+cyrus-sasl-md5-[0-9]*.i386.rpm
+db1-[0-9]*.i386.rpm
+db2-[0-9]*.i386.rpm
+db3-[0-9]*.i386.rpm
+db4-[0-9]*.i386.rpm
+libelf-[0-9]*.i386.rpm
+dev-[0-9]*.i386.rpm
+diffutils-[0-9]*.i386.rpm
+dosfstools-[0-9]*.i386.rpm
+e2fsprogs-[0-9]*.i386.rpm
+ed-[0-9]*.i386.rpm
+fam-[0-9]*.i386.rpm
+file-[0-9]*.i386.rpm
+filesystem-[0-9]*.noarch.rpm
+fileutils-[0-9]*.i386.rpm
+findutils-[0-9]*.i386.rpm
+libacl-[0-9]*.i386.rpm
+libgcc-[0-9]*.i386.rpm
+freetype-[0-9]*.i386.rpm
+gawk-[0-9]*.i386.rpm
+gdbm-[0-9]*.i386.rpm
+glib-[0-9]*.i386.rpm
+glib2-[0-9]*.i386.rpm
+glibc-[0-9]*.i386.rpm
+glibc-common-[0-9]*.i386.rpm
+gnupg-[0-9]*.i386.rpm
+grep-[0-9]*.i386.rpm
+groff-[0-9]*.i386.rpm
+groff-perl-[0-9]*.i386.rpm
+gzip-[0-9]*.i386.rpm
+htdig-[0-9]*.i386.rpm
+indexhtml-*.noarch.rpm
+info-[0-9]*.i386.rpm
+initscripts-[0-9]*.i386.rpm
+iputils-[0-9]*.i386.rpm
+less-[0-9]*.i386.rpm
+libcap-[0-9]*.i386.rpm
+libghttp-[0-9]*.i386.rpm
+libjpeg-[0-9]*.i386.rpm
+libmng-[0-9]*.i386.rpm
+libogg-[0-9]*.i386.rpm
+libpng-[0-9]*.i386.rpm
+libstdc++-[0-9]*.i386.rpm
+libtermcap-[0-9]*.i386.rpm
+libtiff-[0-9]*.i386.rpm
+libtool-libs-[0-9]*.i386.rpm
+libunicode-[0-9]*.i386.rpm
+libuser-[0-9]*.i386.rpm
+libvorbis-[0-9]*.i386.rpm
+libxml-[0-9]*.i386.rpm
+libxml2-[0-9]*.i386.rpm
+libxslt-[0-9]*.i386.rpm
+logrotate-[0-9]*.i386.rpm
+losetup-[0-9]*.i386.rpm
+m4-[0-9]*.i386.rpm
+mailcap-*.noarch.rpm
+mailx-[0-9]*.i386.rpm
+make-[0-9]*.i386.rpm
+man-[0-9]*.i386.rpm
+man-pages-*.noarch.rpm
+mktemp-[0-9]*.i386.rpm
+mount-[0-9]*.i386.rpm
+mpage-[0-9]*.i386.rpm
+ncurses-[0-9]*.i386.rpm
+netpbm-[0-9]*.i386.rpm
+newt-[0-9]*.i386.rpm
+nhpf-[0-9]*.i386.rpm
+ntsysv-[0-9]*.i386.rpm
+openldap-[0-9]*.i386.rpm
+openssh-[0-9]*.i386.rpm
+openssh-clients-[0-9]*.i386.rpm
+openssh-server-[0-9]*.i386.rpm
+openssl-[0-9]*.i386.rpm
+pam-[0-9]*.i386.rpm
+passwd-[0-9]*.i386.rpm
+patch-[0-9]*.i386.rpm
+pcre-[0-9]*.i386.rpm
+perl-[0-9]*.i386.rpm
+perl-Filter-[0-9]*.i386.rpm
+krb5-libs-[0-9]*.i386.rpm
+libattr-[0-9]*.i386.rpm
+hesiod-[0-9]*.i386.rpm
+pnm2ppa-[0-9]*.i386.rpm
+popt-[0-9]*.i386.rpm
+portmap-[0-9]*.i386.rpm
+procmail-[0-9]*.i386.rpm
+procps-[0-9]*.i386.rpm
+psmisc-[0-9]*.i386.rpm
+pspell-[0-9]*.i386.rpm
+psutils-[0-9]*.i386.rpm
+pwdb-[0-9]*.i386.rpm
+python-[0-9]*.i386.rpm
+python-clap-*.noarch.rpm
+python-popt-[0-9]*.i386.rpm
+python-xmlrpc-[0-9]*.i386.rpm
+python2-[0-9]*.i386.rpm
+readline-[0-9]*.i386.rpm
+redhat-release-*.noarch.rpm
+rootfiles-*.noarch.rpm
+rpm-[0-9]*.i386.rpm
+sed-[0-9]*.i386.rpm
+sendmail-[0-9]*.i386.rpm
+setup-*.noarch.rpm
+sgml-common-*.noarch.rpm
+sh-utils-[0-9]*.i386.rpm
+shadow-utils-[0-9]*.i386.rpm
+slang-[0-9]*.i386.rpm
+slocate-[0-9]*.i386.rpm
+specspo-*.noarch.rpm
+sysklogd-[0-9]*.i386.rpm
+tar-[0-9]*.i386.rpm
+tcl-[0-9]*.i386.rpm
+tcsh-[0-9]*.i386.rpm
+termcap-*.noarch.rpm
+textutils-[0-9]*.i386.rpm
+time-[0-9]*.i386.rpm
+tmpwatch-[0-9]*.i386.rpm
+umb-scheme-[0-9]*.i386.rpm
+unzip-[0-9]*.i386.rpm
+usermode-[0-9]*.i386.rpm
+utempter-[0-9]*.i386.rpm
+util-linux-[0-9]*.i386.rpm
+vim-common-[0-9]*.i386.rpm
+vim-minimal-[0-9]*.i386.rpm
+vixie-cron-[0-9]*.i386.rpm
+which-[0-9]*.i386.rpm
+words-*.noarch.rpm
+xinetd-[0-9]*.i386.rpm
+xml-common-*.noarch.rpm
+zip-[0-9]*.i386.rpm
+zlib-[0-9]*.i386.rpm
+mingetty-[0-9]*.i386.rpm
+iproute-[0-9]*.i386.rpm
+modutils-[0-9]*.i386.rpm
+gmp-[0-9]*.i386.rpm
+expat-[0-9]*.i386.rpm
+net-tools-[0-9]*.i386.rpm
+
--- /dev/null
+4Suite-[0-9]*.i386.rpm
+Canna-[0-9]*.i386.rpm
+Canna-libs-[0-9]*.i386.rpm
+Distutils-*.noarch.rpm
+MAKEDEV-[0-9]*.i386.rpm
+PyXML-[0-9]*.i386.rpm
+SysVinit-[0-9]*.i386.rpm
+a2ps-[0-9]*.i386.rpm
+alchemist-[0-9]*.i386.rpm
+anacron-[0-9]*.i386.rpm
+ash-[0-9]*.i386.rpm
+at-[0-9]*.i386.rpm
+audiofile-[0-9]*.i386.rpm
+authconfig-[0-9]*.i386.rpm
+basesystem-*.noarch.rpm
+bash-[0-9]*.i386.rpm
+bdflush-[0-9]*.i386.rpm
+bzip2-[0-9]*.i386.rpm
+bzip2-libs-[0-9]*.i386.rpm
+chkconfig-[0-9]*.i386.rpm
+cpio-[0-9]*.i386.rpm
+cracklib-[0-9]*.i386.rpm
+cracklib-dicts-[0-9]*.i386.rpm
+crontabs-*.noarch.rpm
+cyrus-sasl-[0-9]*.i386.rpm
+cyrus-sasl-md5-[0-9]*.i386.rpm
+db1-[0-9]*.i386.rpm
+db2-[0-9]*.i386.rpm
+db3-[0-9]*.i386.rpm
+db4-[0-9]*.i386.rpm
+libelf-[0-9]*.i386.rpm
+dev-[0-9]*.i386.rpm
+diffutils-[0-9]*.i386.rpm
+dosfstools-[0-9]*.i386.rpm
+e2fsprogs-[0-9]*.i386.rpm
+ed-[0-9]*.i386.rpm
+fam-[0-9]*.i386.rpm
+file-[0-9]*.i386.rpm
+filesystem-[0-9]*.noarch.rpm
+fileutils-[0-9]*.i386.rpm
+findutils-[0-9]*.i386.rpm
+libacl-[0-9]*.i386.rpm
+libgcc-[0-9]*.i386.rpm
+freetype-[0-9]*.i386.rpm
+gawk-[0-9]*.i386.rpm
+gdbm-[0-9]*.i386.rpm
+glib-[0-9]*.i386.rpm
+glib2-[0-9]*.i386.rpm
+glibc-[0-9]*.i386.rpm
+glibc-common-[0-9]*.i386.rpm
+gnupg-[0-9]*.i386.rpm
+grep-[0-9]*.i386.rpm
+groff-[0-9]*.i386.rpm
+groff-perl-[0-9]*.i386.rpm
+gzip-[0-9]*.i386.rpm
+htdig-[0-9]*.i386.rpm
+indexhtml-*.noarch.rpm
+info-[0-9]*.i386.rpm
+initscripts-[0-9]*.i386.rpm
+iputils-[0-9]*.i386.rpm
+less-[0-9]*.i386.rpm
+libcap-[0-9]*.i386.rpm
+libghttp-[0-9]*.i386.rpm
+libjpeg-[0-9]*.i386.rpm
+libmng-[0-9]*.i386.rpm
+libogg-[0-9]*.i386.rpm
+libpng-[0-9]*.i386.rpm
+libstdc++-[0-9]*.i386.rpm
+libtermcap-[0-9]*.i386.rpm
+libtiff-[0-9]*.i386.rpm
+libtool-libs-[0-9]*.i386.rpm
+libunicode-[0-9]*.i386.rpm
+libuser-[0-9]*.i386.rpm
+libvorbis-[0-9]*.i386.rpm
+libxml-[0-9]*.i386.rpm
+libxml2-[0-9]*.i386.rpm
+libxslt-[0-9]*.i386.rpm
+logrotate-[0-9]*.i386.rpm
+losetup-[0-9]*.i386.rpm
+m4-[0-9]*.i386.rpm
+mailcap-*.noarch.rpm
+mailx-[0-9]*.i386.rpm
+make-[0-9]*.i386.rpm
+man-[0-9]*.i386.rpm
+man-pages-*.noarch.rpm
+mktemp-[0-9]*.i386.rpm
+mount-[0-9]*.i386.rpm
+mpage-[0-9]*.i386.rpm
+ncurses-[0-9]*.i386.rpm
+netpbm-[0-9]*.i386.rpm
+newt-[0-9]*.i386.rpm
+nhpf-[0-9]*.i386.rpm
+ntsysv-[0-9]*.i386.rpm
+openldap-[0-9]*.i386.rpm
+openssh-[0-9]*.i386.rpm
+openssh-clients-[0-9]*.i386.rpm
+openssh-server-[0-9]*.i386.rpm
+openssl-[0-9]*.i386.rpm
+pam-[0-9]*.i386.rpm
+passwd-[0-9]*.i386.rpm
+patch-[0-9]*.i386.rpm
+pcre-[0-9]*.i386.rpm
+perl-[0-9]*.i386.rpm
+perl-Filter-[0-9]*.i386.rpm
+krb5-libs-[0-9]*.i386.rpm
+libattr-[0-9]*.i386.rpm
+hesiod-[0-9]*.i386.rpm
+pnm2ppa-[0-9]*.i386.rpm
+popt-[0-9]*.i386.rpm
+portmap-[0-9]*.i386.rpm
+procmail-[0-9]*.i386.rpm
+procps-[0-9]*.i386.rpm
+psmisc-[0-9]*.i386.rpm
+pspell-[0-9]*.i386.rpm
+psutils-[0-9]*.i386.rpm
+pwdb-[0-9]*.i386.rpm
+python-[0-9]*.i386.rpm
+python-clap-*.noarch.rpm
+python-popt-[0-9]*.i386.rpm
+python-xmlrpc-[0-9]*.i386.rpm
+python2-[0-9]*.i386.rpm
+readline-[0-9]*.i386.rpm
+redhat-release-*.noarch.rpm
+rootfiles-*.noarch.rpm
+rpm-[0-9]*.i386.rpm
+sed-[0-9]*.i386.rpm
+sendmail-[0-9]*.i386.rpm
+setup-*.noarch.rpm
+sgml-common-*.noarch.rpm
+sh-utils-[0-9]*.i386.rpm
+shadow-utils-[0-9]*.i386.rpm
+slang-[0-9]*.i386.rpm
+slocate-[0-9]*.i386.rpm
+specspo-*.noarch.rpm
+sysklogd-[0-9]*.i386.rpm
+tar-[0-9]*.i386.rpm
+tcl-[0-9]*.i386.rpm
+tcsh-[0-9]*.i386.rpm
+termcap-*.noarch.rpm
+textutils-[0-9]*.i386.rpm
+time-[0-9]*.i386.rpm
+tmpwatch-[0-9]*.i386.rpm
+umb-scheme-[0-9]*.i386.rpm
+unzip-[0-9]*.i386.rpm
+usermode-[0-9]*.i386.rpm
+utempter-[0-9]*.i386.rpm
+util-linux-[0-9]*.i386.rpm
+vim-common-[0-9]*.i386.rpm
+vim-minimal-[0-9]*.i386.rpm
+vixie-cron-[0-9]*.i386.rpm
+which-[0-9]*.i386.rpm
+words-*.noarch.rpm
+xinetd-[0-9]*.i386.rpm
+xml-common-*.noarch.rpm
+zip-[0-9]*.i386.rpm
+zlib-[0-9]*.i386.rpm
+mingetty-[0-9]*.i386.rpm
+iproute-[0-9]*.i386.rpm
+modutils-[0-9]*.i386.rpm
+gmp-[0-9]*.i386.rpm
+expat-[0-9]*.i386.rpm
+net-tools-[0-9]*.i386.rpm
+
--- /dev/null
+# Select an unused context (this is optional)
+# The default is to allocate a free context on the fly
+# In general you don't need to force a context
+#S_CONTEXT=
+# Select the IP number assigned to the virtual server
+# This IP must be one IP of the server, either an interface
+# or an IP alias
+IPROOT=1.2.3.4
+# The netmask and broadcast are computed by default from IPROOTDEV
+#IPROOTMASK=
+#IPROOTBCAST=
+# You can define on which device the IP alias will be done
+# The IP alias will be set when the server is started and unset
+# when the server is stopped
+IPROOTDEV=eth0
+# Uncomment the onboot line if you want to enable this
+# virtual server at boot time
+#ONBOOT=yes
+# You can set a different host name for the vserver
+# If empty, the host name of the main server is used
+S_HOSTNAME=somename.somedomain.com
+# You can set a different NIS domain for the vserver
+# If empty, the current on is kept
+# Set it to "none" to have no NIS domain set
+S_DOMAINNAME=
+# You can set the priority level (nice) of all process in the vserver
+# Even root won't be able to raise it
+S_NICE=
+# You can set various flags for the new security context
+# lock: Prevent the vserver from setting new security context
+# sched: Merge scheduler priority of all processes in the vserver
+# so that it acts a like a single one.
+# nproc: Limit the number of processes in the vserver according to ulimit
+# (instead of a per user limit, this becomes a per vserver limit)
+# private: No other process can join this security context. Even root
+# Do not forget the quotes around the flags
+S_FLAGS="lock nproc"
+# You can set various ulimit flags and they will be inherited by the
+# vserver. You enter here various command line argument of ulimit
+# ULIMIT="-H -u 200"
+# The example above, combined with the nproc S_FLAGS will limit the
+# vserver to a maximum of 200 processes
+ULIMIT="-H -u 1000"
+# You can set various capabilities. By default, the vserver are run
+# with a limited set, so you can let root run in a vserver and not
+# worry about it. He can't take over the machine. In some cases
+# you can to give a little more capabilities (such as CAP_NET_RAW)
+# S_CAPS="CAP_NET_RAW"
+S_CAPS=""
--- /dev/null
+#!/bin/sh
+case $1 in
+pre-start)
+ ;;
+post-start)
+ ;;
+pre-stop)
+ ;;
+post-stop)
+ ;;
+*)
+ echo $0 pre-start
+ echo $0 pre-stop
+ echo $0 post-start
+ echo $0 post-stop
+ ;;
+esac
--- /dev/null
+
+ Object not found!
+
+ The requested URL was not found on this server. If you entered
+ the URL manually please check your spelling and try again.
+
+ If you think this is a server error, please contact the
+ [1]webmaster
+
+Error 404
+
+
+ [2]remtk
+ ven 18 jui 2003 11:41:32 EDT
+ Apache/2.0.40 (Red Hat Linux)
+
+Références
+
+ 1. mailto:root@localhost
+ 2. http://remtk/
--- /dev/null
+## $Id: Makefile-files,v 1.1 2003/09/29 22:01:58 ensc Exp $ -*- makefile -*-
+
+## Copyright (C) 2003 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+##
+## 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, 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+##
+
+doc_DAT = doc/FAQ.txt \
+ doc/changelog.txt \
+ doc/intro.txt
--- /dev/null
+
+ Object not found!
+
+ The requested URL was not found on this server. If you entered
+ the URL manually please check your spelling and try again.
+
+ If you think this is a server error, please contact the
+ [1]webmaster
+
+Error 404
+
+
+ [2]remtk
+ ven 18 jui 2003 11:41:32 EDT
+ Apache/2.0.40 (Red Hat Linux)
+
+Références
+
+ 1. mailto:root@localhost
+ 2. http://remtk/
--- /dev/null
+
+ 1. [1]Introduction [new.gif]
+ 1.1 [2]Who needs that [new.gif]
+ 2. [3]Principles [new.gif]
+ 2.1 [4]Non reversible isolation [new.gif]
+ 2.2 [5]Isolation areas [new.gif]
+ 2.3 [6]New system calls [new.gif]
+ 2.4 [7]Limiting super-user: The capabilities system [new.gif]
+ 2.5 [8]Enhancing the capability system [new.gif]
+ 2.6 [9]Playing with the new system calls [new.gif]
+ 2.6.1 [10]Playing with /usr/sbin/chcontext [new.gif]
+ 2.6.2 [11]Playing with /usr/sbin/chcontext as root [new.gif]
+ 2.6.3 [12]Playing with /usr/sbin/chbind [new.gif]
+ 2.6.4 [13]Playing with /usr/sbin/reducecap [new.gif]
+ 2.7 [14]Unification [new.gif]
+ 3. [15]Applications [new.gif]
+ 3.1 [16]Virtual server [new.gif]
+ 3.2 [17]Per user fire-wall [new.gif]
+ 3.3 [18]Secure server/Intrusion detection [new.gif]
+ 3.4 [19]Fail over servers [new.gif]
+ 4. [20]Installation [new.gif]
+ 4.1 [21]The packages [new.gif]
+ 4.2 [22]Setting a virtual server [new.gif]
+ 4.3 [23]Basic configuration of the virtual server [new.gif]
+ 4.4 [24]Entering the virtual server [new.gif]
+ 4.5 [25]Configuring the services [new.gif]
+ 4.6 [26]Starting/Stopping the virtual server [new.gif]
+ 4.7 [27]Starting/Stopping all the virtual servers [new.gif]
+ 4.8 [28]Restarting a virtual server from inside [new.gif]
+ 4.9 [29]Executing tasks at vserver start/stop time [new.gif]
+ 4.10 [30]Issues [new.gif]
+ 4.11 [31]How real is it ? [new.gif]
+ 5. [32]Features [new.gif]
+ 6. [33]Future directions [new.gif]
+ 6.1 [34]User controlled security box [new.gif]
+ 6.2 [35]Kernel enhancements [new.gif]
+ 6.2.1 [36]Per context disk quota [new.gif]
+ 6.2.2 [37]Global limits [new.gif]
+ 6.2.3 [38]Scheduler [new.gif]
+ 6.2.4 [39]Security issues [new.gif]
+ 6.2.4.1 [40]/dev/random [new.gif]
+ 6.2.4.2 [41]/dev/pts [new.gif]
+ 6.2.4.3 [42]Network devices [new.gif]
+ 7. [43]Alternative technologies [new.gif]
+ 7.1 [44]Virtual machines [new.gif]
+ 7.2 [45]Partitioning [new.gif]
+ 7.3 [46]Limitation of those technologies [new.gif]
+ 8. [47]Conclusion [new.gif]
+ 9. [48]Download [new.gif]
+ 10. [49]References [new.gif]
+
+ Virtual private servers and security contexts
+
+ Running independent Linux servers inside a single PC is now possible.
+ They offer many advantages, including higher security, flexibility and
+ cost reduction.
+
+ NEW
+
+Introduction
+
+ Linux computers are getting faster every day. So we should probably
+ end up with less, more powerful servers. Instead we are seeing more
+ and more servers. While there are many reasons for this trend (more
+ services offered), the major issue is more related to security and
+ administrative concerns.
+
+ Is it possible to split a Linux server into virtual ones with as much
+ isolation as possible between each one, looking like real servers, yet
+ sharing some common tasks (monitoring, backup, ups, hardware
+ configuration, ...) ?
+
+ We think so ... NEW
+
+Who needs that
+
+ The short answer is everybody, or everybody managing a server. Here
+ are some applications:
+
+ * Hosting: Complete general purpose hosting (Running many
+ independent servers in one box).
+ * Experimentation: You are toying with a new services and do not
+ want to impact the production services on the same machine.
+ * Education: Each student has its own server with root password.
+ * Personal security box: Run un-trusted applications with complete
+ control over their interaction with the rest of the computer and
+ the network.
+ * Managing several "versions" of the same server/project and turning
+ on/off each version independantly.
+
+ Just think about all the viruses and worms out there, you end up with
+ a big everybody using a computer needs this. :-) NEW
+
+Principles
+
+ NEW
+
+Non reversible isolation
+
+ Unix and Linux have always had the chroot() system call. This call was
+ used to trap a process into a sub-directory. After the system-call,
+ the process is led to believe that the sub-directory is now the root
+ directory. This system call can't be reversed. In fact, the only thing
+ a process can do is trap itself further and further in the file-system
+ (calling chroot() again).
+
+ The strategy is to introduce new system calls trapping the processes
+ in other areas within the server. NEW
+
+Isolation areas
+
+ A virtual server is isolated from the rest of the server in 5 areas:
+
+ * File system
+ The vserver is trapped into a sub-directory of the main server and
+ can't escape. This is done by the standard chroot() system call
+ found on all Unix and Linux boxes.
+ * Processes
+ The vserver can only see the processes in the same security
+ context. Even the root server can't see the processes in vservers,
+ making the root server less "dangerous" to use. A special
+ mechanism (context number 1) exists to view all processes though
+ (Limited to root in the root server).
+ * Networking
+ The vserver is assigned a host name and an IP number. The server
+ can only use this IP number to establish services and client
+ connection. Further, this restriction is transparent.
+ * Super user capabilities
+ The super user running in a vserver has less privileges than the
+ normal Linux root user. For example, it can't reconfigure the
+ networking and many aspect of the system. It can't mount devices,
+ can't access block devices and so on.
+ Roughly. the vserver super-user has full control over all files
+ and processes in the vserver and that's pretty much it.
+ * System V inter process communications
+ Sysv IPC resources are private to each vserver. The security
+ context is used as an extra key to select and assign resources.
+
+ Those facilities are used together to create a runtime environment for
+ virtual servers. But they can be used independently to achieve various
+ goals. NEW
+
+New system calls
+
+ The new system calls, as well as the existing chroot() system call are
+ sharing one common feature: Their effect can't be reversed. Once you
+ have executed one of those system call (chroot, new_s_context,
+ set_ipv4root), you can't get back. This affects the current process
+ and all the child processes. The parent process is not influenced.
+
+ * new_s_context (int ctx)
+ This system call sets a new security context for the current
+ process. It will be inherited by all child processes. The security
+ context is just an id, but the system call makes sure a new unused
+ one is allocated.
+ A process can only see other processes sharing the same security
+ context. When the system boot, the original security context is 0.
+ But this one is not privileged in anyway. Processes member of the
+ security context 0 can only interact (and see) processes member of
+ context 0.
+ This system call isolates the processes space.
+ * Setting the capabilities ceiling
+ This is handle by the new_s_context system call as well. This
+ reduces the ceiling capabilities of the current process. Even
+ setuid sub-process can't grab more capabilities. The capability
+ system found since Linux 2.2 is explained later in this document.
+ * set_ipv4root(unsigned long ip)
+ This system call locks the process (and children) into using a
+ single IP when they communicate and when they installs a service.
+ This system call is a one shot. Once a process have set its IPV4
+ (Internet Protocol Version 4) address to something different from
+ 0.0.0.0, it can't change it anymore. Children can't change it
+ either.
+ If a process tries to bind a specific IP number, it will succeed
+ only if this corresponds to the ipv4root (if different from
+ 0.0.0.0). If the process bind to any address, it will get the
+ ipv4root.
+ Basically, once a process is locked to a given ipv4root it is
+ forced to use this IP address to establish a service and
+ communicate. The restriction on services is handy: Most service
+ (Web servers, SQL servers) are binding to address 0.0.0.0. With
+ the ipv4root sets to a given IP you can have two virtual servers
+ using the exact same general/vanilla configuration for a given
+ services and running without any conflict.
+ This system calls isolate the IP network space.
+
+ Those system calls are not privileged. Any user may issue them. NEW
+
+Limiting super-user: The capabilities system
+
+ Once you have created a virtual environment where processes have a
+ limited view of the file-system, can't see processes outside of their
+ world and can only use a single IP number, you still must limit the
+ damages those processes can do. The goal is to run virtual
+ environments and provide some root privileges.
+
+ How do you limit those root processes from taking over the system, or
+ even just re-booting it. Enter the capability system. This is not new,
+ but we suspect many people have never heard of it.
+
+ In the old Unix/Linux days, user root (user ID 0) could do things
+ other user ID could not. All over the place in the kernel, system
+ calls were denying access to some resources unless the user ID of the
+ process (effective ID in fact) was 0. Plain zero.
+
+ The only way a process with user ID 0 could loose some privileges was
+ by changing to another ID. Unfortunately this was an all or nothing
+ deal. Enter the capabilities.
+
+ Today, the difference between root and the other users is the
+ capability set. User root has all capabilities and the other users
+ have none. The user ID 0 does not mean anything special anymore. There
+ are around 30 capabilities defined currently. A process may request to
+ loose a capability forever. It won't be able to get it back.
+
+ Capabilities allows a root process to diminish its power. This is
+ exactly what we need to create custom super-user. A super-user process
+ in a virtual server would have some privileges such as binding port
+ below 1024, but would not be able to reconfigure the network or reboot
+ the machine. Check the file /usr/include/linux/capability.h to learn
+ which one are available.
+
+ Note that the new system calls (new_s_context and set_ipv4root) are
+ not controlled by capabilities. They are by nature irreversible. Once
+ a virtual server is trapped in a chroot/s_context/ipv4root box, it
+ can't escape from the parameters of this trap.
+
+ NEW
+
+Enhancing the capability system
+
+ The Linux capability system, is still a work in progress. At some
+ point, we expect to see capabilities attached to programs,
+ generalizing the setuid concept. A setuid program would become a
+ program with all capability granted.
+
+ For now, this is not available. As explained above a process may
+ request to loose capabilities and its child process will be trapped
+ with a smaller capability set.
+
+ Well, ..., it does not work that way. Unfortunately, until
+ capabilities could be assigned to program, we still need a way to get
+ back capabilities even in a child process. So the irreversible logic
+ of the capabilities is kind of short circuited in the kernel.
+
+ To solve this, we have introduced a new per-process capability ceiling
+ (cap_bset). This one represents the capability set inherited by child
+ process, including setuid root child process. Lowering this ceiling is
+ irreversible for a process and all its child.
+
+ This ceiling is handled by the new_s_context system call and the
+ reducecap and chcontext utilities (part of the vserver package).
+
+ Using this, we can setup a virtual server environment where root has
+ less capabilities, so can't reconfigure the main server.
+
+ NEW
+
+Playing with the new system calls
+
+ The vserver package provides 3 utilities to make use of the new system
+ calls. We will describe shortly how they work and provide few example.
+ We invite the reader to try those example, so it has a better feel and
+ trust.
+
+ After re-booting with a kernel implementing the new system calls, and
+ installing the vserver package, one is ready to do experiment. You do
+ not need to be root to test those new utilities. None of them is
+ setuid either. NEW
+
+Playing with /usr/sbin/chcontext
+
+ The /usr/sbin/chcontext utility is used to enter into a new security
+ context. The utility switch the security context and execute a
+ program, specified on the command line. This program is now isolated
+ and can't see the other processes running on the server.
+
+ The experiment with this, start two command windows (xterm), as the
+ same user ID. In each window execute the following commands:
+
+ xterm
+
+ Using chcontext: first window
+
+/usr/sbin/chcontext /bin/sh
+pstree
+killall xterm
+exit
+
+ Using chcontext: second window
+ In the first window, you start the xterm command (or any command you
+ like). In the second window you execute chcontext. This starts a new
+ shell. You execute pstree and see very little. You attempt to kill the
+ xterm and you fail. You exit this shell and you are back seeing all
+ processes.
+
+ Here is another example. You switch context and you get a new shell.
+ In this shell you start an xterm. Then you switch context again and
+ start another sub-shell. Now the sub-shell is again isolated.
+
+/usr/sbin/chcontext /bin/sh
+pstree
+xterm &
+pstree
+# Ok now you see your xterm
+/usr/sbin/chcontext /bin/sh
+pstree
+# the xterm is not there, killall will fail
+killall xterm
+# Now we exit the shell
+exit
+pstree
+# the xterm is there
+killall xterm
+# Ok, it is gone
+exit
+# We are back to the initial security context
+
+ Using chcontext several times
+ Processes isolated using chcontext are doubly isolated: They can't see
+ the other processes on the server, but the other processes can't see
+ them either. The original security context (0) when you boot is no
+ better than the other: It sees only process in security context 0.
+
+ While playing with chcontext, you will notice an exception. The
+ process 1 is visible from every security context. It is visible to
+ please utilities like pstree. But only root processes in security
+ context 0 are allowed to interact with it. NEW
+
+Playing with /usr/sbin/chcontext as root
+
+ The new_s_context system call has a special semantic for root
+ processes running in security context 0 and having the CAP_SYS_ADMIN
+ capability: They can switch to any context they want.
+
+ Normally, new_s_context allocates a new security context by selecting
+ an unused one. It walks all processes and find an ID (an integer) not
+ currently in use.
+
+ But root in security context 0 is allowed to select the context it
+ wants. This allow the main server to control the virtual server. The
+ chcontext utility has the --ctx option to specify the context ID you
+ want.
+
+ To help manage several virtual server, given that the security context
+ 0 can't see processes in other security context, it is a good thing
+ root in the main server (security context 0) is allowed to select a
+ specific context. Cool. But we also need a way to have a global
+ picture showing all processes in all security context. The security
+ context 1 is reserved for this. Security context 1 is allowed to see
+ all processes on the server but is not allowed to interact with them
+ (kill them).
+
+ This special feature was allocated to security context 1 and not 0
+ (the default when you boot) to isolate virtual servers from the main.
+ This way, while maintaining services on the main server, you won't
+ kill service in vservers accidentally.
+
+ Here is an example showing those concepts:
+
+# You must be root, running X
+# We start an xterm in another security context
+/usr/sbin/chcontext xterm &
+# We check, there is no xterm running, yet we can
+# see it.
+ps ax | grep xterm
+# Are we running in security context 0
+# We check the s_context line in /proc/self/status
+cat /proc/self/status
+# Ok we in security context 0
+# Try the security context 1
+/usr/sbin/chcontext --ctx 1 ps ax | grep xterm
+# Ok, we see the xterm, we try to kill it
+/usr/sbin/chcontext --ctx 1 killall xterm
+# No, security context 1 can see, but can't kill
+# let's find out in which security context this
+# xterm is running
+/usr/sbin/chcontext --ctx 1 ps ax | grep xterm
+# Ok, this is PID XX. We need the security context
+/usr/sbin/chcontext --ctx 1 cat /proc/XX/status
+# We see the s_context, this is SS.
+# We want to kill this process
+/usr/sbin/chcontext --ctx SS killall xterm
+
+ chcontext as root
+ The /usr/sbin/vpstree and /usr/sbin/vps commands are supplied by the
+ vserver package. They simply runs ps and pstree in security context 1.
+ NEW
+
+Playing with /usr/sbin/chbind
+
+ The chbind utility is used to lock a process and its children into
+ using a specific IP number. This applies to services and client
+ connection as well. Here are few examples. Execute them as root:
+
+# httpd is running
+netstat -atn | grep ":80 "
+# We see a line like this
+# tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN
+# Now we restart httpd, but we lock it so it
+# uses only the main IP of eth0
+/usr/sbin/chbind --ip eth0 /etc/rc.d/init.d/httpd restart
+netstat -atn | grep ":80 "
+# Now we see a line like
+# tcp 0 192.168.1.1:80 0.0.0.0:* LISTEN
+# httpd.conf was not changed.
+# Now, restart it normally
+/etc/rc.d/init.d/httpd restart
+# Now we experiment with client socket
+# Log using telnet
+telnet localhost
+# Once logged in
+netstat -atn | grep ":23 "
+# You should see a line showing a connection from
+# 127.0.0.1 to 127.0.0.1 like this
+# tcp 0 0 127.0.0.1:23 127.0.0.1:32881 ESTABLISHED
+exit
+# Now we do the telnet again, bug forcing it to select a specific IP
+/usr/sbin/chbind --ip eth0 telnet localhost
+# Log in and then execute
+netstat -atn | grep ":23 "
+# You will get something like
+# tcp 0 0 127.0.0.1:23 192.168.3.9:32883 ESTABLISHED
+
+ Using /usr/sbin/chbind
+ NEW
+
+Playing with /usr/sbin/reducecap
+
+ The reducecap utility is used to lower the capability ceiling of a
+ process and child process. Even setuid program won't be able to grab
+ more capabilities.
+
+# You are not root now
+# What is the current capability ceiling
+cat /proc/self/status
+# The capBset line presents mostly 1s.
+/usr/sbin/reducecap --secure /bin/sh
+cat /proc/self/status
+# The capBset now shows many more 0s.
+# The capEff shows all 0s, you have no privilege now
+# We su to root
+su
+cat /proc/self/status
+# capEff is much better now, but there are still many 0s
+# Now we try to see if we are really root
+tail /var/log/messages
+# So far so good, we see the content
+/sbin/ifconfig eth0
+/sbin/ifconfig eth0 down
+# No way, we can't configure the interface. In fact
+# we have lost most privilege normally assigned to root
+exit
+
+ Using /usr/sbin/reducecap
+ NEW
+
+Unification
+
+ Installing a virtual private server copies a linux installation inside
+ a sub-directory. It is a linux inside linux. If you intend to run
+ several vservers on the same box (which you will certainly do :-) ),
+ you will end up using a lot of disk space needlessly: Each vserver is
+ made up hundreds of megabytes of the same stuff. This is a big waste
+ of disk space.
+
+ A solution is to use hard links to connect together common files.
+ Using the package information, we can tell which packages are shared
+ between various vservers, which files are configuration files and
+ which are not (binaries, libraries, resource files, ...). Non
+ configuration files may be linked together saving a huge amount of
+ disk space: A 2 GIG rh7.2 installation shrinks to 38megs.
+
+ Using hard links is cool, but may be a problem. If one vserver
+ overwrite one file, say /bin/ls, then every vserver will inherit that
+ change. Not fun! The solution is to set the immutable bit on every
+ linked file. A file with such a bit on can't be modified, even by
+ root. The only way to modify it is to turn off the bit first. But
+ within a vserver environment, even root is not allowed to perform this
+ task. So linked file, turned immutable, are now safe: They can be
+ shared between vservers without side effects: Cool!
+
+ Well, there is still another side effect. All vservers are now locked
+ with the same files. We are saving a lot of disk space, but we pay a
+ very heavy price for that: Vservers can't evolve independantly.
+
+ A solution was found. A new bit call immutable-linkage-invert was
+ added. Combined with the immutable bit, a file may not be modified,
+ but may be unlinked. Unlinking a file in Unix/Linux means
+ disconnecting the name from the data and removing the name from the
+ directory. If the data is still referenced by one or more vservers, it
+ continue to exist on disk. So doing "rm /bin/ls" on a vserver, removes
+ the file /bin/ls for that vserver and that's all. If all vservers
+ perform this task, then /bin/ls (the data) will be forgotten completly
+ and the disk space will be recovered.
+
+ Using this trick, a vserver gets back its independance. It becomes
+ possible to update packages by using the unlink/update sequence:
+ Unlink /bin/ls first and then put a new copy in place. Luckily,
+ package manager works this way.
+
+ To keep this story short (probably too late :-) ), a unified vserver:
+ * Uses little disk space
+ * Can't interfere with other vservers by changing one of its file.
+ * Can perform package update/deletion normally using standard
+ practice.
+
+ NEW
+
+Applications
+
+ NEW
+
+Virtual server
+
+ The first goal of this project is to create virtual servers sharing
+ the same machine. A virtual server operate like a normal Linux server.
+ It runs normal services such as telnet, mail servers, web servers, SQL
+ servers. In most cases, the services run using standard configuration:
+ The services are running unaware of the virtual server concept.
+
+ Normal system administration is performed with ordinary admin tool.
+ Virtual servers have users account and a root account.
+
+ Packages are installed using standard packages (RPMs for example).
+
+ There are few exceptions. Some configuration can't be done inside a
+ virtual server. Notably the network configuration and the file-system
+ (mount/umount) can't be performed from a virtual server.
+
+ NEW
+
+Per user fire-wall
+
+ The set_ipv4root() system call may be used to differentiate the
+ various users running on an application server. If you want to setup a
+ fire-wall limiting what each user is doing, you have to assign one IP
+ per user, even if they are running application on the same server. The
+ chbind utility may be used to achieve that. NEW
+
+Secure server/Intrusion detection
+
+ While it can be interesting to run several virtual servers in one box,
+ there is one concept potentially more generally useful. Imagine a
+ physical server running a single virtual server. The goal is isolate
+ the main environment from any service, any network. You boot in the
+ main environment, start very few services and then continue in the
+ virtual server. The service in the main environment could be
+
+ * Un-reachable from the network.
+ * The system log daemon. While virtual server could log messages,
+ they would be unable to change/erase the logs. So even a cracked
+ virtual server would not be able the edit the log.
+ * Some intrusion detection facilities, potentially spying the state
+ of the virtual server. For example tripwire could run there and it
+ would be impossible to circumvent its operation or trick it.
+
+ NEW
+
+Fail over servers
+
+ One key feature of a virtual server is the independence from the
+ actual hardware. Most hardware issues are irrelevant for the virtual
+ server installation. For example:
+
+ * Disk layout, partitions and the /etc/fstab configuration. The
+ virtual server has a dummy /etc/fstab.
+ * Network devices.
+ * Processor type, number of processor (kernel selection).
+
+ The main server acts as a host and takes care of all those details.
+ The virtual server is just a client and ignores all the details. As
+ such, the client can be moved to another physical server will very few
+ manipulations. For example, to move the virtual server v1 from one
+ physical one computer to another, you do
+
+ * Turn it off
+ /usr/sbin/vserver v1 stop
+ * Copy the file /etc/vservers/v1.conf to the new server.
+ * Copy all files in /vservers/v1 to the new server
+ * On the new server, start the vserver v1
+ /usr/sbin/vserver v1 start
+
+ As you see, there is no adjustment to do:
+
+ * No user account merging.
+ * No hardware configuration to fix.
+
+ This opens the door to fail over servers. Imagine a backup server
+ having a copy of many virtual servers. It can take over their tasks
+ with a single command. Various options exists for managing this backup
+ server:
+
+ * rsync to synchronize the data.
+ * Network block devices to synchronize the data in real time.
+ * Sharing the installation over a SAN (storage area network).
+ * Heartbeat for automatic monitoring/fail over.
+
+ NEW
+
+Installation
+
+ NEW
+
+The packages
+
+ * The kernel
+ We are supplying a patched 2.4.20 kernel. You will find [50]here
+ the kernel, the .config and the patch.
+ To install the kernel, just untar it. This will create a file
+ /boot/kernel-2.4.20ctx-17 (ctx stands for security context) and a
+ directory /lib/modules/2.4.20ctx-17.
+ Then, you need to update your boot loader. For lilo, you add a
+ section like this at the end of the file /etc/lilo.conf
+
+
+image=/boot/vmlinuz-2.4.20ctx-17
+ label=linux2.4.20ctx-17
+ read-only
+ root=current
+
+ lilo.conf section to add
+ Change the /dev/XXXX to your root partition. Then execute
+ /sbin/lilo.
+ Reboot and select the proper kernel. This kernel is fully
+ compatible with a normal 2.4.20 and will perform without any new
+ configuration. Note that the supplied kernel does not carry all
+ the features and modules found on the various distributions.
+ * The vserver package
+ This package provides the various utilities to make use of those
+ new system calls. The package also provides a complete solution to
+ implement virtual servers. We describe the major components here.
+ + /usr/sbin/chcontext
+ This is the utility to request a new security context. It can
+ be used to lower the capability ceiling. Execute it to learn
+ more.
+ + /usr/sbin/chbind
+ This is the utility to select one IP number and assign it to
+ a process and its children.
+ + /usr/sbin/newvserver (in vserver-admin)
+ Front-end to help create new virtual servers.
+ + /usr/sbin/reducecap
+ This utility is used to lower the capability ceiling of
+ children processes.
+ + /usr/sbin/vdu
+ A trimmed down "du" command reporting space usage of files
+ with a single link. Useful to tell how much space a unified
+ vserver is using.
+ + /usr/sbin/vkill
+ Locate the security context associated with a process, enter
+ it and kill the process. Generally used after you have
+ located a process with vtop, vpstree or vps.
+ + /usr/sbin/vps
+ Execute the ps command in security context 1 so all processes
+ in all vservers are shown. The security context and vserver
+ name are mapped inside the report.
+ + /usr/sbin/vpstree
+ Execute the pstree command in security context 1 so all
+ processes in all vservers are shown.
+ + /usr/sbin/vrpm
+ Apply an rpm command in several (or all) vservers. Useful
+ when you wish to update many vservers with the same package.
+ /usr/sbin/vrpm server1 server2 -- -Uvh /tmp/*.rpm
+ /usr/sbin/vrpm ALL -- -Uvh /tmp/*.rpm
+ After updating many packages in different vservers you may
+ want to re-unify them to recover disk space (and increase
+ cache effectivity). You can do this using the vunify command,
+ or simply by using the --unify option to the vrpm command.
+ After performing the rpm updates, vrpm will trigger the
+ vunify utility on the vservers for the updated packages.
+ /usr/sbin/vrpm --unify server1 server2 -- -Uvh /tmp/*.rpm
+ + /usr/sbin/vserver
+ This is the wrapper to start, stop and administer virtual
+ servers.
+ + /usr/sbin/vserver-stat
+ Produce a small report showing the activity in active
+ security context. The report presents the number of process
+ in each active security context as well as the name of the
+ vserver associated with this context.
+ + /usr/sbin/vtop
+ Execute the top command in security context 1 so all
+ processes in all vservers are shown.
+ + /etc/rc.d/init.d/vservers
+ This is an init script used to start all virtual servers at
+ boot time and stop them at shutdown time. Only virtual
+ servers with ONBOOT=yes are started at boot time. All
+ vservers are stopped at shutdown time.
+ + /etc/rc.d/init.d/rebootmgr
+ This is a daemon listening to requests from virtual servers.
+ It can either restart or stop a virtual server. The
+ /sbin/vreboot and /sbin/vhalt utilities are used to send
+ request to the reboot manager.
+ + /sbin/vreboot and /sbin/vhalt
+ Those utilities are copied in each virtual server. They
+ connect to the reboot manager (rebootmgr) server using the
+ /dev/reboot Unix domain socket and request either a restart
+ or a stop of the virtual server. The reboot manager issue
+ either a "/usr/sbin/vserver vserver restart" or
+ "/usr/sbin/vserver vserver stop" command. This allows the
+ virtual server administrator to test if all automatic service
+ are properly restarted at boot time.
+ + /usr/lib/vserver/vdu
+ This is a limited clone of the du command. It skips file with
+ more than one link. It is used to evaluate the disk usage of
+ an unified vserver. Using the normal du for this task is
+ misleading since it will count all unified files.
+
+ NEW
+
+Setting a virtual server
+
+ To set a virtual server, you need to copy in a sub-directory a Linux
+ installation. One way to achieve that is to copy some parts of the the
+ current server by issuing the command vserver XX build, where XX is
+ the name of the virtual server (pick one). This basically does (Well,
+ it does a little more than that, but this give you an idea):
+
+mkdir /vservers/XX
+cd /vservers/XX
+cp -ax /sbin /bin /etc /usr /var /dev /lib .
+mkdir proc tmp home
+chmod 1777 tmp
+
+ Building a virtual server
+
+ This is normally done using the command /usr/sbin/newvserver. This is
+ a text mode/graphical front-end allowing to setup the vserver runtime
+ and configure it. NEW
+
+Basic configuration of the virtual server
+
+ A virtual private server has a few settings. They are defined in the
+ file /etc/vservers/XX.conf where XX is the name of the virtual server.
+ This is a simple script like configuration. Here are the various
+ parameters:
+
+ * IPROOT
+ In general, each virtual server is tied to one IP using the new
+ set_ipv4root system call. This way several servers may run the
+ same services without conflict. Enter the IP number (a name is
+ also valid if defined in the DNS).
+ Since kernel ctx-12, you can assign more than one IP number to a
+ vserver. Enter them separated by spaces and don't forget to
+ enclose them with quotes.
+ Bu default, all IPs are configured as an IP alias on the IPROOTDEV
+ device (if defined). If you want to attach the various IP numbers
+ to different devices, specify the device as a prefix to the IP
+ number like this:
+
+IPROOT="eth0:192.168.1.2 eth1:192.168.3.1 192.168.1.4"
+
+ IPROOT using multiple devices
+ In the example above, the IP 192.168.1.4 will be installed as an
+ IP alias on the device IPROOTDEV.
+ Use "IPROOT=0.0.0.0" or "IPROOT=" if you do not want to tie the
+ vserver at all. It will be allowed to use any IP available on the
+ server.
+ * IPROOTDEV
+ This is the network device use to setup the IP alias defined by
+ IPROOT. This is generally eth0. If you define this variable, the
+ IP alias will be configured when you start the virtual server and
+ un-configure when you stop it.
+ * IPROOTMASK
+ Netmask used to setup the IP alias. Uses the netmask of the
+ IPROOTDEV device by default. Seldom used.
+ If you have several IPs on one vserver and want to have different
+ netmask for each, use the following syntax:
+
+IPROOT="eth0:192.168.1.2 eth1:192.168.3.1/255.255.255.192"
+
+ IPROOT using different netmask
+ 192.168.1.2 will use the netmask of eth0, while 192.168.3.1 will
+ use the specified netmask: 255.255.255.192.
+ * IPROOTBCAST
+ Broadcast address used to setup the IP alias. Uses the broadcast
+ of the IPROOTDEV device by default. Seldom used.
+ * ONBOOT
+ The vserver package supplies the vservers service. This service is
+ installed in the main server. It is used to start and stop the
+ virtual server at boot and shutdown time.
+ Virtual server with ONBOOT=yes will be started and stopped
+ properly like any other services of the main server.
+ Once a virtual server is properly configured, it is a good idea to
+ set this parameter to yes.
+ * S_CAPS
+ You enter here the various capability you want to grant to the
+ vserver. By default, a vserver is left with much less capabilities
+ than the root server. For example, a vserver is not allowed to use
+ raw socket. This explains why the ping command fails. S_CAPS lets
+ you enumerate the capability you want to keep in the vserver.
+ CAP_NET_RAW will give back ping ability for example.
+ * S_CONTEXT
+ This is optional. In general the security context ID is selected
+ by the kernel. An unused one is selected. If you select an ID (an
+ integer greater than 1), make sure you select a different one for
+ each server. Again, in most cases, you do not need to select one.
+ Leave the line commented.
+ * S_DOMAINNAME
+ A virtual server may have a different NIS domainname than the main
+ server. You set it here. If you leave the field empty, the vserver
+ will inherit the same NIS domain as the root server. Enter "none"
+ to reset the NIS domain name for this vserver.
+ * S_HOSTNAME
+ Many services (Apache for one) use the host name to setup some
+ defaults. A virtual server may have a different host name than the
+ main server. It is a good idea to fill this line.
+ * S_NICE
+ The is an optional priority level. It is an integer ranging
+ between from -20 to 19. Well it is the nice level in fact, so -20
+ means the highest priority and 19 the lowest (the highest nice
+ level). All processes in the virtual server will be locked to this
+ level (or higher niceness).
+ Event root is locked and can't get more priority.
+ Note that this has limited usefulness. The kernel does not
+ differentiate processes running in different security context for
+ scheduling (for now :-) ). This means that a virtual servers
+ running many low priority processes may nevertheless claim a large
+ share of CPU.
+ * S_FLAGS
+ This is used to set various flags. Here are the supported flags:
+ + lock
+ This flags prevents the vserver from setting new security
+ contexts.
+ + sched
+ It kind of unifies the processes in a vserver from a
+ scheduler view point. All processes are weighted as single
+ one when compared to other processes in the real server. This
+ prevents a vserver from taking to much CPU resources.
+ + nproc
+ Make the ulimit maximum user process global to the vserver.
+ + private
+ Once set on a vserver security context, no other process can
+ enter it. Even the root server is unable to enter the
+ context. It can see the process list using security context
+ 1, but can't signal or trace the process.
+ + fakeinit
+ This assigned the current process so it works like the
+ process number 1. Using this trick, a normal /sbin/init may
+ be run in a vserver. The /usr/sbin/vserver command will use
+ /sbin/init to start and stop a vserver. A properly configured
+ /etc/inittab is needed though.
+ o Processes loosing their parent are reparent to this
+ process.
+ o getppid() done by child process of this process returns
+ 1.
+ o getpid() done by this process returns 1.
+ o This process is not shown in /proc since process number
+ 1 is always shown.
+ o An "initpid" entry is available in /proc/*/status to
+ tell which process is the fake init process.
+ * ULIMIT
+ This contains the command line option to the ulimit shell command.
+ You enter here whatever parameters accepted by ulimit. Here is the
+ default when you create a new vserver:
+
+ULIMIT="-H -u 1000"
+
+ Default vserver ulimit
+ Normally ulimit settings only affects users independantly. So
+ limiting a vserver this way, limit each user processes
+ independantly in the vserver. Using special flags in the S_FLAGS
+ option, you can make those ulimit settings global to the vserver.
+ The example above used with the nproc parameter make the maximum
+ number of process global. In this case, a maximum of 1000
+ processes is available to all users in the vserver.
+
+ NEW
+
+Entering the virtual server
+
+ It is possible to enter a virtual server context from the main server
+ just by executing /usr/sbin/vserver XX enter (where XX is the virtual
+ server name).
+
+ This creates a shell. From there you can execute anything
+ administrative you normally do on a Linux server.
+
+ NEW
+
+Configuring the services
+
+ The virtual server can run pretty much any services. Many pseudo
+ services, such as network configuration are useless (the server is
+ already configured). After building the environment, enter it (without
+ starting the virtual server) using the vserver name enter command.
+ Then using a tool like Linuxconf (control/control service activity) ,
+ or ntsysv, browse all service and keep only the needed ones.
+
+ So after building the server, you enter it and you select the service
+ you need in that server. Many services such as network, and apmd are
+ either useless or won't run at all in the virtual server. They will
+ fail to start completely. NEW
+
+Starting/Stopping the virtual server
+
+ Virtual server with ONBOOT=yes will be started and stopped like any
+ other services of the main server. But you can stop and start a
+ virtual server at any time. Starting a server means that all
+ configured service will be started. Stopping it means that all
+ configured services will be stopped and then all remaining process
+ will be killed.
+
+ Oddly, starting a virtual server does not mean much. There is no
+ overhead. No monitoring process or proxy or emulator. Starting a
+ virtual server with 4 services is the same as running those 4 services
+ in the main server, at least performance wise (the service inside a
+ virtual server are locked inside the security context).
+
+ The following commands may be used to control a virtual server:
+
+ * /usr/sbin/vserver server start
+ * /usr/sbin/vserver server stop
+ * /usr/sbin/vserver server restart
+ * /usr/sbin/vserver server running
+ * /usr/sbin/vserver server enter
+ * /usr/sbin/vserver server exec some commands ...
+ * /usr/sbin/vserver server suexec user some commands ...
+ * /usr/sbin/vserver server service service-name
+ start/stop/restart/status
+ * /usr/sbin/vserver server status
+
+ The running command prints if there are any processes running in the
+ virtual server context.
+
+ Please note
+
+ The processes running in a virtual server are invisible from the main
+ server. The opposite is true. This is very important. Managing the
+ main server must not cause problems to the various virtual servers.
+ For example, doing killall httpd will kill all the httpd processes in
+ the current context ( the main server or a virtual one).
+
+ NEW
+
+Starting/Stopping all the virtual servers
+
+ The sysv script /etc/rc.d/init.d/vserver is used to start and stop the
+ virtual server at boot and shutdown time. It may be used at any time
+ to operate all virtual servers. The following commands are supported:
+
+ * /etc/rc.d/init.d/vservers start
+ * /etc/rc.d/init.d/vservers stop
+ * /etc/rc.d/init.d/vservers restart
+ * /etc/rc.d/init.d/vservers status
+
+ The status command reports the running status of every virtual server.
+ NEW
+
+Restarting a virtual server from inside
+
+ A virtual server administrator is not allowed to reboot the machine
+ (the kernel). But it is useful to restart his virtual server from
+ scratch. This allow him to make sure all the services are properly
+ configured to start at boot time.
+
+ The /sbin/vreboot and /sbin/vhalt utilities are installed in each
+ virtual server so they can request a restart or stop.
+
+ The rebootmgr service must be enabled in the main server.
+
+ NEW
+
+Executing tasks at vserver start/stop time
+
+ You can setup a script called /etc/vservers/XX.sh where XX is the name
+ of the virtual server. This script will be called four time:
+
+ * Before starting the vserver
+ * After starting it.
+ * Before stopping it.
+ * After stopping it.
+
+ You generally perform tasks such as mounting file system (mapping some
+ directory in the vserver root using "mount --bind").
+
+ Here is an example where you map the /home directory as the vserver
+ /home directory.
+
+#!/bin/sh
+case $1 in
+pre-start)
+ mount --bind /home /vservers/$2/home
+ ;;
+post-start)
+ ;;
+pre-stop)
+ ;;
+post-stop)
+ umount /vservers/$2/home
+ ;;
+esac
+
+ /etc/vservers/XX.sh
+ NEW
+
+Issues
+
+ There are some common problem you may encounter. Here they are.
+
+ * The main server is not tied (by default) to any ipv4root. So if
+ the main server has already some service running they are probably
+ binding some UDP or TCP ports using the address 0.0.0.0. Once a
+ process has bound a service with the address 0.0.0.0 (see the
+ LISTEN lines when executing the "netstat -a" command), no other
+ process can bind the same port, even with a specific address.
+ The solution is to start the services of the main server using the
+ chbind utility to trap them in one ipv4root. For example
+
+/sbin/chbind --ip eth0 /etc/rc.d/init.d/httpd start
+
+ Assigning on IP to a service
+ will limit Apache to the IP address of the eth0 interface. without
+ configuration changes (in httpd.conf). It is probably a good idea
+ to start the following services in the main server this way,
+ because they will be run by virtual servers as well.
+
+ * httpd
+ * sshd
+ * xinetd
+
+ To ease this, the vserver package supplies the following services:
+ v_httpd, v_sshd, v_smb and v_xinetd. Disable the corresponding
+ services and enable the v_ services and you will lock those services
+ on a single IP.
+
+ Cleanup rc.local. This is probably not doing anything useful.
+
+ NEW
+
+How real is it ?
+
+ The project is new. So far, experiments have shown very little
+ restrictions. Service works the same in a virtual server. Further,
+ performance is the same. And there is a high level of isolation
+ between the various virtual servers and the main server. NEW
+
+Features
+
+ There are various tricks one can use to make the virtual servers more
+ secure.
+
+ * Putting a fire-wall on the box and limiting access to a virtual
+ services from another one.
+ * Using port redirection to allow one virtual server to logically
+ bind several IPs. One virtual server could run several web virtual
+ host this way.
+
+ NEW
+
+Future directions
+
+ NEW
+
+User controlled security box
+
+ By combining the capabilities, the s_context, the ipv4root and the
+ AclFS (component of the [51]virtualfs package), we can produce a user
+ level tool allowing controlled access to the user own resources. For
+ example the user may download any program he wants and execute them
+ under control. Whenever the program tries to access something not
+ specified by the user, a popup is presented and the user may choose to
+ terminate the program or allow the access.
+
+ NEW
+
+Kernel enhancements
+
+ We expect to see some wider usage of the virtual servers. As usage
+ grow, we expect to see needs for more control. Here are some ideas.
+
+ NEW
+
+Per context disk quota
+
+ If one installs virtual servers and grant access to less trusted
+ users, he may want to limit the disk space used. Since a virtual
+ server may create new user accounts and run processes with any user ID
+ it wants, the current kernel disk quota is not powerful enough. First,
+ it can't differentiate between user ID 100 in one virtual server and
+ user ID 100 in another one.
+
+ Further, the main administrator may want to control disk space
+ allocated to the virtual server on a server per server basis,
+ unrelated to the various user ID in use in those virtual servers.
+
+ The kernel has already user and group disk quota. Adding security
+ context disk quota should be easily done.
+
+ To differentiate between user IDs in virtual servers, the kernel could
+ coin together the security context and the user id to create a unique
+ ID. The kernel 2.4 now supports 32 user ID, so combining security
+ context and user ID in a single 32 bits number should be acceptable.
+
+ NEW
+
+Global limits
+
+ The kernel has supports for user limit (memory, processes file
+ handles). With virtual server, we may want to limit the resources used
+ by all processes in the virtual server. The security context would be
+ used as the key here. The following resources could be limited on a
+ security context basis (as opposed to user or process basis)
+
+ * Memory used
+ * Processes number
+ (Done: This is now supported with the nproc flag in the kernel
+ 2.4.16ctx-4. By default a new vserver is limited to 1000 processes
+ maximum, configurable).
+ * File handles
+
+ NEW
+
+Scheduler
+
+ The scheduler may become security context aware. It could potentially
+ use this to provide some fairness and control priority based on
+ context. Currently the scheduler is process oriented and does not
+ group process together to qualify their priorities. For example, a
+ user running 10 compilations will get more CPU than another user
+ running a single compilation.
+
+ Currently, it is possible to raise the nice (lower priority) for all
+ processes in a virtual server. This can't be reversed, so you are
+ setting an upper limit on priority (Just set the S_NICE variable in
+ the vserver configuration file). Note that a virtual server may still
+ start many low priority processes and this can grab significant share
+ of the CPU. A global per security context might be needed to really
+ provide more control and fairness between the various virtual servers.
+
+ Done: The sched security context flag group all process in a vserver
+ so their priority is kind of unified. If you have 50 processes running
+ full speed in one vserver, they will take as much CPU resource than a
+ single process in the root server. A vserver can't starve the other...
+ NEW
+
+Security issues
+
+ The current kernel + patch provides a fair level of isolation between
+ the virtual servers. User root can't take over the system: He sees
+ only his processes, has only access to his area of the file system
+ (chroot) and can't reconfigure the kernel. Yet there are some
+ potential problems. They are fixable. As usage grows, we will know if
+ they are real problems. Comments are welcome:
+
+ NEW
+
+/dev/random
+
+ Writing to /dev/random is not limited by any capability. Any root user
+ (virtual included) is allowed to write there. Is this a problem ?
+
+ (kernel expert think it is ok) NEW
+
+/dev/pts
+
+ /dev/pts is a virtual file-system used to allocate pseudo-tty. It
+ presents all the pseudo-tty in use on the server (including all
+ virtual server). User root is allowed to read and write to any
+ pseudo-tty, potentially causing problems on other vservers.
+
+ Starting with the ctx-6 patch, /dev/pts is virtualised. Although the
+ file numbers are allocated from a single pool, a vserver only see the
+ pseudo-tty it owns. NEW
+
+Network devices
+
+ Anyone can list the network devices configurations. This may inform a
+ virtual user that another vserver is on the same physical server. By
+ using as much resources as possible in his own vservers, a malicious
+ user could slow down the other server. Modification to the scheduler
+ explained above could stop this.
+
+ Starting with the ctx-6 patch, a vserver only see the device
+ corresponding to its IP number. NEW
+
+Alternative technologies
+
+ Using virtual servers may be a cost effective alternative to several
+ independent real servers. You get the administrative independence of
+ independent servers, but share some costs including operation costs.
+
+ Other technologies exist offering some of the advantages talked in
+ this document as well as other. Two technologies are available on
+ various hardware platform: Virtual machines and partitioning, NEW
+
+Virtual machines
+
+ This has been available for mainframes for a while now. You can boot
+ several different OS at once on the same server. This is mainly used
+ to isolate environments. For example, you can install the new version
+ of an OS on the same server, even while the server is running the
+ current version. This allows you to test and do a roll-out gracefully.
+
+ The advantages of virtual machines are:
+
+ * Total flexibility. You can run many different OS and different
+ version of the same OS, all at once.
+ * Robustness. You have total isolation. One OS may crash without
+ affecting the other.
+ * Resource management. You can effectively limit the resources taken
+ by one OS.
+ * Hardware Independence. The client OS is using virtual disks
+ provided by the host OS.
+
+ This technology is not directly available on PCs. The Intel x86
+ architecture does not support visualization natively. Some products
+ nevertheless have appeared and provide this. You can run Linux inside
+ Linux, or this other OS (Which BTW has a logo showing a window flying
+ in pieces, which quite frankly tells everything about it).
+
+ The solutions available on PCs carry most of the advantages of the
+ virtual machines found on mainframe, except for performance. You can't
+ run that many virtual Linux's using this technology and expect it to
+ fly. One example of this technology is [52]vmware, which is quite
+ useful, especially if you must run this other OS... vmware may be used
+ to run Linux inside Linux, even test Linux installation while running
+ linux... NEW
+
+Partitioning
+
+ Partitioning (domains ?) is a way to split the resources of a large
+ server so you end up with independent servers. For example, you can
+ take a 20 CPUs server and create 3 servers, two with 4 CPUs and one
+ with 12. You can very easily re-assign CPUs to servers in case you
+ need more for a given tasks.
+
+ This technology provides full Independence, but much less flexibility.
+ If your 12 CPUs server is not working much, the 4 CPUs one can't
+ borrow some CPUs for 5 minutes. NEW
+
+Limitation of those technologies
+
+ Oddly, one disadvantage of those technologies is a side effect of
+ their major advantage: Total Independence. Each virtual server is
+ running its own kernel. Cool. This makes the following tasks more
+ difficult or impossible:
+
+ * Sharing administrative tasks such as backup. The virtual servers
+ are using volumes in the host server. The host server can't handle
+ the files in those volumes directly without interfering with the
+ client OS. It has to use some services of the client OS to access
+ the file.
+ The vserver solution does not have this limitation since the
+ virtual servers are living in the same file-system, sharing the
+ same kernel.
+ * Task monitoring. The virtual servers run their own kernel. As
+ such, the host OS can't spy on the tasks and check for intrusion
+ for example.
+ * Disk space. Virtual servers are using either volumes or full
+ devices in the host server. This space is pre-allocated to the
+ maximum needed by the server. You end up with a lot of wasted disk
+ space. Imagine running 100 virtual servers this way and allocating
+ say 10 gigs to each. You get the picture. The vserver solution is
+ sharing a common file-system so the free disk space is available
+ to all.
+ Further, if you are running the same Linux distribution in the
+ virtual servers, you can unify the disk space using hard link and
+ immutable attributes. The /usr/lib/vserver/vunify was created to
+ test that. Using information found in the rpm package the script
+ links the files, except configuration ones.
+ Testing vunify on a vserver installed with a RedHat 6.2
+ distribution, unifying the packages glibc, binutils, perl, and
+ bash saved 60 megs. Quite a few packages are not changing often
+ and could be unified.
+ Vservers do not need kernel packages and hardware configuration
+ tools. This also contribute to save disk space.
+ * File system sharing
+ A little the same as above. You can't share file system easily
+ between vservers unless you use network services (often slower).
+ Using "mount --bind", it is very easy to "map" any directory of
+ the root server in several vservers, providing raw speed access
+ (and even sharing the disk cache).
+
+ NEW
+
+Conclusion
+
+ Virtual servers are interesting because they can provide a higher
+ level of security while potentially reducing the administration task.
+ Common operation such as backup, are shared between all servers.
+ Services such as monitoring may be configured once.
+
+ A Linux server can run many services at once with a high level of
+ reliability. As servers are evolving, more and more services are
+ added, often unrelated. Unfortunately there are few details here and
+ there, making the server more complex than it is in reality. When one
+ wants to move one service to another server, it is always a little
+ pain: Some user accounts have to be moved and some configuration
+ files. A lot of hand tweaking.
+
+ By installing services in separate virtual servers, it becomes much
+ easier to move services around (just by moving a directory although a
+ big one).
+
+ Virtual servers may become a preferred way to install common Linux
+ servers. NEW
+
+Download
+
+ The ftp site for this project is
+ [53]ftp://ftp.solucorp.qc.ca/pub/vserver . You will find there the
+ following components.
+
+ * [54]kernel-2.4.20ctx-17.tar.gz
+ [55]kernel-2.4.20ctxsmp-17.tar.gz
+ A pre-compiled kernel for Pentium class machine and up. An SMP
+ kernel is also supplied.
+ * [56]vserver-0.22-1.src.rpm
+ The source RPM for the vserver utilities
+ * [57]vserver-0.22-1.i386.rpm
+ A compiled rpm for RedHat 7.x and up. Should work on any recent
+ distribution (glibc 2.2). You need a recent distribution to
+ operate a kernel 2.4 anyway.
+ * [58]vserver-admin-0.22-1.i386.rpm
+ Contains the command /usr/sbin/newvserver. It is a GUI to create
+ vservers. It requires the linuxconf-utils and linuxconf-lib
+ packages. You can get them from [59]here. linuxconf itself is not
+ needed though.
+ * [60]vserver-0.22.src.tar.gz
+ The vserver utilities source
+ * [61]patch-2.4.20ctx-17.gz
+ The patch against Linux 2.4.20
+ * [62]patches
+ The various relative patches (ctxN-ctxN+1)
+
+ NEW
+
+References
+
+ This project is maintained by Jacques Gelinas [63]jack@solucorp.qc.ca
+
+ The vserver package is licensed under the GNU PUBLIC LICENSE.
+
+ A FAQ can be found at
+ [64]http://www.solucorp.qc.ca/howto.hc?projet=vserver
+
+ A mailing list has been created to exchange about this project. It is
+ [65]vserver@solucorp.qc.ca .You can subscribe [66]here
+
+ The mailing list is archived [67]here.
+
+ The change logs for the vserver package are [68]here .
+
+ The official copy of this document is found at
+ [69]http://www.solucorp.qc.ca/miscprj/s_context.hc
+
+ This document was produced using the [70]TLMP documentation system
+
+ [71]Top
+ [72]Back to project page
+ [73]About tlmpdoc and cookies
+ Document maintained by Jacques Gélinas ([74]jack@solucorp.qc.ca)
+ Last update: Wed Apr 16 11:22:22 2003
+
+Références
+
+ 1. http://remtk/solucor/miscprj/s_context.hc?s1=1&s2=0&s3=0&s4=0&full=0&prjstate=1&nodoc=0
+ 2. http://remtk/solucor/miscprj/s_context.hc?s1=1&s2=1&s3=0&s4=0&full=0&prjstate=1&nodoc=0
+ 3. http://remtk/solucor/miscprj/s_context.hc?s1=2&s2=0&s3=0&s4=0&full=0&prjstate=1&nodoc=0
+ 4. http://remtk/solucor/miscprj/s_context.hc?s1=2&s2=1&s3=0&s4=0&full=0&prjstate=1&nodoc=0
+ 5. http://remtk/solucor/miscprj/s_context.hc?s1=2&s2=2&s3=0&s4=0&full=0&prjstate=1&nodoc=0
+ 6. http://remtk/solucor/miscprj/s_context.hc?s1=2&s2=3&s3=0&s4=0&full=0&prjstate=1&nodoc=0
+ 7. http://remtk/solucor/miscprj/s_context.hc?s1=2&s2=4&s3=0&s4=0&full=0&prjstate=1&nodoc=0
+ 8. http://remtk/solucor/miscprj/s_context.hc?s1=2&s2=5&s3=0&s4=0&full=0&prjstate=1&nodoc=0
+ 9. http://remtk/solucor/miscprj/s_context.hc?s1=2&s2=6&s3=0&s4=0&full=0&prjstate=1&nodoc=0
+ 10. http://remtk/solucor/miscprj/s_context.hc?s1=2&s2=6&s3=1&s4=0&full=0&prjstate=1&nodoc=0
+ 11. http://remtk/solucor/miscprj/s_context.hc?s1=2&s2=6&s3=2&s4=0&full=0&prjstate=1&nodoc=0
+ 12. http://remtk/solucor/miscprj/s_context.hc?s1=2&s2=6&s3=3&s4=0&full=0&prjstate=1&nodoc=0
+ 13. http://remtk/solucor/miscprj/s_context.hc?s1=2&s2=6&s3=4&s4=0&full=0&prjstate=1&nodoc=0
+ 14. http://remtk/solucor/miscprj/s_context.hc?s1=2&s2=7&s3=0&s4=0&full=0&prjstate=1&nodoc=0
+ 15. http://remtk/solucor/miscprj/s_context.hc?s1=3&s2=0&s3=0&s4=0&full=0&prjstate=1&nodoc=0
+ 16. http://remtk/solucor/miscprj/s_context.hc?s1=3&s2=1&s3=0&s4=0&full=0&prjstate=1&nodoc=0
+ 17. http://remtk/solucor/miscprj/s_context.hc?s1=3&s2=2&s3=0&s4=0&full=0&prjstate=1&nodoc=0
+ 18. http://remtk/solucor/miscprj/s_context.hc?s1=3&s2=3&s3=0&s4=0&full=0&prjstate=1&nodoc=0
+ 19. http://remtk/solucor/miscprj/s_context.hc?s1=3&s2=4&s3=0&s4=0&full=0&prjstate=1&nodoc=0
+ 20. http://remtk/solucor/miscprj/s_context.hc?s1=4&s2=0&s3=0&s4=0&full=0&prjstate=1&nodoc=0
+ 21. http://remtk/solucor/miscprj/s_context.hc?s1=4&s2=1&s3=0&s4=0&full=0&prjstate=1&nodoc=0
+ 22. http://remtk/solucor/miscprj/s_context.hc?s1=4&s2=2&s3=0&s4=0&full=0&prjstate=1&nodoc=0
+ 23. http://remtk/solucor/miscprj/s_context.hc?s1=4&s2=3&s3=0&s4=0&full=0&prjstate=1&nodoc=0
+ 24. http://remtk/solucor/miscprj/s_context.hc?s1=4&s2=4&s3=0&s4=0&full=0&prjstate=1&nodoc=0
+ 25. http://remtk/solucor/miscprj/s_context.hc?s1=4&s2=5&s3=0&s4=0&full=0&prjstate=1&nodoc=0
+ 26. http://remtk/solucor/miscprj/s_context.hc?s1=4&s2=6&s3=0&s4=0&full=0&prjstate=1&nodoc=0
+ 27. http://remtk/solucor/miscprj/s_context.hc?s1=4&s2=7&s3=0&s4=0&full=0&prjstate=1&nodoc=0
+ 28. http://remtk/solucor/miscprj/s_context.hc?s1=4&s2=8&s3=0&s4=0&full=0&prjstate=1&nodoc=0
+ 29. http://remtk/solucor/miscprj/s_context.hc?s1=4&s2=9&s3=0&s4=0&full=0&prjstate=1&nodoc=0
+ 30. http://remtk/solucor/miscprj/s_context.hc?s1=4&s2=10&s3=0&s4=0&full=0&prjstate=1&nodoc=0
+ 31. http://remtk/solucor/miscprj/s_context.hc?s1=4&s2=11&s3=0&s4=0&full=0&prjstate=1&nodoc=0
+ 32. http://remtk/solucor/miscprj/s_context.hc?s1=5&s2=0&s3=0&s4=0&full=0&prjstate=1&nodoc=0
+ 33. http://remtk/solucor/miscprj/s_context.hc?s1=6&s2=0&s3=0&s4=0&full=0&prjstate=1&nodoc=0
+ 34. http://remtk/solucor/miscprj/s_context.hc?s1=6&s2=1&s3=0&s4=0&full=0&prjstate=1&nodoc=0
+ 35. http://remtk/solucor/miscprj/s_context.hc?s1=6&s2=2&s3=0&s4=0&full=0&prjstate=1&nodoc=0
+ 36. http://remtk/solucor/miscprj/s_context.hc?s1=6&s2=2&s3=1&s4=0&full=0&prjstate=1&nodoc=0
+ 37. http://remtk/solucor/miscprj/s_context.hc?s1=6&s2=2&s3=2&s4=0&full=0&prjstate=1&nodoc=0
+ 38. http://remtk/solucor/miscprj/s_context.hc?s1=6&s2=2&s3=3&s4=0&full=0&prjstate=1&nodoc=0
+ 39. http://remtk/solucor/miscprj/s_context.hc?s1=6&s2=2&s3=4&s4=0&full=0&prjstate=1&nodoc=0
+ 40. http://remtk/solucor/miscprj/s_context.hc?s1=6&s2=2&s3=4&s4=1&full=0&prjstate=1&nodoc=0
+ 41. http://remtk/solucor/miscprj/s_context.hc?s1=6&s2=2&s3=4&s4=2&full=0&prjstate=1&nodoc=0
+ 42. http://remtk/solucor/miscprj/s_context.hc?s1=6&s2=2&s3=4&s4=3&full=0&prjstate=1&nodoc=0
+ 43. http://remtk/solucor/miscprj/s_context.hc?s1=7&s2=0&s3=0&s4=0&full=0&prjstate=1&nodoc=0
+ 44. http://remtk/solucor/miscprj/s_context.hc?s1=7&s2=1&s3=0&s4=0&full=0&prjstate=1&nodoc=0
+ 45. http://remtk/solucor/miscprj/s_context.hc?s1=7&s2=2&s3=0&s4=0&full=0&prjstate=1&nodoc=0
+ 46. http://remtk/solucor/miscprj/s_context.hc?s1=7&s2=3&s3=0&s4=0&full=0&prjstate=1&nodoc=0
+ 47. http://remtk/solucor/miscprj/s_context.hc?s1=8&s2=0&s3=0&s4=0&full=0&prjstate=1&nodoc=0
+ 48. http://remtk/solucor/miscprj/s_context.hc?s1=9&s2=0&s3=0&s4=0&full=0&prjstate=1&nodoc=0
+ 49. http://remtk/solucor/miscprj/s_context.hc?s1=10&s2=0&s3=0&s4=0&full=0&prjstate=1&nodoc=0
+ 50. ftp://ftp.solucorp.qc.ca/pub/vserver
+ 51. http://www.solucorp.qc.ca/virtualfs
+ 52. http://www.vmware.com/
+ 53. ftp://ftp.solucorp.qc.ca/pub/vserver
+ 54. ftp://ftp.solucorp.qc.ca/pub/vserver/kernel-2.4.20ctx-17.tar.gz
+ 55. ftp://ftp.solucorp.qc.ca/pub/vserver/kernel-2.4.20ctxsmp-17.tar.gz
+ 56. ftp://ftp.solucorp.qc.ca/pub/vserver/vserver-0.22-1.src.rpm
+ 57. ftp://ftp.solucorp.qc.ca/pub/vserver/vserver-0.22-1.i386.rpm
+ 58. ftp://ftp.solucorp.qc.ca/pub/vserver/vserver-admin-0.22-1.i386.rpm
+ 59. http://www.solucorp.qc.ca/linuxconf/download.hc
+ 60. ftp://ftp.solucorp.qc.ca/pub/vserver/vserver-0.22.src.tar.gz
+ 61. ftp://ftp.solucorp.qc.ca/pub/vserver/patch-2.4.20ctx-17.gz
+ 62. ftp://ftp.solucorp.qc.ca/pub/vserver/patches
+ 63. mailto:jack@solucorp.qc.ca
+ 64. http://www.solucorp.qc.ca/howto.hc?projet=vserver
+ 65. mailto:vserver@solucorp.qc.ca
+ 66. http://www.solucorp.qc.ca/mlist/index.hc?list=vserver
+ 67. http://www.paul.sladen.org/vserver/archives/
+ 68. http://www.solucorp.qc.ca/changes.hc?projet=vserver
+ 69. http://www.solucorp.qc.ca/miscprj/s_context.hc
+ 70. http://www.solucorp.qc.ca/tlmp
+ 71. http://remtk/solucor/miscprj/s_context.hc?s1=0&s2=0&s3=0&s4=0&full=0&prjstate=1&nodoc=0
+ 72. http://remtk/solucor/miscprj/s_context.hc
+ 73. http://www.solucorp.qc.ca/tlmp/tlmpdoc.hc
+ 74. mailto:jack@solucorp.qc.ca
--- /dev/null
+#!/bin/sh
+# install - install a program, script, or datafile
+
+scriptversion=2003-09-24.23
+
+# This originates from X11R5 (mit/util/scripts/install.sh), which was
+# later released in X11R6 (xc/config/util/install.sh) with the
+# following copyright and license.
+#
+# Copyright (C) 1994 X Consortium
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to
+# deal in the Software without restriction, including without limitation the
+# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+# sell copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
+# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+#
+# Except as contained in this notice, the name of the X Consortium shall not
+# be used in advertising or otherwise to promote the sale, use or other deal-
+# ings in this Software without prior written authorization from the X Consor-
+# tium.
+#
+#
+# FSF changes to this file are in the public domain.
+#
+# Calling this script install-sh is preferred over install.sh, to prevent
+# `make' implicit rules from creating a file called install from it
+# when there is no Makefile.
+#
+# This script is compatible with the BSD install script, but was written
+# from scratch. It can only install one file at a time, a restriction
+# shared with many OS's install programs.
+
+# set DOITPROG to echo to test this script
+
+# Don't use :- since 4.3BSD and earlier shells don't like it.
+doit="${DOITPROG-}"
+
+# put in absolute paths if you don't have them in your path; or use env. vars.
+
+mvprog="${MVPROG-mv}"
+cpprog="${CPPROG-cp}"
+chmodprog="${CHMODPROG-chmod}"
+chownprog="${CHOWNPROG-chown}"
+chgrpprog="${CHGRPPROG-chgrp}"
+stripprog="${STRIPPROG-strip}"
+rmprog="${RMPROG-rm}"
+mkdirprog="${MKDIRPROG-mkdir}"
+
+transformbasename=
+transform_arg=
+instcmd="$mvprog"
+chmodcmd="$chmodprog 0755"
+chowncmd=
+chgrpcmd=
+stripcmd=
+rmcmd="$rmprog -f"
+mvcmd="$mvprog"
+src=
+dst=
+dir_arg=
+
+usage="Usage: $0 [OPTION]... SRCFILE DSTFILE
+ or: $0 -d DIR1 DIR2...
+
+In the first form, install SRCFILE to DSTFILE, removing SRCFILE by default.
+In the second, create the directory path DIR.
+
+Options:
+-b=TRANSFORMBASENAME
+-c copy source (using $cpprog) instead of moving (using $mvprog).
+-d create directories instead of installing files.
+-g GROUP $chgrp installed files to GROUP.
+-m MODE $chmod installed files to MODE.
+-o USER $chown installed files to USER.
+-s strip installed files (using $stripprog).
+-t=TRANSFORM
+--help display this help and exit.
+--version display version info and exit.
+
+Environment variables override the default commands:
+ CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG
+"
+
+while test -n "$1"; do
+ case $1 in
+ -b=*) transformbasename=`echo $1 | sed 's/-b=//'`
+ shift
+ continue;;
+
+ -c) instcmd=$cpprog
+ shift
+ continue;;
+
+ -d) dir_arg=true
+ shift
+ continue;;
+
+ -g) chgrpcmd="$chgrpprog $2"
+ shift
+ shift
+ continue;;
+
+ --help) echo "$usage"; exit 0;;
+
+ -m) chmodcmd="$chmodprog $2"
+ shift
+ shift
+ continue;;
+
+ -o) chowncmd="$chownprog $2"
+ shift
+ shift
+ continue;;
+
+ -s) stripcmd=$stripprog
+ shift
+ continue;;
+
+ -t=*) transformarg=`echo $1 | sed 's/-t=//'`
+ shift
+ continue;;
+
+ --version) echo "$0 $scriptversion"; exit 0;;
+
+ *) if test -z "$src"; then
+ src=$1
+ else
+ # this colon is to work around a 386BSD /bin/sh bug
+ :
+ dst=$1
+ fi
+ shift
+ continue;;
+ esac
+done
+
+if test -z "$src"; then
+ echo "$0: no input file specified." >&2
+ exit 1
+fi
+
+# Protect names starting with `-'.
+case $src in
+ -*) src=./$src ;;
+esac
+
+if test -n "$dir_arg"; then
+ dst=$src
+ src=
+
+ if test -d "$dst"; then
+ instcmd=:
+ chmodcmd=
+ else
+ instcmd=$mkdirprog
+ fi
+else
+ # Waiting for this to be detected by the "$instcmd $src $dsttmp" command
+ # might cause directories to be created, which would be especially bad
+ # if $src (and thus $dsttmp) contains '*'.
+ if test ! -f "$src" && test ! -d "$src"; then
+ echo "$0: $src does not exist." >&2
+ exit 1
+ fi
+
+ if test -z "$dst"; then
+ echo "$0: no destination specified." >&2
+ exit 1
+ fi
+
+ # Protect names starting with `-'.
+ case $dst in
+ -*) dst=./$dst ;;
+ esac
+
+ # If destination is a directory, append the input filename; won't work
+ # if double slashes aren't ignored.
+ if test -d "$dst"; then
+ dst=$dst/`basename "$src"`
+ fi
+fi
+
+# This sed command emulates the dirname command.
+dstdir=`echo "$dst" | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
+
+# Make sure that the destination directory exists.
+
+# Skip lots of stat calls in the usual case.
+if test ! -d "$dstdir"; then
+ defaultIFS='
+ '
+ IFS="${IFS-$defaultIFS}"
+
+ oIFS=$IFS
+ # Some sh's can't handle IFS=/ for some reason.
+ IFS='%'
+ set - `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'`
+ IFS=$oIFS
+
+ pathcomp=
+
+ while test $# -ne 0 ; do
+ pathcomp=$pathcomp$1
+ shift
+ test -d "$pathcomp" || $mkdirprog "$pathcomp"
+ pathcomp=$pathcomp/
+ done
+fi
+
+if test -n "$dir_arg"; then
+ $doit $instcmd "$dst" \
+ && { test -z "$chowncmd" || $doit $chowncmd "$dst"; } \
+ && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } \
+ && { test -z "$stripcmd" || $doit $stripcmd "$dst"; } \
+ && { test -z "$chmodcmd" || $doit $chmodcmd "$dst"; }
+
+else
+ # If we're going to rename the final executable, determine the name now.
+ if test -z "$transformarg"; then
+ dstfile=`basename "$dst"`
+ else
+ dstfile=`basename "$dst" $transformbasename \
+ | sed $transformarg`$transformbasename
+ fi
+
+ # don't allow the sed command to completely eliminate the filename.
+ test -z "$dstfile" && dstfile=`basename "$dst"`
+
+ # Make a couple of temp file names in the proper directory.
+ dsttmp=$dstdir/_inst.$$_
+ rmtmp=$dstdir/_rm.$$_
+
+ # Trap to clean up those temp files at exit.
+ trap 'status=$?; rm -f "$dsttmp" "$rmtmp" && exit $status' 0
+ trap '(exit $?); exit' 1 2 13 15
+
+ # Move or copy the file name to the temp name
+ $doit $instcmd "$src" "$dsttmp" &&
+
+ # and set any options; do chmod last to preserve setuid bits.
+ #
+ # If any of these fail, we abort the whole thing. If we want to
+ # ignore errors from any of these, just make sure not to ignore
+ # errors from the above "$doit $instcmd $src $dsttmp" command.
+ #
+ { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } \
+ && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } \
+ && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } \
+ && { test -z "$chmodcmd" || $doit $chmodcmd "$dsttmp"; } &&
+
+ # Now remove or move aside any old file at destination location. We
+ # try this two ways since rm can't unlink itself on some systems and
+ # the destination file might be busy for other reasons. In this case,
+ # the final cleanup might fail but the new file should still install
+ # successfully.
+ {
+ if test -f "$dstdir/$dstfile"; then
+ $doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null \
+ || $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null \
+ || {
+ echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2
+ (exit 1); exit
+ }
+ else
+ :
+ fi
+ } &&
+
+ # Now rename the file to the real destination.
+ $doit $mvcmd "$dsttmp" "$dstdir/$dstfile"
+fi &&
+
+# The final little trick to "correctly" pass the exit status to the exit trap.
+{
+ (exit 0); exit
+}
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-end: "$"
+# End:
--- /dev/null
+## $Id: Makefile-files,v 1.1.4.5 2003/11/28 23:25:49 ensc Exp $ -*- makefile -*-
+
+## Copyright (C) 2003 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+##
+## 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, 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+##
+
+lib_SRCS = lib/syscall.c \
+ lib/syscall_rlimit.c \
+ lib/syscall_kill.c \
+ lib/checkversion.c \
+ lib/getctx.c \
+ lib/getversion.c \
+ lib/uint2str.c
+
+lib_HDRS = lib/vserver.h
+
+lib_XHDRS = lib/syscall-compat.hc \
+ lib/syscall-legacy.hc \
+ lib/syscall_rlimit-v11.hc \
+ lib/syscall_kill-v11.hc \
+ lib/getctx-compat.hc \
+ lib/getctx-legacy.hc \
+ lib/getversion-internal.hc \
+ lib/safechroot-internal.hc \
+ lib/virtual.h \
+ lib/vserver-internal.h
+
+lib_lib_LIBS = lib/libvserver.a
+
+lib_libvserver_a_SOURCES = $(lib_SRCS)
+lib_libvserver_a_CPPFLAGS = -I$(kernelincludedir) -D_GNU_SOURCE
--- /dev/null
+// $Id: checkversion.c,v 1.1.2.3 2003/10/21 16:58:02 ensc Exp $ --*- c++ -*--
+
+// Copyright (C) 2003 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+//
+// 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; version 2 of the License.
+//
+// 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+#include "compat.h"
+
+#include "vserver.h"
+#include "getversion-internal.hc"
+
+int
+utilvserver_checkCompatVersion()
+{
+ static int res=0;
+ static int v_errno;
+
+ if (res==0) {
+ res = vc_get_version_internal(VC_CAT_COMPAT);
+ v_errno = errno;
+#ifdef VC_ENABLE_API_LEGACY
+ if (res==-1 && (errno==ENOSYS || errno==EINVAL)) res=0;
+#endif
+ }
+
+ errno = v_errno;
+ return res;
+}
--- /dev/null
+// $Id: getctx-compat.hc,v 1.1.2.2 2003/12/30 13:45:57 ensc Exp $ --*- c++ -*--
+
+// Copyright (C) 2003 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+//
+// 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; version 2 of the License.
+//
+// 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+
+#ifndef H_UTIL_VSERVER_LIB_GETCTX_COMPAT_H
+#define H_UTIL_VSERVER_LIB_GETCTX_COMPAT_H
+
+#include "getctx-legacy.hc"
+
+static inline ALWAYSINLINE xid_t
+vc_X_getctx_compat(pid_t pid)
+{
+ return vc_X_getctx_legacy(pid);
+}
+
+#endif // H_UTIL_VSERVER_LIB_GETCTX_COMPAT_H
--- /dev/null
+// $Id: getctx-legacy.hc,v 1.1.2.3 2003/12/30 13:45:57 ensc Exp $ --*- c++ -*--
+
+// Copyright (C) 2003 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+//
+// 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; version 2 of the License.
+//
+// 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+
+#ifndef H_UTIL_VSERVER_LIB_GETCTX_LEGACY_H
+#define H_UTIL_VSERVER_LIB_GETCTX_LEGACY_H
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+#include "compat.h"
+
+#include "vserver.h"
+#include "vserver-internal.h"
+#include <string.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <errno.h>
+
+#define CTX_TAG "\ns_context: "
+
+static xid_t
+vc_X_getctx_legacy(pid_t pid)
+{
+ static volatile size_t bufsize=4097;
+ // TODO: is this really race-free?
+ size_t cur_bufsize = bufsize;
+ int fd;
+ char status_name[ sizeof("/proc/01234/status") ];
+ char buf[cur_bufsize];
+ size_t len;
+ char *pos = 0;
+
+ if (pid<0 || (uint32_t)(pid)>99999) {
+ errno = EINVAL;
+ return 0;
+ }
+
+ if (pid==0) strcpy(status_name, "/proc/self/status");
+ else {
+ strcpy(status_name, "/proc/");
+ len = utilvserver_uint2str(status_name+sizeof("/proc/")-1,
+ sizeof(status_name)-sizeof("/proc//status")+1,
+ pid, 10);
+ strcpy(status_name+sizeof("/proc/")+len-1, "/status");
+ }
+
+ fd = open(status_name, O_RDONLY);
+ if (fd==-1) return VC_NOCTX;
+
+ len = read(fd, buf, cur_bufsize);
+ close(fd);
+
+ if (len<cur_bufsize) {
+ buf[len] = '\0';
+ pos = strstr(buf, CTX_TAG);
+ }
+ else if (len!=(size_t)-1) {
+ bufsize = cur_bufsize * 2 - 1;
+ errno = EAGAIN;
+ }
+
+ if (pos!=0) return atoi(pos+sizeof(CTX_TAG)-1);
+ else return VC_NOCTX;
+}
+
+#endif // H_UTIL_VSERVER_LIB_GETCTX_LEGACY_H
--- /dev/null
+// $Id: getctx.c,v 1.2.2.2 2003/12/30 13:45:57 ensc Exp $ --*- c++ -*--
+
+// Copyright (C) 2003 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+//
+// 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; version 2 of the License.
+//
+// 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+#include "compat.h"
+#include "vserver.h"
+#include "vserver-internal.h"
+
+#ifdef VC_ENABLE_API_COMPAT
+# include "getctx-compat.hc"
+#endif
+
+#ifdef VC_ENABLE_API_LEGACY
+# include "getctx-legacy.hc"
+#endif
+
+#include <sys/types.h>
+
+xid_t
+vc_X_getctx(pid_t pid)
+{
+ CALL_VC(CALL_VC_COMPAT(vc_X_getctx, pid),
+ CALL_VC_LEGACY(vc_X_getctx, pid));
+}
--- /dev/null
+// $Id: getversion-internal.hc,v 1.1.2.3 2003/12/26 00:16:48 uid68581 Exp $ --*- c++ -*--
+
+// Copyright (C) 2003 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+//
+// 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; version 2 of the License.
+//
+// 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+
+#ifndef H_UTIL_VSERVER_LIB_GETVERSION_INTERNAL_H
+#define H_UTIL_VSERVER_LIB_GETVERSION_INTERNAL_H
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+#include "compat.h"
+
+#include "vserver-internal.h"
+#include "linuxvirtual.h"
+
+static inline ALWAYSINLINE int
+vc_get_version_internal(int cat)
+{
+ return vserver(VC_CMD(VERSION, 0, 0), cat, 0);
+}
+
+#endif // H_UTIL_VSERVER_LIB_GETVERSION_INTERNAL_H
--- /dev/null
+// $Id: getversion.c,v 1.1.2.3 2004/01/26 18:19:24 ensc Exp $ --*- c++ -*--
+
+// Copyright (C) 2003 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+//
+// 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; version 2 of the License.
+//
+// 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+#include "compat.h"
+
+#include "getversion-internal.hc"
+
+int
+vc_get_version()
+{
+ return vc_get_version_internal(VC_CAT_COMPAT);
+}
--- /dev/null
+// $Id: safechroot-internal.hc,v 1.1.2.1 2003/10/14 15:19:14 ensc Exp $ --*- c++ -*--
+
+// Copyright (C) 2003 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+//
+// 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; version 2 of the License.
+//
+// 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+
+#ifndef H_UTIL_VSERVER_LIB_SAFECHROOT_INTERNAL_H
+#define H_UTIL_VSERVER_LIB_SAFECHROOT_INTERNAL_H
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+#include "compat.h"
+
+#include <stdlib.h>
+#include <unistd.h>
+
+#ifndef NDEBUG
+static void
+vc_tell_unsafe_chroot()
+{
+ static int flag = -1;
+ if (flag==-1) {
+ char const * const e = getenv("VC_TELL_UNSAFE_CHROOT");
+ flag = e ? atoi(e) : 0;
+ flag = flag ? 1 : 0;
+ }
+
+ if (flag) write(2, "Unsafe chroot() used\n", 23);
+}
+#else
+static ALWAYSINLINE UNUSED void vc_tell_unsafe_chroot() {}
+#endif
+
+
+#endif // H_UTIL_VSERVER_LIB_SAFECHROOT_INTERNAL_H
--- /dev/null
+// $Id: syscall-compat.hc,v 1.1.4.7 2003/12/30 13:45:57 ensc Exp $ --*- c++ -*--
+
+// Copyright (C) 2003 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+//
+// 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; version 2 of the License.
+//
+// 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+#include "compat.h"
+
+#include "safechroot-internal.hc"
+
+#include "vserver.h"
+#include "vserver-internal.h"
+
+#include <unistd.h>
+
+static inline ALWAYSINLINE int
+vc_new_s_context_compat(xid_t ctx, unsigned int remove_cap, unsigned int flags)
+{
+ struct vcmd_new_s_context_v1 msg;
+ msg.remove_cap = remove_cap;
+ msg.flags = flags;
+
+ return vserver(VC_CMD(COMPAT, 1, 1), CTX_USER2KERNEL(ctx), &msg);
+}
+
+static inline ALWAYSINLINE int
+vc_set_ipv4root_compat(uint32_t bcast, size_t nb, struct vc_ip_mask_pair const *ips)
+{
+ struct vcmd_set_ipv4root_v3 msg;
+ size_t i;
+
+ if (nb>=NB_IPV4ROOT) {
+ errno = -EINVAL;
+ return -1;
+ }
+
+ msg.broadcast = bcast;
+
+ for (i=0; i<nb; ++i) {
+ msg.ip_mask_pair[i].ip = ips[i].ip;
+ msg.ip_mask_pair[i].mask = ips[i].mask;
+ }
+
+ return vserver(VC_CMD(COMPAT, 2, 3), nb, &msg);
+}
+
+static inline ALWAYSINLINE int
+vc_chrootsafe_compat(char const *dir)
+{
+ vc_tell_unsafe_chroot();
+ return chroot(dir);
+}
--- /dev/null
+// $Id: syscall-legacy.hc,v 1.1.4.6 2004/02/05 03:52:45 ensc Exp $ --*- c -*--
+
+// Copyright (C) 2003 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+// based on syscall.cc by Jacques Gelinas
+//
+// 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, 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+/*
+ This tells the system call number for new_s_context and set_ipv4root
+ using /proc/self/status. This helps until the vserver project is
+ included officially in the kernel (and has its own syscall).
+
+ We rely on /proc/self/status to find the syscall number.
+
+ If it is not there, we rely on adm/unistd.h.
+
+ If this file does not have those system calls (not a patched kernel source)
+ we rely on static values in this file.
+*/
+#include "safechroot-internal.hc"
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <errno.h>
+#include <syscall.h>
+#include <asm/unistd.h>
+
+// Here is the trick. We keep a copy of the define, then undef it
+// and then later, we try to locate the value reading /proc/self/status
+// If this fails, we have the old preserved copy.
+static int def_NR_set_ipv4root = 274;
+#undef __NR_set_ipv4root
+
+static int __NR_set_ipv4root_rev0;
+static int __NR_set_ipv4root_rev1;
+static int __NR_set_ipv4root_rev2;
+static int __NR_set_ipv4root_rev3;
+static int rev_ipv4root=0;
+
+#ifdef ENSC_SYSCALL_TRADITIONAL
+inline static int
+set_ipv4root_rev0(unsigned long ip)
+{
+ return syscall(__NR_set_ipv4root_rev0, ip);
+}
+
+inline static int
+set_ipv4root_rev1(unsigned long ip, unsigned long bcast)
+{
+ return syscall(__NR_set_ipv4root_rev1, ip, bcast);
+}
+
+inline static int
+set_ipv4root_rev2(unsigned long *ip, int nb, unsigned long bcast)
+{
+ return syscall(__NR_set_ipv4root_rev2, ip, nb, bcast);
+}
+
+inline static int
+set_ipv4root_rev3(unsigned long *ip, int nb, unsigned long bcast, unsigned long * mask)
+{
+ return syscall(__NR_set_ipv4root_rev3, ip, nb, bcast, mask);
+}
+
+#else
+inline static _syscall1(int, set_ipv4root_rev0, unsigned long, ip)
+inline static _syscall2(int, set_ipv4root_rev1, unsigned long, ip, unsigned long, bcast)
+inline static _syscall3(int, set_ipv4root_rev2, unsigned long *, ip, int, nb, unsigned long, bcast)
+inline static _syscall4(int, set_ipv4root_rev3, unsigned long *, ip, int, nb, unsigned long, bcast, unsigned long *, mask)
+#endif
+
+static int def_NR_new_s_context = 273;
+#undef __NR_new_s_context
+static int __NR_new_s_context_rev0;
+ //static int __NR_new_s_context_rev1;
+static int rev_s_context=0;
+
+#ifdef ENSC_SYSCALL_TRADITIONAL
+inline static int
+new_s_context_rev0(int newctx, int remove_cap, int flags)
+{
+ return syscall(__NR_new_s_context_rev0, newctx, remove_cap, flags);
+}
+#else
+inline static _syscall3(int, new_s_context_rev0, int, newctx, int, remove_cap, int, flags)
+ //static _syscall4(int, new_s_context_rev1, int, nbctx, int *, ctxs, int, remove_cap, int, flags)
+#endif
+
+#if 0
+#undef __NR_set_ctxlimit
+static int __NR_set_ctxlimit=-1;
+static int rev_set_ctxlimit=-1;
+
+static _syscall2 (int, set_ctxlimit, int, resource, long, limit)
+#endif
+
+static void init()
+{
+ static int is_init = 0;
+ if (!is_init){
+ FILE *fin = fopen ("/proc/self/status","r");
+ __NR_set_ipv4root_rev0 = def_NR_set_ipv4root;
+ __NR_set_ipv4root_rev1 = def_NR_set_ipv4root;
+ __NR_set_ipv4root_rev2 = def_NR_set_ipv4root;
+ __NR_set_ipv4root_rev3 = def_NR_set_ipv4root;
+ __NR_new_s_context_rev0 = def_NR_new_s_context;
+ //__NR_new_s_context_rev1 = def_NR_new_s_context;
+ if (fin != NULL){
+ char line[100];
+ while (fgets(line,sizeof(line)-1,fin)!=NULL){
+ int num;
+ char title[100],rev[100];
+ rev[0] = '\0';
+ if (sscanf(line,"%s %d %s",title,&num,rev)>=2){
+ if (strcmp(title,"__NR_set_ipv4root:")==0){
+ __NR_set_ipv4root_rev0 = num;
+ __NR_set_ipv4root_rev1 = num;
+ __NR_set_ipv4root_rev2 = num;
+ __NR_set_ipv4root_rev3 = num;
+ if (strncmp(rev,"rev",3)==0){
+ rev_ipv4root = atoi(rev+3);
+ }
+#if 0
+ }else if (strcmp(title,"__NR_set_ctxlimit:")==0){
+ __NR_set_ctxlimit = num;
+ if (strncmp(rev,"rev",3)==0){
+ rev_set_ctxlimit = atoi(rev+3);
+ }
+#endif
+ }else if (strcmp(title,"__NR_new_s_context:")==0){
+ __NR_new_s_context_rev0 = num;
+ //__NR_new_s_context_rev1 = num;
+ if (strncmp(rev,"rev",3)==0){
+ rev_s_context = atoi(rev+3);
+ }
+ }
+ }
+ }
+ fclose (fin);
+ }
+ is_init = 1;
+ }
+}
+
+void vc_init_legacy()
+{
+ init();
+}
+
+static ALWAYSINLINE int
+vc_new_s_context_legacy(int ctx, int remove_cap, int flags)
+{
+ int ret = -1;
+ init();
+ if (rev_s_context == 0){
+ return new_s_context_rev0(ctx, remove_cap, flags);
+ }else{
+ errno = -ENOSYS;
+ ret = -1;
+ }
+ return ret;
+}
+
+static ALWAYSINLINE int
+vc_set_ipv4root_legacy_internal (
+ unsigned long ip[],
+ int nb,
+ unsigned long bcast,
+ unsigned long mask[])
+{
+ init();
+ if (rev_ipv4root == 0){
+ if (nb > 1){
+ fprintf (stderr,"set_ipv4root: Several IP number specified, but this kernel only supports one. Ignored\n");
+ }
+ return set_ipv4root_rev0 (ip[0]);
+ }else if (rev_ipv4root == 1){
+ if (nb > 1){
+ fprintf (stderr,"set_ipv4root: Several IP number specified, but this kernel only supports one. Ignored\n");
+ }
+ return set_ipv4root_rev1 (ip[0],bcast);
+ }else if (rev_ipv4root == 2){
+ return set_ipv4root_rev2 (ip,nb,bcast);
+ }else if (rev_ipv4root == 3){
+ return set_ipv4root_rev3 (ip,nb,bcast,mask);
+ }
+ errno = EINVAL;
+ return -1;
+}
+
+static ALWAYSINLINE int
+vc_set_ipv4root_legacy(uint32_t bcast, size_t nb, struct vc_ip_mask_pair const *ips)
+{
+ unsigned long ip[nb];
+ unsigned long mask[nb];
+ size_t i;
+
+ for (i=0; i<nb; ++i) {
+ ip[i] = ips[i].ip;
+ mask[i] = ips[i].mask;
+ }
+
+ return vc_set_ipv4root_legacy_internal(ip, nb, bcast, mask);
+}
--- /dev/null
+// $Id: syscall.c,v 1.1.4.6 2003/12/30 13:45:57 ensc Exp $ --*- c++ -*--
+
+// Copyright (C) 2003 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+//
+// 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; version 2 of the License.
+//
+// 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+#include "compat.h"
+
+#include "vserver.h"
+#include "vserver-internal.h"
+#include "linuxvirtual.h"
+
+#ifdef VC_ENABLE_API_COMPAT
+# include "syscall-compat.hc"
+#endif
+
+#ifdef VC_ENABLE_API_LEGACY
+# include "syscall-legacy.hc"
+#endif
+
+#include <stdbool.h>
+#include <errno.h>
+
+#if defined(VC_ENABLE_API_COMPAT) || defined(VC_ENABLE_API_LEGACY)
+
+int
+vc_new_s_context(xid_t ctx, unsigned int remove_cap, unsigned int flags)
+{
+ CALL_VC(CALL_VC_COMPAT(vc_new_s_context, ctx, remove_cap, flags),
+ CALL_VC_LEGACY(vc_new_s_context, ctx, remove_cap, flags));
+}
+
+int
+vc_set_ipv4root(uint32_t bcast, size_t nb, struct vc_ip_mask_pair const *ips)
+{
+ CALL_VC(CALL_VC_COMPAT(vc_set_ipv4root, bcast, nb, ips),
+ CALL_VC_LEGACY(vc_set_ipv4root, bcast, nb, ips));
+}
+
+#endif
--- /dev/null
+// $Id: syscall_kill-v11.hc,v 1.1.2.5 2004/01/26 18:20:18 ensc Exp $ --*- c++ -*--
+
+// Copyright (C) 2003 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+//
+// 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; version 2 of the License.
+//
+// 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+static inline ALWAYSINLINE int
+vc_ctx_kill_v11(xid_t ctx, pid_t pid, int sig)
+{
+ struct vcmd_ctx_kill_v0 param = { 0,0 };
+ param.pid = pid;
+ param.sig = sig;
+
+ return vserver(VC_CMD(PROCTRL, 1, 0), ctx, ¶m);
+}
--- /dev/null
+// $Id: syscall_kill.c,v 1.1.2.2 2003/12/30 13:45:57 ensc Exp $ --*- c++ -*--
+
+// Copyright (C) 2003 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+//
+// 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; version 2 of the License.
+//
+// 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+#include "compat.h"
+
+#include "vserver.h"
+#include "vserver-internal.h"
+#include "linuxvirtual.h"
+
+#ifdef VC_ENABLE_API_V11
+# include "syscall_kill-v11.hc"
+#endif
+
+int
+vc_ctx_kill(xid_t ctx, pid_t pid, int sig)
+{
+ CALL_VC(CALL_VC_V11(vc_ctx_kill, ctx, pid, sig));
+}
+
+#if defined (VC_ENABLE_API_V11)
+#endif
--- /dev/null
+// $Id: syscall_rlimit-v11.hc,v 1.1.2.6 2003/12/30 13:45:57 ensc Exp $ --*- c++ -*--
+
+// Copyright (C) 2003 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+//
+// 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; version 2 of the License.
+//
+// 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#define KERN2USR(LIMIT) \
+ (((LIMIT)==CRLIM_INFINITY) ? VC_LIM_INFINITY : \
+ ((LIMIT)==CRLIM_KEEP) ? VC_LIM_KEEP : (LIMIT))
+
+#define USR2KERN(LIMIT) \
+ (((LIMIT)==VC_LIM_INFINITY) ? CRLIM_INFINITY : \
+ ((LIMIT)==VC_LIM_KEEP) ? CRLIM_KEEP : (LIMIT))
+
+static inline ALWAYSINLINE int
+vc_get_rlimit_v11(xid_t ctx, int resource, struct vc_rlimit *lim)
+{
+ struct vcmd_ctx_rlimit_v0 vc_lim;
+ int rc;
+
+ vc_lim.id = resource;
+ rc = vserver(VC_CMD(RLIMIT, 1, 0), CTX_USER2KERNEL(ctx), &vc_lim);
+ lim->min = KERN2USR(vc_lim.minimum);
+ lim->soft = KERN2USR(vc_lim.softlimit);
+ lim->hard = KERN2USR(vc_lim.maximum);
+
+ return rc;
+}
+
+static inline ALWAYSINLINE int
+vc_set_rlimit_v11(xid_t ctx, int resource, struct vc_rlimit const *lim)
+{
+ struct vcmd_ctx_rlimit_v0 vc_lim;
+
+ vc_lim.id = resource;
+ vc_lim.minimum = USR2KERN(lim->min);
+ vc_lim.softlimit = USR2KERN(lim->soft);
+ vc_lim.maximum = USR2KERN(lim->hard);
+
+ return vserver(VC_CMD(RLIMIT, 2, 0), CTX_USER2KERNEL(ctx), &vc_lim);
+}
+
+static inline ALWAYSINLINE int
+vc_get_rlimit_mask_v11(xid_t ctx, int tmp, struct vc_rlimit_mask *lim)
+{
+ struct vcmd_ctx_rlimit_v0 vc_lim;
+ int rc;
+
+ (void)tmp;
+
+ rc = vserver(VC_CMD(RLIMIT, 3, 0), CTX_USER2KERNEL(ctx), &vc_lim);
+ lim->min = vc_lim.minimum;
+ lim->soft = vc_lim.softlimit;
+ lim->hard = vc_lim.maximum;
+
+ return rc;
+}
+
+#undef KERN2USR
+#undef USR2KERN
--- /dev/null
+// $Id: syscall_rlimit.c,v 1.1.2.2 2003/12/30 13:45:56 ensc Exp $ --*- c++ -*--
+
+// Copyright (C) 2003 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+//
+// 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; version 2 of the License.
+//
+// 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+#include "compat.h"
+
+#include "vserver.h"
+#include "vserver-internal.h"
+#include "linuxvirtual.h"
+
+#ifdef VC_ENABLE_API_V11
+# include "syscall_rlimit-v11.hc"
+#endif
+
+#if defined (VC_ENABLE_API_V11)
+
+int
+vc_get_rlimit(xid_t ctx, int resource, struct vc_rlimit *lim)
+{
+ CALL_VC(CALL_VC_V11(vc_get_rlimit, ctx, resource, lim));
+}
+
+int
+vc_set_rlimit(xid_t ctx, int resource, struct vc_rlimit const *lim)
+{
+ CALL_VC(CALL_VC_V11(vc_set_rlimit, ctx, resource, lim));
+}
+
+int
+vc_get_rlimit_mask(xid_t ctx, struct vc_rlimit_mask *lim)
+{
+ CALL_VC(CALL_VC_V11(vc_get_rlimit_mask, ctx, 0, lim));
+}
+
+
+#endif
--- /dev/null
+// $Id: uint2str.c,v 1.1.2.1 2003/10/14 15:19:14 ensc Exp $ --*- c++ -*--
+
+// Copyright (C) 2003 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+//
+// 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; version 2 of the License.
+//
+// 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+#include "compat.h"
+
+#include <assert.h>
+#include <stdbool.h>
+#include <string.h>
+
+size_t
+utilvserver_uint2str(char *buf, size_t len, unsigned int val, unsigned char base)
+{
+ char *ptr = buf+len-1;
+ register size_t res;
+ if (base>=36 || len==0) return 0;
+
+ *ptr = '\0';
+ while (ptr>buf) {
+ unsigned char digit = val%base;
+
+ --ptr;
+ *ptr = (digit<10 ? '0'+digit :
+ digit<36 ? 'a'+digit-10 :
+ (assert(false),'?'));
+
+ val /= base;
+ if (val==0) break;
+ }
+
+ assert(ptr>=buf && ptr<=buf+len-1);
+
+ res = buf+len-ptr;
+ memmove(buf, ptr, res);
+
+ return res-1;
+}
--- /dev/null
+#ifndef _LINUX_VIRTUAL_H
+#define _LINUX_VIRTUAL_H
+
+#define VC_CATEGORY(c) (((c) >> 24) & 0x3F)
+#define VC_COMMAND(c) (((c) >> 16) & 0xFF)
+#define VC_VERSION(c) ((c) & 0xFFF)
+
+#define VC_CMD(c,i,v) ((((VC_CAT_ ## c) & 0x3F) << 24) \
+ | (((i) & 0xFF) << 16) | ((v) & 0xFFF))
+
+/*
+
+ Syscall Matrix V2.2
+
+ |VERSION|CREATE |MODIFY |MIGRATE|CONTROL|EXPERIM| |SPECIAL|SPECIAL|
+ |STATS |DESTROY|ALTER |CHANGE |LIMIT |TEST | | | |
+ |INFO |SETUP | |MOVE | | | | | |
+ -------+-------+-------+-------+-------+-------+-------+ +-------+-------+
+ SYSTEM |VERSION| | | | | | |DEVICES| |
+ HOST | 00| 01| 02| 03| 04| 05| | 06| 07|
+ -------+-------+-------+-------+-------+-------+-------+ +-------+-------+
+ CPU | | | | | | | |SCHED. | |
+ PROCESS| 08| 09| 10| 11| 12| 13| | 14| 15|
+ -------+-------+-------+-------+-------+-------+-------+ +-------+-------+
+ MEMORY | | | | | | | |SWAP | |
+ | 16| 17| 18| 19| 20| 21| | 22| 23|
+ -------+-------+-------+-------+-------+-------+-------+ +-------+-------+
+ NETWORK| | | | | | | |SERIAL | |
+ | 24| 25| 26| 27| 28| 29| | 30| 31|
+ -------+-------+-------+-------+-------+-------+-------+ +-------+-------+
+ DISK | | | | | | | | | |
+ VFS | 32| 33| 34| 35| 36| 37| | 38| 39|
+ -------+-------+-------+-------+-------+-------+-------+ +-------+-------+
+ OTHER | | | | | | | | | |
+ | 40| 41| 42| 43| 44| 45| | 46| 47|
+ =======+=======+=======+=======+=======+=======+=======+ +=======+=======+
+ SPECIAL| | | | | | | | | |
+ | 48| 49| 50| 51| 52| 53| | 54| 55|
+ -------+-------+-------+-------+-------+-------+-------+ +-------+-------+
+ SPECIAL| | | | |RLIMIT |SYSCALL| | |COMPAT |
+ | 56| 57| 58| 59| 60|TEST 61| | 62| 63|
+ -------+-------+-------+-------+-------+-------+-------+ +-------+-------+
+
+*/
+
+#define VC_CAT_VERSION 0
+
+#define VC_CAT_PROCTRL 12
+
+#define VC_CAT_RLIMIT 60
+
+#define VC_CAT_SYSTEST 61
+#define VC_CAT_COMPAT 63
+
+/* interface version */
+
+#define VCI_VERSION 0x00010001
+
+
+
+/* query version */
+
+#define VCMD_get_version VC_CMD(VERSION, 0, 0)
+
+
+/* compatibiliy vserver commands */
+
+#define VCMD_new_s_context VC_CMD(COMPAT, 1, 1)
+#define VCMD_set_ipv4root VC_CMD(COMPAT, 2, 3)
+
+/* compatibiliy vserver arguments */
+
+struct vcmd_new_s_context_v1 {
+ uint32_t remove_cap;
+ uint32_t flags;
+};
+
+#define NB_IPV4ROOT 16
+
+struct vcmd_set_ipv4root_v3 {
+ /* number of pairs in id */
+ uint32_t broadcast;
+ struct {
+ uint32_t ip;
+ uint32_t mask;
+ } ip_mask_pair[NB_IPV4ROOT];
+};
+
+/* context signalling */
+
+#define VCMD_ctx_kill VC_CMD(PROCTRL, 1, 0)
+
+struct vcmd_ctx_kill_v0 {
+ int32_t pid;
+ int32_t sig;
+};
+
+/* rlimit vserver commands */
+
+#define VCMD_get_rlimit VC_CMD(RLIMIT, 1, 0)
+#define VCMD_set_rlimit VC_CMD(RLIMIT, 2, 0)
+#define VCMD_get_rlimit_mask VC_CMD(RLIMIT, 3, 0)
+
+struct vcmd_ctx_rlimit_v0 {
+ uint32_t id;
+ uint64_t minimum;
+ uint64_t softlimit;
+ uint64_t maximum;
+};
+
+struct vcmd_ctx_rlimit_mask_v0 {
+ uint32_t minimum;
+ uint32_t softlimit;
+ uint32_t maximum;
+};
+
+#define CRLIM_INFINITY (~0ULL)
+#define CRLIM_KEEP (~1ULL)
+
+
+#endif /* _LINUX_VIRTUAL_H */
--- /dev/null
+// $Id: vserver-internal.h,v 1.1.4.13 2004/02/05 03:52:45 ensc Exp $ --*- c++ -*--
+
+// Copyright (C) 2003 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+//
+// 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; version 2 of the License.
+//
+// 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+
+#ifndef H_VSERVER_SYSCALL_INTERNAL_H
+#define H_VSERVER_SYSCALL_INTERNAL_H
+
+#include <stdint.h>
+#include <stdlib.h>
+#include <syscall.h>
+#include <unistd.h>
+#include <asm/unistd.h>
+#include <errno.h>
+
+#ifndef __NR_vserver
+# define __NR_vserver 273
+#endif
+
+#define VC_PREFIX 0)
+#define VC_SUFFIX else (void)((void)0
+#define CALL_VC_NOOP (void)0
+#define CALL_VC_GENERAL(ID, SUFFIX, FUNC, ...) \
+ VC_PREFIX; VC_SELECT(ID) return FUNC ## _ ## SUFFIX(__VA_ARGS__); VC_SUFFIX
+
+#if 1
+# define VC_SELECT(ID) case ID: if(1)
+# define CALL_VC(...) \
+ switch (utilvserver_checkCompatVersion()&~0xff) { \
+ case -1 & 0xff : if (1) break; \
+ VC_SUFFIX, __VA_ARGS__ , VC_PREFIX; \
+ default : errno = EINVAL; \
+ } \
+ return -1
+#else
+# define VC_SELECT(ID) if (1)
+# define CALL_VC(...) \
+ if (1) {} VC_SUFFIX, __VA_ARGS__, VC_PREFIX; \
+ errno = ENOSYS; return -1
+#endif
+
+#ifdef VC_ENABLE_API_COMPAT
+# define CALL_VC_COMPAT(F,...) CALL_VC_GENERAL(0x00010000, compat, F, __VA_ARGS__)
+#else
+# define CALL_VC_COMPAT(F,...) CALL_VC_NOOP
+#endif
+
+#ifdef VC_ENABLE_API_LEGACY
+# define CALL_VC_LEGACY(F,...) CALL_VC_GENERAL(0x00000000, legacy, F, __VA_ARGS__)
+#else
+# define CALL_VC_LEGACY(F,...) CALL_VC_NOOP
+#endif
+
+#ifdef VC_ENABLE_API_V11
+# define CALL_VC_V11(F,...) CALL_VC_GENERAL(0x00010000, v11, F, __VA_ARGS__)
+#else
+# define CALL_VC_V11(F,...) CALL_VC_NOOP
+#endif
+
+#if 1
+# define CTX_KERNEL2USER(X) (((X)==(uint32_t)(-1)) ? VC_NOCTX : \
+ ((X)==(uint32_t)(-2)) ? VC_SAMECTX : \
+ (xid_t)(X))
+
+# define CTX_USER2KERNEL(X) (((X)==VC_RANDCTX) ? (uint32_t)(-1) : \
+ ((X)==VC_SAMECTX) ? (uint32_t)(-2) : \
+ (uint32_t)(X))
+#else
+# define CTX_USER2KERNEL(X) (X)
+# define CTX_KERNEL2USER(X) (X)
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef HAVE_VSERVER
+#ifdef ENSC_SYSCALL_TRADITIONAL
+inline static UNUSED ALWAYSINLINE
+int vserver(uint32_t cmd, uint32_t id, void *data)
+{
+ return syscall(__NR_vserver, cmd, id, data);
+}
+#else
+inline static UNUSED ALWAYSINLINE
+_syscall3(int, vserver,
+ uint32_t, cmd, uint32_t, id, void *, data)
+#endif
+#endif
+
+size_t utilvserver_uint2str(char *buf, size_t len,
+ unsigned int val, unsigned char base);
+int utilvserver_checkCompatVersion();
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif // H_VSERVER_SYSCALL_INTERNAL_H
--- /dev/null
+/* $Id: vserver.h,v 1.1.4.11 2004/01/26 18:19:41 ensc Exp $
+
+* Copyright (C) 2003 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+*
+* 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, 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+*/
+
+#ifndef H_VSERVER_SYSCALL_H
+#define H_VSERVER_SYSCALL_H
+
+#include <stdint.h>
+#include <stdlib.h>
+#include <sys/types.h>
+
+/** the value which is returned in error-case (no ctx found) */
+#define VC_NOCTX ((xid_t)(-1))
+/** the value which means a random (the next free) ctx */
+#define VC_RANDCTX ((xid_t)(-1))
+/** the value which means the current ctx */
+#define VC_SAMECTX ((xid_t)(-2))
+
+#define VC_LIM_INFINITY (~0ULL)
+#define VC_LIM_KEEP (~1ULL)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+ struct vc_ip_mask_pair {
+ uint32_t ip;
+ uint32_t mask;
+ };
+
+ /** Returns version of the current kernel API */
+ int vc_get_version();
+
+ /** Puts current process into context <ctx>, removes the given caps and
+ * sets flags.
+ * Special values for ctx are
+ * - VC_SAMECTX which means the current context (just for changing caps and flags)
+ * - VC_RANDCTX which means the next free context; this value can be used by
+ * ordinary users also */
+ int vc_new_s_context(xid_t ctx, unsigned int remove_cap, unsigned int flags);
+
+ /** Sets the ipv4root information.
+ * \precondition: nb<16 */
+ int vc_set_ipv4root(uint32_t bcast, size_t nb, struct vc_ip_mask_pair const *ips);
+
+
+ /* rlimit related functions */
+ typedef uint64_t vc_limit_t;
+
+
+ struct vc_rlimit
+ {
+ vc_limit_t min;
+ vc_limit_t soft;
+ vc_limit_t hard;
+ };
+
+ struct vc_rlimit_mask {
+ uint32_t min;
+ uint32_t soft;
+ uint32_t hard;
+ };
+
+ int vc_get_rlimit(xid_t ctx, int resource, struct vc_rlimit *lim);
+ int vc_set_rlimit(xid_t ctx, int resource, struct vc_rlimit const *lim);
+ int vc_get_rlimit_mask(xid_t ctx, struct vc_rlimit_mask *lim);
+
+
+ /** sends a signal to a context/pid
+ Special values for pid are:
+ * -1 which means every process in ctx except the init-process
+ * 0 which means every process in ctx inclusive the init-process */
+ int vc_ctx_kill(xid_t ctx, pid_t pid, int sig);
+
+ /** Returns the context of the given process. pid==0 means the current process. */
+ xid_t vc_X_getctx(pid_t pid);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
--- /dev/null
+## $Id: Makefile-files,v 1.1.2.2 2003/11/03 20:49:42 ensc Exp $ -*- makefile -*-
+
+## Copyright (C) 2003 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+##
+## 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, 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+linuxconf_gen_SCRPTS = linuxconf/newvserver
+linuxconf_src_DATMAN = linuxconf/newvserver.8
+linuxconf_cfg_src_DTA = linuxconf/newvserver.defaults
+
+linuxconf_XTRAS = linuxconf/newvserver.subst \
+ $(linuxconf_cfg_src_DTA) \
+ $(linuxconf_src_DATMAN)
+
+linuxconf_GENFILES = $(linuxconf_gen_SCRPTS)
+
+
+if ENSC_ENABLE_LINUXCONF
+linuxconf_DATMAN = $(linuxconf_src_DATMAN)
+linuxconf_SCRPTS = $(linuxconf_gen_SCRPTS)
+linuxconf_cfg_DTA = $(linuxconf_cfg_src_DTA)
+
+linuxconf/%: linuxconf/%.subst
+ @mkdir -p $$(dirname '$@')
+ sed -e 's!@'PKGLIBDIR'@!$(pkglibdir)!g; \
+ s!@'SBINDIR'@!$(sbindir)!g' '$<' >'$@.tmp'
+ @-chmod --reference='$<' '$@.tmp'
+ @-rm -f '$@'
+ mv '$@.tmp' '$@'
+ @chmod a-w '$@'
+else
+linuxconf_DATMAN =
+linuxconf_SCRPTS =
+linuxconf_cfg_DTA =
+endif
--- /dev/null
+.TH "newvserver" "8" "0.1.0" "Jacques Gelinas <jack@solucorp.qc.ca>" "System Administration"
+.SH "NAME"
+.LP
+newvserver \- The newvserver is an interactive tool to create new vservers.
+.SH "SYNTAX"
+.LP
+newvserver [ options ]
+
+.SH "DESCRIPTION"
+.LP
+newvserver \- The newvserver creates new vservers interactivly. It provides
+a graphical user interface as well as a text user interface. You can
+configure most aspect of the vserver (name, description, hostname, IP number,
+root password, ...), select a source and then perform the creation.
+
+A vserver may be created by cloning another one, cloning the root server
+or by performing a minimal installation from a distribution CD (RedHat
+supported so far).
+
+.SH "Default values"
+.LP
+The file /etc/vservers/newvserver.defaults is sourced to get default
+input value for many fields. If you are creating many vservers
+(you will :-) ), you may want to edit this file and enter suitable
+values such as your domain name, IP network, etc...
+
+
+.SH "OPTIONS"
+.LP
+.TP
+.I --help:
+Presents a summary of the options.
+.TP
+.I --name:
+Set the name of the new vserver.
+.TP
+.I --desc:
+Set the description.
+.TP
+.I --unify 1/0:
+Turn on unification on and off.
+.TP
+.I --hostname:
+Set the host name of the new vserver
+.TP
+.I --ip:
+Set the IP number(s)
+.TP
+.I --ondev:
+Install the IP numbers as IP aliases on device.
+.TP
+.I --clone:
+Create the vserver from another one or a distribution CD.
+.TP
+The distribution CD are identified by special strings:
+ #rh8.0m: RedHat 8 minimal
+ #rh8.0f: RedHat 8 complete first CD
+ #rh7.3m: RedHat 7.3 minimal
+ #rh7.3f: RedHat 7.3 complete first CD
+ #rh7.2m: RedHat 7.2 minimal
+ #rh7.2f: RedHat 7.2 complete first CD
+
+.SH "FILES"
+.LP
+\fI/etc/vservers/*.conf\fP
+.P
+\fI/etc/vservers/*.sh\fP
+.P
+\fI/etc/vservers/newvserver.defaults\fP
+.P
+\fI/vservers/*\fP
+
+.SH "AUTHORS"
+.LP
+This Man page was written by Jacques Gelinas.
+.SH "SEE ALSO"
+.LP
+vserver(8)
+vserver\-stat(8)
+distrib-info(8)
+vbuild(8)
+
--- /dev/null
+# This script is sourced by newvserver to set the dialog default values
+# Uncomment only the line you want to override.
+# Name of the vserver
+# name=
+# Description
+# desc=
+# Reference vserver to clone
+# clone=/
+# Use unification
+# unify=1
+# Host name. Put the default domain if you want
+# hostname=.mydomain.com
+# List of IP
+# Put the prefix of your network to save some typing
+# ip=
+# Network device for IP aliases setup
+# ondev=eth0
+
--- /dev/null
+#!/usr/bin/shellmod
+# This module is used to create a new virtual private server
+
+# This module may be use inside linuxconf
+# Do linuxconf --modulemain shellmod --setmod @SBINDIR@/newvserver
+
+# Load shellmod support function
+. /usr/lib/linuxconf/lib/shellmod-lib.sh
+
+USR_SBIN=@SBINDIR@
+USR_LIB_VSERVER=@PKGLIBDIR@
+VSERVER_CMD=$USR_SBIN/vserver
+CHBIND_CMD=$USR_SBIN/chbind
+CHCONTEXT_CMD=$USR_SBIN/chcontext
+SAVE_S_CONTEXT_CMD=$USR_LIB_VSERVER/save_s_context
+CAPCHROOT_CMD=$USR_LIB_VSERVER/capchroot
+VSERVERKILLALL_CMD=$USR_LIB_VSERVER/vserverkillall
+
+
+usage(){
+ cat <<-EOF >&2
+
+newvserver [ options ]
+
+ Interactive utility to create vservers.
+
+Options:
+ --name: Set the name of the new vserver.
+ --desc: Set the description.
+ --unify 1/0: Turn on unification on and off.
+ --hostname: Set the host name of the new vserver
+ --ip: Set the IP number(s)
+ --ondev: Install the IP numbers as IP aliases on device.
+ --clone: Create the vserver from another one or a distribution CD.
+
+The distribution CD are identified by special strings:
+ #rh9.0m: RedHat 9 minimal
+ #rh9.0f: RedHat 9 complete first CD
+ #rh8.0m: RedHat 8 minimal
+ #rh8.0f: RedHat 8 complete first CD
+ #rh7.3m: RedHat 7.3 minimal
+ #rh7.3f: RedHat 7.3 complete first CD
+ #rh7.2m: RedHat 7.2 minimal
+ #rh7.2f: RedHat 7.2 complete first CD
+
+EOF
+}
+
+register(){
+ qecho regmenu main MENU_MISCSERV "Create a new vserver"
+}
+
+check_name(){
+ LEN=`echo -n $1 | wc -c`
+ SMALL=`expr $LEN \<= 10`
+ if [ "$SMALL" = "1" ] ; then
+ return 0
+ fi
+ return 1
+}
+
+check_hostname(){
+ case $1 in
+ *\.*)
+ return 0
+ ;;
+ *)
+ ;;
+ esac
+ return 1
+}
+
+check_ip(){
+ case $1 in
+ *\.*\.*\.*)
+ return 0
+ ;;
+ *)
+ ;;
+ esac
+ return 1
+}
+
+check_device(){
+ if [ "$1" = "" ] ; then
+ return 1;
+ fi
+ return 0
+}
+
+# Tell the user to mount the CD
+check_cd(){
+ echo defval s1 "Make sure the $1"
+ echo defval s1 "is mounted on /mnt/cdrom"
+ echo defval s1
+ echo defval s1 "Execute \"mount /mnt/cdrom\" if not"
+ echo notice =s1
+}
+
+# Set a fake fstab and mtab in a vserver
+# $1 is the vserver path (/vserver/id)
+set_fstab(){
+ mkdir -p $1/etc
+ echo /dev/hdv1 / ext2 defaults 1 1 >$1/etc/fstab
+ echo /dev/hdv1 / ext2 rw 1 1 >$1/etc/mtab
+}
+
+# Show a progress bar during installation
+# The sub-process sends the number of output line first, then the lines
+execprogress(){
+ LOG=$1
+ title=$2
+ desc=$3
+ shift; shift; shift
+ $* |
+ (
+ >$LOG
+ read SIZE rest
+ qecho DIALOG
+ qecho settype DIATYPE_POPUP
+ qecho newf_str p1 "Package"
+ qecho newf_gauge s1 "$desc" 0 $SIZE
+ qecho show "$title" "$SIZE $rest"
+ nb=0
+ while read pkg line
+ do
+ nb=`expr $nb + 1`
+ printf "%-20s %s\n" $pkg $line >>$LOG
+ qecho newf_str p1 "Package" "$pkg"
+ qecho newf_gauge s1 "$desc" $nb $SIZE
+ qecho show "$title" "$SIZE $rest"
+ done
+ qecho end
+ )
+}
+
+# install some packages with a progress bar
+installpkgs(){
+ LOG=$1
+ shift
+ execprogress $LOG "Installing" "Packages installed" $*
+}
+
+# Point d'entré du module
+main(){
+ name=
+ desc=
+ clone=/
+ unify=1
+ hostname=
+ ip=
+ ondev=eth0
+ if [ -f /etc/vservers/newvserver.defaults ] ; then
+ source /etc/vservers/newvserver.defaults
+ fi
+ while [ "$1" != "" ]
+ do
+ case $1 in
+ --help)
+ usage
+ exit
+ ;;
+ --name)
+ name=$2
+ shift; shift
+ ;;
+ --desc)
+ desc=$2
+ shift; shift
+ ;;
+ --unify)
+ unify=$2
+ shift; shift
+ ;;
+ --hostname)
+ hostname=$2
+ shift; shift
+ ;;
+ --ip)
+ ip="$2"
+ shift; shift
+ ;;
+ --ondev)
+ ondev=$2
+ shift; shift
+ ;;
+ --clone)
+ clone=$2
+ shift; shift
+ ;;
+ *)
+ qecho error "Invalid option $1"
+ exit 1
+ esac
+ done
+ qecho DIALOG
+ qecho newf_title top 1 top
+ qecho newf_str name "Vserver name (max 10 chars)" $name
+ qecho newf_str desc "Vserver description" "$desc"
+ qecho newf_list clone "Clone vserver" $clone
+ for conf in /etc/vservers/*.conf
+ do
+ case $conf in
+ /etc/vservers/\*.conf)
+ ;;
+ *)
+ DESC=`grep "# Description:" $conf | ( read a b c; echo $c)`
+ qecho listitem `basename $conf .conf` "$DESC"
+ ;;
+ esac
+ done
+ qecho listitem / "Root server"
+ qecho listitem "#rh9.0m" "From RedHat 9.0 CDrom/Minimal"
+ qecho listitem "#rh9.0f" "From RedHat 9.0 CDrom/Full"
+ qecho listitem "#rh8.0m" "From RedHat 8.0 CDrom/Minimal"
+ qecho listitem "#rh8.0f" "From RedHat 8.0 CDrom/Full"
+ qecho listitem "#rh7.3m" "From RedHat 7.3 CDrom/Minimal"
+ qecho listitem "#rh7.3f" "From RedHat 7.3 CDrom/Full"
+ qecho listitem "#rh7.2" "From RedHat 7.2 CDrom"
+ #qecho listitem "#mdk8.2m" "From Mandrake 8.2 CDrom/Minimal"
+ #qecho listitem "#mdk8.2f" "From Mandrake 8.2 CDrom/Full"
+ qecho newf_chk unify "Unified mode" 1 "Share disk space" $unify
+
+ qecho newf_title Networking 1 Networking
+ qecho newf_str hostname "Host name" $hostname
+ qecho newf_info "" "Up to 16 IP numbers"
+ qecho newf_str ip "IP number(s)" "$ip"
+ qecho newf_str ondev "Install IP on device" $ondev
+
+ qecho newf_title Authentication 1 Authentication
+ qecho newf_pass pass1 "Root password"
+ qecho newf_pass pass2 "Root password (retype)"
+ qecho newf_chk usemd5 "Password format" 1 "Use MD5"
+ qecho newf_chk useshadow "Password location" 1 "/etc/shadow"
+
+ qecho newf_title NIS/LDAP 1 NIS/LDAP
+ qecho newf_str nisserver "NIS server"
+ qecho newf_str domainname "NIS domainname"
+ qecho newf_str ldapserver "LDAP server"
+ qecho newf_str ldapbasedn "LDAP base dn"
+
+ qecho newf_title Services 1 Services
+ qecho newf_chk crond "crond" 1 "Scheduled tasks"
+ qecho newf_chk httpd "httpd" 0 "Web server"
+ qecho newf_chk sshd "sshd" 1 "Secure shell server"
+ qecho newf_chk cleansshd "" 1 "Redo sshd server keys"
+ qecho newf_chk syslog "syslog" 1 "Message logger"
+ qecho newf_chk xinetd "xinetd" 0 "On demand inet service"
+ qecho newf_chk nscd "nscd" 0 "Name service cache daemon"
+
+ qecho newf_title "Backup profile" 1 "Backup profile"
+ qecho newf_str bkhostname "Host name"
+ qecho newf_info "" "Up to 16 IP numbers"
+ qecho newf_str bkip "IP number(s)"
+ qecho newf_str bkondev "Install IP on device" eth0
+
+ qecho newf_title Extra 1 Extra
+ qecho newf_chk onboot "Start server" 0 "at boot time"
+ qecho newf_str priority "Start priority" 100
+ qecho newf_str nice "Nice level"
+ qecho newf_info "Available flags" "lock nproc sched hideinfo private"
+ qecho newf_str flags "Flags" "lock nproc"
+ qecho newf_str ulimit "Vserver ulimit" "-H -u 1000"
+
+
+ qecho newf_title "Shared directories" 1 "Shared directories"
+ qecho newf_str dir1 "Directory"
+ qecho newf_str dir2 "Directory"
+ qecho newf_str dir3 "Directory"
+ qecho newf_str dir4 "Directory"
+
+ qecho newf_title "Excluded directories" 1 "Excluded directories"
+ qecho newf_info "" "Won't copy files in those directories"
+ qecho newf_str exdir1 "Directory" "/var/log"
+ qecho newf_str exdir2 "Directory" "/var/run"
+ qecho newf_str exdir3 "Directory" "/var/spool/mail"
+ qecho newf_str exdir4 "Directory" "/tmp"
+ qecho newf_str exdir5 "Directory" ""
+ qecho newf_str exdir6 "Directory" ""
+
+
+ while true
+ do
+ qecho edit "Vserver basic setup"
+ dispatch
+ if [ $CODE != "accept" ] ; then
+ break
+ elif ! check_name $name ; then
+ qecho error "You must provide a name (10 chars max)"
+ elif ! check_hostname $hostname ; then
+ qecho error "You must provide a valid/fully qualified host name"
+ elif ! check_ip $ip ; then
+ qecho error "You must provide a valid IP number"
+ elif ! check_device $ondev ; then
+ qecho error "You must provide a valid network device"
+ elif [ "$pass1" != "" -a "$pass1" != "$pass2" ] ; then
+ echo defval s1 The two passwords differ.
+ echo defval s1 You must re-enter the root password.
+ echo error =s1
+ else
+ STARTTIME=`date +%s`
+ ONBOOT=no
+ if [ "$onboot" = "1" ] ; then
+ ONBOOT=yes
+ fi
+ VROOT=/vservers/$name
+ CONF=/etc/vservers/$name.conf
+ $USR_LIB_VSERVER/install-pre.sh $name
+ rm -f $CONF >/dev/null 2>/dev/null
+ echo "# Description: $desc" >>$CONF
+ echo >>$CONF
+ echo "if [ \"$PROFILE\" = \"\" ]; then" >>$CONF
+ echo " PROFILE=prod" >>$CONF
+ echo "fi" >>$CONF
+ echo "case \$PROFILE in" >>$CONF
+ echo "prod)" >>$CONF
+ echo " # Select the IP number(s) assigned to the virtual server" >>$CONF
+ echo " # These IPs will be defined as IP alias" >>$CONF
+ echo " # The alias will be setup on IPROOTDEV" >>$CONF
+ echo " # You can specify the device if needed" >>$CONF
+ echo " # IPROOT=\"eth0:1.2.3.4 eth1:3.4.5.6\" " >>$CONF
+ echo " IPROOT=\"$ip\"" >>$CONF
+ echo " # You can define on which device the IP alias will be done" >>$CONF
+ echo " # The IP alias will be set when the server is started and unset" >>$CONF
+ echo " # when the server is stopped" >>$CONF
+ echo " # The netmask and broadcast are computed by default from IPROOTDEV" >>$CONF
+ echo " #IPROOTMASK=" >>$CONF
+ echo " #IPROOTBCAST=" >>$CONF
+ echo " IPROOTDEV=$ondev" >>$CONF
+ echo " # You can set a different host name for the vserver" >>$CONF
+ echo " # If empty, the host name of the main server is used" >>$CONF
+ echo " S_HOSTNAME=$hostname" >>$CONF
+ echo " ;;" >>$CONF
+ echo "backup)" >>$CONF
+ echo " IPROOT=\"$bkip\"" >>$CONF
+ echo " #IPROOTMASK=" >>$CONF
+ echo " #IPROOTBCAST=" >>$CONF
+ echo " IPROOTDEV=$bkondev" >>$CONF
+ echo " S_HOSTNAME=$bkhostname" >>$CONF
+ echo " ;;" >>$CONF
+ echo "esac" >>$CONF
+ echo "# Set ONBOOT to yes or no if you want to enable this" >>$CONF
+ echo "# virtual server at boot time" >>$CONF
+ echo "ONBOOT=$ONBOOT" >>$CONF
+ echo "# Control the start order of the vservers" >>$CONF
+ echo "# Lower value start first" >>$CONF
+ echo "PRIORITY=$priority" >>$CONF
+ echo "# You can set a different NIS domain for the vserver" >>$CONF
+ echo "# If empty, the current on is kept" >>$CONF
+ echo "# Set it to \"none\" to have no NIS domain set" >>$CONF
+ echo "S_DOMAINNAME=$domainname" >>$CONF
+ echo "# You can set the priority level (nice) of all process in the vserver" >>$CONF
+ echo "# Even root won't be able to raise it" >>$CONF
+ echo "S_NICE=$nice" >>$CONF
+ echo "# You can set various flags for the new security context" >>$CONF
+ echo "# lock: Prevent the vserver from setting new security context" >>$CONF
+ echo "# sched: Merge scheduler priority of all processes in the vserver" >>$CONF
+ echo "# so that it acts a like a single one." >>$CONF
+ echo "# nproc: Limit the number of processes in the vserver according to ulimit" >>$CONF
+ echo "# (instead of a per user limit, this becomes a per vserver limit)" >>$CONF
+ echo "# private: No other process can join this security context. Even root" >>$CONF
+ echo "# Do not forget the quotes around the flags" >>$CONF
+ echo "S_FLAGS=\"$flags\"" >>$CONF
+ echo "# You can set various ulimit flags and they will be inherited by the" >>$CONF
+ echo "# vserver. You enter here various command line argument of ulimit" >>$CONF
+ echo "# ULIMIT=\"-H -u 200\"" >>$CONF
+ echo "# The example above, combined with the nproc S_FLAGS will limit the" >>$CONF
+ echo "# vserver to a maximum of 200 processes" >>$CONF
+ echo "ULIMIT=\"$ulimit\"" >>$CONF
+ echo "# You can set various capabilities. By default, the vserver are run" >>$CONF
+ echo "# with a limited set, so you can let root run in a vserver and not" >>$CONF
+ echo "# worry about it. He can\'t take over the machine. In some cases" >>$CONF
+ echo "# you can to give a little more capabilities \(such as CAP_NET_RAW\)" >>$CONF
+ echo "# S_CAPS=\"CAP_NET_RAW\"" >>$CONF
+ echo "S_CAPS=\"\"" >>$CONF
+ echo "# Select an unused context (this is optional)" >>$CONF
+ echo "# The default is to allocate a free context on the fly" >>$CONF
+ echo "# In general you don't need to force a context" >>$CONF
+ echo "#S_CONTEXT=" >>$CONF
+
+ # Now we create the optional companion startup script
+ # for the vserver
+ SCRIPT=/etc/vservers/$name.sh
+ echo "#!/bin/sh" >$SCRIPT
+ echo 'case $1 in' >>$SCRIPT
+ echo "pre-start)" >>$SCRIPT
+ for dir in $dir1 $dir2 $dir3 $dir4 none
+ do
+ if [ "$dir" != "none" ] ; then
+ echo " mkdir -p $VROOT/$dir" >>$SCRIPT
+ echo " mount --bind $dir $VROOT/$dir" >>$SCRIPT
+ fi
+ done
+ echo " ;;" >>$SCRIPT
+ echo "post-start)" >>$SCRIPT
+ echo " ;;" >>$SCRIPT
+ echo "pre-stop)" >>$SCRIPT
+ echo " ;;" >>$SCRIPT
+ echo "post-stop)" >>$SCRIPT
+ for dir in $dir1 $dir2 $dir3 $dir4 none
+ do
+ if [ "$dir" != "none" ] ; then
+ echo " umount $VROOT/$dir" >>$SCRIPT
+ fi
+ done
+ echo " ;;" >>$SCRIPT
+ echo '*)' >>$SCRIPT
+ echo ' echo $0 pre-start' >>$SCRIPT
+ echo ' echo $0 pre-stop' >>$SCRIPT
+ echo ' echo $0 post-start' >>$SCRIPT
+ echo ' echo $0 post-stop' >>$SCRIPT
+ echo " ;;" >>$SCRIPT
+ echo "esac" >>$SCRIPT
+ chmod +x $SCRIPT
+
+ LOG=/var/run/newvserver.log.$$
+ if [ "$clone" = "/" ] ; then
+ # Unification does not work on / yet
+ $VSERVER_CMD $name build >$LOG
+ elif [ "$clone" = "#rh7.2" ] ; then
+ check_cd "first RedHat 7.2 CD"
+ set_fstab $VROOT
+ installpkgs $LOG $USR_LIB_VSERVER/install-rh7.2 $name
+ elif [ "$clone" = "#rh7.3m" -o "$clone" = "#rh7.3f" ] ; then
+ check_cd "first RedHat 7.3 CD"
+ set_fstab $VROOT
+ if [ "$clone" = "#rh7.3m" ] ;then
+ installpkgs $LOG $USR_LIB_VSERVER/install-rh7.3 $name minimum
+ else
+ installpkgs $LOG $USR_LIB_VSERVER/install-rh7.3 $name full
+ fi
+ elif [ "$clone" = "#rh8.0m" -o "$clone" = "#rh8.0f" ] ; then
+ check_cd "first RedHat 8.0 CD"
+ set_fstab $VROOT
+ if [ "$clone" = "#rh8.0m" ] ;then
+ installpkgs $LOG $USR_LIB_VSERVER/install-rh8.0 $name minimum
+ else
+ installpkgs $LOG $USR_LIB_VSERVER/install-rh8.0 $name full
+ fi
+ elif [ "$clone" = "#rh9.0m" -o "$clone" = "#rh9.0f" ] ; then
+ check_cd "first RedHat 9.0 CD"
+ set_fstab $VROOT
+ if [ "$clone" = "#rh9.0m" ] ;then
+ installpkgs $LOG $USR_LIB_VSERVER/install-rh9.0 $name minimum
+ else
+ installpkgs $LOG $USR_LIB_VSERVER/install-rh9.0 $name full
+ fi
+ elif [ "$unify" = "0" ] ; then
+ cp -ax /vservers/$clone/. $VROOT/. >$LOG
+ else
+ EXCLOPT=
+ for dir in $exdir1 $exdir2 $exdir3 $exdir4 $exdir5 $exdir6 none
+ do
+ if [ "$dir" != "none" ] ; then
+ EXCLOPT="$EXCLOPT --excldir $dir"
+ fi
+ done
+ $USR_LIB_VSERVER/vbuild $EXCLOPT --stats /vservers/$clone $VROOT >$LOG
+ fi
+ rm -f $VROOT/var/run/utmp
+ $USR_LIB_VSERVER/fakerunlevel 3 $VROOT/var/run/utmp
+ test "$crond" = 1 && $VSERVER_CMD $name chkconfig crond on >/dev/null
+ test "$httpd" = 1 && $VSERVER_CMD $name chkconfig httpd on >/dev/null
+ test "$sshd" = 1 && $VSERVER_CMD $name chkconfig sshd on >/dev/null
+ if [ "$cleansshd" = 1 ] ; then
+ echo Deleting sshd server keys >>$LOG
+ rm -f $VROOT/etc/ssh/*_key
+ rm -f $VROOT/etc/ssh/*_key.pub
+ fi
+ test "$syslog" = 1 && $VSERVER_CMD $name chkconfig syslog on >/dev/null
+ test "$xinetd" = 1 && $VSERVER_CMD $name chkconfig xinetd on >/dev/null
+ test "$nscd" = 1 && $VSERVER_CMD $name chkconfig nscd on >/dev/null
+ host0=`echo $hostname | sed 's/\./ /g' | ( read a b; echo $a)`
+ echo $ip $hostname $host0 localhost >$VROOT/etc/hosts
+ RHNETWORK=$VROOT/etc/sysconfig/network
+ if [ -f $RHNETWORK ] ; then
+ cat $RHNETWORK | grep -v HOSTNAME >/tmp/newvserver.tmp.$$
+ cp /tmp/newvserver.tmp.$$ $RHNETWORK
+ echo HOSTNAME=$hostname >>$RHNETWORK
+ fi
+ # Umount proc and /dev/pts
+ $VSERVER_CMD $name stop >/dev/null
+ ENDTIME=`date +%s`
+ DURATION=`expr $ENDTIME - $STARTTIME`
+
+ echo defval s1 Server $name was installed in $VROOT
+ echo defval s1 The configuration file /etc/vservers/$name.conf was created
+ echo defval s1 The script /etc/vservers/$name.sh was created
+ echo defval s1 Vserver $name was created in $DURATION seconds
+ echo defval s1
+ cat $LOG | while read line
+ do
+ echo defval s1 $line
+ done
+ echo notice =s1
+ rm -f $LOG
+ # Finish some stuff: root password, account policies
+ if [ -x $VROOT/usr/sbin/authconfig ] ; then
+ SHADOWOPT=
+ MD5OPT=
+ NISOPT=
+ LDAPOPT=
+ if [ "$usemd5" = "1" ] ; then
+ MD5OPT=--usemd5
+ fi
+ if [ "$useshadow" = "1" ] ; then
+ SHADOWOPT=--useshadow
+ fi
+ if [ "$nisserver" != "" ] ; then
+ NISOPT="--nisserver $nisserver --nisdomain $domainname"
+ fi
+ if [ "$ldapserver" != "" ] ; then
+ LDAPOPT="--ldapserver $ldapserver --ldapbasedn $ldapbasedn"
+ fi
+ $VSERVER_CMD $name exec /usr/sbin/authconfig \
+ --nostart --kickstart \
+ $SHADOWOPT $MD5OPT $NISOPT $LDAPOPT
+ fi
+ if [ "$pass1" != "" ] ; then
+ (echo $pass1; sleep 5; echo $pass1) \
+ | $VSERVER_CMD --silent $name exec passwd >/dev/null
+ fi
+ break
+ fi
+ done
+ qecho end
+}
+
+dispatch
--- /dev/null
+## $Id: changelog.am,v 1.1.4.1 2003/11/03 23:11:11 ensc Exp $ ---*- makefile -*---
+
+## Copyright (C) 2002 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+##
+## 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; version 2 of the License.
+##
+## 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+##
+
+ChangeLog.sed:
+ test "$(srcdir)" != "."
+
+if HAVE_CVS2CL
+ChangeLog: Makefile
+ if test "$(srcdir)" = "." -a -d CVS; then \
+ $(CVS2CL) $(CVS2CL_ALLFLAGS) -f $@; \
+ fi
+else
+if HAVE_RCS2LOG
+ChangeLog: ChangeLog.sed Makefile
+ if test "$(srcdir)" = "." -a -d CVS; then \
+ $(RCS2LOG) -l 0 -c /dev/stdout | sed -f $< >$@; \
+ fi
+endif
+endif
+
+.PHONY: ChangeLog
--- /dev/null
+dnl $Id: ensc_cflags.m4,v 1.1.4.1 2004/01/26 18:21:28 ensc Exp $
+
+dnl Copyright (C) 2002 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+dnl
+dnl This program is free software; you can redistribute it and/or modify
+dnl it under the terms of the GNU General Public License as published by
+dnl the Free Software Foundation; version 2 of the License.
+dnl
+dnl This program is distributed in the hope that it will be useful,
+dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
+dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+dnl GNU General Public License for more details.
+dnl
+dnl You should have received a copy of the GNU General Public License
+dnl along with this program; if not, write to the Free Software
+dnl Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+AC_DEFUN([__ENSC_CHECK_WARNFLAGS],
+[
+ warn_flags="-Werror -W"
+ AC_MSG_CHECKING([whether the $1-compiler accepts ${warn_flags}])
+ AC_LANG_PUSH($1)
+ old_CFLAGS="${$3}"
+ $3="$warn_flags"
+ AC_TRY_COMPILE([inline static void f(){}],
+ [],
+ [ensc_sys_compilerwarnflags_$2=${warn_flags}],
+ [ensc_sys_compilerwarnflags_$2=])
+ AC_LANG_POP($1)
+ $3="$old_CFLAGS"
+
+ if test x"${ensc_sys_compilerwarnflags_$2}" = x; then
+ AC_MSG_RESULT([no])
+ else
+ AC_MSG_RESULT([yes])
+ fi
+])
+
+AC_DEFUN([__ENSC_CHECK_WARNFLAGS_C],
+[
+ __ENSC_CHECK_WARNFLAGS(C, C, CFLAGS)
+])
+
+AC_DEFUN([__ENSC_CHECK_WARNFLAGS_CXX],
+[
+ __ENSC_CHECK_WARNFLAGS(C++, CXX, CXXFLAGS)
+])
+
+
+# --------------------------------------------------------------------------
+# Check whether the C++ compiler accepts a certain flag
+# If it does it adds the flag to CXXFLAGS
+# If it does not then it returns an error to lf_ok
+# Usage:
+# ENSC_CHECK_CXX_FLAG(-flag1 -flag2 -flag3 ...)
+# -------------------------------------------------------------------------
+
+AC_DEFUN([ENSC_CHECK_CXX_FLAG],
+[
+ AC_REQUIRE([__ENSC_CHECK_WARNFLAGS_CXX])
+
+ echo 'void f(){}' > conftest.cc
+ for i in $1
+ do
+ AC_MSG_CHECKING([whether $CXX accepts $i])
+ if test -z "`${CXX} ${ensc_sys_compilerwarnflags_CXX} $i -c conftest.cc 2>&1`"
+ then
+ CXXFLAGS="${CXXFLAGS} $i"
+ AC_MSG_RESULT(yes)
+ else
+ AC_MSG_RESULT(no)
+ fi
+ done
+ rm -f conftest.cc conftest.o
+])
+
+# --------------------------------------------------------------------------
+# Check whether the C compiler accepts a certain flag
+# If it does it adds the flag to CFLAGS
+# If it does not then it returns an error to lf_ok
+# Usage:
+# ENSC_CHECK_CC_FLAG(-flag1 -flag2 -flag3 ...)
+# -------------------------------------------------------------------------
+
+AC_DEFUN([ENSC_CHECK_CC_FLAG],[
+ AC_REQUIRE([__ENSC_CHECK_WARNFLAGS_C])
+
+echo 'void f(){}' > conftest.c
+ for i in $1
+ do
+ AC_MSG_CHECKING([whether $CC accepts $i])
+ if test -z "`${CC} ${ensc_sys_compilerwarnflags_C} $i -c conftest.c 2>&1`"
+ then
+ CFLAGS="${CFLAGS} $i"
+ AC_MSG_RESULT(yes)
+ else
+ AC_MSG_RESULT(no)
+ fi
+ done
+ rm -f conftest.c conftest.o
+])
+
+AC_DEFUN([ENSC_CHECK_DEFAULT_FLAG],
+[
+ if test x"${ensc_sys_default_flag}" = x; then
+ ENSC_CHECK_CC_FLAG([-fmessage-length=0])
+ ENSC_CHECK_CXX_FLAG([-fmessage-length=0])
+
+ ensc_sys_default_flag=set
+ fi
+])
--- /dev/null
+dnl $Id: ensc_changelog.m4,v 1.1.2.1 2003/11/03 23:11:11 ensc Exp $
+
+dnl Copyright (C) 2002 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+dnl
+dnl This program is free software; you can redistribute it and/or modify
+dnl it under the terms of the GNU General Public License as published by
+dnl the Free Software Foundation; version 2 of the License.
+dnl
+dnl This program is distributed in the hope that it will be useful,
+dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
+dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+dnl GNU General Public License for more details.
+dnl
+dnl You should have received a copy of the GNU General Public License
+dnl along with this program; if not, write to the Free Software
+dnl Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+dnl Usage: ENSC_CHANGELOG(<CVS_TAG>)
+
+AC_DEFUN([ENSC_CHANGELOG],
+[
+ if test x"$1" != x; then
+ AC_SUBST(CVS2CL_TAG, ['-F $1'])
+ fi
+
+ AC_CHECK_PROGS(CVS2CL, [cvs2cl])
+ AM_CONDITIONAL(HAVE_CVS2CL, [test x"$CVS2CL" != x])
+
+ AC_CHECK_PROGS(RCS2LOG, [rcs2log])
+ AM_CONDITIONAL(HAVE_RCS2LOG, [test x"$RCS2LOG" != x])
+])
--- /dev/null
+dnl $Id: ensc_e2fscheck.m4,v 1.1.2.1 2004/01/26 18:20:51 ensc Exp $
+
+dnl Copyright (C) 2004 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+dnl
+dnl This program is free software; you can redistribute it and/or modify
+dnl it under the terms of the GNU General Public License as published by
+dnl the Free Software Foundation; version 2 of the License.
+dnl
+dnl This program is distributed in the hope that it will be useful,
+dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
+dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+dnl GNU General Public License for more details.
+dnl
+dnl You should have received a copy of the GNU General Public License
+dnl along with this program; if not, write to the Free Software
+dnl Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+AC_DEFUN([ENSC_CHECK_EXT2FS_HEADER],
+[
+ AC_LANG_PUSH(C++)
+ AC_CACHE_CHECK([for ext2fs-headers], [ensc_cv_test_ext2fs_header],[
+ AC_COMPILE_IFELSE(AC_LANG_SOURCE([#include <ext2fs/ext2_fs.h>
+ int main() { return 0; }]),
+ [ensc_cv_test_ext2fs_header=e2fsprogs],[
+ AC_COMPILE_IFELSE(AC_LANG_SOURCE([#include <linux/ext2_fs.h>
+ int main() { return 0; }]),
+ [ensc_cv_test_ext2fs_header=kernel],[
+ ensc_cv_test_ext2fs_header=none])])])
+
+ case x"$ensc_cv_test_ext2fs_header" in
+ (xe2fsprogs)
+ AC_CHECK_HEADER([ext2fs/ext2_fs.h],
+ [AC_DEFINE(ENSC_HAVE_EXT2FS_EXT2_FS_H, 1, [define when <ext2fs/ext2_fs.h> is usable])],
+ [AC_MSG_FAILURE([unexpected error while checkin for <ext2fs/ext2_fs.h>])])
+ ;;
+ (xkernel)
+ AC_CHECK_HEADER([linux/ext2_fs.h],
+ [AC_DEFINE(ENSC_HAVE_LINUX_EXT2_FS_H, 1, [define when <linux/ext2_fs.h> is usable])],
+ [AC_MSG_FAILURE([unexpected error while checkin for <linux/ext2_fs.h>])])
+ ;;
+ (*)
+ AC_MSG_FAILURE([
+ext2fs headers were not found, or they are not usable. This can have
+the following reasons:
+
+* you have neither the e2fsprogs nor the kernel headers installed
+
+* kernel headers are broken (e.g. these of linux 2.6 are known to be)
+ and you do not have e2fsprogs headers installed; please try to
+ install e2fsprogs-devel (for Red Hat) or e2fsprogs-dev (for Debian)
+ in this case
+
+* kernel headers are broken and your e2fsprogs headers are too old;
+ until version 1.27 (inclusive), they are using reserved C++ keywords
+
+* kernel headers are broken and your e2fsprogs headers are too new;
+ recent (January 2004) BK snapshots of e2fsprogs are unusable for
+ C++, for details and a solution see
+ https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=112448
+
+
+In the latter two cases you have the following options:
+* fix the headers manually, or
+* install a stable version of e2fsprogs (e.g. 1.34), or
+* use good kernel headers (from linux 2.4.x)
+])
+ ;;
+ esac
+ AC_LANG_POP
+])
--- /dev/null
+dnl $Id: ensc_kerneldir.m4,v 1.1.2.2 2004/01/26 18:21:28 ensc Exp $
+
+dnl Copyright (C) 2002 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+dnl
+dnl This program is free software; you can redistribute it and/or modify
+dnl it under the terms of the GNU General Public License as published by
+dnl the Free Software Foundation; version 2 of the License.
+dnl
+dnl This program is distributed in the hope that it will be useful,
+dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
+dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+dnl GNU General Public License for more details.
+dnl
+dnl You should have received a copy of the GNU General Public License
+dnl along with this program; if not, write to the Free Software
+dnl Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+dnl Usage: ENSC_KERNEL_HEADERS(<var>)
+dnl <var> ... basedir of kernel-headers (without the '/linux');
+dnl this value will be AC_SUBST'ed
+
+AC_DEFUN([_ENSC_KERNEL_DIR],
+[
+ AC_CACHE_CHECK([for linux kernel dir], [ensc_cv_path_kerneldir],
+ [
+AC_ARG_WITH([kerneldir],
+ [AC_HELP_STRING([--with-kerneldir=DIR],
+ [assume kernelsources in DIR (default: /lib/modules/<current>/build)])],
+ [case "$withval" in
+ yes|no) AC_MSG_ERROR(['$withval' is not a valid value for kerneldir]);;
+ *) ensc_cv_path_kerneldir=$withval;;
+ esac],
+ [ensc_cv_path_kerneldir=
+ for i in /lib/modules/$(uname -r)/build /usr/src/linux /usr; do
+ test -e $i/include/linux/version.h && { ensc_cv_path_kerneldir=$i; break; }
+ done])
+ ])
+
+ test "$ensc_cv_path_kerneldir" -a -e "$ensc_cv_path_kerneldir"/include/linux/version.h || {
+ AC_MSG_ERROR([Can not find kernelsources])
+ }
+])
+
+AC_DEFUN([ENSC_KERNEL_HEADERS],
+[
+ AC_REQUIRE([_ENSC_KERNEL_DIR])
+
+ AC_CACHE_CHECK([for linux kernel headers], [ensc_cv_path_kernelheaders],
+ [
+ ensc_cv_path_kernelheaders=$ensc_cv_path_kerneldir/include
+ ])
+
+ $1=$ensc_cv_path_kernelheaders
+ AC_SUBST($1)
+])
--- /dev/null
+dnl $Id: ensc_syscall.m4,v 1.2.2.1 2004/02/05 03:52:45 ensc Exp $
+
+dnl Copyright (C) 2004 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+dnl
+dnl This program is free software; you can redistribute it and/or modify
+dnl it under the terms of the GNU General Public License as published by
+dnl the Free Software Foundation; version 2 of the License.
+dnl
+dnl This program is distributed in the hope that it will be useful,
+dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
+dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+dnl GNU General Public License for more details.
+dnl
+dnl You should have received a copy of the GNU General Public License
+dnl along with this program; if not, write to the Free Software
+dnl Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+dnl Usage: ENSC_SYSCALL
+
+AC_DEFUN([ENSC_SYSCALL],
+[
+ AC_REQUIRE([ENSC_KERNEL_HEADERS])
+ AC_MSG_CHECKING([for syscall(2) invocation method])
+ AC_ARG_WITH([syscall],
+ [AC_HELP_STRING([--with-syscall=METHOD],
+ [call syscall(2) with the specified METHOD; valid values are 'fast', 'traditional' and 'auto' (default: auto)])],
+ [],
+ [with_syscall=auto])
+ AC_MSG_RESULT([$with_syscall])
+
+ case x"$with_syscall" in
+ xauto)
+ AC_CACHE_CHECK([which syscall(2) invocation works], [ensc_cv_test_syscall],
+ [
+ old_CPPFLAGS=$CPPFLAGS
+ CPPFLAGS="-I$ensc_cv_path_kernelheaders"
+ AC_LANG_PUSH(C)
+ AC_COMPILE_IFELSE([
+#include <asm/unistd.h>
+#include <syscall.h>
+#include <errno.h>
+#define __NR_foo0 300
+#define __NR_foo1 301
+#define __NR_foo2 302
+#define __NR_foo3 303
+#define __NR_foo4 304
+#define __NR_foo5 305
+inline static _syscall0(int, foo0)
+inline static _syscall1(int, foo1, int, a)
+inline static _syscall2(int, foo2, int, a, int, b)
+inline static _syscall3(int, foo3, int, a, int, b, int, c)
+inline static _syscall4(int, foo4, int, a, int, b, int, c, int, d)
+inline static _syscall5(int, foo5, int, a, int, b, int, c, int, d, int, e)
+
+int main() {
+ return foo0() || \
+ foo1(1) || \
+ foo2(1,2) || \
+ foo3(1,2,3) || \
+ foo4(1,2,3,4) || \
+ foo5(1,2,3,4,5);
+}
+ ],
+ [ensc_cv_test_syscall=fast],
+ [ensc_cv_test_syscall=traditional])
+
+ AC_LANG_POP
+ CPPFLAGS=$old_CPPFLAGS
+ ])
+ with_syscall=$ensc_cv_test_syscall
+ ;;
+ xfast|xtraditional)
+ ;;
+ *)
+ AC_MSG_ERROR(['$with_syscall' is not a valid value for '--with-syscall'])
+ ;;
+ esac
+
+ if test x"$with_syscall" = xtraditional; then
+ AC_DEFINE(ENSC_SYSCALL_TRADITIONAL, 1, [Define to 1 when the fast syscall(2) invocation does not work])
+ fi
+
+ AH_BOTTOM([
+#if defined(__pic__) && defined(__i386) && !defined(ENSC_SYSCALL_TRADITIONAL)
+# define ENSC_SYSCALL_TRADITIONAL 1
+#endif])
+])
--- /dev/null
+dnl $Id: ensc_uv_vrootdir.m4,v 1.1.2.2 2004/01/26 18:21:28 ensc Exp $
+
+dnl Copyright (C) 2002 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+dnl
+dnl This program is free software; you can redistribute it and/or modify
+dnl it under the terms of the GNU General Public License as published by
+dnl the Free Software Foundation; version 2 of the License.
+dnl
+dnl This program is distributed in the hope that it will be useful,
+dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
+dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+dnl GNU General Public License for more details.
+dnl
+dnl You should have received a copy of the GNU General Public License
+dnl along with this program; if not, write to the Free Software
+dnl Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+dnl Usage: ENSC_UV_VROOTDIR[(<vserverdir-variable>)]
+dnl <vserverdir-variable> ... name of variable which will get assigned
+dnl the dirname of the vserver-topdir
+
+AC_DEFUN([ENSC_UV_VROOTDIR],
+[
+ AC_MSG_CHECKING([which vserver-rootdir is to use])
+ AC_ARG_WITH([vrootdir],
+ [AC_HELP_STRING([--with-vrootdir=DIR],
+ [place vservers under DIR (default: /vservers)])],
+ [case "$withval" in
+ yes|no) AC_MSG_ERROR(['$withval' is not a valid value for vrootdir]);;
+ *) ensc_uv_path_vrootdir=$withval;;
+ esac],
+ [ensc_uv_path_vrootdir=/vservers])
+ AC_MSG_RESULT([$ensc_uv_path_vrootdir])
+
+ if test x"$1" != x; then
+ $1=$ensc_uv_path_vrootdir
+ AC_SUBST($1)
+ fi
+])
--- /dev/null
+## $Id: gpgsig.am,v 1.1 2003/09/29 22:01:57 ensc Exp $
+
+## Copyright (C) 2002 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+##
+## 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; version 2 of the License.
+##
+## 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+gpgsig:
+ gpg --armor --detach-sign $(distdir).tar.bz2
--- /dev/null
+## $Id: validate.am,v 1.1.4.1 2003/11/03 23:10:50 ensc Exp $ ---*- makefile -*---
+
+## Copyright (C) 2002 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+##
+## 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; version 2 of the License.
+##
+## 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+##
+
+$(BUILT_SOURCES) config.h: .X$(subst /,_,$(sysconfdir))-up-to-date
+
+distclean-local: distclean-uptodate
+
+distclean-uptodate:
+ @rm -f .*-up-to-date
+
+.%-up-to-date:
+ @rm -f .*-up-to-date
+ @touch -t 197001020000 '$@'
+ @$(MAKE) -s clean $(BUILT_SOURCES)
--- /dev/null
+## $Id: Makefile-files,v 1.1.4.1 2003/10/30 01:34:24 ensc Exp $ -*- makefile -*-
+
+## Copyright (C) 2003 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+##
+## 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, 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+##
+
+man_DATMAN = man/chbind.8 \
+ man/chcontext.8 \
+ man/distrib-info.8 \
+ man/rebootmgr.8 \
+ man/reducecap.8 \
+ man/vps.8 \
+ man/vpstree.8 \
+ man/vrpm.8 \
+ man/vserver-copy.8 \
+ man/vserver-stat.8 \
+ man/vserver.8 \
+ man/vtop.8
--- /dev/null
+.TH "chbind" "8" "0.1.0" "Klavs Klavsen <kl@vsen.dk>" "System Administration"
+.SH "NAME"
+.LP
+chbind \- The chbind utility is used to lock a process and its children into using a specific IP number/Interface.
+.SH "SYNTAX"
+.LP
+chbind [\fI\-\-silent\fP] [\fI\-\-ip ip_number/interface\fP] <\fIcommand arguments\fP>
+.SH "DESCRIPTION"
+.LP
+The chbind utility executes a command, and locks the resulting process and its children into using a specific IP number/Interface, no matter what it is told in it's configuration. This applies to services and client connection as well.
+.SH "OPTIONS"
+.LP
+.TP
+\fB\-\-ip\fR ip_number/interface
+Binds the process to the given IP number or Interface. If an interface
+is supplied (for example eth0), both the IP number and broadcast address
+are extracted.
+.TP
+\fB\-\-bcast\fR broadcast address
+Binds the process to the given broadcast IP number.
+.TP
+\fB\-\-silent\fR
+Do not complain.
+
+.SH "FILES"
+.LP
+\fI/usr/sbin/chbind\fP
+
+
+.SH "EXAMPLES"
+.LP
+If I wanted to ensure my httpd listened only on my eth0 interface, I could do:
+chbind \-\-ip eth0 /etc/rc.d/init.d/httpd start
+.LP
+Please contribute some, if you feel it's important.
+.SH "AUTHORS"
+.LP
+This Man page was written by Klavs Klavsen <kl@vsen.dk> and based upon the helpful output from the program itself and the documentation on the Virtual Server site <http://www.solucorp.qc.ca/miscprj/s_context.hc?prjstate=1&nodoc=0>
+.SH "SEE ALSO"
+.LP
+chcontext(8) rebootmgr(8) reducecap(8)
+vps(8) vpstree(8) vrpm(8) vserver(8)
+vserver\-stat(8) vtop(8)
--- /dev/null
+.TH "chcontext" "1" "0.1.0" "Klavs Klavsen <kl@vsen.dk>" "System Administration"
+.SH "NAME"
+.LP
+chcontext \- chcontext allocates a new security context and executes a command in that context.
+.SH "SYNTAX"
+.LP
+chcontext [\fIoptions\fP] <\fIcommand arguments\fP>
+.SH "DESCRIPTION"
+.LP
+chcontext allocates a new security context and executes a command in that context.
+By default, a new/unused context is allocated
+.SH "OPTIONS"
+.LP
+.TP
+\fB\-\-cap\fR CAP_NAME
+Add a capability from the command. This option may be repeated several time. See /usr/include/linux/capability.h In general, this option is used with the \-\-secure option. \-\-secure removes most critical capabilities and \-\-cap adds specific ones.
+.TP
+\fB\-\-cap\fR !CAP_NAME
+Remove a capability from the command. This option may be repeated several time. See /usr/include/linux/capability.h
+.TP
+\fB\-\-ctx\fR num
+Select the context. Only root in context 0 is allowed to select a specific context.
+Context number 1 is special. It can see all processes in any contexts, but can't kill them though.
+.TP
+\fB\-\-disconnect\fR
+Start the command in background and make the process a child of process 1.
+.TP
+\fB\-\-domainname\fR new_domainname
+Set the domainname (NIS) in the new security context.
+Use "none" to unset the domainname.
+.TP
+\fB\-\-flag\fR
+Set one flag in the new or current security context. The following flags are supported. The option may be used several time.
+ lock: The new process is trapped and can't use
+ chcontext anymore.
+ sched: The new process and its children will
+ share a common execution priority.
+ nproc: Limit the number of process in the
+ vserver according to ulimit setting.
+ Normally, ulimit is a per user thing.
+ With this flag, it becomes a per vserver
+ thing.
+ private: No one can join this security context
+ once created.
+.TP
+\fB\-\-hostname\fR new_hostname
+Set the hostname in the new security context.
+This is needed because if you create a less privileged security context, it may be unable to change its hostname.
+.TP
+\fB\-\-secure\fR
+Remove all the capabilities to make a virtual server trustable.
+.TP
+\fB\-\-silent\fR
+Do not print the allocated context number.
+.LP
+Information about context is found in /proc/self/status
+.SH "FILES"
+.LP
+\fI/usr/sbin/chcontext\fP
+
+
+.SH "EXAMPLES"
+.LP
+# You must be root, running X.
+# We start an xterm in another security context
+/usr/sbin/chcontext xterm &
+
+# We check, there is no xterm running, yet we can
+# see it.
+ps ax | grep xterm
+
+# Are we running in security context 0
+# We check the s_context line in /proc/self/status
+cat /proc/self/status
+
+# Ok we in security context 0
+# Try the security context 1
+/usr/sbin/chcontext \-\-ctx 1 ps ax | grep xterm
+
+# Ok, we see the xterm, we try to kill it
+/usr/sbin/chcontext \-\-ctx 1 killall xterm
+
+# No, security context 1 can see, but can't kill
+# let's find out in which security context this
+# xterm is running
+/usr/sbin/chcontext \-\-ctx 1 ps ax | grep xterm
+
+# Ok, this is PID XX. We need the security context
+/usr/sbin/chcontext \-\-ctx 1 cat /proc/XX/status
+
+# We see the s_context, this is SS.
+# We want to kill this process
+/usr/sbin/chcontext \-\-ctx SS killall xterm
+.LP
+Please contribute some, if you feel it's important.
+.SH "AUTHORS"
+.LP
+This Man page was written by Klavs Klavsen <kl@vsen.dk> and based upon the helpful output from the program itself and the documentation on the Virtual Server site <http://www.solucorp.qc.ca/miscprj/s_context.hc?prjstate=1&nodoc=0>
+.SH "SEE ALSO"
+.LP
+chbind(8) rebootmgr(8) reducecap(8)
+vps(8) vpstree(8) vrpm(8) vserver(8)
+vserver\-stat(8) vtop(8)
--- /dev/null
+.TH "distrib-info" "8" "0.1.0" "Jacques Gelinas <jack@solucorp.qc.ca>" "System Administration"
+.SH "NAME"
+.LP
+distrib-info \- A distribution independant utility to retrieve package information.
+.SH "SYNTAX"
+.LP
+distrib-info vserver-name command [options]
+
+.SH "DESCRIPTION"
+.LP
+distrib-info \- This utility provides a solution to hide some differences
+between Linux distributions. The various utilities (vunify, vbuild, ...)
+need package information to perform their task. They call distrib-info
+to retrieve this information. distrib-info is the only one understanding
+the various distribution out there.
+.TP
+This utility is only used as a back-end for other utilities such as
+vunify and vbuild.
+.SH "OPTIONS"
+.LP
+.TP
+\fBdumpfiles\fR reports all files owned by a package.
+.TP
+\fBpkgversion\fR reports all packages and version.
+.TP
+\fBunifiles\fR reports the files of a package which may be shared by
+several virtual servers. Generally, this excludes all configuration files.
+
+.SH "EXAMPLES"
+.LP
+The following command will report all packages in the vserver ref80.
+The package will be presented with the version/release.
+
+ distrib-info ref80 pkgversion
+
+To get the list of unify-able (sharable) file in package sendmail
+of the vserver ref80, we do
+
+ distrib-info ref80 unifiles sendmail
+.SH "FILES"
+.LP
+ /usr/lib/vservers/distrib-info
+.SH "AUTHORS"
+.LP
+This Man page was written by Jacques Gelinas <jack@solucorp.qc.ca>.
+.SH "SEE ALSO"
+.LP
+vbuild(8) vfiles(8) vunify(8)
+newvserver(8)
+
--- /dev/null
+.TH "rebootmgr" "8" "0.1.0" "Klavs Klavsen <kl@vsen.dk>" "System Administration"
+.SH "NAME"
+.LP
+rebootmgr \- rebootmgr stops and starts one or more vservers at your command.
+.SH "SYNTAX"
+.LP
+rebootmgr \fIvserver\-name\fP [\fIvserver\-name\fP ...] \fICommand\fP
+.SH "DESCRIPTION"
+.LP
+The chbind utility executes a command, and locks the resulting process and its children into using a specific IP number/Interface, no matter what it is told in it's configuration. This applies to services and client connection as well.
+.SH "OPTIONS"
+.LP
+.TP
+\fB\-\-ip\fR ip_number/interface
+Binds the process to the given IP number or Interface.
+.TP
+\fB\-\-silent\fR
+Do not complain.
+
+.SH "FILES"
+.LP
+\fI/usr/sbin/rebootmgr\fP
+
+
+.SH "EXAMPLES"
+.LP
+If I wanted to ensure my httpd listened only on my eth0 interface, I could do:
+chbind \-\-ip eth0 /etc/rc.d/init.d/httpd start
+.LP
+Please contribute some, if you feel it's important.
+.SH "AUTHORS"
+.LP
+This Man page was written by Klavs Klavsen <kl@vsen.dk> and based upon the helpful output from the program itself and the documentation on the Virtual Server site <http://www.solucorp.qc.ca/miscprj/s_context.hc?prjstate=1&nodoc=0>
+.SH "SEE ALSO"
+.LP
+chcontext(8) chbind(8) reducecap(8)
+vps(8) vpstree(8) vrpm(8) vserver(8)
+vserver\-stat(8) vtop(8)
--- /dev/null
+.TH "reducecap" "8" "0.1.0" "Klavs Klavsen <kl@vsen.dk>" "System Administration"
+.SH "NAME"
+.LP
+reducecap \- The reducecap utility is used to lower the capability ceiling of a process and child process.
+.SH "SYNTAX"
+.LP
+reducecap [\fIoptions\fP] <\fIcommand arguments\fP>
+.SH "DESCRIPTION"
+.LP
+The reducecap utility is used to lower the capability ceiling of a process and child process. Even setuid program won't be able to grab more capabilities.
+.SH "OPTIONS"
+.LP
+.TP
+\fB\-\-secure\fR Removes all dangerous capabilities from the process executed.Specificly it removes:
+CAP_LINUX_IMMUTABLE CAP_NET_BROADCAST CAP_NET_ADMIN, CAP_NET_RAW CAP_IPC_LOCK CAP_IPC_OWNER CAP_SYS_MODULE CAP_SYS_RAWIO CAP_SYS_PACCT CAP_SYS_ADMIN CAP_SYS_BOOT CAP_SYS_NICE CAP_SYS_RESOURCE CAP_SYS_TIME CAP_MKNOD.
+
+Leaving the following capabilities:
+CAP_CHOWN CAP_DAC_OVERRIDE CAP_DAC_READ_SEARCH CAP_FOWNER CAP_FSETID CAP_KILL CAP_SETGID CAP_SETUID CAP_NET_BIND_SERVICE CAP_SYS_CHROOT CAP_SYS_PTRACE CAP_SYS_TTY_CONFIG CAP_LEASE CAP_QUOTACTL
+.TP
+\fB\-\-show\fR Shows the current process capabilities.
+.TP
+\fB\-\-flag\fR
+sets the security context flags. The option may be repeated
+several times. Here are the values:
+
+lock: The security context can't be changed. The process is trapped
+ in this context. This is generally used for vservers because yoy
+ do not want them to hide in new security context.
+
+sched: Each process in a security context contribute (lower) to the general
+ priority of every processes in the context. Mostly, all processes
+ in a security context take as much CPU together as one process
+ not bound to this flag. Said again differently, a vserver having
+ 100 active processes won't get more CPU than another vserver
+ with a single active process.
+
+
+nproc: The "ulimit -u N" setting becomes global to the security context. It means
+ the security context is not allowed to have more than N processes.
+
+private: No other processes, even root in security context 0, is allowed to
+ enter this security context. Once a security context is setup
+ with this flag, it is on its own. This also means that root
+ in security context 0 won't be able to kill or interact with those
+ processes.
+
+hideinfo: Hides various information in /proc.
+
+.TP
+\fB--LINUX_IMMUTABLE\fR
+.TP
+\fB--NET_BIND_SERVICE\fR
+.TP
+\fB--NET_BROADCAST\fR
+.TP
+\fB--NET_ADMIN\fR
+.TP
+\fB--NET_RAW\fR
+.TP
+\fB--IPC_LOCK\fR
+.TP
+\fB--IPC_OWNER\fR
+.TP
+\fB--SYS_MODULE\fR
+.TP
+\fB--SYS_RAWIO\fR
+.TP
+\fB--SYS_PACCT\fR
+.TP
+\fB--SYS_ADMIN\fR
+.TP
+\fB--SYS_BOOT\fR
+.TP
+\fB--SYS_NICE\fR
+.TP
+\fB--SYS_RESOURCE\fR
+.TP
+\fB--SYS_TIME\fR
+.TP
+\fB--MKNOD\fR
+
+All these options remove one capability. These options may be used
+after the
+\fB--secure\fR
+option to remove more capabilities.
+
+
+.SH "FILES"
+.LP
+\fI/usr/sbin/reducecap\fP
+
+
+.SH "EXAMPLES"
+.LP
+# You are not root now
+# What is the current capability ceiling
+cat /proc/self/status
+# The capBset line presents mostly 1s.
+/usr/sbin/reducecap \-\-secure /bin/sh
+cat /proc/self/status
+# The capBset now shows many more 0s.
+# The capEff shows all 0s, you have no privilege now
+# We su to root
+su
+cat /proc/self/status
+# capEff is much better now, but there are still many 0s
+# Now we try to see if we are really root
+tail /var/log/messages
+# So far so good, we see the content
+/sbin/ifconfig eth0
+/sbin/ifconfig eth0 down
+# No way, we can't configure the interface. In fact
+# we have lost most privilege normally assigned to root
+exit
+.LP
+Please contribute some more, if you feel it's important.
+.SH "AUTHORS"
+.LP
+This Man page was written by Klavs Klavsen <kl@vsen.dk> and based upon the helpful output from the program itself and the documentation on the Virtual Server site <http://www.solucorp.qc.ca/miscprj/s_context.hc?prjstate=1&nodoc=0>
+.SH "SEE ALSO"
+.LP
+chcontext(8) rebootmgr(8) chbind(8)
+vps(8) vpstree(8) vrpm(8) vserver(8)
+vserver\-stat(8) vtop(8)
--- /dev/null
+.TH "vps" "8" "0.1.0" "Klavs Klavsen <kl@vsen.dk>" "System Administration"
+.SH "NAME"
+.LP
+vps \- The vps utility is simply a wrapper for the ps program.
+.SH "SYNTAX"
+.LP
+vps [\fIoptions\fP]
+
+.SH "DESCRIPTION"
+.LP
+vps \- The vps utility is simply a wrapper for the ps program, that enables ps to show you the all the processes on the system, instead of only the ones in the current s_context (see cat /proc/self/status).
+.SH "OPTIONS"
+.LP
+.TP
+See man ps.
+.SH "FILES"
+.LP
+\fI/usr/sbin/vps\fP
+
+
+.SH "EXAMPLES"
+.LP
+Please contribute some, if you feel it's important.
+.SH "AUTHORS"
+.LP
+This Man page was written by Klavs Klavsen <kl@vsen.dk> and based upon the helpful output from the program itself and the documentation on the Virtual Server site <http://www.solucorp.qc.ca/miscprj/s_context.hc?prjstate=1&nodoc=0>
+.SH "SEE ALSO"
+.LP
+chcontext(8) rebootmgr(8) reducecap(8)
+chbind(8) vpstree(8) vrpm(8) vserver(8)
+vserver\-stat(8) vtop(8)
--- /dev/null
+.TH "vpstree" "8" "0.1.0" "Klavs Klavsen <kl@vsen.dk>" "System Administration"
+.SH "NAME"
+.LP
+vpstree \- The vpstree utility is simply a wrapper for the pstree program.
+.SH "SYNTAX"
+.LP
+vpstree [\fIoptions\fP]
+
+.SH "DESCRIPTION"
+.LP
+vpstree \- The vpstree utility is simply a wrapper for the pstree program, that enables pstree to show you the all the processes on the system, instead of only the ones in the current s_context (see cat /proc/self/status).
+.SH "OPTIONS"
+.LP
+.TP
+See man pstree.
+.SH "FILES"
+.LP
+\fI/usr/sbin/vpstree\fP
+
+
+.SH "EXAMPLES"
+.LP
+Please contribute some, if you feel it's important.
+.SH "AUTHORS"
+.LP
+This Man page was written by Klavs Klavsen <kl@vsen.dk> and based upon the helpful output from the program itself and the documentation on the Virtual Server site <http://www.solucorp.qc.ca/miscprj/s_context.hc?prjstate=1&nodoc=0>
+.SH "SEE ALSO"
+.LP
+chcontext(8) rebootmgr(8) reducecap(8)
+chbind(8) vps(8) vrpm(8) vserver(8)
+vserver\-stat(8) vtop(8)
--- /dev/null
+.TH "vrpm" "8" "0.1.0" "Klavs Klavsen <kl@vsen.dk>" "System Administration"
+.SH "NAME"
+.LP
+vrpm \- is simply a wrapper for the rpm utility.
+.SH "SYNTAX"
+.LP
+vrpm [--unify] [ALL | vserver1 vserver2 ...] \-\- [rpm options]
+
+.SH "DESCRIPTION"
+.LP
+vrpm \- is simply a wrapper for the rpm utility. It enables rpm to manage a specific, several or all virtual server(s) with one command.
+vrpm is executed in the root server.
+.SH "OPTIONS"
+.LP
+.TP
+\fB\-\-\fR All commands after this, is given to the rpm utility (see man rpm).
+.TP
+The
+\fB--unify\fR option triggers the vunify utility on the vservers and the
+supplied packages.
+.SH "FILES"
+.LP
+\fI/usr/sbin/vrpm\fP
+
+
+.SH "EXAMPLES"
+.TP
+verifies the gcc package on all vservers.
+.LP
+vrpm ALL \-\- \-\-verify gcc
+.TP
+Updates package.rpm on vserver1 and vserver2 if
+the package exists in a earlier version
+(the F flag for rpm).
+.LP
+vrpm vserver1 vserver2 \-\- \-Fvh package.rpm
+.TP
+vrpm is executed in the root server
+.LP
+Please contribute some more, if you feel it's important.
+.SH "AUTHORS"
+.LP
+This Man page was written by Klavs Klavsen <kl@vsen.dk> and based upon the helpful output from the program itself and the documentation on the Virtual Server site <http://www.solucorp.qc.ca/miscprj/s_context.hc?prjstate=1&nodoc=0>
+.SH "SEE ALSO"
+.LP
+chcontext(8) rebootmgr(8) reducecap(8)
+chbind(8) vps(8) vtop(8) vserver(8)
+vserver\-stat(8) vpstree(8)
--- /dev/null
+.TH "vserver-copy" "8" "0.3" "Mark Lawrence <nomad@null.net>" "System Administration"\r
+.SH "NAME"\r
+.LP \r
+vserver-copy \- copy/move a virtual server.\r
+.SH "SYNTAX"\r
+.LP \r
+vserver-copy [\fIoptions\fP] \fIvserver\fP \fInewname\fP \r
+.LP \r
+vserver-copy [\fIoptions\fP] \fIvserver\fP \fIhost\fP:[\fInewname\fP]\r
+.SH "DESCRIPTION"\r
+.LP \r
+vserver-copy makes a copy of a virtual server using rsync. It will\r
+rewrite the vserver.conf configuration file with the new hostname and\r
+IP information when given. If the destination name contains a host\r
+specification then ssh/rsh will be used for the data transfer.\r
+\r
+vserver-copy can used on a running vserver, although naturally the\r
+consistency of open database files and the like cannot be guaranteed.\r
+A running vserver can however be safely moved from one root host to another\r
+using the \-s flag.\r
+\r
+If downtime is an issue when moving a virtual server across hosts you\r
+should first run vserver without the \-s flag. This will pre\-populate the\r
+destination filesystem requiring only updates to be made on the next\r
+invocation.\r
+.SH "OPTIONS"\r
+.LP \r
+.TP \r
+\fB\-h\fR,\fB-\-help\fR\r
+output usage information and exit\r
+.TP \r
+\fB\-V\fR,\fB-\-version\fR\r
+output version information and exit\r
+.TP \r
+\fB\-v\fR,\fB-\-verbose\fR\r
+show all output (normally only informational messages and warnings)\r
+.TP \r
+\fB\-q\fR,\fB-\-quiet\fR\r
+suppress all output\r
+.TP \r
+\fB\-d\fR,\fB-\-domain\fR domain\r
+the new DNS domain when changing name. Overwrites /etc/hosts. Must be\r
+used with \-i\r
+.TP \r
+\fB\-i\fR,\fB-\-ip\fR address\r
+the new IP address when changing name. Overwrites /etc/hosts. Must be\r
+used with \-d\r
+.TP \r
+\fB\-r\fR,\fB-\-vsroot\fR\r
+directory containing virtual servers. Defaults to "/vserver"\r
+.TP \r
+\fB\-R\fR,\fB-\-rsh\fR\r
+use rsh instead of the default ssh for network transfer\r
+.TP\r
+\fB\-s\fR,\fB-\-stopstart\fR\r
+stop the virtual server before copying and start the new vserver afterwards.\r
+This really only makes sense if you are copying across root hosts and not\r
+changing names or IP addresses.\r
+.SH "FILES"\r
+.LP \r
+\fI/etc/vservers/vserver.conf\fP \r
+.SH "EXAMPLES"\r
+.LP \r
+# Copy a template vserver (same IP addresses etc)\r
+\r
+/usr/sbin/vserver-copy template web01\r
+\r
+# Copy webserver with change in configuration\r
+\r
+/usr/sbin/vserver-copy -i 192.168.5.62 -d example.com template web62\r
+\r
+# Move a running vserver to another roothost\r
+\r
+/usr/sbin/vserver-copy -s web62 roothost02:\r
+\r
+.SH "BUGS"\r
+.LP \r
+If a virtual server is moved from one root host to another a gratuitious\r
+ping should be sent to inform other devices on the local area network\r
+of the change in MAC address.\r
+\r
+Without this ping the devices will continue to attempt to reach the old\r
+MAC address for the length of their arp-cache timeout (10 minute default\r
+on Suns!).\r
+\r
+This functionality should probably be implmemented during the \r
+"vserver <name> start" process.\r
+.SH "AUTHOR"\r
+.LP \r
+Mark Lawrence <nomad@null.net>\r
+.SH "SEE ALSO"\r
+.LP \r
+vserver(8)\r
--- /dev/null
+.TH "vserver-stat" "8" "0.1.0" "Klavs Klavsen <kl@vsen.dk>" "System Administration"
+.SH "NAME"
+.LP
+vserver\-stat
+.SH "SYNTAX"
+.LP
+vserver\-stat
+
+.SH "DESCRIPTION"
+.LP
+vserver\-stat \- The vserver\-stat utility shows informations about all the active contexts.
+
+ CTX# Context number
+ #0 = root context
+ #1 = monitoring context
+ PROC QTY Quantity of processes in each
+ context
+ VSZ Number of pages of virtual
+ memory
+ RSS Resident set size
+ utime User\-mode CPU time
+ accumulated
+ ctime Kernel\-mode CPU time
+ accumulated
+.SH "FILES"
+.LP
+\fI/usr/sbin/vserver\-stat\fP
+
+
+.SH "EXAMPLES"
+.LP
+Please contribute some, if you feel it's important.
+.SH "AUTHORS"
+.LP
+This Man page was written by Klavs Klavsen <kl@vsen.dk> and based upon the helpful output from the program itself and the documentation on the Virtual Server site <http://www.solucorp.qc.ca/miscprj/s_context.hc?prjstate=1&nodoc=0>
+.SH "SEE ALSO"
+.LP
+chcontext(8) rebootmgr(8) reducecap(8)
+chbind(8) vps(8) vrpm(8) vserver(8)
+vtop(8) vpstree(8)
--- /dev/null
+.TH "vserver" "8" "0.1.0" "Klavs Klavsen <kl@vsen.dk>" "System Administration"
+.SH "NAME"
+.LP
+vserver \- The vserver utility enables you to control different aspects of your vservers.
+.SH "SYNTAX"
+.LP
+vserver [ options ] [vserver name] [options]
+
+.SH "DESCRIPTION"
+.LP
+vserver \- The vserver utility enables you to control different aspects of your vservers, such as stopping and starting them, and services within them.
+.SH "OPTIONS"
+.LP
+.TP
+\fBbuild\fR Create a virtual server by copying the packages of the root server
+.TP
+\fBenter\fR Enter in the virtual server context and starts a shell. Same as "vserver name exec /bin/sh\".
+.TP
+\fBexec\fR Exec a command in the virtual server context as root.
+syntax: vserver name exec command ...
+.TP
+\fBsuexec\fR Exec a command in the virtual server context under some user id.
+syntax: vserver name suexec userid command ...
+.TP
+\fBservice\fR Control a service inside a vserver.
+syntax: vserver name service service\-name (start/stop/restart etc.)
+.TP
+\fBstart\fR Starts the various services in the vserver.
+It uses the default runlevel found in the
+.B /etc/inittab
+file of the vserver.
+.TP
+\fBstop\fR Ends all services and kills the remaining processes.
+.TP
+\fBrunning\fR Tells if a virtual server is running. It returns proper exit code, so you can use it as a test.
+.TP
+\fBstatus\fR Tells various information about the state of a virtual server:
+running status, number of running processes and uptime.
+.TP
+.I --nodev
+do not configure the IP devices associated with the vserver. This
+is useful to execute some commands on the vserver (or enter it)
+without making it active on the network. Especially useful if you
+have an active copy of the vserver moved to another server on the
+network.
+.TP
+.I --silent
+cuts most informative messages.
+
+.SH "FILES"
+.LP
+\fI/usr/sbin/vserver\fP
+.P
+\fI/etc/vservers/*.conf\fP
+.P
+\fI/etc/vservers/*.sh\fP
+.P
+\fI/vservers/*\fP
+
+.SH "EXAMPLES"
+.LP
+Please contribute some, if you feel it's important.
+.SH "AUTHORS"
+.LP
+This Man page was written by Klavs Klavsen <kl@vsen.dk> and based upon the helpful output from the program itself and the documentation on the Virtual Server site <http://www.solucorp.qc.ca/miscprj/s_context.hc?prjstate=1&nodoc=0>
+.SH "SEE ALSO"
+.LP
+chbind(8) chcontext(8)
+newvserver(8)
+rebootmgr(8) reducecap(8)
+vps(8) vpstree(8)
+vrpm(8)
+vserver\-stat(8)
+vtop(8)
--- /dev/null
+.TH "vtop" "8" "0.1.0" "Klavs Klavsen <kl@vsen.dk>" "System Administration"
+.SH "NAME"
+.LP
+vtop \- The vtop utility is simply a wrapper for the top program.
+.SH "SYNTAX"
+.LP
+vtop [\fIoptions\fP]
+
+.SH "DESCRIPTION"
+.LP
+vtop \- The vtop utility is simply a wrapper for the top program, that enables top to show you the all the processes on the system, instead of only the ones in the current s_context (see cat /proc/self/status).
+.SH "OPTIONS"
+.LP
+.TP
+See man top.
+.SH "FILES"
+.LP
+\fI/usr/sbin/vtop\fP
+
+
+.SH "EXAMPLES"
+.LP
+Please contribute some, if you feel it's important.
+.SH "AUTHORS"
+.LP
+This Man page was written by Klavs Klavsen <kl@vsen.dk> and based upon the helpful output from the program itself and the documentation on the Virtual Server site <http://www.solucorp.qc.ca/miscprj/s_context.hc?prjstate=1&nodoc=0>
+.SH "SEE ALSO"
+.LP
+chcontext(8) rebootmgr(8) reducecap(8)
+chbind(8) vps(8) vrpm(8) vserver(8)
+vserver\-stat(8) vpstree(8)
--- /dev/null
+#! /bin/sh
+# Common stub for a few missing GNU programs while installing.
+
+scriptversion=2003-09-02.23
+
+# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003
+# Free Software Foundation, Inc.
+# Originally by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
+
+# 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, 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., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+if test $# -eq 0; then
+ echo 1>&2 "Try \`$0 --help' for more information"
+ exit 1
+fi
+
+run=:
+
+# In the cases where this matters, `missing' is being run in the
+# srcdir already.
+if test -f configure.ac; then
+ configure_ac=configure.ac
+else
+ configure_ac=configure.in
+fi
+
+msg="missing on your system"
+
+case "$1" in
+--run)
+ # Try to run requested program, and just exit if it succeeds.
+ run=
+ shift
+ "$@" && exit 0
+ # Exit code 63 means version mismatch. This often happens
+ # when the user try to use an ancient version of a tool on
+ # a file that requires a minimum version. In this case we
+ # we should proceed has if the program had been absent, or
+ # if --run hadn't been passed.
+ if test $? = 63; then
+ run=:
+ msg="probably too old"
+ fi
+ ;;
+esac
+
+# If it does not exist, or fails to run (possibly an outdated version),
+# try to emulate it.
+case "$1" in
+
+ -h|--h|--he|--hel|--help)
+ echo "\
+$0 [OPTION]... PROGRAM [ARGUMENT]...
+
+Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an
+error status if there is no known handling for PROGRAM.
+
+Options:
+ -h, --help display this help and exit
+ -v, --version output version information and exit
+ --run try to run the given command, and emulate it if it fails
+
+Supported PROGRAM values:
+ aclocal touch file \`aclocal.m4'
+ autoconf touch file \`configure'
+ autoheader touch file \`config.h.in'
+ automake touch all \`Makefile.in' files
+ bison create \`y.tab.[ch]', if possible, from existing .[ch]
+ flex create \`lex.yy.c', if possible, from existing .c
+ help2man touch the output file
+ lex create \`lex.yy.c', if possible, from existing .c
+ makeinfo touch the output file
+ tar try tar, gnutar, gtar, then tar without non-portable flags
+ yacc create \`y.tab.[ch]', if possible, from existing .[ch]
+
+Send bug reports to <bug-automake@gnu.org>."
+ ;;
+
+ -v|--v|--ve|--ver|--vers|--versi|--versio|--version)
+ echo "missing $scriptversion (GNU Automake)"
+ ;;
+
+ -*)
+ echo 1>&2 "$0: Unknown \`$1' option"
+ echo 1>&2 "Try \`$0 --help' for more information"
+ exit 1
+ ;;
+
+ aclocal*)
+ if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
+ # We have it, but it failed.
+ exit 1
+ fi
+
+ echo 1>&2 "\
+WARNING: \`$1' is $msg. You should only need it if
+ you modified \`acinclude.m4' or \`${configure_ac}'. You might want
+ to install the \`Automake' and \`Perl' packages. Grab them from
+ any GNU archive site."
+ touch aclocal.m4
+ ;;
+
+ autoconf)
+ if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
+ # We have it, but it failed.
+ exit 1
+ fi
+
+ echo 1>&2 "\
+WARNING: \`$1' is $msg. You should only need it if
+ you modified \`${configure_ac}'. You might want to install the
+ \`Autoconf' and \`GNU m4' packages. Grab them from any GNU
+ archive site."
+ touch configure
+ ;;
+
+ autoheader)
+ if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
+ # We have it, but it failed.
+ exit 1
+ fi
+
+ echo 1>&2 "\
+WARNING: \`$1' is $msg. You should only need it if
+ you modified \`acconfig.h' or \`${configure_ac}'. You might want
+ to install the \`Autoconf' and \`GNU m4' packages. Grab them
+ from any GNU archive site."
+ files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}`
+ test -z "$files" && files="config.h"
+ touch_files=
+ for f in $files; do
+ case "$f" in
+ *:*) touch_files="$touch_files "`echo "$f" |
+ sed -e 's/^[^:]*://' -e 's/:.*//'`;;
+ *) touch_files="$touch_files $f.in";;
+ esac
+ done
+ touch $touch_files
+ ;;
+
+ automake*)
+ if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
+ # We have it, but it failed.
+ exit 1
+ fi
+
+ echo 1>&2 "\
+WARNING: \`$1' is $msg. You should only need it if
+ you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'.
+ You might want to install the \`Automake' and \`Perl' packages.
+ Grab them from any GNU archive site."
+ find . -type f -name Makefile.am -print |
+ sed 's/\.am$/.in/' |
+ while read f; do touch "$f"; done
+ ;;
+
+ autom4te)
+ if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
+ # We have it, but it failed.
+ exit 1
+ fi
+
+ echo 1>&2 "\
+WARNING: \`$1' is needed, but is $msg.
+ You might have modified some files without having the
+ proper tools for further handling them.
+ You can get \`$1' as part of \`Autoconf' from any GNU
+ archive site."
+
+ file=`echo "$*" | sed -n 's/.*--output[ =]*\([^ ]*\).*/\1/p'`
+ test -z "$file" && file=`echo "$*" | sed -n 's/.*-o[ ]*\([^ ]*\).*/\1/p'`
+ if test -f "$file"; then
+ touch $file
+ else
+ test -z "$file" || exec >$file
+ echo "#! /bin/sh"
+ echo "# Created by GNU Automake missing as a replacement of"
+ echo "# $ $@"
+ echo "exit 0"
+ chmod +x $file
+ exit 1
+ fi
+ ;;
+
+ bison|yacc)
+ echo 1>&2 "\
+WARNING: \`$1' $msg. You should only need it if
+ you modified a \`.y' file. You may need the \`Bison' package
+ in order for those modifications to take effect. You can get
+ \`Bison' from any GNU archive site."
+ rm -f y.tab.c y.tab.h
+ if [ $# -ne 1 ]; then
+ eval LASTARG="\${$#}"
+ case "$LASTARG" in
+ *.y)
+ SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'`
+ if [ -f "$SRCFILE" ]; then
+ cp "$SRCFILE" y.tab.c
+ fi
+ SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'`
+ if [ -f "$SRCFILE" ]; then
+ cp "$SRCFILE" y.tab.h
+ fi
+ ;;
+ esac
+ fi
+ if [ ! -f y.tab.h ]; then
+ echo >y.tab.h
+ fi
+ if [ ! -f y.tab.c ]; then
+ echo 'main() { return 0; }' >y.tab.c
+ fi
+ ;;
+
+ lex|flex)
+ echo 1>&2 "\
+WARNING: \`$1' is $msg. You should only need it if
+ you modified a \`.l' file. You may need the \`Flex' package
+ in order for those modifications to take effect. You can get
+ \`Flex' from any GNU archive site."
+ rm -f lex.yy.c
+ if [ $# -ne 1 ]; then
+ eval LASTARG="\${$#}"
+ case "$LASTARG" in
+ *.l)
+ SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'`
+ if [ -f "$SRCFILE" ]; then
+ cp "$SRCFILE" lex.yy.c
+ fi
+ ;;
+ esac
+ fi
+ if [ ! -f lex.yy.c ]; then
+ echo 'main() { return 0; }' >lex.yy.c
+ fi
+ ;;
+
+ help2man)
+ if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
+ # We have it, but it failed.
+ exit 1
+ fi
+
+ echo 1>&2 "\
+WARNING: \`$1' is $msg. You should only need it if
+ you modified a dependency of a manual page. You may need the
+ \`Help2man' package in order for those modifications to take
+ effect. You can get \`Help2man' from any GNU archive site."
+
+ file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'`
+ if test -z "$file"; then
+ file=`echo "$*" | sed -n 's/.*--output=\([^ ]*\).*/\1/p'`
+ fi
+ if [ -f "$file" ]; then
+ touch $file
+ else
+ test -z "$file" || exec >$file
+ echo ".ab help2man is required to generate this page"
+ exit 1
+ fi
+ ;;
+
+ makeinfo)
+ if test -z "$run" && (makeinfo --version) > /dev/null 2>&1; then
+ # We have makeinfo, but it failed.
+ exit 1
+ fi
+
+ echo 1>&2 "\
+WARNING: \`$1' is $msg. You should only need it if
+ you modified a \`.texi' or \`.texinfo' file, or any other file
+ indirectly affecting the aspect of the manual. The spurious
+ call might also be the consequence of using a buggy \`make' (AIX,
+ DU, IRIX). You might want to install the \`Texinfo' package or
+ the \`GNU make' package. Grab either from any GNU archive site."
+ file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'`
+ if test -z "$file"; then
+ file=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
+ file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $file`
+ fi
+ touch $file
+ ;;
+
+ tar)
+ shift
+ if test -n "$run"; then
+ echo 1>&2 "ERROR: \`tar' requires --run"
+ exit 1
+ fi
+
+ # We have already tried tar in the generic part.
+ # Look for gnutar/gtar before invocation to avoid ugly error
+ # messages.
+ if (gnutar --version > /dev/null 2>&1); then
+ gnutar "$@" && exit 0
+ fi
+ if (gtar --version > /dev/null 2>&1); then
+ gtar "$@" && exit 0
+ fi
+ firstarg="$1"
+ if shift; then
+ case "$firstarg" in
+ *o*)
+ firstarg=`echo "$firstarg" | sed s/o//`
+ tar "$firstarg" "$@" && exit 0
+ ;;
+ esac
+ case "$firstarg" in
+ *h*)
+ firstarg=`echo "$firstarg" | sed s/h//`
+ tar "$firstarg" "$@" && exit 0
+ ;;
+ esac
+ fi
+
+ echo 1>&2 "\
+WARNING: I can't seem to be able to run \`tar' with the given arguments.
+ You may want to install GNU tar or Free paxutils, or check the
+ command line arguments."
+ exit 1
+ ;;
+
+ *)
+ echo 1>&2 "\
+WARNING: \`$1' is needed, and is $msg.
+ You might have modified some files without having the
+ proper tools for further handling them. Check the \`README' file,
+ it often tells you about the needed prerequisites for installing
+ this package. You may also peek at any GNU archive site, in case
+ some other package would contain this missing \`$1' program."
+ exit 1
+ ;;
+esac
+
+exit 0
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-end: "$"
+# End:
--- /dev/null
+#! /bin/sh
+# mkinstalldirs --- make directory hierarchy
+
+scriptversion=2003-11-08.23
+
+# Original author: Noah Friedman <friedman@prep.ai.mit.edu>
+# Created: 1993-05-16
+# Public domain.
+#
+# This file is maintained in Automake, please report
+# bugs to <bug-automake@gnu.org> or send patches to
+# <automake-patches@gnu.org>.
+
+errstatus=0
+dirmode=""
+
+usage="\
+Usage: mkinstalldirs [-h] [--help] [--version] [-m MODE] DIR ...
+
+Create each directory DIR (with mode MODE, if specified), including all
+leading file name components.
+
+Report bugs to <bug-automake@gnu.org>."
+
+# process command line arguments
+while test $# -gt 0 ; do
+ case $1 in
+ -h | --help | --h*) # -h for help
+ echo "$usage"
+ exit 0
+ ;;
+ -m) # -m PERM arg
+ shift
+ test $# -eq 0 && { echo "$usage" 1>&2; exit 1; }
+ dirmode=$1
+ shift
+ ;;
+ --version)
+ echo "$0 $scriptversion"
+ exit 0
+ ;;
+ --) # stop option processing
+ shift
+ break
+ ;;
+ -*) # unknown option
+ echo "$usage" 1>&2
+ exit 1
+ ;;
+ *) # first non-opt arg
+ break
+ ;;
+ esac
+done
+
+for file
+do
+ if test -d "$file"; then
+ shift
+ else
+ break
+ fi
+done
+
+case $# in
+ 0) exit 0 ;;
+esac
+
+case $dirmode in
+ '')
+ if mkdir -p -- . 2>/dev/null; then
+ echo "mkdir -p -- $*"
+ exec mkdir -p -- "$@"
+ else
+ # On NextStep and OpenStep, the `mkdir' command does not
+ # recognize any option. It will interpret all options as
+ # directories to create, and then abort because `.' already
+ # exists.
+ test -d ./-p && rmdir ./-p
+ test -d ./-- && rmdir ./--
+ fi
+ ;;
+ *)
+ if mkdir -m "$dirmode" -p -- . 2>/dev/null; then
+ echo "mkdir -m $dirmode -p -- $*"
+ exec mkdir -m "$dirmode" -p -- "$@"
+ else
+ # Clean up after NextStep and OpenStep mkdir.
+ for d in ./-m ./-p ./-- "./$dirmode";
+ do
+ test -d $d && rmdir $d
+ done
+ fi
+ ;;
+esac
+
+for file
+do
+ set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'`
+ shift
+
+ pathcomp=
+ for d
+ do
+ pathcomp="$pathcomp$d"
+ case $pathcomp in
+ -*) pathcomp=./$pathcomp ;;
+ esac
+
+ if test ! -d "$pathcomp"; then
+ echo "mkdir $pathcomp"
+
+ mkdir "$pathcomp" || lasterr=$?
+
+ if test ! -d "$pathcomp"; then
+ errstatus=$lasterr
+ else
+ if test ! -z "$dirmode"; then
+ echo "chmod $dirmode $pathcomp"
+ lasterr=""
+ chmod "$dirmode" "$pathcomp" || lasterr=$?
+
+ if test ! -z "$lasterr"; then
+ errstatus=$lasterr
+ fi
+ fi
+ fi
+ fi
+
+ pathcomp="$pathcomp/"
+ done
+done
+
+exit $errstatus
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-end: "$"
+# End:
--- /dev/null
+## $Id: Makefile-files,v 1.1.4.3 2003/12/03 00:06:37 ensc Exp $ -*- makefile -*-
+
+## Copyright (C) 2003 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+##
+## 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, 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+##
+
+scriptscfgdir = $(sbindir)
+
+scripts_src_SCRPTS = scripts/distrib-info \
+ scripts/rootshell \
+ scripts/save_s_context \
+ scripts/vprofile \
+ scripts/vserverkillall \
+ scripts/vservers.grabinfo.sh \
+ scripts/vsysvwrapper
+scripts_gen_SCRPTS =
+
+scripts_src_LEGSCRPTS = scripts/vunify.sh
+scripts_gen_LEGSCRPTS = scripts/vkill
+
+
+scripts_src_PRGS = scripts/vpstree \
+ scripts/vrpm \
+ scripts/vserver \
+ scripts/vserver-copy \
+ scripts/vtop
+scripts_gen_PRGS = scripts/vps
+
+scripts_PRGS = $(scripts_src_PRGS) $(scripts_gen_PRGS)
+scripts_SCRPTS = $(scripts_src_SCRPTS) $(scripts_gen_SCRPTS)
+scripts_LEGSCRPTS = $(scripts_src_LEGSCRPTS) $(scripts_gen_LEGSCRPTS)
+scriptscfg_DATA = scripts/util-vserver-vars
+
+scripts_XTRAS = scripts/util-vserver-vars.subst \
+ scripts/vkill.subst \
+ scripts/vps.subst \
+ $(scripts_src_SCRPTS) $(scripts_src_PRGS) \
+ $(scripts_src_LEGSCRPTS)
+
+scripts_GENSCRPTS = scripts/util-vserver-vars \
+ $(scripts_gen_SCRPTS) $(scripts_gen_PRGS) \
+ $(scripts_gen_LEGSCRPTS)
+
+scripts/%: scripts/%.subst
+ @mkdir -p $$(dirname '$@')
+ sed -e 's!@'PKGLIBDIR'@!$(pkglibdir)!g; \
+ s!@'SBINDIR'@!$(sbindir)!g; \
+ s!@'VSERVERDIR'@!$(vserverdir)!g' '$<' >'$@.tmp'
+ @-chmod --reference='$<' '$@.tmp'
+ @-rm -f '$@'
+ mv '$@.tmp' '$@'
+ @chmod a-w '$@'
--- /dev/null
+#!/bin/bash
+
+# Copyright (C) 2003 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+# based on distrib-info by Jacques Gelinas
+#
+# 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, 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+
+# This scripts knows about every possible distribution (well, it should)
+# It is passed a vserver name and a key (a command). The key represent a task.
+# It executes the command and output on stdout.
+# For example
+# distrib-info vserver1 pkgversion
+# If vserver1 is a redhat system, it executes
+# rpm -qa --queryformat "%{name}=%{version}-%{release}
+: ${UTIL_VSERVER_VARS:=$(dirname $0)/util-vserver-vars}
+test -e "$UTIL_VSERVER_VARS" || {
+ echo "Can not find util-vserver installation; aborting..."
+ exit 1
+}
+. "$UTIL_VSERVER_VARS"
+
+if [ "$1" = "" ] ; then
+ echo distrib-info vserver-name command [ args ... ] >&2
+ echo Commands are: >&2
+ echo dumpfiles: Shows all files owned by a package >&2
+ echo pkgversion: reports all packages and their version/release >&2
+ echo unifiles: reports all unify-able file of a package >&2
+ exit 1
+fi
+if [ "$1" = "/" ] ; then
+ DISTDIR=/
+ CHROOTCMD=
+elif [ -d "$1" ] ; then
+ DISTDIR=$1
+ CHROOTCMD="$SBINDIR/chroot $DISTDIR"
+else
+ DISTDIR=$VROOTDIR/$1
+ CHROOTCMD="$SBINDIR/chroot $DISTDIR"
+fi
+KEY=$2
+shift
+shift
+if [ -f $DIRDIR/etc/redhat-release -o -f $DISTDIR/etc/mandrake-release ] ; then
+ case $KEY in
+ pkgversion)
+ $CHROOTCMD /bin/rpm -qa --queryformat "%{name}=%{version}-%{release}\n"
+ ;;
+ unifiles)
+ # We remove /etc and /var/log to make sure no special file
+ # there will be unified
+ $CHROOTCMD /bin/rpm -ql --dump $* \
+ | $PKGLIBDIR/parserpmdump /etc/
+ ;;
+ dumpfiles)
+ $CHROOTCMD /bin/rpm -ql $*
+ ;;
+ *)
+ echo unknown request $KEY >&2
+ ;;
+ esac
+else
+ echo Distribution not supported yet >&2
+fi
+
--- /dev/null
+#!/bin/sh
+# Copyright (C) 2003 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+# based on rootshell by Jacques Gelinas
+#
+# 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, 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+: ${UTIL_VSERVER_VARS:=$(dirname $0)/util-vserver-vars}
+test -e "$UTIL_VSERVER_VARS" || {
+ echo "Can not find util-vserver installation; aborting..."
+ exit 1
+}
+. "$UTIL_VSERVER_VARS"
+
+OPTIONS=$@
+if [ "$OPTIONS" = "" ] ; then
+ OPTIONS=--login
+fi
+exec $SBINDIR/chbind --silent --ip 0.0.0.0 /bin/bash $OPTIONS
+
--- /dev/null
+#!/bin/sh
+
+# Copyright (C) 2003 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+# based on save_s_context by Jacques Gelinas
+#
+# 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, 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+if [ $# -lt 1 ] ;then
+ echo save_s_context file command
+ echo Save the security context in file and execute a command
+else
+ CTX=`grep ^s_context: /proc/self/status | sed s/s_context:// | (read a b; echo $a)`
+ CTX=`eval expr $CTX + 0`
+ echo S_CONTEXT=$CTX >$1
+ echo S_PROFILE=$PROFILE >>$1
+ shift
+ exec "$@"
+fi
+
+
--- /dev/null
+PKGLIBDIR='@PKGLIBDIR@'
+SBINDIR='@SBINDIR@'
+VROOTDIR='@VSERVERDIR@'
--- /dev/null
+#!/usr/bin/perl -w
+
+# Copyright (C) 2003 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+# based on vkill by Philip Snyder
+#
+# 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, 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+# kill wrapper for vserver.
+# Philip Snyder <psnyder@vizional.com>
+# 2002/02/06 19:00 PST
+
+
+$PROC = $ARGV[0];
+
+# Grab the output from a context query against this process id
+open(PH, "@SBINDIR@/chcontext --silent --ctx 1 cat /proc/$PROC/status 2>&1 |");
+
+# Loop through the output
+while (<PH>) {
+
+ # Searching for a line that looks like this:
+ # s_context: #
+ if (/^s_context: ([0-9]+)/) {
+
+ print "Process id $PROC was found in security context $1.\n";
+
+ # Make sure the process is in a vserver context
+ if ($1 > 0) {
+
+ # Since we have the context and the process id, we can kill it
+ print " + Killing... ";
+ `@SBINDIR@/chcontext --ctx $1 kill $PROC`;
+ print "[done]\n";
+
+ } else {
+
+ # Not in vserver context, so its a process on the actual server
+ print " + Killing... ";
+ `kill $PROC`;
+ print "[done]\n";
+
+ }
+ exit;
+ }
+}
+
+print "Process id $PROC not found.\n";
+exit
--- /dev/null
+#!/bin/sh
+
+# Copyright (C) 2003 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+# based on vprofile by Jacques Gelinas
+#
+# 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, 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+# Prints or select the active profile for a vserver
+if [ $# != 1 -a $# != 2 ] ; then
+ echo vprofile vserver [ profile-name ]
+else
+ if [ ! -f /etc/vservers/$1.conf ] ; then
+ echo vserver $1 does not exist >&2
+ else
+ unset PROFILE
+ . /etc/vservers/$1.conf
+ if [ $# = 1 ] ; then
+ echo PROFILE=$PROFILE
+ elif [ $# = 2 ] ; then
+ grep .\*\) /etc/vservers/$1.conf
+ fi
+ fi
+fi
+
+
--- /dev/null
+#!/usr/bin/perl
+
+# Copyright (C) 2003 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+# based on vps by Krischan Jodies
+#
+# 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, 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+# Wrapper for ps. Adds security context number and name
+# to the PID column.
+#
+# (c) 2002 krischan.jodies@sernet.de
+# version 1.0
+
+# 1.1 Added error messages
+
+if ($ARGV[0] eq "--help") {
+ exec("ps @ARGV");
+ exit;
+}
+
+
+$lockdir = "/var/run/vservers";
+
+$pid_length = 5;
+get_server_names();
+$context=get_context("self");
+
+if ($context == -1) {
+ print "Can not find my security context. Is this a ctx kernel?\n";
+ exit;
+}
+if ($context != 1) {
+ exec("@SBINDIR@/chcontext --silent --ctx 1 $0 @ARGV");
+ print "Can not execute chcontext\n";
+ exit; # not reached
+}
+
+
+if (! open PS, "ps @ARGV|") {
+ print "Can not execute ps\n";
+ exit;
+}
+while (<PS>) {
+ chomp;
+ push @ps,$_;
+}
+
+$header = shift @ps;
+$header =~ /(.*) PID(.+)/;
+$left = $1;
+$right = $2;
+$left_length = length($left);
+print "${left} PID CONTEXT ${right}\n";
+foreach $line (@ps) {
+ $pid = substr $line,$left_length,$pid_length;
+ print substr $line,0,$left_length;
+ print "$pid";
+ $context = get_context($pid);
+ $context_name = getcontextname($context);
+ printf " %-3s %-10s",$context,$context_name;
+ print substr $line,$left_length + $pid_length;
+ print "\n";
+
+}
+
+exit;
+
+sub get_context
+{
+ my $pid = $_[0];
+ $pid =~ s/ //g;
+ open STATUS, "/proc/$pid/status";
+ while (<STATUS>)
+ {
+ chomp;
+ if (/s_context: (\d+)/) {
+ close STATUS;
+ return $1;
+ }
+ }
+ close STATUS;
+ return -1;
+}
+
+sub getcontextname {
+ if (exists $name{$_[0]}) {
+ return $name{$_[0]};
+ }
+ if ($_[0] == 1) {
+ return "ALL_PROCS";
+ }
+ elsif ($_[0] == 0) {
+ return "MAIN";
+ }
+ return "UNKNOWN";
+}
+
+
+sub get_server_names
+{
+ opendir LOCKDIR, "$lockdir";
+ while ($file=readdir(LOCKDIR)) {
+ if (-f "$lockdir/$file") {
+ open FILE, "$lockdir/$file";
+ $file =~ s/(.+)\.ctx/$1/;
+ while (<FILE>) {
+ if (/S_CONTEXT=(\d+)/) {
+ $name{$1} = $file;
+ }
+ }
+ }
+ }
+}
--- /dev/null
+#!/bin/sh
+
+# Copyright (C) 2003 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+# based on vpstree by Jacques Gelinas
+#
+# 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, 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+#Presents the processes running in all virtual servers
+: ${UTIL_VSERVER_VARS:=$(dirname $0)/util-vserver-vars}
+test -e "$UTIL_VSERVER_VARS" || {
+ echo "Can not find util-vserver installation; aborting..."
+ exit 1
+}
+. "$UTIL_VSERVER_VARS"
+
+exec $SBINDIR/chcontext --silent --ctx 1 pstree $*
+
+
--- /dev/null
+#!/bin/sh
+
+# Copyright (C) 2003 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+# based on vrpm by Jacques Gelinas
+#
+# 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, 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+# Wrapper to update/install package in many vservers at once
+
+: ${UTIL_VSERVER_VARS:=$(dirname $0)/util-vserver-vars}
+test -e "$UTIL_VSERVER_VARS" || {
+ echo "Can not find util-vserver installation; aborting..."
+ exit 1
+}
+. "$UTIL_VSERVER_VARS"
+
+usage(){
+ echo vrpm: Install/Updates packages in several vservers at once
+ echo vrpm vservers ... -- rpm options and packages
+ echo vrpm \[--unify\] ALL -- rpm options and packages
+ echo vrpm \[--unify\] server1 server2 -- -Uvh package.rpm
+ echo
+ echo vrpm is executed in the root server
+ echo "--unify run vunify on the vserver for the updated packages"
+}
+UNIFY=no
+if [ "$1" = "--unify" ] ; then
+ UNIFY=yes
+ shift
+fi
+if [ $# = 0 ] ; then
+ usage
+else
+ SERVERS=
+ while [ $# -gt 0 -a "$1" != "--" ]
+ do
+ if [ "$1" = "ALL" ] ; then
+ SERVERS=`cd $VROOTDIR && ls`
+ else
+ SERVERS="$SERVERS $1"
+ fi
+ shift
+ done
+ if [ "$1" != "--" ] ; then
+ usage
+ elif [ "$SERVERS" = "" ] ; then
+ echo no server specified
+ echo
+ usage
+ else
+ shift
+ for serv in $SERVERS
+ do
+ # We try to run the rpm command in the same security
+ # context than the vserver, if running.
+ # This way, process operations will be done in the proper
+ # context
+ # If the vserver is not running, chcontext will
+ # pick an unused one.
+ CTXOPT=""
+ CTXFILE=/var/run/vservers/$serv.ctx
+ if [ -f $CTXFILE ] ; then
+ source $CTXFILE
+ CTXOPT="--ctx $S_CONTEXT"
+ fi
+ #echo rpm --root $VROOTDIR/$serv $*
+ echo Updating server $serv
+ $SBINDIR/chcontext --silent $CTXOPT rpm --root $VROOTDIR/$serv $*
+ done
+ if [ "$UNIFY" = "yes" ] ; then
+ PACKAGES=
+ for pkg in $*
+ do
+ case $pkg in
+ -*)
+ # RPM options ?
+ ;;
+ --*)
+ # RPM options ?
+ ;;
+ *)
+ pkg=`rpm -qp $pkg --queryformat %{name}`
+ PACKAGES="$PACKAGES $pkg"
+ ;;
+ esac
+ done
+ echo Unification
+ $PKGLIBDIR/vunify --excldir /var/log $SERVERS -- $PACKAGES
+ fi
+ fi
+fi
+
+
--- /dev/null
+#!/bin/bash
+
+# Copyright (C) 2003 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+# based on vserver by Jacques Gelinas
+#
+# 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, 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+# This is a script to control a virtual server
+
+: ${UTIL_VSERVER_VARS:=$(dirname $0)/util-vserver-vars}
+test -e "$UTIL_VSERVER_VARS" || {
+ echo "Can not find util-vserver installation; aborting..."
+ exit 1
+}
+. "$UTIL_VSERVER_VARS"
+
+USR_SBIN=$SBINDIR
+USR_LIB_VSERVER=$PKGLIBDIR
+
+VSERVER_CMD=$USR_SBIN/vserver
+CHBIND_CMD=$USR_SBIN/chbind
+CHCONTEXT_CMD=$USR_SBIN/chcontext
+SAVE_S_CONTEXT_CMD=$USR_LIB_VSERVER/save_s_context
+CAPCHROOT_CMD=$USR_LIB_VSERVER/capchroot
+VSERVERKILLALL_CMD=$USR_LIB_VSERVER/vserverkillall
+DEFAULTPATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/X11R6/bin
+
+vserver_mknod(){
+ mknod $1 $2 $3 $4
+ chmod $5 $1
+}
+
+mountproc()
+{
+ mkdir -p $1/proc $1/dev/pts
+ if [ ! -d $1/proc/1 ] ; then
+ mount -t proc none $1/proc
+ mount -t devpts -o gid=5,mode=0620 none $1/dev/pts
+ fi
+}
+umountproc()
+{
+ umount $1/proc 2>/dev/null
+ umount $1/dev/pts 2>/dev/null
+}
+
+# Check that the vservers parent directory has permission 000
+# This is the key to avoid chroot escape
+testperm()
+{
+ return
+ PERM=`$USR_LIB_VSERVER/showperm $VROOTDIR/$1/..`
+ if [ "$PERM" != 000 ] ; then
+ echo
+ echo "**********************************************************"
+ echo $VROOTDIR/$1/.. has insecure permissions.
+ echo A vserver administrator may be able to visit the root server.
+ echo To fix this, do
+ echo " " chmod 000 $VROOTDIR/$1/..
+ echo do it anytime you want, even if vservers are running.
+ echo "**********************************************************"
+ echo
+ fi
+}
+# Set the IP alias needed by a vserver
+ifconfig_iproot()
+{
+ if [ "$NODEV" = "" -a "$IPROOT" != "" -a "$IPROOT" != "0.0.0.0" -a "$IPROOT" != "ALL" ] ;then
+ # A vserver may have more than one IP
+ # The first alias is dev:vserver
+ # and the other are dev:vserver1,2,3 and so on
+ # An IP may hold the device. The following is valid
+ # IPROOT="1.2.4.5 eth1:1.2.3.5"
+ # IPROOTDEV=eth0
+ # The first IP 1.2.3.4 will go on eth0 and the other on eth1
+ # VLAN devices are also supported (eth0.231 for vlan 231)
+ SUFFIX=
+ for oneip in $IPROOT
+ do
+ IPDEV=$IPROOTDEV
+ MASK=$IPROOTMASK
+ BCAST=$IPROOTBCAST
+ # Split the device and IP if available
+ case $oneip in
+ *:*)
+ eval `echo $oneip | tr : ' ' | (read dev ip; echo oneip=$ip; echo IPDEV=$dev)`
+ ;;
+ esac
+ # Split the IP and the netmask if available
+ case $oneip in
+ */*)
+ eval `echo $oneip | tr / ' ' | (read ip msk; echo oneip=$ip; echo MASK=$msk)`
+ eval `$USR_LIB_VSERVER/ifspec "" "$oneip" "$MASK" "$BCAST"`
+ ;;
+ esac
+ if [ "$IPDEV" != "" ] ; then
+ case $IPDEV in
+ *.*)
+ if [ ! -f /proc/net/vlan/$IPDEV ] ; then
+ /sbin/vconfig add `echo $IPDEV | tr . ' '`
+ # Put a dummy IP
+ /sbin/ifconfig $IPDEV 127.0.0.1
+ fi
+ ;;
+ esac
+ # Compute the default netmask, if missing
+ eval `$USR_LIB_VSERVER/ifspec $IPDEV "$oneip" "$MASK" "$BCAST"`
+ IPROOTMASK=$NETMASK
+ IPROOTBCAST=$BCAST
+ #echo /sbin/ifconfig $IPDEV:$1$SUFFIX $oneip netmask $IPROOTMASK broadcast $IPROOTBCAST
+ /sbin/ifconfig $IPDEV:$1$SUFFIX $oneip netmask $IPROOTMASK broadcast $IPROOTBCAST
+ fi
+ if [ "$SUFFIX" = "" ] ; then
+ SUFFIX=1
+ else
+ SUFFIX=`expr $SUFFIX + 1`
+ fi
+ done
+ fi
+ if [ "$IPROOTBCAST" = "" ] ; then
+ IPROOTBCAST=255.255.255.255
+ fi
+}
+ifconfig_iproot_off()
+{
+ if [ "$NODEV" = "" -a "$IPROOT" != "" -a "$IPROOT" != "0.0.0.0" -a "$IPROOT" != "ALL" -a "$IPROOTDEV" != "" ] ;then
+ SUFFIX=
+ for oneip in $IPROOT
+ do
+ IPDEV=$IPROOTDEV
+ # Split the device and IP if available
+ case $oneip in
+ *:*)
+ eval `echo $oneip | tr : ' ' | (read dev ip; echo IPDEV=$dev)`
+ ;;
+ esac
+ /sbin/ifconfig $IPDEV:$1$SUFFIX down 2>/dev/null
+ if [ "$SUFFIX" = "" ] ; then
+ SUFFIX=1
+ else
+ SUFFIX=`expr $SUFFIX + 1`
+ fi
+ done
+ fi
+}
+# Split an IPROOT definition, trash the devices and
+# compose a set of --ip option for chbind
+setipopt(){
+ RET=
+ IPS="$*"
+ if [ "$IPS" = "" ] ; then
+ IPS=0.0.0.0
+ fi
+ if [ "$1" = "ALL" ] ; then
+ IPS=`$USR_LIB_VSERVER/listdevip`
+ fi
+ for oneip in $IPS
+ do
+ # Split the device and IP if available
+ case $oneip in
+ *:*)
+ eval `echo $oneip | tr : ' ' | (read dev ip; echo oneip=$ip)`
+ ;;
+ esac
+ #case $oneip in
+ #*/*)
+ # eval `echo $oneip | tr / ' ' | (read ip msk; echo oneip=$ip)`
+ # ;;
+ #esac
+ echo --ip $oneip
+ done
+}
+
+# Extract the initial runlevel from the vserver inittab
+get_initdefault()
+{
+ INITDEFAULT=`grep :initdefault $VROOTDIR/$1/etc/inittab | sed 's/:/ /g' | ( read a level b; echo $level)`
+}
+
+# Read the vserver configuration file, reusing the PROFILE value
+# found in /var/run/vservers
+readlastconf()
+{
+ if [ -f /var/run/vservers/$1.ctx ] ; then
+ . /var/run/vservers/$1.ctx
+ if [ "$S_PROFILE" != "" ] ; then
+ export PROFILE=$S_PROFILE
+ fi
+ fi
+ export PROFILE
+ . /etc/vservers/$1.conf
+}
+usage()
+{
+ echo vserver [ options ] server-name command ...
+ echo
+ echo server-name is a directory in $VROOTDIR
+ echo
+ echo The commands are:
+ echo " build : Create a virtual server by copying the packages"
+ echo " of the root server"
+ echo " enter : Enter in the virtual server context and starts a shell"
+ echo " Same as \"vserver name exec /bin/sh\""
+ echo " exec : Exec a command in the virtual server context"
+ echo " suexec : Exec a command in the virtual server context uid"
+ echo " service : Control a service inside a vserver"
+ echo " vserver name service service-name start/stop/restart/status"
+ echo " start : Starts the various services in the vserver, runlevel 3"
+ echo " stop : Ends all services and kills the remaining processes"
+ echo " running : Tells if a virtual server is running"
+ echo " It returns proper exit code, so you can use it as a test"
+ echo " status : Tells some information about a vserver"
+ echo " chkconfig : It turns a server on or off in a vserver"
+ echo
+ echo "--nodev : Do not configure the IP aliases of the vserver"
+ echo " Useful to enter a vserver without enabling its network"
+ echo " and avoiding conflicts with another copy of this vserver"
+ echo " running elsewhere"
+ echo "--silent : No informative messages about vserver context and IP numbers"
+ echo " Useful when you want to redirect the output"
+}
+
+calculateCaps()
+{
+ local f
+ for f in "$@"; do
+ case $f in
+ !CAP_SYS_CHROOT)
+ CHROOTOPT=--nochroot
+ ;;
+ *)
+ CAPS="$CAPS --cap $f"
+ ;;
+ esac
+ done
+}
+
+SILENT=
+NODEV=
+while true
+do
+ if [ "$1" = "--silent" ] ; then
+ SILENT=--silent
+ shift
+ elif [ "$1" = "--nodev" ] ; then
+ NODEV=--nodev
+ shift
+ else
+ break
+ fi
+done
+# Setup the default ulimit for a vserver
+setdefulimit(){
+ # File handle are limited to half of the current system limit
+ # Virtual memory is limited to the ram size
+ NFILE=`cat /proc/sys/fs/file-max`
+ NFILE=`expr $NFILE / 2`
+ VMEM=`cat /proc/meminfo | grep MemTotal | (read a b c; echo $b)`
+ # Disabled for now, we need a different to set the security
+ # context limit than fiddling with ulimit
+ #ulimit -H -n $NFILE -v $VMEM
+}
+if [ $# -lt 2 ] ; then
+ usage
+elif [ "$2" = "build" ] ; then
+ # Either the directory does not exist or is empty
+ NBSUB=`ls $VROOTDIR/$1 2>/dev/null | grep -v lost+found | wc -l`
+ NBSUB=`expr $NBSUB`
+ if [ "$NBSUB" != 0 ] ; then
+ echo Virtual server $VROOTDIR/$1 already exist
+ else
+ if [ ! -d $VROOTDIR ] ; then
+ mkdir $VROOTDIR || exit 1
+ chmod 000 $VROOTDIR
+ chattr +t $VROOTDIR
+ echo Directory $VROOTDIR was created with permissions 000
+ fi
+ mkdir -p $VROOTDIR/$1 || exit 1
+ chattr -t $VROOTDIR/$1
+ chmod 755 $VROOTDIR/$1
+ if test "$UTIL_VSERVER_AVOID_COPY"; then
+ mkdir -p $VROOTDIR/$1/{etc/rc.d/init.d,sbin,var/run,var/log}
+ else
+ cp -ax /sbin /bin /etc /usr /var /lib $VROOTDIR/$1/. || exit 1
+ fi
+ cd $VROOTDIR/$1 || exit 1
+ rm -fr lib/modules/*
+ rm -f var/spool/mail/*
+ rm -f `find var/run -type f`
+ rm -f `find var/log -type f`
+ touch var/log/wtmp
+ rm -f var/lock/subsys/*
+ rm -f etc/cron.d/kmod
+ mkdir proc tmp home root boot
+ test -f /root/.bashrc && cp -a /root/.bashrc root/.
+ test -f /root/.bash_profile && cp -a /root/.bash_profile root/.
+ chmod 1777 tmp
+ chmod 750 root
+ # Create a minimal dev so the virtual server can't grab
+ # more privileges
+ mkdir dev dev/pts
+ vserver_mknod dev/null c 1 3 666
+ vserver_mknod dev/zero c 1 5 666
+ vserver_mknod dev/full c 1 7 666
+ vserver_mknod dev/random c 1 8 644
+ vserver_mknod dev/urandom c 1 9 644
+ vserver_mknod dev/tty c 5 0 666
+ vserver_mknod dev/ptmx c 5 2 666
+ touch dev/hdv1
+ # Create a dummy /etc/fstab and /etc/mtab to please
+ # df and linuxconf. We use hdv1, which does not exist
+ # to remind the admin that it is not the real drive
+ echo /dev/hdv1 / ext2 defaults 1 1 >etc/fstab
+ echo /dev/hdv1 / ext2 rw 0 0 >etc/mtab
+ # Install the vreboot utility
+ cp -a $USR_LIB_VSERVER/vreboot sbin/.
+ ln -sf vreboot sbin/vhalt
+
+ echo Directory $VROOTDIR/$1 has been populated
+ if [ ! -d /etc/vservers ] ; then
+ mkdir /etc/vservers
+ chmod 600 /etc/vservers
+ echo Directory /etc/vservers has been created
+ fi
+ if [ ! -f /etc/vservers/$1.conf ] ; then
+ CONF=/etc/vservers/$1.conf
+ cat >$CONF <<-EOF
+if [ "$PROFILE" = "" ] ; then
+ PROFILE=prod
+fi
+# Select the IP number assigned to the virtual server
+# This IP must be one IP of the server, either an interface
+# or an IP alias
+# A vserver may have more than one IP. Separate them with spaces.
+# do not forget double quotes.
+# Some examples:
+# IPROOT="1.2.3.4 2.3.4.5"
+# IPROOT="eth0:1.2.3.4 eth1:2.3.4.5"
+# If the device is not specified, IPROOTDEV is used
+case \$PROFILE in
+prod)
+ IPROOT=1.2.3.4
+ # The netmask and broadcast are computed by default from IPROOTDEV
+ #IPROOTMASK=
+ #IPROOTBCAST=
+ # You can define on which device the IP alias will be done
+ # The IP alias will be set when the server is started and unset
+ # when the server is stopped
+ #IPROOTDEV=eth0
+ # You can set a different host name for the vserver
+ # If empty, the host name of the main server is used
+ S_HOSTNAME=
+ ;;
+backup)
+ IPROOT=1.2.3.4
+ #IPROOTMASK=
+ #IPROOTBCAST=
+ #IPROOTDEV=eth0
+ S_HOSTNAME=
+ ;;
+esac
+# Uncomment the onboot line if you want to enable this
+# virtual server at boot time
+#ONBOOT=yes
+# You can set a different NIS domain for the vserver
+# If empty, the current on is kept
+# Set it to "none" to have no NIS domain set
+S_DOMAINNAME=
+# You can set the priority level (nice) of all process in the vserver
+# Even root won't be able to raise it
+S_NICE=
+# You can set various flags for the new security context
+# lock: Prevent the vserver from setting new security context
+# sched: Merge scheduler priority of all processes in the vserver
+# so that it acts a like a single one.
+# nproc: Limit the number of processes in the vserver according to ulimit
+# (instead of a per user limit, this becomes a per vserver limit)
+# private: No other process can join this security context. Even root
+# Do not forget the quotes around the flags
+S_FLAGS="lock nproc"
+# You can set various ulimit flags and they will be inherited by the
+# vserver. You enter here various command line argument of ulimit
+# ULIMIT="-HS -u 200"
+# The example above, combined with the nproc S_FLAGS will limit the
+# vserver to a maximum of 200 processes
+ULIMIT="-HS -u 1000"
+# You can set various capabilities. By default, the vserver are run
+# with a limited set, so you can let root run in a vserver and not
+# worry about it. He can't take over the machine. In some cases
+# you can to give a little more capabilities (such as CAP_NET_RAW)
+# S_CAPS="CAP_NET_RAW"
+S_CAPS=""
+# Select an unused context (this is optional)
+# The default is to allocate a free context on the fly
+# In general you don't need to force a context
+#S_CONTEXT=
+ EOF
+ echo $CONF has been created. Look at it\!
+ fi
+ # Turn off some service useless on a vserver
+ # vserver_turnoff apmd network autofs dhcpd gpm ipchains iptables \
+ # irda isdn keytable kudzu linuxconf-setup netfs nfs nfslock \
+ # pcmcia portmap pppoe random rawdevices rhnsd rstatd ruserd \
+ # rwalld rwhod sendmail smb snmpd v_httpd h_xinetd v_sshd vservers \
+ # xfs ypbind xinetd
+ (
+ cd etc/init.d 2>/dev/null || cd etc/rc.d/init.d
+ for serv in *
+ do
+ case $serv in
+ *.bak|*~|functions|killall|halt|single)
+ ;;
+ *)
+ #$USR_LIB_VSERVER/capchroot $VROOTDIR/$1 /sbin/chkconfig --level 2345 $serv off
+ $0 --silent $1 chkconfig --level 2345 $serv off
+ ;;
+ esac
+ done
+ )
+ rm -f etc/rc.d/rc6.d/S*reboot
+ fi
+elif [ ! -f /etc/vservers/$1.conf ] ; then
+ echo No configuration for this vserver: /etc/vservers/$1.conf
+ exit 1
+elif [ ! -d $VROOTDIR/$1/. ] ; then
+ echo No directory for this vserver: $VROOTDIR/$1
+ exit 1
+elif [ "$2" = "start" ] ; then
+ echo Starting the virtual server $1
+ testperm $1
+ if ! $VSERVER_CMD $1 running
+ then
+ test -x /etc/vservers/$1.sh && /etc/vservers/$1.sh pre-start $1
+ IPROOT=
+ IPROOTMASK=
+ IPROOTBCAST=
+ IPROOTDEV=
+ S_NICE=
+ S_FLAGS=
+ . /etc/vservers/$1.conf
+ export PROFILE
+ ifconfig_iproot $1
+ cd $VROOTDIR/$1 || exit 1
+
+ if [ "$PROFILE" != "" ] ; then
+ echo export PROFILE=$PROFILE >etc/PROFILE
+ fi
+
+ rm -f `find var/run -type f`
+ touch var/run/utmp
+ chgrp ${UTMP_GROUP:-utmp} var/run/utmp
+ chmod 0664 var/run/utmp
+ rm -f var/lock/subsys/*
+ mountproc $VROOTDIR/$1
+ CTXOPT=
+ HOSTOPT=
+ DOMAINOPT=
+ NICECMD=
+ FLAGS=
+ CAPS=
+ get_initdefault $1
+ STARTCMD="/etc/rc.d/rc $INITDEFAULT"
+ if [ -x $VROOTDIR/$1/etc/init.d/rc ] ; then
+ STARTCMD="/etc/init.d/rc $INITDEFAULT"
+ elif [ -x $VROOTDIR/$1/usr/bin/emerge ] ; then
+ STARTCMD="/sbin/rc default"
+ elif [ -x $VROOTDIR/$1/etc/rc.d/rc.M ] ; then
+ STARTCMD="/etc/rc.d/rc.M"
+ fi
+
+ DISCONNECT=
+ FAKEINIT=
+ for f in $S_FLAGS dummy
+ do
+ case $f in
+ dummy)
+ ;;
+
+ minit)
+ FAKEINIT=true
+ FLAGS="$FLAGS --flag fakeinit"
+ STARTCMD=/sbin/minit-start
+ DISCONNECT=--disconnect
+ ;;
+
+ fakeinit)
+ FAKEINIT=true
+ FLAGS="$FLAGS --flag $f"
+ STARTCMD=/sbin/init
+ DISCONNECT=--disconnect
+ ;;
+ *)
+ FLAGS="$FLAGS --flag $f"
+ ;;
+ esac
+ done
+ if [ -n "$S_START" ] ; then
+ STARTCMD=$S_START
+ fi
+ if [ "$FAKEINIT" = "" ] ; then
+ $USR_LIB_VSERVER/fakerunlevel $INITDEFAULT var/run/utmp
+ fi
+
+ calculateCaps $S_CAPS
+
+ if [ "$S_CONTEXT" != "" ] ; then
+ CTXOPT="--ctx $S_CONTEXT"
+ fi
+ if [ "$S_HOSTNAME" != "" ] ; then
+ HOSTOPT="--hostname $S_HOSTNAME"
+ export HOSTNAME=$S_HOSTNAME
+ fi
+ if [ "$S_DOMAINNAME" != "" ] ; then
+ DOMAINOPT="--domainname $S_DOMAINNAME"
+ fi
+ if [ "$S_NICE" != "" ] ; then
+ NICECMD="nice -$S_NICE"
+ fi
+ mkdir -p /var/run/vservers
+ chmod 700 /var/run/vservers
+ setdefulimit
+ if [ "$ULIMIT" != "" ] ; then
+ ulimit $ULIMIT
+ fi
+ #echo FLAGS=$FLAGS
+ #echo CAPS=$CAPS
+ # We switch to $VROOTDIR/$1 now, because after the
+ # security context switch $VROOTDIR directory becomes a dead zone.
+ cd $VROOTDIR/$1
+ IPOPT=`setipopt $IPROOT`
+ export PATH=$DEFAULTPATH
+ $NICECMD $CHBIND_CMD $SILENT $IPOPT --bcast $IPROOTBCAST \
+ $CHCONTEXT_CMD $SILENT $DISCONNECT $CAPS $FLAGS $CTXOPT $HOSTOPT $DOMAINOPT --secure \
+ $SAVE_S_CONTEXT_CMD /var/run/vservers/$1.ctx \
+ $CAPCHROOT_CMD $CHROOTOPT . $STARTCMD
+ sleep 2
+ test -x /etc/vservers/$1.sh && /etc/vservers/$1.sh post-start $1
+ fi
+elif [ "$2" = "running" ] ; then
+ if [ ! -f /var/run/vservers/$1.ctx ] ; then
+ echo Server $1 is not running
+ exit 1
+ else
+ . /var/run/vservers/$1.ctx
+ NB=$($USR_SBIN/vps ax | awk '{print $2}' | grep \^$S_CONTEXT\$ | wc -l)
+ #NB=`$CHCONTEXT_CMD --silent --ctx $S_CONTEXT ps ax | wc -l`
+ #NB=`eval expr $NB + 0`
+ if [ "$NB" -gt 0 ] ; then
+ echo Server $1 is running
+ exit 0
+ else
+ echo Server $1 is not running
+ exit 1
+ fi
+ fi
+elif [ "$2" = "status" ] ; then
+ if $0 $1 running
+ then
+ . /var/run/vservers/$1.ctx
+ NB=$($USR_SBIN/vps ax | awk '{print $2}' | grep \^$S_CONTEXT\$ | wc -l)
+ echo $NB processes running
+ echo Vserver uptime: `$USR_LIB_VSERVER/filetime /var/run/vservers/$1.ctx`
+ fi
+elif [ "$2" = "stop" ] ; then
+ echo Stopping the virtual server $1
+ IPROOT=
+ IPROOTMASK=
+ IPROOTBCAST=
+ IPROOTDEV=
+ CAPS=
+ IS_MINIT=
+ readlastconf $1
+ if $VSERVER_CMD $1 running
+ then
+ test -x /etc/vservers/$1.sh && /etc/vservers/$1.sh pre-stop $1
+ ifconfig_iproot $1
+ cd $VROOTDIR/$1
+ mountproc $VROOTDIR/$1
+ # The fakeinit flag tell us how to turn off the server
+ get_initdefault $1
+ export PREVLEVEL=$INITDEFAULT
+ STOPCMD="/etc/rc.d/rc 6"
+ if [ -x $VROOTDIR/$1/etc/init.d/rc ] ; then
+ STOPCMD="/etc/init.d/rc 6"
+ elif [ -x $VROOTDIR/$1/usr/bin/emerge ] ; then
+ STOPCMD="/sbin/rc shutdown"
+ elif [ -x $VROOTDIR/$1/etc/rc.d/rc.6 ] ; then
+ STOPCMD="/etc/rc.d/rc.6"
+ fi
+
+ for f in $S_FLAGS dummy
+ do
+ case $f in
+ minit)
+ IS_MINIT=1
+ FLAGS="$FLAGS --flag fakeinit"
+ STOPCMD="/sbin/minit-stop"
+ ;;
+
+ fakeinit)
+ FLAGS="$FLAGS --flag $f"
+ STOPCMD="/sbin/init 6"
+ ;;
+ *)
+ ;;
+ esac
+ done
+
+ if [ -n "$S_STOP" ] ; then
+ STOPCMD=$S_STOP
+ fi
+
+ calculateCaps $S_CAPS
+
+ cd $VROOTDIR/$1
+ IPOPT=`setipopt $IPROOT`
+ export PATH=$DEFAULTPATH
+ $CHBIND_CMD $SILENT $IPOPT --bcast $IPROOTBCAST \
+ $CHCONTEXT_CMD $SILENT $CAPS --secure --ctx $S_CONTEXT \
+ $CAPCHROOT_CMD . $STOPCMD
+
+ if test "$IS_MINIT"; then
+ echo "Waiting for minit finish-signal"
+ dd if=var/run/minit-stop of=/dev/zero bs=1 count=1 &>/dev/null
+ sleep 1
+ else
+ echo sleeping 5 seconds
+ sleep 5
+ fi
+
+ echo Killing all processes
+ $CHBIND_CMD --silent $IPOPT --bcast $IPROOTBCAST \
+ $CHCONTEXT_CMD $CAPS --secure --silent --ctx $S_CONTEXT \
+ $VSERVERKILLALL_CMD
+ fi
+ # We umount anyway, because "enter" establish the mount
+ # but when you exit, the server is considered not running
+ umountproc $VROOTDIR/$1
+ cd /
+ test -x /etc/vservers/$1.sh && /etc/vservers/$1.sh post-stop $1
+ ifconfig_iproot_off $1
+elif [ "$2" = "restart" ] ; then
+ if $0 $1 running
+ then
+ $0 $1 stop
+ $0 $1 start
+ fi
+elif [ "$2" = "suexec" ] ; then
+ if [ -z "$3" ] ; then
+ echo "Missing user!" >&2
+ echo "vserver vserver-name suexec user command [ args ... ]" >&2
+ exit 1
+ elif [ -z "$4" ] ; then
+ echo "Missing command and arguments!" >&2
+ echo "vserver vserver-name suexec user command [ args ... ]" >&2
+ exit 1
+ else
+ IPROOT=
+ IPROOTMASK=
+ IPROOTBCAST=
+ IPROOTDEV=
+ readlastconf $1
+ . /etc/vservers/$1.conf
+ cd $VROOTDIR/$1
+ ifconfig_iproot $1
+ mountproc $VROOTDIR/$1
+ PS1="[\u@vserver:$1 \W]"
+ export PS1
+ VSERVER=$1
+ USERID=$3
+ shift; shift; shift
+ CAPS=
+ for f in $S_CAPS dummy
+ do
+ case $f in
+ dummy)
+ ;;
+ !CAP_SYS_CHROOT)
+ CHROOTOPT=--nochroot
+ ;;
+ *)
+ CAPS="$CAPS --cap $f"
+ ;;
+ esac
+ done
+ FLAGS=
+ for f in $S_FLAGS dummy
+ do
+ case $f in
+ minit)
+ FLAGS="$FLAGS --flag fakeinit"
+ ;;
+
+ dummy)
+ ;;
+ *)
+ FLAGS="$FLAGS --flag $f"
+ ;;
+ esac
+ done
+ setdefulimit
+ if [ "$ULIMIT" != "" ] ; then
+ ulimit $ULIMIT
+ fi
+ if $0 $VSERVER running >/dev/null
+ then
+ . /var/run/vservers/$VSERVER.ctx
+ cd $VROOTDIR/$VSERVER
+ IPOPT=`setipopt $IPROOT`
+ export PATH=$DEFAULTPATH
+ exec $CHBIND_CMD $SILENT $IPOPT --bcast $IPROOTBCAST \
+ $CHCONTEXT_CMD $SILENT $FLAGS $CAPS --secure --ctx $S_CONTEXT \
+ $CAPCHROOT_CMD --suid $USERID . "$@"
+ else
+ test -x /etc/vservers/$1.sh && /etc/vservers/$1.sh pre-start $1
+ CTXOPT=
+ HOSTOPT=
+ DOMAINOPT=
+ if [ "$S_CONTEXT" != "" ] ; then
+ CTXOPT="--ctx $S_CONTEXT"
+ fi
+ if [ "$S_HOSTNAME" != "" ] ; then
+ HOSTOPT="--hostname $S_HOSTNAME"
+ export HOSTNAME=$S_HOSTNAME
+ fi
+ if [ "$S_DOMAINNAME" != "" ] ; then
+ DOMAINOPT="--domainname $S_DOMAINNAME"
+ fi
+ mkdir -p /var/run/vservers
+ cd $VROOTDIR/$VSERVER
+ IPOPT=`setipopt $IPROOT`
+ export PATH=$DEFAULTPATH
+ exec $CHBIND_CMD $SILENT $IPOPT --bcast $IPROOTBCAST \
+ $CHCONTEXT_CMD $SILENT $FLAGS $CAPS --secure $CTXOPT $HOSTOPT $DOMAINOPT \
+ $SAVE_S_CONTEXT_CMD /var/run/vservers/$VSERVER.ctx \
+ $CAPCHROOT_CMD --suid $USERID $CHROOTOPT . "$@"
+ fi
+ fi
+elif [ "$2" = "exec" ] ; then
+ VSERV=$1
+ shift; shift
+ exec $0 $NODEV $SILENT $VSERV suexec root "$@"
+elif [ "$2" = "enter" ] ; then
+ testperm $1
+ exec $0 $NODEV $SILENT $1 exec /bin/bash -login
+elif [ "$2" = "service" ] ; then
+ VSERVER=$1
+ shift
+ shift
+ exec $0 $NODEV $SILENT $VSERVER exec /sbin/service "$@"
+elif [ "$2" = "chkconfig" ] ; then
+ VSERVER=$1
+ LEVELS=()
+ shift
+ shift
+ if [ "$1" = "--level" ] ; then
+ LEVELS=( --level "$2" )
+ shift 2
+ fi
+ if [ $# != 2 -a ! -x $VROOTDIR/$VSERVER/sbin/chkconfig ] ; then
+ echo Invalid argument, expected vserver name chkconfig [ --level nnn ] service on\|off
+ elif [ -x $VROOTDIR/$VSERVER/sbin/chkconfig ] ; then
+ exec $0 --silent $VSERVER exec /sbin/chkconfig "${LEVELS[@]}" "$@"
+ elif [ -x $VROOTDIR/$VSERVER/usr/sbin/update-rc.d ] ; then
+ if [ "$2" = "on" -o "$2" = "start" ] ; then
+ $0 --silent $VSERVER exec /usr/sbin/update-rc.d -f $1 remove >/dev/null
+ exec $0 --silent $VSERVER exec /usr/sbin/update-rc.d $1 start 80 2 3 4 5 . stop 20 0 1 6 . >/dev/null
+ elif [ "$2" = "off" -o "$2" = "stop" ] ; then
+ $0 --silent $VSERVER exec /usr/sbin/update-rc.d -f $1 remove >/dev/null
+ exec $0 --silent $VSERVER exec /usr/sbin/update-rc.d $1 stop 20 0 1 2 3 4 5 6 . >/dev/null
+ else
+ echo vserver chkconfig: Expecting on or off
+ fi
+ else
+ echo chkconfig functionality is not available on this
+ echo vserver distribution.
+ echo Looked for /sbin/chkconfig and /usr/sbin/update-rc.d
+ fi
+else
+ echo Command unknown $2
+ echo
+ usage
+fi
+
--- /dev/null
+#!/bin/sh
+
+# Copyright (C) 2003 Mark Lawrence <nomad@null.net>,
+# 2203,2004 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+#
+# 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, 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+# Copy/Sync a virtual host from one machine to another
+#
+# History:
+#
+# 2003-04-04: Version 0.4 - Mark lawrence
+# - Set "ONBOOT=no" in the destination .conf file when --startstop
+# is not used, in case the destination roothost reboots. We don't
+# want two copies of a vserver running at the same time.
+#
+# 2003-03-04: Version 0.3 - Mark lawrence
+# - Changed all checks for [ "" != "$var" ] into [ -n|-z "$var" ]. "" doesn't
+# seem to work for bash on the Sparc architecture.
+# - Changed $ssh variable into $shcmd.
+#
+# 2003-02-23: Version 0.2 - Mark Lawrence
+# - Set ONBOOT to "no" in the original .conf file when the "-s" flag is
+# used so that if/when you reboot the source roothost you don't have the
+# same vserver and IP address running on two machines.
+
+: ${UTIL_VSERVER_VARS:=$(dirname $0)/util-vserver-vars}
+test -e "$UTIL_VSERVER_VARS" || {
+ echo "Can not find util-vserver installation; aborting..."
+ exit 1
+}
+. "$UTIL_VSERVER_VARS"
+
+VERSION="0.4"
+umask 022
+me=${0##*/}
+
+mktemp="$(which mktemp 2>/dev/null) /tmp/vc.XXXXXX" || \
+mktemp=$(which tempfile 2>/dev/null) || {
+ echo $"Can not find mktemp or tempfile" >&2
+ exit 1
+}
+
+### Helper functions ###
+
+# Save stdin and stdout for later use
+exec 3>&1
+exec 4>&2
+
+noninteractive () {
+ exec &> /dev/null
+}
+
+interactive () {
+ exec 1>&3
+ exec 2>&4
+}
+
+info () {
+ ! $quiet && echo "I: $me: $1" >&3
+}
+
+warn () {
+ ! $quiet && echo "W: $me: $1" >&4
+}
+
+error () {
+ ! $quiet && echo "E: $me: $2" >&4
+ exit $1
+}
+
+
+### Usage/Info functions ###
+
+usage () {
+ cat <<EOF 1>&2
+Usage: $me [-hVvqidrRs] vserver newname
+ $me [-hVvqidrRs] vserver host:[newname]
+EOF
+}
+
+full_usage () {
+ usage
+ cat <<EOF
+
+$me uses rsync to make a copy of a vserver. If the destination
+name contains a host specification the vserver will be synchronised to
+the remote destination over ssh/rsh.
+
+This can be used on a running vserver to make a warm backup. With the -s
+flag a vserver can even be operationally moved to different hardware within
+seconds.
+
+The -i and -d flags can be used to minimally reconfigure the destination
+vserver (rewrites /etc/vservers/newname.conf and $VROOTDIR/newname/etc/hosts)
+
+Options:
+ -h, --help this help
+ -V, --version copyright and version information
+ -v, --verbose show all output
+ -q, --quiet direct all output to /dev/null (no password
+ prompt for logins on remote hosts!)
+ -d, --domain [string] new dns domain (must be used with -i)
+ -i, --ip [addr] new IP address (must be used with -d)
+ -r, --vsroot location of "/vserver/" directory
+ -R, --rsh use rsh (instead of default ssh) for
+ network transport
+ -s, --stopstart stop the local vserver before copying and start
+ it on the destination host afterwards
+
+EOF
+}
+
+full_version () {
+ cat <<EOF
+$me version $VERSION
+Copyright (c) 2002 Mark Lawrence <nomad@null.net>
+
+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.
+
+EOF
+}
+
+
+### Default values and Command line options ###
+
+stopstart=(false)
+verbose=(false)
+quiet=(false)
+shcmd="ssh"
+rsflag="-e"
+rsh=(false)
+colon=":"
+domain=""
+ip=""
+vsroot=$VROOTDIR
+
+if [ $# -eq 0 ]; then # Script invoked with no command-line args?
+ usage
+ exit 1
+fi
+
+temp=$(getopt -o hVvqd:i:rRs --long help,version,verbose,quiet,domain:,ip:,vsroot,rsh,stopstart, -n $me -- "$@")
+
+if [ $? -ne 0 ]; then
+ echo " (See -h for help)"
+ exit 1
+fi
+
+# Note the quotes around `$temp': they are essential!
+eval set -- "$temp"
+
+while true; do
+ case "$1" in
+ -h|--help) full_usage
+ exit 1
+ ;;
+ -V|--version) full_version
+ exit 1
+ ;;
+ -v|--verbose) verbose=(true)
+ shift
+ ;;
+ -q|--quiet) quiet=(true)
+ shift
+ ;;
+ -d|--domain) domain="$2"
+ shift 2
+ ;;
+ -i|--ip) ip="$2"
+ shift 2
+ ;;
+ -r|--vsroot) vsroot="$2"
+ shift 2
+ ;;
+ -R|--rsh) rsh=(true)
+ shift
+ ;;
+ -s|--stopstart) stopstart=(true)
+ shift
+ ;;
+ --) shift
+ break
+ ;;
+ *) echo "Internal error!"
+ exit 1
+ ;;
+ esac
+done
+
+if [ $# -ne 2 ]; then
+ usage
+ exit 1
+fi
+
+
+### ###
+
+# By default we are reasonably quiet (ouput only via info, warn & error)
+if $verbose; then
+ interactive
+else
+ noninteractive
+fi
+
+now=$(date)
+info "called on $(hostname) at $now"
+
+
+vserver=$1
+vconf=/etc/vservers/$vserver.conf
+vroot=$vsroot/$vserver
+
+if $rsh; then
+ shcmd="rsh"
+fi
+
+if (echo $2 | grep '^[a-z][a-z0-9]\+$'); then
+ dhost=""
+ newname=$2
+ shcmd=""
+ rsflag=""
+ colon=""
+ if $rsh; then
+ warn "rsh is set but not used for a local copy"
+ fi
+elif (echo $2 | grep '^[a-z].*[a-z0-9]:$'); then
+ dhost=${2/:/}
+ newname=$vserver
+elif (echo $2 | grep '^[a-z].*[a-z0-9]:[a-z].*[a-z0-9]$'); then
+ dhost=${2/:*/}
+ newname=${2/*:/}
+else
+ error 1 "Second argument must be of the form \"[host:]name\" or \"host:\""
+fi
+
+target=$vsroot/$newname
+targetconf=/etc/vservers/$newname.conf
+
+
+### Perform some sanity checks ###
+
+if [ ! -d $vroot ]; then
+ error 1 "Directory \"$vroot\" does not exist"
+fi
+
+if [ ! -e $vconf ]; then
+ error 1 "Vserver file \"$vconf\" does not exist"
+fi
+
+if [ -z "$dhost" ] && [ "$vserver" == "$newname" ]; then
+ error 1 "Source and destination names cannot be the same on the localhost"
+fi
+
+if [ -n "$dhost" ] && ! (host $dhost | grep 'has address'); then
+ warn "$dhost does not resolve into an IP address"
+fi
+
+if [ \( -n "$ip" -a -z "$domain" \) -o \
+ \( -z "$ip" -a -n "$domain" \) ]
+then
+ error 1 "Both IP address and domain must be specified together"
+fi
+
+if [ -n "$ip" ] && \
+! (echo $ip | grep '^[0-9]\{1,3\}\(\.[0-9]\{1,3\}\)\{3\}$' ); then
+ error 1 "\"$ip\" is not a valid IP address"
+fi
+
+# This works both locally and remote
+if ($shcmd $dhost $SBINDIR/vserver $newname running | grep 'is running'); then
+ warn "destination vserver \"$newname\" is running"
+ error 1 "Cannot copy over a running vserver"
+fi
+
+
+### Do the copy ###
+
+info "Attempting to copy $vserver to $dhost$colon$newname"
+
+if $stopstart; then
+ info "Stopping virtual server \"$vserver\" on localhost"
+ $SBINDIR/vserver $vserver stop
+fi
+
+test "$dhost" || {
+ mkdir -p -m755 $target
+ chattr -t $target
+}
+
+info "Syncing directories"
+# trailing slashes very important in the rsync!
+if ! rsync -avxz $rsflag $shcmd $vroot/ $dhost$colon$target/; then
+ error 1 "rsync failed"
+fi
+
+if [ -n "$ip" -a -n "$domain" ]; then
+ # Insert the new IPROOT/S_HOSTNAME values into the config file
+ info "Modifying $targetconf"
+ tmpf=$($mktemp)
+ if (sed -e "s/^S_HOSTNAME=.*/S_HOSTNAME=\"$newname\"/" \
+ -e "s/^IPROOT=.*/IPROOT=\"$ip\"/" $vconf > $tmpf)
+ then
+ if ! rsync -v $rsflag $shcmd $tmpf $dhost$colon$targetconf; then
+ error $? "vserver config file copy/change failed"
+ fi
+
+ else
+ warn "Unable to reconfigure virtual server config file"
+ fi
+
+ # create a new /etc/hostname
+ info "Creating hostname file"
+ echo $newname > $tmpf
+ if ! rsync -v $rsflag $shcmd $tmpf $dhost$colon$target/etc/hostname; then
+ error 1 "vserver /etc/hostname copy failed"
+ fi
+
+ info "Creating /etc/hosts"
+ cat << EOF > $tmpf
+# /etc/hosts (automatically generated by $me)
+
+127.0.0.1 localhost
+$ip $newname.$domain $newname
+
+# The following lines are desirable for IPv6 capable hosts
+
+::1 ip6-localhost ip6-loopback
+fe00::0 ip6-localnet
+ff00::0 ip6-mcastprefix
+ff02::1 ip6-allnodes
+ff02::2 ip6-allrouters
+ff02::3 ip6-allhosts
+EOF
+
+ # copy /etc/hosts
+ if ! rsync -v $rsflag $shcmd $tmpf $dhost$colon$target/etc/hosts; then
+ error 1 "vserver /etc/hosts copy failed"
+ fi
+ rm -f $tmpf
+
+else
+ if ! $stopstart; then
+ # Make sure that this vserver doesn't start on the
+ # destination host if it reboots
+ tmpf=$($mktemp)
+ sed -e 's/^ONBOOT=.*/ONBOOT=no/' $vconf > $tmpf
+ vconf=$tmpf
+ fi
+
+ # copy newname.conf unchanged
+ info "Copying $targetconf"
+ if ! rsync -v $rsflag $shcmd $vconf $dhost$colon$targetconf; then
+ error 1 "vserver config file copy/change failed"
+ fi
+
+ rm -f $tmpf
+fi
+
+
+if $stopstart; then
+ info "Starting virtual server \"$vserver\" on $dhost"
+ $shcmd $dhost $SBINDIR/vserver $vserver start
+ if ($shcmd $dhost $SBINDIR/vserver $vserver running | \
+ grep 'not running'); then
+ error 1 "Virtual server \"$vserver\" failed to start on $dhost"
+ fi
+
+ # Make sure that we don't start the original on next boot
+ tmpf=$($mktemp)
+ sed -e 's/^ONBOOT=.*/ONBOOT=no/' $vconf > $tmpf
+ mv $tmpf $vconf
+fi
+
+exit 0
--- /dev/null
+#!/bin/sh
+
+# Copyright (C) 2003 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+# based on vserverkillall by Jacques Gelinas
+#
+# 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, 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+# This script kills all process it can finds
+# Only useful if you are using a security context.
+# It does nothing in context 0
+USR_LIB_VSERVER=$(dirname $0)
+CTX=`grep ^s_context /proc/self/status | sed s/s_context:// | (read a b; echo $a)`
+CTX=`eval expr $CTX + 0`
+if [ "$CTX" = 0 ] ; then
+ echo Running in security context 0, do nothing
+else
+ cd /proc
+ for SIG in -TERM -TERM -TERM -9
+ do
+ ONE=0
+ for dir in *
+ do
+ case $dir in
+ 1)
+ ;;
+ $$)
+ ;;
+ [1-9]*)
+ ONE=1
+ echo kill $SIG "`$USR_LIB_VSERVER/readlink /proc/$dir/exe`"[$dir]
+ kill $SIG $dir
+ ;;
+ *)
+ ;;
+ esac
+ done
+ if [ "$ONE" = 0 ] ; then
+ break
+ fi
+ sleep 1
+ done
+ # Kill the fakeinit process. It is shown as process one, but can't
+ # be killed this way
+ INITPID=`cat /proc/self/status | grep initpid: | (read a b; expr $b)`
+ if [ "$INITPID" != "0" ] ; then
+ echo kill init, pid $INITPID
+ kill -9 $INITPID
+ fi
+fi
+
+
--- /dev/null
+#!/bin/sh
+# Copyright (C) 2003 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+# based on vservers.grabinfo.sh by Jacques Gelinas
+#
+# 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, 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+# Produce some XML statistics about vservers
+
+: ${UTIL_VSERVER_VARS:=$(dirname $0)/util-vserver-vars}
+test -e "$UTIL_VSERVER_VARS" || {
+ echo "Can not find util-vserver installation; aborting..."
+ exit 1
+}
+. "$UTIL_VSERVER_VARS"
+
+cd $VROOTDIR
+for vserv in *
+do
+ if [ -f /etc/vservers/$vserv.conf ] ; then
+ . /etc/vservers/$vserv.conf
+ echo "<m:vserver name=\"$vserv\" onboot=\"$ONBOOT\" HOSTNAME=\"$S_HOSTNAME\">"
+ for ip in $IPROOT
+ do
+ case $ip in
+ *:*)
+ echo $ip | tr ':' ' ' | (read a b; echo " <m:ip num=\"$b\"/>")
+ ;;
+ *)
+ echo " <m:ip num=\"$ip\"/>"
+ ;;
+ esac
+ done
+ echo " <status>"
+ $SBINDIR/vserver $vserv status
+ echo " </status>"
+ echo "</m:vserver>"
+ fi
+done
+
--- /dev/null
+#!/bin/sh
+
+# Copyright (C) 2003 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+# based on vsyswrapper by Jacques Gelinas
+#
+# 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, 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+# Helper script for all the v_xxx scripts
+: ${UTIL_VSERVER_VARS:=$(dirname $0)/util-vserver-vars}
+test -e "$UTIL_VSERVER_VARS" || {
+ echo "Can not find util-vserver installation; aborting..."
+ exit 1
+}
+. "$UTIL_VSERVER_VARS"
+
+if [ $# = 0 ] ; then
+ echo vsysvwrapper service_name >&2
+else
+ SERVICE=$1
+ shift
+ IP=eth0
+ if [ -f /etc/vservices/$SERVICE.conf ] ; then
+ . /etc/vservices/$SERVICE.conf
+ fi
+ IPOPT=
+ for oneip in $IP
+ do
+ IPOPT="$IPOPT --ip $oneip"
+ done
+ echo exec $SBINDIR/chbind $IPOPT /etc/init.d/$SERVICE $*
+ exec $SBINDIR/chbind $IPOPT /etc/init.d/$SERVICE $*
+fi
+
+
--- /dev/null
+#!/bin/sh
+
+# Copyright (C) 2003 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+# based on vtop by Jacques Gelinas
+#
+# 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, 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+#Presents the processes running in all virtual servers
+: ${UTIL_VSERVER_VARS:=$(dirname $0)/util-vserver-vars}
+test -e "$UTIL_VSERVER_VARS" || {
+ echo "Can not find util-vserver installation; aborting..."
+ exit 1
+}
+. "$UTIL_VSERVER_VARS"
+
+exec $SBINDIR/chcontext --silent --ctx 1 top $*
--- /dev/null
+#!/bin/sh
+
+# Copyright (C) 2003 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+# based on vunify by Jacques Gelinas
+#
+# 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, 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+# This scripts is used to unify the disk space used by vservers
+# It takes various RPM packages and hard link them together so all
+# vservers are sharing the same exact copy of the files.
+# After doing so, it set them immutable, so the vserver can't change them
+
+# This has the following advantages:
+# -You save disk space. If you have 100 vservers, each using 500 megs
+# (common linux server installation), you can unify 90% of that
+# -Memory usage. Since the exact same binary are loaded, including
+# the same shared object, you save some memory and this can increase
+# performance, especially the memory cache usage.
+#
+# On the down side, you are loosing some flexibility. The vserver
+# administrators can't upgrade package as they see fit, since the
+# files are immutable. On the other end, just unifying glibc is probably
+# a win.
+: ${UTIL_VSERVER_VARS:=$(dirname $0)/util-vserver-vars}
+test -e "$UTIL_VSERVER_VARS" || {
+ echo "Can not find util-vserver installation; aborting..."
+ exit 1
+}
+. "$UTIL_VSERVER_VARS"
+
+if [ $# = 0 ] ; then
+ echo vunify [ --undo ] ref-vserver vservers -- packages
+else
+ undo=0
+ if [ "$1" == "--undo" ] ; then
+ undo=1
+ shift
+ fi
+ ref=$1
+ shift
+ servers=
+ while [ "$1" != "" -a "$1" != "--" ]
+ do
+ servers="$servers $1"
+ shift
+ done
+ if [ "$servers" = "" ] ; then
+ echo No vserver specified >&2
+ exit 1
+ elif [ "$1" != "--" ] ; then
+ echo Missing -- marker >&2
+ exit 1
+ else
+ shift
+ if [ $# = 0 ] ; then
+ echo No package specified >&2
+ exit 1
+ else
+ if [ ! -d $VROOTDIR/$ref/. ] ; then
+ echo No vserver $ref >&2
+ exit 1
+ else
+ #echo ref=$ref
+ #echo servers=$servers
+ #echo packages=$*
+ tmpfile=/var/run/vunifi.$$
+ rm -f $tmpfile
+ echo Extracting list of file to unify in $tmpfile
+ for pkg in $*
+ do
+ $VROOTDIR/$ref/bin/rpm --root $VROOTDIR/$ref -ql --dump $pkg | \
+ while read path size mtime md5 \
+ mode owner group isconfig isdoc rdev symlink
+ do
+ if [ "$isconfig" = 0 ] ; then
+ echo $path >>$tmpfile
+ fi
+ done
+ done
+ for serv in $servers
+ do
+ if [ "$undo" = 0 ] ; then
+ echo Unifying server $serv
+ cat $tmpfile | while read file
+ do
+ if [ ! -d $VROOTDIR/$ref/$file -a ! -L $VROOTDIR/$ref/$file ] ; then
+ ln -f $VROOTDIR/$ref/$file $VROOTDIR/$serv/$file
+ fi
+ done
+ cat $tmpfile | while read file
+ do
+ chattr +i $VROOTDIR/$ref/$file
+ done
+ else
+ echo Differencing server $serv
+ cat $tmpfile | while read file
+ do
+ chattr -i $VROOTDIR/$ref/$file
+ if [ ! -d $VROOTDIR/$ref/$file ] ; then
+ rm -f $VROOTDIR/$serv/$file
+ cp -a $VROOTDIR/$ref/$file $VROOTDIR/$serv/$file
+ fi
+ done
+ fi
+ done
+ rm -f $tmpfile
+ fi
+ fi
+ fi
+fi
+
--- /dev/null
+## $Id: Makefile-files,v 1.1.4.8 2004/02/09 23:18:59 ensc Exp $ -*- makefile -*-
+
+## Copyright (C) 2003 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+##
+## 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, 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+##
+
+src_HDRS = src/vutil.h src/vutil.p \
+ src/ext2fs.h
+
+src_pkglib_SCRPTS = src/setattr
+src_pkglib_PRGS = src/capchroot \
+ src/fakerunlevel \
+ src/filetime \
+ src/ifspec \
+ src/listdevip \
+ src/parserpmdump \
+ src/readlink \
+ src/showattr \
+ src/showperm \
+ src/vbuild \
+ src/vcheck \
+ src/vreboot \
+ src/vunify
+
+src_sbin_PRGS = src/chbind \
+ src/chcontext \
+ src/rebootmgr \
+ src/reducecap \
+ src/vlimit \
+ src/vdu \
+ src/vfiles \
+ src/vkill \
+ src/vserver-stat
+
+src_GENFILES = src/setattr
+
+src_capchroot_SOURCES = src/capchroot.c
+src_capchroot_LDADD = lib/libvserver.a
+
+src_chbind_SOURCES = src/chbind.c
+src_chbind_LDADD = lib/libvserver.a
+
+src_chcontext_SOURCES = src/chcontext.c
+src_chcontext_LDADD = lib/libvserver.a
+
+src_fakerunlevel_SOURCES = src/fakerunlevel.c
+src_filetime_SOURCES = src/filetime.c
+src_ifspec_SOURCES = src/ifspec.c
+src_listdevip_SOURCES = src/listdevip.c
+src_parserpmdump_SOURCES = src/parserpmdump.c
+src_readlink_SOURCES = src/readlink.c
+
+src_rebootmgr_SOURCES = src/rebootmgr.c
+src_rebootmgr_CPPFLAGS = $(AM_CPPFLAGS) -DSBINDIR=\"$(sbindir)\" -DVROOTDIR=\"$(vserverdir)\"
+
+src_reducecap_SOURCES = src/reducecap.c
+src_reducecap_LDADD = lib/libvserver.a
+
+src_vlimit_SOURCES = src/vlimit.c
+src_vlimit_LDADD = lib/libvserver.a
+
+src_vkill_SOURCES = src/vkill.c
+src_vkill_LDADD = lib/libvserver.a
+src_vkill_CPPFLAGS = $(AM_CPPFLAGS) -DLEGACYDIR=\"$(legacydir)\"
+
+src_showattr_SOURCES = src/showattr.c
+src_showperm_SOURCES = src/showperm.c
+src_vbuild_SOURCES = src/vbuild.cc src/vutil.cc
+src_vdu_SOURCES = src/vdu.c
+src_vfiles_SOURCES = src/vfiles.cc src/vutil.cc
+src_vreboot_SOURCES = src/vreboot.c
+
+src_vserver_stat_SOURCES = src/vserver-stat.c
+src_vserver_stat_LDADD = lib/libvserver.a
+
+src_vunify_SOURCES = src/vunify.cc src/vutil.cc
+src_vunify_CPPFLAGS = $(AM_CPPFLAGS) -DVROOTDIR=\"$(vserverdir)\"
+src_vcheck_SOURCES = src/vcheck.cc src/vutil.cc
+
+#install-data-hook: $(DESTDIR)$(pkglibdir)/setattr
+
+#$(DESTDIR)$(pkglibdir)/setattr:
+# ln -s showattr '$@'
+
+src/setattr$(EXEEXT): src/showattr$(EXEEXT)
+ @rm -f '$@'
+ ln -s showattr$(EXEEXT) '$@'
+
+## Local Variables:
+## compile-command: "make -C .. -k"
+## End:
--- /dev/null
+// $Id: capchroot.c,v 1.1.4.2 2003/11/28 23:08:43 ensc Exp $
+
+// Copyright (C) 2003 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+// based on capchroot.cc by Jacques Gelinas
+//
+// 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, 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+/*
+ This chroot command does very little. Once the chroot
+ system call is executed, it (option) remove the CAP_SYS_CHROOT
+ capability. Then it executes its argument
+*/
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+#include "compat.h"
+
+#include <stdio.h>
+#include <string.h>
+#include <pwd.h>
+#include <grp.h>
+#include <errno.h>
+#include <unistd.h>
+#include <stdbool.h>
+#include <stdlib.h>
+
+#include "linuxcaps.h"
+#include "vserver.h"
+
+int main (int argc, char *argv[])
+{
+ if (argc < 3){
+ fprintf (stderr,"capchroot version %s\n",VERSION);
+ fprintf (stderr
+ ,"capchroot --nochroot directory [ --suid user ] command argument\n"
+ "\n"
+ "--nochroot remove the CAP_SYS_CHROOT capability\n"
+ " after the chroot system call.\n"
+ "--suid switch to a different user (in the vserver context)\n"
+ " before executing the command.\n");
+ }else{
+ const char *uid = NULL;
+ bool nochroot = false;
+ int dir;
+ for (dir=1; dir<argc; dir++){
+ const char *arg = argv[dir];
+ if (arg[0] != '-' && arg[1] != '-'){
+ break;
+ }else if (strcmp(arg,"--nochroot")==0){
+ nochroot = true;
+ }else if (strcmp(arg,"--suid")==0){
+ dir++;
+ uid = argv[dir];
+ }
+
+ }
+ // We resolve the UID before doing the chroot.
+ // If we do the getpwnam after the chroot, we will end
+ // up loading shared object from the vserver.
+ // This is causing two kind of problem: Incompatibilities
+ // and also a security flaw. The shared objects in the vserver
+ // may be tweaked to get control of the root server ...
+ getpwnam ("root");
+ if (chroot(argv[dir]) == -1){
+ fprintf (stderr,"Can't chroot to directory %s (%s)\n",argv[dir]
+ ,strerror(errno));
+ }else{
+ struct passwd *p = NULL;
+ int cmd = dir + 1;
+
+ if (nochroot){
+ vc_new_s_context (-2,1<<CAP_SYS_CHROOT,0);
+ }
+
+ if (uid != NULL && strcmp(uid,"root")!=0){
+ p = getpwnam(uid);
+ if (p == NULL){
+ fprintf (stderr,"User not found: %s\n",uid);
+ exit (-1);
+ }
+ }
+ if (p != NULL) {
+ setgroups (0,NULL);
+ setgid(p->pw_gid);
+ setuid(p->pw_uid);
+ }
+ if (cmd >= argc){
+ fprintf (stderr,"capchroot: No command to execute, do nothing\n");
+ }else{
+ execvp (argv[cmd],argv+cmd);
+ fprintf (stderr,"Can't execute %s (%s)\n",argv[cmd]
+ ,strerror(errno));
+ }
+ }
+ }
+ return -1;
+}
+
+
--- /dev/null
+// $Id: chbind.c,v 1.1.4.1 2003/10/14 00:42:32 ensc Exp $
+
+// Copyright (C) 2003 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+// based on chbind.cc by Jacques Gelinas
+//
+// 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, 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+#include "compat.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <netdb.h>
+#include <sys/socket.h>
+#include <sys/ioctl.h>
+#include <netinet/in.h>
+#include <net/if.h>
+#include <unistd.h>
+#include <errno.h>
+
+#include "vserver.h"
+
+static void usage()
+{
+ fprintf (stderr,"chbind version %s\n",VERSION);
+ fprintf (stderr,"chbind [ --silent ] [ --ip ip_num[/mask] ] [ --bcast broadcast ] command argument\n");
+ exit (-1);
+}
+
+/*
+ Check if a network device exist in /proc/net/dev.
+ This is used because ifconfig_ioctl triggers modprobe if requesting
+ information about non existant devices.
+
+ Return != 0 if the device exist.
+*/
+static int chbind_devexist (const char *dev)
+{
+ int ret = 0;
+ FILE *fin = fopen ("/proc/net/dev","r");
+ if (fin != NULL){
+ int len = strlen(dev);
+ char buf[1000];
+ fgets(buf,sizeof(buf)-1,fin); // Skip one line
+ while (fgets(buf,sizeof(buf)-1,fin)!=NULL){
+ const char *pt = strstr(buf,dev);
+ if (pt != NULL && pt[len] == ':'){
+ ret = 1;
+ break;
+ }
+ }
+ fclose (fin);
+ }
+ return ret;
+}
+
+
+static int ifconfig_ioctl(
+ int fd,
+ const char *ifname,
+ int cmd,
+ struct ifreq *ifr)
+{
+ strcpy(ifr->ifr_name, ifname);
+ return ioctl(fd, cmd,ifr);
+}
+
+/*
+ Fetch the IP number of an interface from the kernel.
+ Assume the device is already available in the kernel
+ Return -1 if any error.
+*/
+int ifconfig_getaddr (
+ const char *ifname,
+ unsigned long *addr,
+ unsigned long *mask,
+ unsigned long *bcast)
+{
+ int ret = -1;
+ if (chbind_devexist(ifname)){
+ int skfd = socket(AF_INET, SOCK_DGRAM, 0);
+ *addr = 0;
+ *bcast = 0xffffffff;
+ if (skfd != -1){
+ struct ifreq ifr;
+ if (ifconfig_ioctl(skfd,ifname,SIOCGIFADDR, &ifr) >= 0){
+ struct sockaddr_in *sin = (struct sockaddr_in*)&ifr.ifr_addr;
+ *addr = sin->sin_addr.s_addr;
+ ret = 0;
+ }
+ if (ifconfig_ioctl(skfd,ifname,SIOCGIFNETMASK, &ifr) >= 0){
+ struct sockaddr_in *sin = (struct sockaddr_in*)&ifr.ifr_addr;
+ *mask = sin->sin_addr.s_addr;
+ ret = 0;
+ }
+ if (ifconfig_ioctl(skfd,ifname,SIOCGIFBRDADDR, &ifr) >= 0){
+ struct sockaddr_in *sin = (struct sockaddr_in*)&ifr.ifr_addr;
+ *bcast = sin->sin_addr.s_addr;
+ ret = 0;
+ }
+ close (skfd);
+ }
+ }
+ return ret;
+}
+
+
+
+
+int main (int argc, char *argv[])
+{
+ int ret = -1;
+ int silent = 0;
+ int i;
+ struct vc_ip_mask_pair ips[16];
+ int nbaddrs = 0;
+ unsigned long bcast = 0xffffffff;
+ for (i=1; i<argc; i++){
+ const char *arg = argv[i];
+ const char *opt = argv[i+1];
+ if (strcmp(arg,"--ip")==0){
+ unsigned long addr,mask;
+ if (nbaddrs == 16){
+ fprintf (stderr,"Too many IP numbers, max 16, ignored\n");
+
+ }else if (ifconfig_getaddr(opt,&addr,&mask,&bcast)==-1){
+ unsigned long mask = 0x00ffffff;
+ const char *pt = strchr(opt,'/');
+ char tmpopt[strlen(opt)+1];
+ struct hostent *h;
+
+ if (pt != NULL){
+ strcpy (tmpopt,opt);
+ tmpopt[pt-opt] = '\0';
+ opt = tmpopt;
+ pt++;
+ if (strchr(pt,'.')==NULL){
+ // Ok, we have a network size, not a netmask
+ int size = atoi(pt);
+ int i;
+ mask = 0;
+ for (i=0; i<size; i++){
+ mask = mask >> 1;
+ mask |= 0x80000000;
+ }
+ mask = ntohl(mask);
+ }else{
+ struct hostent *h = gethostbyname (pt);
+ if (h != NULL){
+ memcpy (&mask,h->h_addr,sizeof(mask));
+ }else{
+ fprintf (stderr,"Invalid netmask: %s\n",pt);
+ usage();
+ }
+ }
+
+ }
+
+ h = gethostbyname (opt);
+ if (h == NULL){
+ fprintf (stderr,"Invalid IP number or host name: %s\n",opt);
+ usage();
+ }else{
+ memcpy (&addr,h->h_addr,sizeof(addr));
+ ips[nbaddrs].ip = addr;
+ ips[nbaddrs].mask = mask;
+ ++nbaddrs;
+ }
+ }else{
+ ips[nbaddrs].ip = addr;
+ ips[nbaddrs].mask = mask;
+ ++nbaddrs;
+ }
+ i++;
+ }else if (strcmp(arg,"--bcast")==0){
+ unsigned long tmp;
+ if (ifconfig_getaddr(opt,&tmp,&tmp,&bcast)==-1){
+ struct hostent *h = gethostbyname (opt);
+ if (h == NULL){
+ fprintf (stderr,"Invalid broadcast number: %s\n",opt);
+ usage();
+ }else{
+ memcpy (&bcast,h->h_addr,sizeof(bcast));
+ }
+ }
+ i++;
+ }else if (strcmp(arg,"--silent")==0){
+ silent = 1;
+ }else{
+ break;
+ }
+ }
+ if (i == argc){
+ usage();
+ }else if (argv[i][0] == '-'){
+ usage();
+ }else{
+ if (vc_set_ipv4root(bcast,nbaddrs,ips)==0){
+ if (!silent){
+ int i;
+ printf ("ipv4root is now");
+ for (i=0; i<nbaddrs; i++){
+ unsigned long hostaddr = ntohl(ips[i].ip);
+ printf (" %ld.%ld.%ld.%ld"
+ ,hostaddr>>24
+ ,(hostaddr>>16)&0xff
+ ,(hostaddr>>8)&0xff
+ ,hostaddr &0xff);
+ }
+ printf ("\n");
+ }
+ execvp (argv[i],argv+i);
+ fprintf (stderr,"Can't exec %s (%s)\n",argv[i],strerror(errno));
+ }else{
+ fprintf (stderr,"Can't set the ipv4 root (%s)\n",strerror(errno));
+ }
+ }
+ return ret;
+}
+
+
--- /dev/null
+// $Id: chcontext.c,v 1.1.4.3 2004/01/07 16:24:01 ensc Exp $
+
+// Copyright (C) 2003 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+// based on chcontext.cc by Jacques Gelinas
+//
+// 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, 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+/*
+ chcontext is a wrapper to user the new_s_context system call. It
+ does little more than mapping command line option to the system call
+ arguments.
+*/
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+#include "compat.h"
+
+#include <stdio.h>
+#include <unistd.h>
+#include <string.h>
+#include <stdlib.h>
+#include <errno.h>
+
+#include "linuxcaps.h"
+#include "vserver.h"
+
+#ifndef CAP_QUOTACTL
+# define CAP_QUOTACTL 29
+#endif
+
+static void usage()
+{
+ fprintf (stderr,"chcontext version %s\n",VERSION);
+ fprintf (stderr
+ ,"chcontext [ options ] command arguments ...\n"
+ "\n"
+ "chcontext allocate a new security context and executes\n"
+ "a command in that context.\n"
+ "By default, a new/unused context is allocated\n"
+ "\n"
+
+ "--cap CAP_NAME\n"
+ "\tAdd a capability from the command. This option may be\n"
+ "\trepeated several time.\n"
+ "\tSee /usr/include/linux/capability.h\n"
+ "\tIn general, this option is used with the --secure option\n"
+ "\t--secure removes most critical capabilities and --cap\n"
+ "\tadds specific ones.\n"
+ "\n"
+
+ "--cap !CAP_NAME\n"
+ "\tRemove a capability from the command. This option may be\n"
+ "\trepeated several time.\n"
+ "\tSee /usr/include/linux/capability.h\n"
+ "\n"
+ "--ctx num\n"
+ "\tSelect the context. On root in context 0 is allowed to\n"
+ "\tselect a specific context.\n"
+ "\tContext number 1 is special. It can see all processes\n"
+ "\tin any contexts, but can't kill them though.\n"
+ "\tOption --ctx may be repeated several times to specify up to 16 contexts.\n"
+
+ "--disconnect\n"
+ "\tStart the command in background and make the process\n"
+ "\ta child of process 1.\n"
+
+ "--domainname new_domainname\n"
+ "\tSet the domainname (NIS) in the new security context.\n"
+ "\tUse \"none\" to unset the domain name.\n"
+
+ "--flag\n"
+ "\tSet one flag in the new or current security context. The following\n"
+ "\tflags are supported. The option may be used several time.\n"
+ "\n"
+ "\tfakeinit: The new process will believe it is process number 1.\n"
+ " Useful to run a real /sbin/init in a vserver.\n"
+ "\tlock: The new process is trapped and can't use chcontext anymore.\n"
+ "\tsched: The new process and its children will share a common \n"
+ " execution priority.\n"
+ "\tnproc: Limit the number of process in the vserver according to\n"
+ " ulimit setting. Normally, ulimit is a per user thing.\n"
+ " With this flag, it becomes a per vserver thing.\n"
+ "\tprivate: No one can join this security context once created.\n"
+ "\tulimit: Apply the current ulimit to the whole context\n"
+
+ "--hostname new_hostname\n"
+ "\tSet the hostname in the new security context\n"
+ "\tThis is need because if you create a less privileged\n"
+ "\tsecurity context, it may be unable to change its hostname\n"
+
+ "--secure\n"
+ "\tRemove all the capabilities to make a virtual server trustable\n"
+
+ "--silent\n"
+ "\tDo not print the allocated context number.\n"
+ "\n"
+ "Information about context is found in /proc/self/status\n");
+}
+
+
+int main (int argc, char *argv[])
+{
+ int ret = -1;
+ int i;
+ int nbctx = 0;
+ int ctxs[16];
+ int disconnect = 0;
+ int silent = 0;
+ int flags = 0;
+ unsigned remove_cap = 0;
+ unsigned add_cap = 0;
+ unsigned long secure = (1<<CAP_LINUX_IMMUTABLE)
+ |(1<<CAP_NET_BROADCAST)
+ |(1<<CAP_NET_ADMIN)
+ |(1<<CAP_NET_RAW)
+ |(1<<CAP_IPC_LOCK)
+ |(1<<CAP_IPC_OWNER)
+ |(1<<CAP_SYS_MODULE)
+ |(1<<CAP_SYS_RAWIO)
+ |(1<<CAP_SYS_PACCT)
+ |(1<<CAP_SYS_ADMIN)
+ |(1<<CAP_SYS_BOOT)
+ |(1<<CAP_SYS_NICE)
+ |(1<<CAP_SYS_RESOURCE)
+ |(1<<CAP_SYS_TIME)
+ |(1<<CAP_MKNOD)
+ |(1<<CAP_QUOTACTL);
+ const char *hostname=NULL, *domainname=NULL;
+
+ for (i=1; i<argc; i++){
+ const char *arg = argv[i];
+ const char *opt = argv[i+1];
+ if (strcmp(arg,"--ctx")==0){
+ if (nbctx >= 16){
+ fprintf (stderr,"Too many context, max 16, ignored.\n");
+ }else{
+ ctxs[nbctx++] = atoi(opt);
+ }
+ i++;
+ }else if (strcmp(arg,"--disconnect")==0){
+ disconnect = 1;
+ }else if (strcmp(arg,"--silent")==0){
+ silent = 1;
+ }else if (strcmp(arg,"--flag")==0){
+ if (strcmp(opt,"lock")==0){
+ flags |= 1;
+ }else if (strcmp(opt,"sched")==0){
+ flags |= 2;
+ }else if (strcmp(opt,"nproc")==0){
+ flags |= 4;
+ }else if (strcmp(opt,"private")==0){
+ flags |= 8;
+ }else if (strcmp(opt,"fakeinit")==0){
+ flags |= 16;
+ }else if (strcmp(opt,"hideinfo")==0){
+ flags |= 32;
+ }else if (strcmp(opt,"ulimit")==0){
+ flags |= 64;
+ }else{
+ fprintf (stderr,"Unknown flag %s\n",opt);
+ }
+ i++;
+ }else if (strcmp(arg,"--cap")==0){
+ static struct {
+ const char *option;
+ int bit;
+ }tbcap[]={
+ // The following capabilities are normally available
+ // to vservers administrator, but are place for
+ // completeness
+ {"CAP_CHOWN",CAP_CHOWN},
+ {"CAP_DAC_OVERRIDE",CAP_DAC_OVERRIDE},
+ {"CAP_DAC_READ_SEARCH",CAP_DAC_READ_SEARCH},
+ {"CAP_FOWNER",CAP_FOWNER},
+ {"CAP_FSETID",CAP_FSETID},
+ {"CAP_KILL",CAP_KILL},
+ {"CAP_SETGID",CAP_SETGID},
+ {"CAP_SETUID",CAP_SETUID},
+ {"CAP_SETPCAP",CAP_SETPCAP},
+ {"CAP_SYS_TTY_CONFIG",CAP_SYS_TTY_CONFIG},
+ {"CAP_LEASE",CAP_LEASE},
+ {"CAP_SYS_CHROOT",CAP_SYS_CHROOT},
+
+ // Those capabilities are not normally available
+ // to vservers because they are not needed and
+ // may represent a security risk
+ {"CAP_LINUX_IMMUTABLE",CAP_LINUX_IMMUTABLE},
+ {"CAP_NET_BIND_SERVICE",CAP_NET_BIND_SERVICE},
+ {"CAP_NET_BROADCAST",CAP_NET_BROADCAST},
+ {"CAP_NET_ADMIN", CAP_NET_ADMIN},
+ {"CAP_NET_RAW", CAP_NET_RAW},
+ {"CAP_IPC_LOCK", CAP_IPC_LOCK},
+ {"CAP_IPC_OWNER", CAP_IPC_OWNER},
+ {"CAP_SYS_MODULE",CAP_SYS_MODULE},
+ {"CAP_SYS_RAWIO", CAP_SYS_RAWIO},
+ {"CAP_SYS_PACCT", CAP_SYS_PACCT},
+ {"CAP_SYS_ADMIN", CAP_SYS_ADMIN},
+ {"CAP_SYS_BOOT", CAP_SYS_BOOT},
+ {"CAP_SYS_NICE", CAP_SYS_NICE},
+ {"CAP_SYS_RESOURCE",CAP_SYS_RESOURCE},
+ {"CAP_SYS_TIME", CAP_SYS_TIME},
+ {"CAP_MKNOD", CAP_MKNOD},
+ {"CAP_QUOTACTL", CAP_QUOTACTL},
+ {NULL,0}
+ };
+ int j;
+ unsigned *cap = &add_cap;
+ if (opt[0] == '!'){
+ cap = &remove_cap;
+ opt++;
+ }
+ for (j=0; tbcap[j].option != NULL; j++){
+ if (strcasecmp(tbcap[j].option,opt)==0){
+ *cap |= (1<<tbcap[j].bit);
+ break;
+ }
+ }
+ if (tbcap[j].option == NULL){
+ fprintf (stderr,"Unknown capability %s\n",opt);
+ }
+ i++;
+ }else if (strcmp(arg,"--secure")==0){
+ remove_cap |= secure;
+ }else if (strcmp(arg,"--hostname")==0){
+ hostname = opt;
+ i++;
+ }else if (strcmp(arg,"--domainname")==0){
+ if (opt != NULL && strcmp(opt,"none")==0) opt = "";
+ domainname = opt;
+ i++;
+ }else{
+ break;
+ }
+ }
+ if (i == argc){
+ usage();
+ }else if (argv[i][0] == '-'){
+ usage();
+ }else{
+ /*
+ We must fork early because fakeinit set the current
+ process as the special init process
+ */
+ if (disconnect == 0 || fork()==0){
+ int newctx;
+ int xflags = flags & 16;
+
+ if (nbctx == 0) ctxs[nbctx++] = -1;
+ newctx = vc_new_s_context(ctxs[0],0,flags&~16);
+ if (newctx != -1){
+ if (hostname != NULL){
+ if (sethostname (hostname,strlen(hostname))==-1){
+ fprintf (stderr,"Can't set the host name (%s)\n"
+ ,strerror(errno));
+ }else if (!silent){
+ printf ("Host name is now %s\n",hostname);
+ }
+ }
+ if (domainname != NULL){
+ setdomainname (domainname,strlen(domainname));
+ if (!silent){
+ printf ("Domain name is now %s\n",domainname);
+ }
+ }
+ remove_cap &= (~add_cap);
+ if (remove_cap!=0 || xflags!=0)
+ vc_new_s_context (-2,remove_cap,xflags);
+ if (!silent){
+ printf ("New security context is %d\n"
+ ,ctxs[0] == -1 ? newctx : ctxs[0]);
+ }
+ execvp (argv[i],argv+i);
+ fprintf (stderr,"Can't exec %s (%s)\n",argv[i]
+ ,strerror(errno));
+ }else{
+ perror ("Can't set the new security context\n");
+ }
+ if (disconnect != 0) _exit(0);
+ }
+ }
+ return ret;
+}
+
--- /dev/null
+// $Id: ext2fs.h,v 1.1.2.2 2004/01/26 18:22:00 ensc Exp $ --*- c -*--
+
+// Copyright (C) 2003 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+//
+// 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; version 2 of the License.
+//
+// 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+
+#ifndef H_UTIL_VSERVER_SRC_EXT2FS_H
+#define H_UTIL_VSERVER_SRC_EXT2FS_H
+
+#ifdef ENSC_HAVE_EXT2FS_EXT2_FS_H
+# include <ext2fs/ext2_fs.h>
+#elif defined(ENSC_HAVE_LINUX_EXT2_FS_H)
+# include <linux/ext2_fs.h>
+#else
+# error Do not know how to include <ext2_fs.h>
+#endif
+
+#endif // H_UTIL_VSERVER_SRC_EXT2FS_H
--- /dev/null
+// $Id: fakerunlevel.c,v 1.1 2003/09/29 22:01:57 ensc Exp $
+
+// Copyright (C) 2003 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+// based on fakerunlevel.cc by Jacques Gelinas
+//
+// 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, 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+/*
+ This program add a RUNLEVEL record in a utmp file.
+ This is used when a vserver lack a private init process
+ so runlevel properly report the fake runlevel.
+*/
+#include <utmp.h>
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <errno.h>
+
+static void usage()
+{
+ fprintf (stderr,"fakerunlevel version %s\n",VERSION);
+ fprintf (stderr
+ ,"\n"
+ "fakerunlevel runlevel utmp_file\n"
+ "\n"
+ "Put a runlevel record in file utmp_file\n");
+}
+
+int main (int argc, char *argv[])
+{
+ if (argc != 3){
+ usage();
+ }else{
+ int runlevel = atoi(argv[1]);
+ const char *fname = argv[2];
+ if (runlevel < 1 || runlevel > 5){
+ usage();
+ }else{
+ // Make sure the file exist
+ FILE *fout = fopen (fname,"a");
+ if (fout == NULL){
+ fprintf (stderr,"Can't open file %s (%s)\n",fname
+ ,strerror(errno));
+ }else{
+ struct utmp ut;
+
+ fclose (fout);
+ utmpname (fname);
+ setutent();
+ memset (&ut,0,sizeof(ut));
+ ut.ut_type = RUN_LVL;
+ ut.ut_pid = ('#' << 8) + runlevel+'0';
+ pututline (&ut);
+ endutent();
+ }
+ }
+ }
+
+ return 0;
+}
+
--- /dev/null
+// $Id: filetime.c,v 1.1 2003/09/29 22:01:57 ensc Exp $
+
+// Copyright (C) 2003 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+// based on filetime.cc by Jacques Gelinas
+//
+// 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, 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+#include <stdio.h>
+#include <string.h>
+#include <errno.h>
+#include <time.h>
+#include <sys/stat.h>
+
+int main (int argc, char *argv[])
+{
+ int ret = -1;
+ if (argc != 2){
+ fprintf (stderr
+ ,"filetime version %s\n"
+ "filetime file\n"
+ "\n"
+ "Prints the age of a file\n"
+ "(how long since it was created or modified)\n"
+ ,VERSION);
+ }else{
+ struct stat st;
+ if (stat(argv[1],&st)==-1){
+ fprintf (stderr,"Can't stat file %s (%s)\n",argv[1]
+ ,strerror(errno));
+ }else{
+ time_t now = time(NULL);
+ time_t since = now - st.st_mtime;
+ int days = since / (24*60*60);
+ int today = since % (24*60*60);
+ int hours = today / (60*60);
+ int minutes = (today % (60*60)) / 60;
+ if (days > 0){
+ printf ("%d days ",days);
+ }
+ printf ("%02d:%02d\n",hours,minutes);
+ ret = 0;
+ }
+ }
+ return ret;
+}
+
--- /dev/null
+// $Id: ifspec.c,v 1.1.4.1 2003/11/21 16:01:09 ensc Exp $
+
+// Copyright (C) 2003 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+// based on ifspec.cc by Jacques Gelinas
+//
+// 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, 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+/*
+ Prints the specs of a network device in shell like form
+
+ ADDR=
+ NETMASK=
+ BCAST=
+*/
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include <unistd.h>
+#include <sys/socket.h>
+#include <sys/ioctl.h>
+#include <netinet/in.h>
+#include <net/if.h>
+
+static void usage()
+{
+ fprintf (stderr,"ifspec version %s\n",VERSION);
+ fprintf (stderr
+ ,"ifspec network-device [ ipaddr netmask broadcast ]\n"
+ "prints device specification in a shell usable way\n");
+ exit (-1);
+}
+
+static int ifconfig_ioctl(
+ int fd,
+ const char *ifname,
+ int cmd,
+ struct ifreq *ifr)
+{
+ strcpy(ifr->ifr_name, ifname);
+ return ioctl(fd, cmd,ifr);
+}
+
+static unsigned long ip_cnv (const char *str)
+{
+ const char *start_str = str;
+ unsigned tb[4];
+ int no = 0;
+ unsigned long ret;
+
+ memset (tb,-1,sizeof(tb));
+ while (*str != '\0' && no < 4){
+ if (isdigit(*str)){
+ int val = atoi(str);
+ if (val > 255) break;
+ tb[no++] = val;
+ while (isdigit(*str)) str++;
+ if (*str == '.'){
+ str++;
+ }else{
+ break;
+ }
+ }else{
+ break;
+ }
+ }
+
+ ret = (tb[0] << 24) | (tb[1]<<16) | (tb[2] << 8) | tb[3];
+ if (no != 4 || *str != '\0'){
+ fprintf (stderr,"Invalid IP number or netmask: %s\n",start_str);
+ ret = 0xffffffff;
+ }
+ return ret;
+}
+
+
+/*
+ Fetch the IP number of an interface from the kernel.
+ Assume the device is already available in the kernel
+ Return -1 if any error.
+*/
+int ifconfig_print (
+ const char *ifname,
+ const char *addrstr,
+ const char *maskstr,
+ const char *bcaststr)
+{
+ int ret = -1;
+ int skfd = socket(AF_INET, SOCK_DGRAM, 0);
+ if (skfd != -1){
+ struct ifreq ifr;
+ struct {
+ unsigned long addr;
+ unsigned long mask;
+ } solved = {0,0};
+ if (addrstr != NULL && addrstr[0] != '\0'){
+ printf ("ADDR=%s\n",addrstr);
+ solved.addr = ip_cnv (addrstr);
+ }else if (ifconfig_ioctl(skfd,ifname,SIOCGIFADDR, &ifr) >= 0){
+ struct sockaddr_in *sin = (struct sockaddr_in*)&ifr.ifr_addr;
+ unsigned long addr = ntohl(sin->sin_addr.s_addr);
+ printf ("ADDR=%lu.%lu.%lu.%lu\n"
+ ,(addr>>24)&0xff
+ ,(addr>>16)&0xff
+ ,(addr>>8)&0xff
+ ,addr&0xff);
+ solved.addr = addr;
+ ret = 0;
+ }
+ else {
+ perror("ioctl(SIOCGIFADDR)");
+ }
+
+ if (maskstr != NULL && maskstr[0] != '\0'){
+ printf ("NETMASK=%s\n",maskstr);
+ solved.mask = ip_cnv (maskstr);
+ }else if (ifconfig_ioctl(skfd,ifname,SIOCGIFNETMASK, &ifr) >= 0){
+ struct sockaddr_in *sin = (struct sockaddr_in*)&ifr.ifr_addr;
+ unsigned long addr = ntohl(sin->sin_addr.s_addr);
+ printf ("NETMASK=%lu.%lu.%lu.%lu\n"
+ ,(addr>>24)&0xff
+ ,(addr>>16)&0xff
+ ,(addr>>8)&0xff
+ ,addr&0xff);
+ solved.mask = addr;
+ ret = 0;
+ }
+ else {
+ perror("ioctl(SIOCGIFNETMASK)");
+ }
+
+ if (bcaststr != NULL && bcaststr[0] != '\0'){
+ printf ("BCAST=%s\n",bcaststr);
+ }else if (ifconfig_ioctl(skfd,ifname,SIOCGIFBRDADDR, &ifr) >= 0){
+ struct sockaddr_in *sin = (struct sockaddr_in*)&ifr.ifr_addr;
+ unsigned long addr = ntohl(sin->sin_addr.s_addr);
+ printf ("BCAST=%lu.%lu.%lu.%lu\n"
+ ,(addr>>24)&0xff
+ ,(addr>>16)&0xff
+ ,(addr>>8)&0xff
+ ,addr&0xff);
+ ret = 0;
+ }else if (solved.addr!=0 && solved.mask!=0) {
+ // Can't get it from the kernel, compute it from the IP
+ // and the netmask
+ unsigned long addr = (solved.addr & solved.mask)
+ | ~solved.mask;
+ printf ("BCAST=%lu.%lu.%lu.%lu\n"
+ ,(addr>>24)&0xff
+ ,(addr>>16)&0xff
+ ,(addr>>8)&0xff
+ ,addr&0xff);
+
+ }
+ close (skfd);
+ }
+ return ret;
+}
+
+
+int main (int argc, char *argv[])
+{
+ int ret = -1;
+ if (argc < 2){
+ usage();
+ }else{
+ const char *addrstr = argc >= 3 ? argv[2] : NULL;
+ const char *maskstr = argc >= 4 ? argv[3] : NULL;
+ const char *bcaststr = argc >= 5 ? argv[4] : NULL;
+ ret = ifconfig_print (argv[1],addrstr,maskstr,bcaststr);
+ }
+ return ret;
+}
+
+
+
--- /dev/null
+// $Id: listdevip.c,v 1.1 2003/09/29 22:01:57 ensc Exp $
+
+// Copyright (C) 2003 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+// based on listdevip.cc by Jacques Gelinas
+//
+// 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, 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+/*
+ Print the list of all network (IP) devices. Print the IP
+ in fact, including all aliases.
+*/
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <sys/socket.h>
+#include <sys/ioctl.h>
+#include <netinet/in.h>
+#include <net/if.h>
+
+
+static int ifconfig_ioctl(
+ int fd,
+ const char *ifname,
+ int cmd,
+ struct ifreq *ifr)
+{
+ strcpy(ifr->ifr_name, ifname);
+ return ioctl(fd, cmd,ifr);
+}
+
+
+static int devlist_read2_2()
+{
+ int ret = -1;
+ int skfd = socket (AF_INET,SOCK_DGRAM,0);
+ if (skfd < 0) {
+ perror ("socket");
+ }else{
+ struct ifconf ifc;
+ int numreqs = 30;
+ ifc.ifc_buf = NULL;
+ ret = 0;
+ while (1) {
+ ifc.ifc_len = sizeof(struct ifreq) * numreqs;
+ ifc.ifc_buf = (char*)realloc(ifc.ifc_buf, ifc.ifc_len);
+
+ if (ioctl(skfd, SIOCGIFCONF, &ifc) < 0) {
+ perror("SIOCGIFCONF");
+ ret = -1;
+ break;
+ }
+ if (ifc.ifc_len == (int)sizeof(struct ifreq) * numreqs) {
+ /* assume it overflowed and try again */
+ numreqs += 10;
+ continue;
+ }
+ break;
+ }
+ if (ret == 0){
+ struct ifreq *ifr = ifc.ifc_req;
+ int n;
+ for (n = 0; n < ifc.ifc_len; n += sizeof(struct ifreq)) {
+ struct sockaddr_in *sin = (struct sockaddr_in*)&ifr->ifr_addr;
+ unsigned long addr = ntohl(sin->sin_addr.s_addr);
+ unsigned long mask = 0xffffff00;
+ struct ifreq ifmask;
+ if (ifconfig_ioctl(skfd,ifr->ifr_name,SIOCGIFNETMASK, &ifmask) >= 0){
+ struct sockaddr_in *sin = (struct sockaddr_in*)&ifmask.ifr_addr;
+ mask = ntohl(sin->sin_addr.s_addr);
+ }
+
+ printf ("%lu.%lu.%lu.%lu/%lu.%lu.%lu.%lu\n"
+ ,(addr>>24)&0xff
+ ,(addr>>16)&0xff
+ ,(addr>>8)&0xff
+ ,addr&0xff
+ ,(mask>>24)&0xff
+ ,(mask>>16)&0xff
+ ,(mask>>8)&0xff
+ ,mask&0xff);
+ ifr++;
+ }
+ }
+ free(ifc.ifc_buf);
+ }
+ return ret;
+}
+
+int main (int argc, char *argv[])
+{
+ devlist_read2_2();
+ return 0;
+}
+
--- /dev/null
+// $Id: parserpmdump.c,v 1.1 2003/09/29 22:01:57 ensc Exp $
+
+// Copyright (C) 2003 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+// based on parserpmdump.cc by Jacques Gelinas
+//
+// 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, 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+/*
+ Litte utility to extract non config file from
+ an rpm --dump command.
+*/
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <sys/stat.h>
+#include <alloca.h>
+
+
+int main (int argc, char *argv[])
+{
+ int *tblen = alloca(argc * sizeof(int));
+ int i;
+ char tmp[1000];
+
+ for (i=1; i<argc; i++) tblen[i] = strlen(argv[i]);
+ while (fgets(tmp,sizeof(tmp)-1,stdin)!=NULL){
+ int i;
+ // Check if the file is in an excluded directory
+ for (i=1; i<argc; i++){
+ if (strncmp(argv[i],tmp,tblen[i])==0) break;
+ }
+ if (i == argc){
+ // Ok no match
+ int last = strlen(tmp)-1;
+ mode_t mode=-1;
+ int type=-1;
+ char *start = tmp;
+ int i;
+
+ if (last >= 0 && tmp[last] == '\n') tmp[last] = '\0';
+
+ for (i=0; i<8; i++){
+ char *pt = start;
+ while (*pt > ' ') pt++;
+ if (*pt == ' ') *pt++ = '\0';
+ if (i == 4){
+ sscanf(start,"%o",&mode);
+ }else if (i==7){
+ type = atoi(start);
+ }
+ start = pt;
+
+ }
+ if (S_ISREG(mode) && type == 0) printf ("%s\n",tmp);
+ }
+ }
+ return 0;
+}
+
--- /dev/null
+// $Id: readlink.c,v 1.1 2003/09/29 22:01:57 ensc Exp $
+
+// Copyright (C) 2003 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+// based on readlink.cc by Jacques Gelinas
+//
+// 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, 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+/*
+ Copyright Jacques Gelinas jack@solucorp.qc.ca
+ Distributed under the Gnu Public License, see the License file
+ in this package.
+*/
+#include <stdio.h>
+#include <string.h>
+#include <errno.h>
+#include <limits.h>
+#include <unistd.h>
+
+int main (int argc, char *argv[])
+{
+ int ret = -1;
+ if (argc != 2){
+ fprintf (stderr,"readlink symlink-file\n");
+ fprintf (stderr,"Prints the contents of a symlink\n");
+ }else{
+ char buf[PATH_MAX];
+ int len = readlink (argv[1],buf,sizeof(buf)-1);
+ if (len > 0){
+ buf[len] = '\0';
+ printf ("%s\n",buf);
+ ret = 0;
+ }else{
+ fprintf (stderr,"readlink failed for file %s (%s)\n"
+ ,argv[1],strerror(errno));
+ }
+ }
+ return ret;
+}
+
--- /dev/null
+// $Id: rebootmgr.c,v 1.1.2.1.2.3 2003/10/30 15:16:30 ensc Exp $
+
+// Copyright (C) 2003 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+// based on rebootmgr.cc by Jacques Gelinas
+//
+// 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, 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+/*
+ The reboot manager allow a virtual server administrator to request
+ a complete restart of his vserver. This means that all services
+ are terminated, all remaining processes are killed and then
+ all services are started.
+
+ This is done by issuing
+
+ /usr/sbin/vserver vserver restart
+
+
+ The rebootmgr installs a unix domain socket in each vservers
+ and listen for the reboot messages. All other message are discarded.
+
+ The unix domain socket is placed in /vservers/N/dev/reboot and is
+ turned immutable.
+
+ The vreboot utility is used to send the signal from the vserver
+ environment.
+*/
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+#include "compat.h"
+
+#include <stdio.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <errno.h>
+#include <syslog.h>
+#include <sys/stat.h>
+#include <sys/time.h>
+#include <sys/socket.h>
+#include <sys/un.h>
+#include <alloca.h>
+
+static void usage()
+{
+ fprintf (stderr,"rebootmgr version %s\n",VERSION);
+ fprintf (stderr,"\n");
+ fprintf (stderr,"rebootmgr [--pidfile file ] vserver-name [ vserver-name ...]\n");
+}
+
+static int rebootmgr_opensocket (const char *vname)
+{
+ int ret = -1;
+ char sockn[PATH_MAX];
+ int fd = socket (AF_UNIX,SOCK_STREAM,0);
+ sprintf (sockn,"%s/%s/dev/reboot",VROOTDIR, vname);
+ unlink (sockn);
+ if (fd == -1){
+ fprintf (stderr,"Can't create a unix domain socket (%s)\n"
+ ,strerror(errno));
+ }else{
+ struct sockaddr_un un;
+ un.sun_family = AF_UNIX;
+ strcpy (un.sun_path,sockn);
+ if (bind(fd,(struct sockaddr*)&un,sizeof(un))==-1){
+ fprintf (stderr,"Can't bind to file %s (%s)\n",sockn
+ ,strerror(errno));
+ }else{
+ int code;
+ chmod (sockn,0600);
+ code = listen (fd,10);
+ if (code == -1){
+ fprintf (stderr,"Can't listen to file %s (%s)\n",sockn
+ ,strerror(errno));
+ }else{
+ ret = fd;
+ }
+ }
+ }
+ return ret;
+}
+
+static int rebootmgr_process (int fd, const char *vname)
+{
+ int ret = -1;
+ char buf[100];
+ int len = read (fd,buf,sizeof(buf)-1);
+ // fprintf (stderr,"process %d %s len %d\n",fd,vname,len);
+ if (len > 0){
+ buf[len] = '\0';
+ if (strcmp(buf,"reboot\n")==0){
+ char cmd[1000];
+ syslog (LOG_NOTICE,"reboot vserver %s\n",vname);
+ snprintf (cmd,sizeof(cmd)-1,"%s/vserver %s restart >>/var/log/boot.log 2>&1",SBINDIR, vname);
+ system (cmd);
+ ret = 0;
+ }else if (strcmp(buf,"halt\n")==0){
+ char cmd[1000];
+ syslog (LOG_NOTICE,"halt vserver %s\n",vname);
+ snprintf (cmd,sizeof(cmd)-1,"%s/vserver %s stop >>/var/log/boot.log 2>&1",SBINDIR, vname);
+ system (cmd);
+ ret = 0;
+ }else{
+ syslog (LOG_ERR,"Invalid request from vserver %s",vname);
+ }
+ }
+ return ret;
+}
+
+
+int main (int argc, char *argv[])
+{
+ int ret = -1;
+ if (argc < 2){
+ usage();
+ }else{
+ int error = 0;
+ int start = 1;
+ int i;
+ int *sockets = alloca(argc * sizeof(int));
+
+ openlog ("rebootmgr",LOG_PID,LOG_DAEMON);
+ for (i=0; i<argc; i++){
+ const char *arg = argv[i];
+ if (strcmp(arg,"--pidfile")==0){
+ const char *pidfile = argv[i+1];
+ FILE *fout = fopen (pidfile,"w");
+ if (fout == NULL){
+ fprintf (stderr,"Can't open pidfile %s (%s)\n"
+ ,pidfile,strerror(errno));
+
+ __extension__
+ syslog (LOG_ERR,"Can't open pidfile %s (%m)"
+ ,pidfile);
+ }else{
+ fprintf (fout,"%d\n",getpid());
+ fclose (fout);
+ }
+ start = i+2;
+ i++;
+ }else if (strcmp(arg,"--")==0){
+ start = i+1;
+ break;
+ }else if (arg[0] == '-'){
+ fprintf (stderr,"Invalid argument %s\n",arg);
+ syslog (LOG_ERR,"Invalid argument %s",arg);
+ }
+ }
+ for (i=start; i<argc; i++){
+ int fd = rebootmgr_opensocket (argv[i]);
+ if (fd == -1){
+ error = 1;
+ }else{
+ sockets[i] = fd;
+ }
+ }
+ if (!error){
+ int maxhandles = argc*2;
+ struct {
+ int handle;
+ const char *vname;
+ } handles[maxhandles];
+ int nbhandles=0;
+ while (1){
+ int maxfd = 0;
+ int i;
+ int ok;
+
+ fd_set fdin;
+ FD_ZERO (&fdin);
+ for (i=start; i<argc; i++){
+ int fd = sockets[i];
+ if (fd > maxfd) maxfd = fd;
+ FD_SET (fd,&fdin);
+ }
+ for (i=0; i<nbhandles; i++){
+ int fd = handles[i].handle;
+ if (fd > maxfd) maxfd = fd;
+ FD_SET (fd,&fdin);
+ }
+ ok = select (maxfd+1,&fdin,NULL,NULL,NULL);
+ if (ok <= 0){
+ break;
+ }else{
+ int i;
+ int dst = 0;
+
+ for (i=start; i<argc; i++){
+ int fd = sockets[i];
+ if (FD_ISSET(fd,&fdin)){
+ struct sockaddr_un unc;
+ socklen_t len = sizeof(unc);
+ unc.sun_family = AF_UNIX;
+ fd = accept (fd,(struct sockaddr*)&unc,&len);
+ if (fd != -1){
+ if (nbhandles == maxhandles){
+ int j;
+ // Overloaded, we close every handle
+ syslog (LOG_ERR,"%d sockets opened: Overloaded\n",nbhandles);
+ for (j=0; j<nbhandles; j++){
+ close (handles[j].handle);
+ }
+ nbhandles = 0;
+ }
+ handles[nbhandles].handle = fd;
+ handles[nbhandles].vname = argv[i];
+ nbhandles++;
+ // fprintf (stderr,"accept %d\n",nbhandles);
+ }
+ }
+ }
+ for (i=0; i<nbhandles; i++){
+ int fd = handles[i].handle;
+ if (FD_ISSET(fd,&fdin)){
+ if (rebootmgr_process (fd,handles[i].vname)==-1){
+ close (fd);
+ }else{
+ handles[dst++] = handles[i];
+ }
+ }else{
+ handles[dst++] = handles[i];
+ }
+ }
+ nbhandles = dst;
+ }
+ }
+ }
+ }
+ return ret;
+}
+
+
--- /dev/null
+// $Id: reducecap.c,v 1.1.4.2 2003/10/30 00:36:39 ensc Exp $
+
+// Copyright (C) 2003 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+// based on reducecap.cc by Jacques Gelinas
+//
+// 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, 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+#include "compat.h"
+
+#include <stdio.h>
+#include <errno.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "linuxcaps.h"
+#include "vserver.h"
+
+#ifndef CAP_QUOTACTL
+# define CAP_QUOTACTL 29
+#endif
+
+extern int capget (struct __user_cap_header_struct *, struct __user_cap_data_struct *);
+extern int capset (struct __user_cap_header_struct *, struct __user_cap_data_struct *);
+
+static void usage()
+{
+ fprintf (stderr,"reducecap version %s\n",VERSION);
+ fprintf (stderr,"reducecap [ options ] command argument\n");
+ exit (-1);
+}
+
+static void reducecap_print(struct __user_cap_data_struct *user)
+{
+ static const char *tb[]={
+ "CAP_CHOWN",
+ "CAP_DAC_OVERRIDE",
+ "CAP_DAC_READ_SEARCH",
+ "CAP_FOWNER",
+ "CAP_FSETID",
+ "CAP_KILL",
+ "CAP_SETGID",
+ "CAP_SETUID",
+ "CAP_SETPCAP",
+ "CAP_LINUX_IMMUTABLE",
+ "CAP_NET_BIND_SERVICE",
+ "CAP_NET_BROADCAST",
+ "CAP_NET_ADMIN",
+ "CAP_NET_RAW",
+ "CAP_IPC_LOCK",
+ "CAP_IPC_OWNER",
+ "CAP_SYS_MODULE",
+ "CAP_SYS_RAWIO",
+ "CAP_SYS_CHROOT",
+ "CAP_SYS_PTRACE",
+ "CAP_SYS_PACCT",
+ "CAP_SYS_ADMIN",
+ "CAP_SYS_BOOT",
+ "CAP_SYS_NICE",
+ "CAP_SYS_RESOURCE",
+ "CAP_SYS_TIME",
+ "CAP_SYS_TTY_CONFIG",
+ "CAP_MKNOD",
+ "CAP_LEASE",
+ "CAP_QUOTACTL",
+ NULL
+ };
+ int i;
+ printf ("%22s %9s %9s %9s\n","Capability","Effective","Permitted"
+ ,"Inheritable");
+ for (i=0; tb[i] != NULL; i++){
+ int bit = (1 << i);
+ printf ("%22s %9s %9s %9s\n"
+ ,tb[i]
+ ,(user->effective & bit) ? "X " : " "
+ ,(user->permitted & bit) ? "X " : " "
+ ,(user->inheritable & bit) ? "X " : " ");
+ }
+}
+
+static void reducecap_show()
+{
+ struct __user_cap_header_struct header;
+ struct __user_cap_data_struct user;
+ header.version = _LINUX_CAPABILITY_VERSION;
+ header.pid = getpid();
+ if (capget(&header,&user)==-1){
+ perror ("capget");
+ }else{
+ reducecap_print (&user);
+ }
+}
+
+
+
+int main (int argc, char *argv[])
+{
+ int ret = -1;
+ unsigned long remove = 0;
+ int show = 0;
+ int flags = 0;
+ unsigned long secure = (1<<CAP_LINUX_IMMUTABLE)
+ |(1<<CAP_NET_BROADCAST)
+ |(1<<CAP_NET_ADMIN)
+ |(1<<CAP_NET_RAW)
+ |(1<<CAP_IPC_LOCK)
+ |(1<<CAP_IPC_OWNER)
+ |(1<<CAP_SYS_MODULE)
+ |(1<<CAP_SYS_RAWIO)
+ |(1<<CAP_SYS_PACCT)
+ |(1<<CAP_SYS_ADMIN)
+ |(1<<CAP_SYS_BOOT)
+ |(1<<CAP_SYS_NICE)
+ |(1<<CAP_SYS_RESOURCE)
+ |(1<<CAP_SYS_TIME)
+ |(1<<CAP_MKNOD)
+ |(1<<CAP_QUOTACTL);
+ int i;
+ for (i=1; i<argc; i++){
+ const char *arg = argv[i];
+ const char *opt = argv[i+1];
+ if (strcmp(arg,"--secure")==0){
+ remove = secure;
+ }else if (strcmp(arg,"--show")==0){
+ show = 1;
+ }else if (strcmp(arg,"--flag")==0){
+ if (strcmp(opt,"lock")==0){
+ flags |= 1;
+ }else if (strcmp(opt,"sched")==0){
+ flags |= 2;
+ }else if (strcmp(opt,"nproc")==0){
+ flags |= 4;
+ }else if (strcmp(opt,"private")==0){
+ flags |= 8;
+ }else if (strcmp(opt,"hideinfo")==0){
+ flags |= 32;
+ }else{
+ fprintf (stderr,"Unknown flag %s\n",opt);
+ }
+ i++;
+ }else if (arg[0] == '-' && arg[1] == '-'){
+ static struct {
+ const char *option;
+ int bit;
+ }tbcap[]={
+ // The following capabilities are normally available
+ // to vservers administrator, but are place for
+ // completeness
+ {"CAP_CHOWN",CAP_CHOWN},
+ {"CAP_DAC_OVERRIDE",CAP_DAC_OVERRIDE},
+ {"CAP_DAC_READ_SEARCH",CAP_DAC_READ_SEARCH},
+ {"CAP_FOWNER",CAP_FOWNER},
+ {"CAP_FSETID",CAP_FSETID},
+ {"CAP_KILL",CAP_KILL},
+ {"CAP_SETGID",CAP_SETGID},
+ {"CAP_SETUID",CAP_SETUID},
+ {"CAP_SETPCAP",CAP_SETPCAP},
+ {"CAP_SYS_TTY_CONFIG",CAP_SYS_TTY_CONFIG},
+ {"CAP_LEASE",CAP_LEASE},
+ {"CAP_SYS_CHROOT",CAP_SYS_CHROOT},
+
+ // Those capabilities are not normally available
+ // to vservers because they are not needed and
+ // may represent a security risk
+ {"--LINUX_IMMUTABLE",CAP_LINUX_IMMUTABLE},
+ {"--NET_BIND_SERVICE",CAP_NET_BIND_SERVICE},
+ {"--NET_BROADCAST",CAP_NET_BROADCAST},
+ {"--NET_ADMIN", CAP_NET_ADMIN},
+ {"--NET_RAW", CAP_NET_RAW},
+ {"--IPC_LOCK", CAP_IPC_LOCK},
+ {"--IPC_OWNER", CAP_IPC_OWNER},
+ {"--SYS_MODULE",CAP_SYS_MODULE},
+ {"--SYS_RAWIO", CAP_SYS_RAWIO},
+ {"--SYS_PACCT", CAP_SYS_PACCT},
+ {"--SYS_ADMIN", CAP_SYS_ADMIN},
+ {"--SYS_BOOT", CAP_SYS_BOOT},
+ {"--SYS_NICE", CAP_SYS_NICE},
+ {"--SYS_RESOURCE",CAP_SYS_RESOURCE},
+ {"--SYS_TIME", CAP_SYS_TIME},
+ {"--MKNOD", CAP_MKNOD},
+ {"--QUOTACTL", CAP_QUOTACTL},
+ {NULL,0}
+ };
+ int j;
+ for (j=0; tbcap[j].option != NULL; j++){
+ if (strcasecmp(tbcap[j].option,arg)==0){
+ remove |= (1<<tbcap[j].bit);
+ break;
+ }
+ }
+ if (tbcap[j].option != NULL){
+ usage();
+ }
+ }else{
+ break;
+ }
+ }
+ if (i == argc){
+ if (show){
+ reducecap_show();
+ }else{
+ usage();
+ }
+ }else if (argv[i][0] == '-'){
+ usage();
+ }else{
+ struct __user_cap_header_struct header;
+ struct __user_cap_data_struct user;
+ header.version = _LINUX_CAPABILITY_VERSION;
+ header.pid = 0;
+ if (capget(&header,&user)==-1){
+ perror ("capget");
+ }else{
+ if (show){
+ reducecap_print (&user);
+ }
+ if (vc_new_s_context(-2,remove,flags)==-1){
+ perror ("new_s_context -2");
+ }else{
+ fprintf (stderr,"Executing\n");
+ execvp (argv[i],argv+i);
+ fprintf (stderr,"Can't execute command %s\n",argv[i]);
+ }
+ }
+ }
+ return ret;
+}
+
--- /dev/null
+// $Id: showattr.c,v 1.1.4.1 2003/11/18 22:31:10 ensc Exp $
+
+// Copyright (C) 2003 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+// based on showattr.cc by Jacques Gelinas
+//
+// 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, 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+#include "compat.h"
+
+#include <stdio.h>
+#include <errno.h>
+#include <string.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <sys/ioctl.h>
+
+#include "ext2fs.h"
+
+
+// Patch to help compile this utility on unpatched kernel source
+#ifndef EXT2_IMMUTABLE_FILE_FL
+ #define EXT2_IMMUTABLE_FILE_FL 0x00000010
+ #define EXT2_IMMUTABLE_LINK_FL 0x00008000
+#endif
+
+/*
+ Get the extended attributes of a file
+*/
+static int getext2flags (const char *fname, long *flags)
+{
+ int ret = -1;
+ int fd = open (fname,O_RDONLY);
+ if (fd == -1){
+ fprintf (stderr,"Can't open file %s (%s)\n",fname,strerror(errno));
+ }else{
+ *flags = 0;
+ ret = ioctl (fd,EXT2_IOC_GETFLAGS,flags);
+ close (fd);
+ if (ret == -1){
+ fprintf (stderr,"Can't get ext2 flags on file %s (%s)\n"
+ ,fname,strerror(errno));
+ }
+ }
+ return ret;
+}
+
+/*
+ Set the extended attributes of a file
+*/
+static int setext2flags (const char *fname, long flags)
+{
+ int ret = -1;
+ int fd = open (fname,O_RDONLY);
+ if (fd == -1){
+ fprintf (stderr,"Can't open file %s (%s)\n",fname,strerror(errno));
+ }else{
+ ret = ioctl (fd,EXT2_IOC_SETFLAGS,&flags);
+ close (fd);
+ if (ret == -1){
+ fprintf (stderr,"Can't set ext2 flags on file %s (%s)\n"
+ ,fname,strerror(errno));
+ }
+ }
+ return ret;
+}
+
+
+int main (int argc, char *argv[])
+{
+ int ret = -1;
+ if (argc <= 1){
+ fprintf (stderr
+ ,"showattr file ...\n"
+ "\n"
+ "Presents extended file attribute.\n"
+ "\n"
+ "setattr --immutable --immulink file ...\n"
+ "\n"
+ "Sets the extended file attributes.\n"
+ "\n"
+ "These utilities exist as an interim until lsattr and\n"
+ "chattr are updated.\n"
+ );
+ }else if (strstr(argv[0],"showattr")!=NULL){
+ int i;
+ for (i=1; i<argc; i++){
+ long flags;
+ ret = getext2flags (argv[i],&flags);
+ if (ret == -1){
+ break;
+ }else{
+ printf ("%s\t%08lx\n",argv[i],flags);
+ }
+ }
+ }else if (strstr(argv[0],"setattr")!=NULL){
+ long flags = 0;
+ int i;
+ ret = 0;
+ for (i=1; i<argc; i++){
+ const char *arg = argv[i];
+ if (strncmp(arg,"--",2)==0){
+ if (strcmp(arg,"--immutable")==0){
+ flags |= EXT2_IMMUTABLE_FILE_FL;
+ }else if (strcmp(arg,"--immulink")==0){
+ flags |= EXT2_IMMUTABLE_LINK_FL;
+ }else{
+ fprintf (stderr,"Invalid option %s\n",arg);
+ ret = -1;
+ break;
+ }
+ }else{
+ ret = setext2flags (arg,flags);
+ if (ret == -1){
+ break;
+ }
+ }
+ }
+ }
+ return ret;
+}
+
--- /dev/null
+// $Id: showperm.c,v 1.1 2003/09/29 22:01:57 ensc Exp $
+
+// Copyright (C) 2003 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+// based on showperm.cc by Jacques Gelinas
+//
+// 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, 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+#include <stdio.h>
+#include <string.h>
+#include <errno.h>
+#include <sys/stat.h>
+
+int main (int argc, char *argv[])
+{
+ int ret = -1;
+ if (argc < 2){
+ fprintf (stderr,"showperm version %s\n",VERSION);
+ fprintf (stderr,
+ "showperm file or directory ...\n"
+ "prints permission bits for files\n"
+ "A very stripped down stat utility\n"
+ );
+ }else{
+ int i;
+ ret = 0;
+ for (i=1; i<argc; i++){
+ struct stat st;
+ if (lstat(argv[i],&st)==-1){
+ fprintf (stderr,"can't lstat %s (%s)\n",argv[i]
+ ,strerror(errno));
+ ret = -1;
+ }else{
+ printf ("%03o\n",(st.st_mode & 0777));
+ }
+ }
+ }
+ return ret;
+}
+
--- /dev/null
+// $Id: vbuild.cc,v 1.1.4.1 2004/02/09 22:55:00 ensc Exp $
+
+// Copyright (C) 2003 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+// based on vbuild.cc by Jacques Gelinas
+//
+// 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, 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+/*
+ This utility is used to build a new vserver using a reference vserver.
+ It uses hard link whenever possible instead of duplicating files.
+ Once done, it sets the immutable bits.
+*/
+#include <stdio.h>
+#include <fcntl.h>
+#include <sys/ioctl.h>
+#include <sys/stat.h>
+#include <unistd.h>
+#include <errno.h>
+#include <dirent.h>
+
+#include <string>
+#include <vector>
+#include <list>
+#include <set>
+#include "vutil.h"
+
+using namespace std;
+
+struct EXCLDIR{
+ string prefix;
+ int len;
+ EXCLDIR(const char *s)
+ {
+ prefix = s;
+ prefix += '/';
+ len = prefix.size();
+ }
+};
+static vector<EXCLDIR> excldirs;
+
+
+static int ext2flags = EXT2_IMMUTABLE_FILE_FL | EXT2_IMMUTABLE_LINK_FL;
+static struct {
+ int nblink;
+ int nbcopy;
+ long size_copy;
+ int nbdir;
+ int nbsymlink;
+ int nbspc;
+} stats;
+
+
+static void usage()
+{
+ cerr <<
+ "vbuild version " << VERSION <<
+ "\n\n"
+ "vbuild [ options ] reference-server new-vservers\n"
+ "\n"
+ "--test: Show what will be done, do not do it.\n"
+ "--debug: Prints some debugging messages.\n"
+ "\n"
+ "--excldir: None of the files under a given directory will be copied\n"
+ "\tThe directory is expressed in absolute/logical form (relative\n"
+ "\tto the vserver root (ex: /var/log)\n"
+ "\n"
+ "\n"
+ "--noflags: Do not put any immutable flags on the file\n"
+ "--immutable: Set the immutable_file bit on the files.\n"
+ "--immutable-mayunlink: Sets the immutable_link flag on files.\n"
+ "--stats: Produce statistics on the number of file linked\n"
+ " copied and so on.\n"
+ "\n"
+ "By default, the immutable_file and immutable_link flags are\n"
+ "set on the files. So if you want no immutable flags, you must\n"
+ "use --noflags. If you want a single flag, you must use\n"
+ "--noflags first, then the --immutable or --immutable-mayunlink\n"
+ "flag.\n"
+ ;
+}
+
+/*
+ Return true if a directory lies inside a directory set
+*/
+static bool vbuild_inside (vector<EXCLDIR> &dirs, const char *path)
+{
+ bool found = false;
+ for (unsigned i=0; i<dirs.size(); i++){
+ if (strncmp(dirs[i].prefix.c_str(),path,dirs[i].len)==0){
+ found = true;
+ break;
+ }
+ }
+ return found;
+}
+
+
+
+static int vbuild_copy (
+ string refserv,
+ string newserv,
+ dev_t dev, // We stay on the same volume
+ string logical_dir,
+ set<string> &files)
+{
+ int ret = -1;
+ if (debug > 0) printf ("Copying directory %s\n",logical_dir.c_str());
+ DIR *dir = opendir (refserv.c_str());
+ if (dir == NULL){
+ fprintf (stderr,"Can't open directory %s (%s)\n",refserv.c_str()
+ ,strerror(errno));
+ }else{
+ logical_dir += "/";
+ bool copy_files = !vbuild_inside(excldirs,logical_dir.c_str());
+ struct dirent *ent;
+ ret = 0;
+ while (ret == 0 && (ent=readdir(dir))!=NULL){
+ if (strcmp(ent->d_name,".")==0 || strcmp(ent->d_name,"..")==0){
+ continue;
+ }
+ string file = refserv + "/" + ent->d_name;
+ struct stat st;
+ if (vutil_lstat(file.c_str(),st) == -1){
+ ret = -1;
+ }else if (st.st_dev != dev){
+ if (debug > 0) printf ("Ignore sub-directory %s\n",file.c_str());
+ }else{
+ string newfile = newserv + "/" + ent->d_name;
+ if (S_ISDIR(st.st_mode)){
+ if (vbuild_mkdir (newfile.c_str(),st.st_mode)==-1){
+ fprintf (stderr,"Can't mkdir %s (%s)\n"
+ ,newfile.c_str(),strerror(errno));
+ ret = -1;
+ }else{
+ stats.nbdir++;
+ if (vbuild_chown(newfile.c_str(),st.st_uid,st.st_gid)==-1){
+ fprintf (stderr,"Can't chown %s (%s)\n"
+ ,newfile.c_str(),strerror(errno));
+ ret = -1;
+ }
+ ret |= vbuild_copy (file,newfile,dev
+ ,logical_dir + ent->d_name,files);
+ }
+ }else if (S_ISLNK(st.st_mode)){
+ char path[PATH_MAX];
+ int len = readlink(file.c_str(),path,sizeof(path)-1);
+ if (len < 0){
+ fprintf (stderr,"Can't readlink %s (%s)\n"
+ ,file.c_str(),strerror(errno));
+ ret = -1;
+ }else{
+ path[len] = '\0';
+ stats.nbsymlink++;
+ if (vbuild_symlink (path,newfile.c_str())==-1){
+ fprintf (stderr,"Can't symlink %s to %s (%s)\n",
+ newfile.c_str(),path,strerror(errno));
+ }
+ }
+ }else if (S_ISBLK(st.st_mode)
+ || S_ISCHR(st.st_mode)
+ || S_ISFIFO(st.st_mode)){
+ stats.nbspc++;
+ if (vbuild_mknod (newfile.c_str(),st.st_mode,st.st_rdev)==-1){
+ fprintf (stderr,"Can't mknod %s (%s)\n"
+ ,newfile.c_str(),strerror(errno));
+ ret = -1;
+ }
+ }else if (S_ISSOCK(st.st_mode)){
+ // Do nothing
+ }else if (copy_files){
+ // Ok, this is a file. We either copy it or do a link
+ string logical_file = logical_dir + ent->d_name;
+ if (files.find (logical_file)==files.end()){
+ if (debug > 1) printf ("Copying file %s\n",file.c_str());
+ if (vbuild_file_copy (file.c_str(),newfile.c_str(),st)==-1){
+ fprintf (stderr,"Can't copy %s to %s (%s)\n",
+ file.c_str(),newfile.c_str(),strerror(errno));
+ ret = -1;
+ }else{
+ stats.size_copy += st.st_size;
+ stats.nbcopy++;
+ }
+ }else{
+ if (debug > 2) printf ("Linking file %s\n",file.c_str());
+ setext2flag (file.c_str(),false,ext2flags);
+ stats.nblink++;
+ if (vbuild_link (file.c_str(),newfile.c_str())==-1){
+ fprintf (stderr,"Can't link %s to %s (%s)\n",
+ file.c_str(),newfile.c_str(),strerror(errno));
+ ret = -1;
+ }
+ setext2flag (file.c_str(),true,ext2flags);
+ }
+ }
+ }
+ }
+ closedir(dir);
+ }
+ return ret;
+}
+
+int main (int argc, char *argv[])
+{
+ int ret = -1;
+ bool statistics = false;
+ int i;
+ for (i=1; i<argc; i++){
+ const char *arg = argv[i];
+ //const char *opt = argv[i+1];
+ if (strcmp(arg,"--test")==0){
+ testmode = true;
+ }else if (strcmp(arg,"--debug")==0){
+ debug++;
+ }else if (strcmp(arg,"--stats")==0){
+ statistics = true;
+ }else if (strcmp(arg,"--noflags")==0){
+ ext2flags = 0;
+ }else if (strcmp(arg,"--immutable")==0){
+ ext2flags |= EXT2_IMMUTABLE_FILE_FL;
+ }else if (strcmp(arg,"--immutable-mayunlink")==0){
+ ext2flags |= EXT2_IMMUTABLE_LINK_FL;
+ }else if (strcmp(arg,"--excldir")==0){
+ i++;
+ excldirs.push_back (EXCLDIR(argv[i]));
+ }else{
+ break;
+ }
+ }
+ if (i!=argc-2){
+ usage();
+ }else{
+ string refserv = argv[i++];
+ string newserv = argv[i];
+ list<PACKAGE> packages;
+ // Load the files which are not configuration files from
+ // the packages
+ vutil_loadallpkg (refserv,packages);
+ set<string> files;
+ for (list<PACKAGE>::iterator it=packages.begin(); it!=packages.end(); it++){
+ (*it).loadfiles(refserv,files);
+ }
+ // Now, we do a recursive copy of refserv into newserv
+ umask (0);
+ mkdir (newserv.c_str(),0755);
+ setext2flag(newserv.c_str(), false, 0);
+ // Check if it is on the same volume
+ struct stat refst,newst;
+ if (vutil_lstat(refserv,refst)!=-1
+ && vutil_lstat(newserv,newst)!=1){
+ if (refst.st_dev != newst.st_dev){
+ fprintf (stderr,"Can't vbuild %s because it is not on the same volume as %s\n"
+ ,newserv.c_str(),refserv.c_str());
+ }else{
+ stats.nbdir = stats.nblink = stats.nbcopy = stats.nbsymlink = 0;
+ stats.nbspc = 0;
+ stats.size_copy = 0;
+ ret = vbuild_copy (refserv,newserv,refst.st_dev,"",files);
+ if (statistics){
+ printf ("Directory created: %d\n",stats.nbdir);
+ printf ("Files copied : %d\n",stats.nbcopy);
+ printf ("Bytes copied : %ld\n",stats.size_copy);
+ printf ("Files linked : %d\n",stats.nblink);
+ printf ("Files symlinked : %d\n",stats.nbsymlink);
+ printf ("Special files : %d\n",stats.nbspc);
+ }
+ }
+ }
+ }
+ return ret;
+}
+
+
--- /dev/null
+// $Id: vcheck.cc,v 1.1 2003/09/29 22:01:57 ensc Exp $
+
+// Copyright (C) 2003 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+// based on vcheck.cc by Jacques Gelinas
+//
+// 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, 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+/*
+ This utility is used to compare two vservers. One is known to
+ be clean and the other is potentially corrupted (cracked). The
+ goal of this program is to run the rpm verify command, but using
+ the RPM database of the first vserver.
+*/
+#include <stdio.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <errno.h>
+#include <dirent.h>
+
+#include <string>
+#include <vector>
+#include <list>
+#include <set>
+#include "vutil.h"
+
+using namespace std;
+
+
+static void usage()
+{
+ cerr <<
+ "vcheck version " << VERSION <<
+ "\n\n"
+ "vcheck [ options ] reference-server chk-vservers\n"
+ "\n"
+ "--diffpkgs: Shows which package differ.\n"
+ " + means the package only exists in chk-server.\n"
+ " - means the package does not exist in chk-server.\n"
+ " ! means the servers have different version.\n"
+ "\n"
+ "--verify: Execute an RPM verify on common packages.\n"
+ "--debug: Turn on some (useless) debugging messages.\n"
+ ;
+}
+
+typedef list<PACKAGE> PACKAGES;
+
+/*
+ Delete a directory silently
+*/
+static int vcheck_deldir (const string &path)
+{
+ int ret = -1;
+ struct stat st;
+ if (lstat(path.c_str(),&st)==-1){
+ ret = 0;
+ }else{
+ if (!S_ISDIR(st.st_mode)){
+ fprintf (stderr,"%s already exist and is not a directory\n"
+ ,path.c_str());
+ exit (-1);
+ }else{
+ DIR *d = opendir (path.c_str());
+ if (d != NULL){
+ struct dirent *ent;
+ ret = 0;
+ while ((ent=readdir(d))!=NULL){
+ if (strcmp(ent->d_name,".")!=0
+ && strcmp(ent->d_name,"..")!=0){
+ string tmp = path + "/" + ent->d_name;
+ if (unlink(tmp.c_str())==-1){
+ fprintf (stderr,"Can't delete file %s (%s)\n",tmp.c_str()
+ ,strerror(errno));
+ ret = -1;
+ break;
+ }
+ }
+ }
+ closedir (d);
+ rmdir (path.c_str());
+ }
+ }
+ }
+ return ret;
+}
+
+
+static int vcheck_copydb (const string &refserv, const string &path)
+{
+ int ret = -1;
+ string refpath = refserv + "/var/lib/rpm";
+ DIR *d = opendir (refpath.c_str());
+ if (d == NULL){
+ fprintf (stderr,"Can't open directory %s (%s)\n",refpath.c_str()
+ ,strerror(errno));
+ }else{
+ ret = 0;
+ struct dirent *ent;
+ while ((ent=readdir(d))!=NULL){
+ if (strcmp(ent->d_name,".")!=0
+ && strcmp(ent->d_name,"..")!=0){
+ string srcpath = refpath + "/" + ent->d_name;
+ const char *spath = srcpath.c_str();
+ struct stat st;
+ if (stat(spath,&st)!=-1){
+ string dstpath = path + "/" + ent->d_name;
+ if (file_copy (spath,dstpath.c_str(),st) == -1){
+ ret = -1;
+ break;
+ }
+ }else{
+ ret = -1;
+ fprintf (stderr,"Can't stat %s (%s)\n",spath,strerror(errno));
+ break;
+ }
+ }
+ }
+ closedir (d);
+ }
+ return ret;
+}
+
+class cmp_name{
+public:
+ int operator()(const PACKAGE &p1, const PACKAGE &p2){
+ return strcmp(p1.name.c_str(),p2.name.c_str());
+ }
+};
+
+
+int main (int argc, char *argv[])
+{
+ int ret = -1;
+ bool diffpkg = false;
+ bool verify = false;
+ int i;
+ for (i=1; i<argc; i++){
+ const char *arg = argv[i];
+ //const char *opt = argv[i+1];
+ if (strcmp(arg,"--diffpkg")==0){
+ diffpkg = true;
+ }else if (strcmp(arg,"--verify")==0){
+ verify = true;
+ }else if (strcmp(arg,"--debug")==0){
+ debug++;
+ }else{
+ break;
+ }
+ }
+ if (i!=argc-2){
+ usage();
+ }else{
+ string refserv = argv[i++];
+ string chkserv = argv[i];
+ PACKAGES refpkgs,chkpkgs;
+ // Load the package list from both vservers
+ vutil_loadallpkg (refserv,refpkgs);
+ vutil_loadallpkg (chkserv,chkpkgs);
+ PACKAGES common, differ, added, removed;
+ // Find which package are different, missing and added
+ // to chkserv
+ for (PACKAGES::iterator it=refpkgs.begin(); it!=refpkgs.end(); it++){
+ PACKAGES::iterator f = find_if(chkpkgs.begin(),chkpkgs.end(),same_name(*it));
+ if (f == chkpkgs.end()){
+ removed.push_back (*it);
+ }else if (f->version != it->version){
+ differ.push_back (*it);
+ }else{
+ common.push_back (*it);
+ }
+ }
+ for (list<PACKAGE>::iterator it=chkpkgs.begin(); it!=chkpkgs.end(); it++){
+ list<PACKAGE>::iterator f = find_if(refpkgs.begin(),refpkgs.end(),same_name(*it));
+ if (f == refpkgs.end()){
+ added.push_back (*it);
+ }
+ }
+ differ.sort ();
+ added.sort();
+ removed.sort();
+ common.sort ();
+ bool something = false;
+ if (diffpkg){
+ for (PACKAGES::iterator it=removed.begin(); it!=removed.end(); it++){
+ printf ("- %s\n",it->name.c_str());
+ }
+ for (PACKAGES::iterator it=added.begin(); it!=added.end(); it++){
+ printf ("+ %s\n",it->name.c_str());
+ }
+ for (PACKAGES::iterator it=differ.begin(); it!=differ.end(); it++){
+ printf ("! %s\n",it->name.c_str());
+ }
+ something = true;
+ }
+ if (verify){
+ // We copy the rpm database from the reference vserver to
+ // the target vserver
+ string dbpath = chkserv + "/tmp/vcheck.db";
+ vcheck_deldir (dbpath);
+ if (mkdir (dbpath.c_str(),0)==-1){
+ fprintf (stderr,"Can't create directory %s (%s)\n"
+ ,dbpath.c_str(),strerror(errno));
+ }else if (vcheck_copydb (refserv,dbpath) != -1){
+ // We only compare the common package
+ string cmd = "rpm --dbpath /tmp/vcheck.db --root " + chkserv + " -V";
+ for (PACKAGES::iterator it=common.begin(); it!=common.end(); it++){
+ //printf ("compare %s\n",it->name.c_str());
+ cmd += " " + it->name;
+ }
+ if (debug) printf ("CMD: %s\n",cmd.c_str());
+ system (cmd.c_str());
+ }
+ vcheck_deldir (dbpath);
+ something = true;
+ }
+ if (!something){
+ fprintf (stderr,"Nothing to do !!!\n\n");
+ usage();
+ }
+ }
+ return ret;
+}
+
+
+
--- /dev/null
+// $Id: vdu.c,v 1.1 2003/09/29 22:01:57 ensc Exp $
+
+// Copyright (C) 2003 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+// based on vdu.cc by Jacques Gelinas
+//
+// 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, 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <dirent.h>
+#include <errno.h>
+#include <string.h>
+
+__extension__ typedef long long longlong;
+
+static int vdu_onedir (char const *path, longlong *size)
+{
+ int ret = -1;
+ int dirfd = open (path,O_RDONLY); // A handle to speed up
+ // chdir
+ if (dirfd == -1){
+ fprintf (stderr,"Can't open directory %s (%s)\n",path
+ ,strerror(errno));
+ }else{
+ DIR *dir;
+
+ fchdir (dirfd);
+ dir = opendir (".");
+ if (dir == NULL){
+ fprintf (stderr,"Can't open (opendir) directory %s (%s)\n",path
+ ,strerror(errno));
+ }else{
+ struct stat dirst;
+ struct dirent *ent;
+ longlong dirsize = 0;
+
+ ret = 0;
+ lstat (".",&dirst);
+ while ((ent=readdir(dir))!=NULL){
+ struct stat st;
+ if (lstat(ent->d_name,&st)==-1){
+ fprintf (stderr,"Can't stat %s/%s (%s)\n",path
+ ,ent->d_name,strerror(errno));
+ ret = -1;
+ break;
+ }else if (S_ISREG(st.st_mode)){
+ if (st.st_nlink == 1){
+ dirsize += st.st_size;
+ }
+ }else if (S_ISDIR(st.st_mode) && st.st_dev == dirst.st_dev){
+ if (strcmp(ent->d_name,".")!=0
+ && strcmp(ent->d_name,"..")!=0){
+ char *tmp = malloc(strlen(path) + strlen(ent->d_name) + 2);
+ if (tmp==0) ret=-1;
+ else {
+ strcpy(tmp, path);
+ strcat(tmp, "/");
+ strcat(tmp, ent->d_name);
+ ret = vdu_onedir(tmp,&dirsize);
+ free(tmp);
+ fchdir (dirfd);
+ }
+ }
+ }
+ }
+ closedir (dir);
+ *size += dirsize;
+ }
+ close (dirfd);
+ }
+ return ret;
+}
+
+int main (int argc, char *argv[])
+{
+ int ret = -1;
+ if (argc < 2){
+ fprintf (stderr,"vdu version %s\n",VERSION);
+ fprintf (stderr,"vdu directory ...\n\n");
+ fprintf (stderr
+ ,"Compute the size of a directory tree, ignoring files\n"
+ "with more than one link.\n");
+ }else{
+ int i;
+
+ ret = 0;
+ for (i=1; i<argc && ret != -1; i++){
+ longlong size = 0;
+ long ksize;
+
+ ret = vdu_onedir (argv[i],&size);
+ ksize = size >> 10;
+ printf ("%s\t%ldK\n",argv[i],ksize);
+ }
+ }
+ return ret;
+}
+
--- /dev/null
+// $Id: vfiles.cc,v 1.1 2003/09/29 22:01:57 ensc Exp $
+
+// Copyright (C) 2003 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+// based on vfiles.cc by Jacques Gelinas
+//
+// 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, 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+/*
+ This utility is used to extract the list of non unified files in
+ a vserver.
+*/
+#include <stdio.h>
+#include <fcntl.h>
+#include <sys/ioctl.h>
+#include <sys/stat.h>
+#include <unistd.h>
+#include <errno.h>
+#include <dirent.h>
+
+#include <string>
+#include <list>
+#include <set>
+#include "vutil.h"
+
+using namespace std;
+
+static bool ignorelink = false;
+
+
+static void usage()
+{
+ cerr <<
+ "vfiles version " << VERSION <<
+ "\n\n"
+ "vfiles [ options ] reference-server vserver\n"
+ "\n"
+ "--debug: Prints some debugging messages.\n"
+ "--ignorelink: Do not print symbolic links (they are never unified)\n"
+ "\n"
+ ;
+}
+
+
+static int vfiles_walk (
+ string absdir,
+ dev_t dev, // We stay on the same volume
+ string logical_dir,
+ set<string> &files)
+{
+ int ret = -1;
+ if (debug > 0) printf ("Entering directory %s\n",logical_dir.c_str());
+ DIR *dir = opendir (absdir.c_str());
+ if (dir == NULL){
+ fprintf (stderr,"Can't open directory %s (%s)\n",absdir.c_str()
+ ,strerror(errno));
+ }else{
+ struct dirent *ent;
+ ret = 0;
+ while (ret == 0 && (ent=readdir(dir))!=NULL){
+ if (strcmp(ent->d_name,".")==0 || strcmp(ent->d_name,"..")==0){
+ continue;
+ }
+ string file = absdir + "/" + ent->d_name;
+ struct stat st;
+ if (vutil_lstat(file,st) == -1){
+ ret = -1;
+ }else if (st.st_dev != dev){
+ if (debug > 0) printf ("Ignore sub-directory %s\n",file.c_str());
+ }else{
+ if (S_ISDIR(st.st_mode)){
+ ret |= vfiles_walk (file,dev
+ ,logical_dir + "/" + ent->d_name,files);
+ }else if (S_ISLNK(st.st_mode)){
+ if (!ignorelink) printf ("%s\n",file.c_str());
+ }else if (S_ISBLK(st.st_mode)
+ || S_ISCHR(st.st_mode)
+ || S_ISFIFO(st.st_mode)){
+ printf ("%s\n",file.c_str());
+ }else if (S_ISSOCK(st.st_mode)){
+ // Do nothing
+ }else{
+ // Ok, this is a file. We either copy it or do a link
+ string logical_file = logical_dir + "/" + ent->d_name;
+ if (files.find (logical_file)==files.end()){
+ printf ("%s\n",file.c_str());
+ }
+ }
+ }
+ }
+ closedir(dir);
+ }
+ return ret;
+}
+
+int main (int argc, char *argv[])
+{
+ int ret = -1;
+ int i;
+ for (i=1; i<argc; i++){
+ const char *arg = argv[i];
+ //const char *opt = argv[i+1];
+ if (strcmp(arg,"--debug")==0){
+ debug++;
+ }else if (strcmp(arg,"--ignorelink")==0){
+ ignorelink=true;
+ }else{
+ break;
+ }
+ }
+ if (i!=argc-2){
+ usage();
+ }else{
+ string refserv = argv[i++];
+ string newserv = argv[i];
+ list<PACKAGE> packages;
+ // Load the files which are not configuration files from
+ // the packages
+ vutil_loadallpkg (refserv,packages);
+ set<string> files;
+ for (list<PACKAGE>::iterator it=packages.begin(); it!=packages.end(); it++){
+ (*it).loadfiles(refserv,files);
+ }
+ struct stat st;
+ if (vutil_lstat(newserv,st)!=-1){
+ // Now, we do a recursive walk of newserv and prints
+ // all files not unifiable
+ ret = vfiles_walk (newserv,st.st_dev,"",files);
+ }
+ }
+ return ret;
+}
+
+
+
--- /dev/null
+// $Id: vkill.c,v 1.1.2.2 2003/12/30 13:49:17 ensc Exp $ --*- c -*--
+
+// Copyright (C) 2003 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+//
+// 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; version 2 of the License.
+//
+// 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+#include "compat.h"
+
+#include "vserver.h"
+#include "linuxvirtual.h"
+
+#include <getopt.h>
+#include <signal.h>
+#include <stdlib.h>
+#include <errno.h>
+#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
+#include <sys/types.h>
+#include <sys/resource.h>
+#include <sys/wait.h>
+
+#define VERSION_COPYRIGHT_DISCLAIMER
+
+#define CMD_HELP 0x8000
+#define CMD_VERSION 0x8001
+
+#define WRITE_MSG(FD,X) (void)(write(FD,X,sizeof(X)-1))
+#define WRITE_STR(FD,X) writeStr(FD,X)
+
+static struct option const
+CMDLINE_OPTIONS[] = {
+ { "help", no_argument, 0, CMD_HELP },
+ { "version", no_argument, 0, CMD_VERSION },
+ { 0,0,0,0 }
+};
+
+struct Arguments
+{
+ xid_t ctx;
+ int sig;
+};
+
+static char const * const SIGNALS[] = {
+ // 0 1 2 3 4 5 6 7
+ "UNUSED", "HUP", "INT", "QUIT", "ILL", "TRAP", "ABRT", "UNUSED",
+ "FPE", "KILL", "USR1", "SEGV", "USR2", "PIPE", "ALRM", "TERM",
+ "STKFLT", "CHLD", "CONT", "STOP", "TSTP", "TTIN", "TTOU", "IO",
+ "XCPU", "XFSZ", "VTALRM", "PROF", "WINCH",
+ 0,
+};
+
+inline static void UNUSED
+writeStr(int fd, char const *cmd)
+{
+ (void)write(fd, cmd, strlen(cmd));
+}
+
+static void
+showHelp(int fd, char const *cmd, int res)
+{
+ WRITE_MSG(fd, "Usage: ");
+ WRITE_STR(fd, cmd);
+ WRITE_MSG(fd,
+ " [-c <ctx>] [-s <signal>] [--] <pid>*\n"
+ "Please report bugs to " PACKAGE_BUGREPORT "\n");
+ exit(res);
+}
+
+static void
+showVersion()
+{
+ WRITE_MSG(1,
+ "vkill " VERSION " -- sends signals to processes within other contexts\n"
+ "This program is part of " PACKAGE_STRING "\n\n"
+ "Copyright (C) 2003 Enrico Scholz\n"
+ VERSION_COPYRIGHT_DISCLAIMER);
+ exit(0);
+}
+
+static int
+str2sig(char const *str)
+{
+ char *errptr;
+ int res = strtol(str, &errptr, 10);
+
+ if (*errptr!='\0') res=-1;
+ if (res==-1 && strncmp(str,"SIG",3)==0) str+=3;
+ if (res==-1) {
+ char const * const *ptr = SIGNALS;
+ for (;*ptr!=0; ++ptr) {
+ if (strcmp(*ptr,str)!=0) continue;
+ res = ptr-SIGNALS;
+ break;
+ }
+ }
+
+ return res;
+}
+
+#if defined(VC_ENABLE_API_LEGACY)
+inline static ALWAYSINLINE int
+kill_wrapper_legacy(xid_t ctx, char const *proc, int sig)
+{
+ pid_t pid = fork();
+ if (pid==-1) {
+ perror("fork()");
+ exit(1);
+ }
+ else if (pid==0) {
+ int status;
+ int res;
+ while ((res=wait4(pid, &status, 0,0))==-1 &&
+ (errno==EAGAIN || errno==EINTR)) {}
+
+ return (res==0 && WIFEXITED(status) && WEXITSTATUS(status)) ? 0 : 1;
+ }
+
+ execl(LEGACYDIR "/vkill", "legacy/vkill", proc, (void *)(0));
+ perror("execl()");
+ exit(1);
+}
+
+static int
+kill_wrapper(xid_t ctx, char const *pid, int sig)
+{
+ //printf("kill_wrapper(%u, %s, %i)\n", ctx, pid, sig);
+ if (vc_ctx_kill(ctx,atoi(pid),sig)==-1) {
+ int err = errno;
+ if (vc_get_version(VC_CAT_COMPAT)==-1)
+ return kill_wrapper_legacy(ctx, pid, sig);
+ else {
+ errno = err;
+ perror("vc_ctx_kill()");
+ return 1;
+ }
+ }
+
+ return 0;
+}
+#else // VC_ENABLE_API_LEGACY
+inline static int
+kill_wrapper(xid_t ctx, char const *pid, int sig)
+{
+ if (vc_ctx_kill(ctx,atoi(pid),sig)==-1) {
+ perror("vc_ctx_kill()");
+ return 1;
+ }
+ return 0;
+}
+#endif
+
+
+int main(int argc, char *argv[])
+{
+ int fail = 0;
+ struct Arguments args = {
+ .ctx = VC_NOCTX,
+ .sig = SIGTERM,
+ };
+
+ while (1) {
+ int c = getopt_long(argc, argv, "c:s:", CMDLINE_OPTIONS, 0);
+ if (c==-1) break;
+
+ switch (c) {
+ case CMD_HELP : showHelp(1, argv[0], 0);
+ case CMD_VERSION : showVersion();
+ case 'c' : args.ctx = atoi(optarg); break;
+ case 's' : args.sig = str2sig(optarg); break;
+ default :
+ WRITE_MSG(2, "Try '");
+ WRITE_STR(2, argv[0]);
+ WRITE_MSG(2, " --help\" for more information.\n");
+ return EXIT_FAILURE;
+ break;
+ }
+ }
+
+ if (args.sig==-1) {
+ WRITE_MSG(2, "Invalid signal specified\n");
+ return EXIT_FAILURE;
+ }
+
+ if (args.ctx==VC_NOCTX && optind==argc) {
+ WRITE_MSG(2, "No pid specified\n");
+ return EXIT_FAILURE;
+ }
+
+ if (optind==argc)
+ fail += kill_wrapper(args.ctx, "0", args.sig);
+ else for (;optind<argc;++optind)
+ fail += kill_wrapper(args.ctx, argv[optind], args.sig);
+
+ return fail==0 ? EXIT_SUCCESS : EXIT_FAILURE;
+}
+
+#ifdef TESTSUITE
+void
+vkill_test()
+{
+ assert(str2sig("0") ==0 );
+ assert(str2sig("1") ==1 );
+ assert(str2sig("10")==10);
+ assert(str2sig("SIGHUP")==1);
+ assert(str2sig("HUP") ==1);
+ assert(str2sig("SIGCHLD")==17);
+ assert(str2sig("CHLD") ==17);
+ assert(str2sig("x")==-1);
+ assert(str2sig("1 0")==-1);
+
+ return 0;
+}
+#endif
--- /dev/null
+// $Id: vlimit.c,v 1.1.2.2 2003/12/30 13:47:08 ensc Exp $
+
+// Copyright (C) 2003 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+//
+// 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, 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+/*
+ Set the global per context limit of a resource (memory, file handle).
+ This utility can do it either for the current context or a selected
+ one.
+
+ It uses the same options as ulimit, when possible
+*/
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+#include "compat.h"
+
+#include "vserver.h"
+#include "vserver-internal.h"
+
+#include <getopt.h>
+#include <string.h>
+#include <unistd.h>
+#include <assert.h>
+#include <stdbool.h>
+#include <stdio.h>
+
+#define VERSION_COPYRIGHT_DISCLAIMER
+
+inline static void UNUSED
+writeStr(int fd, char const *cmd)
+{
+ (void)write(fd, cmd, strlen(cmd));
+}
+
+#define WRITE_MSG(FD,X) (void)(write(FD,X,sizeof(X)-1))
+#define WRITE_STR(FD,X) writeStr(FD,X)
+
+#define NUMLIM(X) \
+{ #X, required_argument, 0, 2048|X }
+
+static struct option const
+CMDLINE_OPTIONS[] = {
+ { "help", no_argument, 0, 'h' },
+ { "version", no_argument, 0, 'v' },
+ { "all", no_argument, 0, 'a' },
+ NUMLIM( 0), NUMLIM( 1), NUMLIM( 2), NUMLIM( 3),
+ NUMLIM( 4), NUMLIM( 5), NUMLIM( 6), NUMLIM( 7),
+ NUMLIM( 8), NUMLIM( 9), NUMLIM(10), NUMLIM(11),
+ NUMLIM(12), NUMLIM(13), NUMLIM(14), NUMLIM(15),
+ NUMLIM(16), NUMLIM(17), NUMLIM(18), NUMLIM(19),
+ NUMLIM(20), NUMLIM(21), NUMLIM(22), NUMLIM(23),
+ NUMLIM(24), NUMLIM(25), NUMLIM(26), NUMLIM(27),
+ NUMLIM(28), NUMLIM(29), NUMLIM(30), NUMLIM(31),
+ { 0,0,0,0 }
+};
+
+static void
+showHelp(int fd, char const *cmd, int res)
+{
+ WRITE_MSG(fd, "Usage: ");
+ WRITE_STR(fd, cmd);
+ WRITE_MSG(fd,
+ " [-c|--ctx <ctx>] [-a|--all] [-MSH --<nr> <value>]*\n"
+ "Please report bugs to " PACKAGE_BUGREPORT "\n");
+ exit(res);
+}
+
+static void
+showVersion()
+{
+ WRITE_MSG(1,
+ "vlimit " VERSION " -- limits context-resources\n"
+ "This program is part of " PACKAGE_STRING "\n\n"
+ "Copyright (C) 2003 Enrico Scholz\n"
+ VERSION_COPYRIGHT_DISCLAIMER);
+ exit(0);
+}
+
+static void *
+appendLimit(char *ptr, bool do_it, vc_limit_t lim)
+{
+ memcpy(ptr, " ", 2);
+ ptr += 2;
+ if (do_it) {
+ if (lim==VC_LIM_INFINITY) {
+ strcpy(ptr, "INF");
+ ptr += 3;
+ }
+ else {
+ memcpy(ptr, "0x", 2);
+ ptr += 2;
+
+ ptr += utilvserver_uint2str(ptr, 20, (lim>>32), 16);
+ ptr += utilvserver_uint2str(ptr, 20, lim&0xffffffff, 16);
+ *ptr = ' ';
+ }
+ }
+ else {
+ memcpy(ptr, "N/A", 3);
+ ptr += 3;
+ }
+
+ return ptr;
+}
+
+static void
+showAll(int ctx)
+{
+ struct vc_rlimit_mask mask;
+ size_t i;
+
+ if (vc_get_rlimit_mask(-2, &mask)==-1) {
+ perror("vc_get_rlimit_mask()");
+ //exit(1);
+ }
+
+ for (i=0; i<32; ++i) {
+ uint32_t bitmask = (1<<i);
+ struct vc_rlimit limit;
+ char buf[100], *ptr=buf;
+
+ if (vc_get_rlimit(ctx, i, &limit)==-1) {
+ perror("vc_get_rlimit()");
+ //continue;
+ }
+
+ memset(buf, ' ', sizeof buf);
+ ptr += utilvserver_uint2str(ptr, 100, i, 10);
+ *ptr = ' ';
+
+ ptr = appendLimit(buf+10, mask.min &bitmask, limit.min);
+ ptr = appendLimit(buf+30, mask.soft&bitmask, limit.soft);
+ ptr = appendLimit(buf+50, mask.hard&bitmask, limit.hard);
+
+ *ptr++ = '\n';
+ write(1, buf, ptr-buf);
+ }
+}
+
+static void
+ setLimits(int ctx, struct vc_rlimit const limits[], uint32_t mask)
+{
+ size_t i;
+ for (i=0; i<32; ++i) {
+ if ((mask & (1<<i))==0) continue;
+ if (vc_set_rlimit(-2, i, limits+i)) {
+ perror("vc_set_rlimit()");
+ }
+ }
+}
+
+int main (int argc, char *argv[])
+{
+ // overall used limits
+ uint32_t lim_mask = 0;
+ int set_mask = 0;
+ struct vc_rlimit limits[32];
+ bool show_all = false;
+ xid_t ctx = VC_SAMECTX;
+
+ {
+ size_t i;
+ for (i=0; i<32; ++i) {
+ limits[i].min = VC_LIM_KEEP;
+ limits[i].soft = VC_LIM_KEEP;
+ limits[i].hard = VC_LIM_KEEP;
+ }
+ }
+
+ while (1) {
+ int c = getopt_long(argc, argv, "MSHhvac:", CMDLINE_OPTIONS, 0);
+ if (c==-1) break;
+
+ if (2048<=c && c<2048+32) {
+ int id = c-2048;
+ vc_limit_t val;
+
+ if (strcmp(optarg, "inf")==0) val = VC_LIM_INFINITY;
+ else val = atoll(optarg);
+
+ if (set_mask & 1) limits[id].min = val;
+ if (set_mask & 2) limits[id].soft = val;
+ if (set_mask & 4) limits[id].soft = val;
+
+ lim_mask |= (1<<id);
+ set_mask = 0;
+ }
+ else switch (c) {
+ case 'h' : showHelp(1, argv[0], 0);
+ case 'v' : showVersion();
+ case 'c' : ctx = atoi(optarg); break;
+ case 'a' : show_all = true; break;
+ case 'M' :
+ case 'S' :
+ case 'H' :
+ switch (c) {
+ case 'M' : set_mask |= 1; break;
+ case 'S' : set_mask |= 2; break;
+ case 'H' : set_mask |= 4; break;
+ default : assert(false);
+ }
+ break;
+
+ default :
+ WRITE_MSG(2, "Try '");
+ WRITE_STR(2, argv[0]);
+ WRITE_MSG(2, " --help\" for more information.\n");
+ return EXIT_FAILURE;
+ break;
+ }
+ }
+
+ setLimits(ctx, limits, lim_mask);
+ if (show_all) showAll(ctx);
+
+ return EXIT_SUCCESS;
+}
--- /dev/null
+// $Id: vreboot.c,v 1.1 2003/09/29 22:01:57 ensc Exp $
+
+// Copyright (C) 2003 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+// based on vreboot.cc by Jacques Gelinas
+//
+// 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, 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+/*
+ Used to send a reboot message to the reboot manager. It opens /dev/reboot
+ and write "reboot\n".
+*/
+#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
+#include <sys/types.h>
+#include <errno.h>
+#include <sys/stat.h>
+#include <sys/time.h>
+#include <sys/socket.h>
+#include <sys/un.h>
+#include <stdbool.h>
+
+/*
+ Connect to a unix domain socket
+*/
+static int vreboot_connect (const char *sockpath, bool showerror)
+{
+ int ret = -1;
+ int fd = socket (AF_UNIX,SOCK_STREAM,0);
+ if (fd == -1){
+ if (showerror) perror("socket client");
+ }else{
+ struct sockaddr_un un;
+ int s;
+
+ un.sun_family = AF_UNIX;
+ strcpy (un.sun_path,sockpath);
+ s = connect(fd,(struct sockaddr*)&un,sizeof(un));
+ if (s == -1){
+ if (showerror) fprintf (stderr,"connect %s (%s)\n"
+ ,sockpath,strerror(errno));
+ }else{
+ ret = fd;
+ }
+ }
+ return ret;
+}
+
+static void usage()
+{
+ fprintf (stderr,"vreboot version %s\n",VERSION);
+ fprintf (stderr,"\n");
+ fprintf (stderr,"vreboot [ --socket path ]\n");
+ fprintf (stderr,"vhalt [ --socket path ]\n");
+ fprintf (stderr,"vreboot request a reboot or a halt of a virtual server\n");
+}
+
+int main (int argc, char *argv[])
+{
+ int ret = -1;
+ int i;
+ const char *sockpath = "/dev/reboot";
+ for (i=1; i<argc; i++){
+ const char *arg = argv[i];
+ const char *opt = argv[i+1];
+ if (strcmp(arg,"--socket")==0){
+ sockpath = opt;
+ i++;
+ }else if (strcmp(arg,"--help")==0){
+ break;
+
+ }else{
+ fprintf (stderr,"Invalid option %s\n",arg);
+ break;
+ }
+ }
+ if (argc != i){
+ usage();
+ }else{
+ int fd = vreboot_connect (sockpath,true);
+ if (fd != -1){
+ if (strstr(argv[0],"halt")!=NULL){
+ write (fd,"halt\n",5);
+ }else{
+ write (fd,"reboot\n",7);
+ }
+ close (fd);
+ ret = 0;
+ }
+ }
+ return ret;
+}
+
--- /dev/null
+// $Id: vserver-stat.c,v 1.1.4.1 2003/10/14 00:45:04 ensc Exp $
+
+// Copyright (C) 2003 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+// based on vserver-stat.cc by Guillaum Dallaire and Jacques Gelinas
+//
+// 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, 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+/*
+ vserver-stat help you to see all the active context currently in the kernel
+ with some useful stat
+
+ Changelog:
+
+ 2003-01-08 Jacques Gelinas: Shows vserver description
+ 2002-02-28 Jacques Gelinas: Use dynamic system call
+ 2002-06-05 Martial Rioux : fix memory output error
+ 2002-12-05 Martial Rioux : fix output glitch
+ 2001-11-29 added uptime/ctx stat
+ 2001-11-20 added vmsize, rss, stime and utime stat
+*/
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+#include "compat.h"
+
+#include "vserver.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <ctype.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <dirent.h>
+#include <string.h>
+#include <errno.h>
+#include <syscall.h>
+#include <time.h>
+
+#define PROC_DIR_NAME "/proc"
+#define CTX_DIR_NAME "/var/run/vservers/"
+#define CTX_NAME_MAX_LEN 50
+
+struct ctx_list
+{
+ int ctx;
+ int process_count;
+ int VmSize_total;
+ int VmRSS_total;
+ long start_time_oldest;
+ long stime_total, utime_total;
+ char name[CTX_NAME_MAX_LEN];
+ struct ctx_list *next;
+} *my_ctx_list;
+
+struct process_info
+{
+ long VmSize; // number of pages of virtual memory
+ long VmRSS; // resident set size from /proc/#/stat
+ long start_time; // start time of process -- seconds since 1-1-70
+ long stime, utime; // kernel & user-mode CPU time accumulated by process
+ long cstime, cutime; // cumulative time of process and reaped children
+ int s_context;
+};
+
+char *process_name;
+
+void usage()
+{
+ fprintf(stderr, "%s: from vserver kit version %s\n", process_name, VERSION);
+ fprintf(stderr, "(no argument needed)\n\n");
+ fprintf(stderr, "Show informations about all the active context.\n\n");
+ fprintf(stderr, " CTX# Context number\n");
+ fprintf(stderr, " #0 = root context\n");
+ fprintf(stderr, " #1 = monitoring context\n");
+ fprintf(stderr, " PROC QTY Quantity of processes in each context\n");
+ fprintf(stderr, " VSZ Number of pages of virtual memory\n");
+ fprintf(stderr, " RSS Resident set size\n");
+ fprintf(stderr, " userTIME User-mode CPU time accumulated\n");
+ fprintf(stderr, " sysTIME Kernel-mode CPU time accumulated\n");
+ fprintf(stderr, " UPTIME Uptime/context\n");
+ fprintf(stderr, " NAME Virtual server name\n");
+ fprintf(stderr, "\n");
+
+}
+
+// return uptime (in ms) from /proc/uptime
+long get_uptime()
+{
+ int fd;
+ double up;
+ char buffer[64];
+
+ // open the /proc/uptime file
+ if ((fd = open("/proc/uptime", O_RDONLY, 0)) == -1)
+ return 0;
+
+ if (read(fd, buffer, sizeof(buffer)) < 1)
+ return 0;
+
+ close(fd);
+
+ if (sscanf(buffer, "%lf", &up) < 1)
+ {
+ fprintf(stderr, "%s: bad data in /proc/uptime\n", process_name);
+ return 0;
+ }
+
+ return up * 100;
+}
+
+// insert a new record to the list
+struct ctx_list *insert_ctx(int ctx, struct ctx_list *next)
+{
+ struct ctx_list *new;
+
+ new = (struct ctx_list *)malloc(sizeof(struct ctx_list));
+ new->ctx = ctx;
+ new->process_count = 0;
+ new->VmSize_total = 0;
+ new->VmRSS_total = 0;
+ new->utime_total = 0;
+ new->stime_total = 0;
+ new->start_time_oldest = 0;
+ new->next = next;
+ new->name[0] = '\0';
+
+ return new;
+}
+
+// find the ctx record with the ctx number
+struct ctx_list *find_ctx(struct ctx_list *list, int ctx)
+{
+ // very simple search engine...
+ while(list != NULL)
+ {
+ // find
+ if (list->ctx == ctx)
+ {
+ return list;
+ }
+ list = list->next;
+ }
+ return NULL;
+}
+
+// compute the process info into the list
+void add_ctx(struct ctx_list *list, struct process_info *process)
+{
+ list->process_count ++;
+ list->VmSize_total += process->VmSize;
+ list->VmRSS_total += process->VmRSS;
+ list->utime_total += process->utime + process->cutime;
+ list->stime_total += process->stime + process->cstime;
+
+ if (list->start_time_oldest == 0) // first entry
+ list->start_time_oldest = process->start_time;
+ else
+ if (list->start_time_oldest > process->start_time)
+ list->start_time_oldest = process->start_time;
+}
+
+// increment the count number in the ctx record using ctx number
+void count_ctx(struct ctx_list *list, struct process_info *process)
+{
+ struct ctx_list *prev = list;
+
+ if (process == NULL) return;
+
+ // search
+ while(list != NULL)
+ {
+ // find
+ if (list->ctx == process->s_context)
+ {
+ add_ctx(list, process);
+ return;
+ }
+ // insert between
+ if (list->ctx > process->s_context)
+ {
+ prev->next = insert_ctx(process->s_context, list);
+ add_ctx(prev->next, process);
+ return;
+ }
+ // ++
+ prev = list;
+ list = list->next;
+ }
+ // add at the end
+ prev->next = insert_ctx(process->s_context, NULL);
+ add_ctx(prev->next, process);
+}
+
+// free mem
+void free_ctx(struct ctx_list *list)
+{
+ struct ctx_list *prev;
+
+ for(;list != NULL; list = prev)
+ {
+ prev = list->next;
+ free(list);
+ }
+}
+
+/*
+ Read the vserver description
+*/
+static void read_description(
+ const char *name, // Vserver name
+ char descrip[1000])
+{
+ char conf[PATH_MAX];
+ FILE *fin;
+ descrip[0] = '\0';
+ snprintf (conf,sizeof(conf)-1,"/etc/vservers/%s.conf",name);
+ fin = fopen (conf,"r");
+ if (fin != NULL){
+ char line[1000];
+ while (fgets(line,sizeof(line)-1,fin)!=NULL){
+ if (line[0] == '#'){
+ char *pt = line+1;
+ while (isspace(*pt)) pt++;
+ if (strncmp(pt,"Description:",12)==0){
+ int last;
+ pt += 12;
+ while (isspace(*pt)) pt++;
+ strcpy (descrip,pt);
+ last = strlen(descrip)-1;
+ if (last >=0 && descrip[last] == '\n'){
+ descrip[last] = '\0';
+ }
+ }
+ }
+ }
+ fclose (fin);
+ }
+}
+
+// show the ctx_list with name from /var/run/servers/*.ctx
+void show_ctx(struct ctx_list *list)
+{
+ // fill the ctx_list using the /var/run/servers/*.ctx file(s)
+ __extension__ int bind_ctx_name(struct ctx_list *list)
+ {
+ // fetch the context number in /var/run/vservers/'filename'
+ int fetch_ctx_number(char *filename)
+ {
+ int fd;
+ int ctx;
+ char buf[25];
+
+ // open file
+ if ((fd = open(filename, O_RDONLY, 0)) == -1)
+ return -1;
+ // put the file in a small buffer
+ if (read(fd, buf, sizeof(buf)) < 1)
+ return -1;
+
+ close(fd);
+
+ sscanf(buf, "S_CONTEXT=%d", &ctx);
+ return ctx;
+ }
+
+ /* begin bind_ctx_name */
+
+ DIR *ctx_dir;
+ struct dirent *dir_entry;
+ char *p;
+ char ctx_name[CTX_NAME_MAX_LEN];
+ struct ctx_list *ctx;
+ int ctx_number;
+
+ // open the /var/run/vservers directory
+ if ((ctx_dir = opendir(CTX_DIR_NAME)) == NULL)
+ {
+ fprintf(stderr, "%s: in openning %s: %s\n", process_name, CTX_DIR_NAME, strerror(errno));
+ return -1;
+ }
+
+ chdir(CTX_DIR_NAME);
+ while ((dir_entry = readdir(ctx_dir)) != NULL)
+ {
+ strncpy(ctx_name, dir_entry->d_name, sizeof(ctx_name));
+ p = strstr(ctx_name, ".ctx");
+ if (p != NULL) // make sure that it is a .ctx file..
+ {
+ *p = '\0'; // remove the .ctx in the file name
+ if ((ctx_number = fetch_ctx_number(dir_entry->d_name)) > 1)
+ {
+ if ((ctx = find_ctx(list, ctx_number)) != NULL)
+ strncpy(ctx->name, ctx_name, CTX_NAME_MAX_LEN);
+ }
+ }
+ // else fprintf(stderr, "invalid file %s in %s\n", dir_entry->d_name, CTX_DIR_NAME);
+ }
+ closedir(ctx_dir);
+ return 0;
+ }
+
+ __extension__ char *convert_time(unsigned t, char *str)
+ {
+ unsigned hh, mm, ss, ms;
+
+ ms = t % 100;
+ t /= 100;
+
+ ss = t%60;
+ t /= 60;
+ mm = t%60;
+ t /= 60;
+ hh = t%60;
+ t /= 24;
+
+ if (t > 0) // day > 0
+ {
+ snprintf(str, 25, "%3.ud%02uh%02u", t, (hh%12) ? hh%12 : 12, mm);
+ }
+ else
+ {
+ if (hh > 0) // hour > 0
+ snprintf(str, 25, " %2.uh%02um%02u", hh, mm, ss);
+ else
+ {
+ snprintf(str, 25, " %2.um%02u.%02u", mm, ss, ms);
+ }
+ }
+ return str;
+ }
+
+ __extension__ char *convert_mem(unsigned long total, char *str)
+ {
+ // Byte
+ if (total < 1024)
+ {
+ snprintf(str, 25, "%luB", total);
+ return str;
+ }
+
+ total >>= 10; // kByte
+ if (total < 1024)
+ {
+ snprintf(str, 25, "%lukB", total);
+ return str;
+ }
+
+ total >>= 10; // MByte
+ if (total < 1024)
+ {
+ snprintf(str, 25, "%luMB", total);
+ return str;
+ }
+
+ total >>= 10; // GByte
+ if (total < 1024)
+ {
+ snprintf(str, 25, "%luGB", total);
+ return str;
+ }
+ total >>= 10; // TByte
+ snprintf(str, 25, "%luTB", total);
+ return str;
+ }
+
+ /* begin show_ctx */
+ char utime[25], stime[25], ctx_uptime[25];
+ char vmsize[25], vmrss[25];
+ long uptime = get_uptime();
+
+ // now we have all the active context, fetch the name
+ // from /var/run/vservers/*.ctx
+ bind_ctx_name(list);
+
+ printf("CTX PROC VSZ RSS userTIME sysTIME UPTIME NAME DESCRIPTION\n");
+ while(list != NULL)
+ {
+ char descrip[1000];
+ if (list->ctx == 1)
+ strncpy(list->name, "monitoring server", CTX_NAME_MAX_LEN);
+
+ read_description (list->name,descrip);
+
+ printf("%-4d %4d %6s %6s %9s %9s %9s %-8s %s\n", list->ctx, list->process_count,
+ convert_mem(list->VmSize_total, vmsize), convert_mem(list->VmRSS_total, vmrss),
+ convert_time(list->utime_total, utime), convert_time(list->stime_total, stime), convert_time(uptime - list->start_time_oldest, ctx_uptime)
+ , list->name,descrip);
+ list = list->next;
+ }
+}
+
+// open the process's status file to get the ctx number, and other stat
+struct process_info *get_process_info(char *pid)
+{
+ int fd;
+ char buffer[1024];
+ char *p;
+ static struct process_info process;
+
+ // open the proc/#/status file
+ snprintf(buffer, sizeof(buffer), "/proc/%s/status", pid);
+ if ((fd = open(buffer, O_RDONLY, 0)) == -1)
+ return NULL;
+ // put the file in a buffer
+ if (read(fd, buffer, sizeof(buffer)) < 1)
+ return NULL;
+
+ close(fd);
+
+ // find the s_context entry
+ if ((p = strstr(buffer, "s_context:")) == NULL)
+ return NULL;
+
+ sscanf(p, "s_context: %d", &process.s_context);
+
+ // open the /proc/#/stat file
+ snprintf(buffer, sizeof(buffer), "/proc/%s/stat", pid);
+ if ((fd = open(buffer, O_RDONLY, 0)) == -1)
+ return NULL;
+ // put the file in a buffer
+ if (read(fd, buffer, sizeof(buffer)) < 1)
+ return NULL;
+
+ close(fd);
+
+ p = strchr(buffer, ')'); // go after the PID (process_name)
+ sscanf(p + 2,
+ "%*s "
+ "%*s %*s %*s %*s %*s "
+ "%*s %*s %*s %*s %*s %ld %ld "
+ "%ld %ld %*s %*s %*s %*s "
+ "%ld %ld "
+ "%ld ", &process.utime, &process.stime,
+ &process.cutime, &process.cstime,
+ &process.start_time,
+ &process.VmSize, &process.VmRSS);
+
+ return &process;
+}
+
+int main(int argc, char **argv)
+{
+ DIR *proc_dir;
+ struct dirent *dir_entry;
+ pid_t my_pid;
+
+ // for error msg
+ process_name = argv[0];
+
+ if (argc > 1)
+ {
+ usage();
+ return 0;
+ }
+
+ // do not include own stat
+ my_pid = getpid();
+
+ // try to switch in context 1
+ if (vc_new_s_context(1,0, 0) < 0)
+ {
+ fprintf(stderr, "%s: unable to switch in context security #1\n", process_name);
+ return -1;
+ }
+
+ // create the fist...
+ my_ctx_list = insert_ctx(0, NULL);
+ // init with the default name for the context 0
+ strncpy(my_ctx_list->name, "root server", CTX_NAME_MAX_LEN);
+
+ // open the /proc dir
+ if ((proc_dir = opendir(PROC_DIR_NAME)) == NULL)
+ {
+ fprintf(stderr, "%s: %s\n", process_name, strerror(errno));
+ return -1;
+ }
+
+ chdir(PROC_DIR_NAME);
+ while ((dir_entry = readdir(proc_dir)) != NULL)
+ {
+ // select only process file
+ if (!isdigit(*dir_entry->d_name))
+ continue;
+
+ if (atoi(dir_entry->d_name) != my_pid)
+ count_ctx(my_ctx_list, get_process_info(dir_entry->d_name));
+
+ }
+ closedir(proc_dir);
+
+ // output the ctx_list
+ show_ctx(my_ctx_list);
+
+ // free the ctx_list
+ free_ctx(my_ctx_list);
+
+ return 0;
+}
--- /dev/null
+// $Id: vunify.cc,v 1.1.4.1 2003/10/30 15:16:30 ensc Exp $
+
+// Copyright (C) 2003 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+// based on vunify.cc by Jacques Gelinas
+//
+// 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, 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+
+/*
+ This utility is used to unify (using hard links) two or more
+ virtual servers.
+ It compares the each vserver with the first one and for every
+ common package (RPM, same version), it does a hard link on non
+ configuration file. It turns the file immutable after that.
+*/
+#include <stdio.h>
+#include <fcntl.h>
+#include <sys/ioctl.h>
+#include <sys/stat.h>
+#include <unistd.h>
+#include <errno.h>
+
+#include <string>
+#include <vector>
+#include <list>
+#include <algorithm>
+#include <iostream>
+#include "vutil.h"
+
+using namespace std;
+
+static bool undo = false;
+
+static int ext2flags = EXT2_IMMUTABLE_FILE_FL | EXT2_IMMUTABLE_LINK_FL;
+struct EXCLDIR{
+ string prefix;
+ int len;
+ EXCLDIR(const char *s)
+ {
+ prefix = s;
+ prefix += '/';
+ len = prefix.size();
+ }
+};
+static vector<EXCLDIR> excldirs;
+static vector<EXCLDIR> incldirs;
+
+
+static void usage()
+{
+ cerr <<
+ "vunify version " << VERSION <<
+ "\n\n"
+ "vunify [ options ] reference-server vservers ... -- packages\n"
+ "vunify [ options ] reference-server vservers ... -- ALL\n"
+ "\n"
+ "--test: Show what will be done, do not do it.\n"
+ "--undo: Put back the file in place, using copies from the\n"
+ " reference server.\n"
+ "--debug: Prints some debugging messages.\n"
+ "--noflags: Do not put any immutable flags on the file\n"
+ "--immutable: Set the immutable_file bit on the files.\n"
+ "--immutable-mayunlink: Sets the immutable_link flag on files.\n"
+ "\n"
+ "--excldir: None of the files under a given directory will be unified\n"
+ "\tThe directory is expressed in absolute/logical form (relative\n"
+ "\tto the vserver root (ex: /var/log)\n"
+ "\n"
+ "--incldir: All the files under a given directory will be unified\n"
+ "\tThe directory is expressed in absolute/logical form (relative\n"
+ "\tto the vserver root (ex: /var/log)\n"
+ "\n"
+ "By default, the immutable_file and immutable_link flags are\n"
+ "set on the files. So if you want no immutable flags, you must\n"
+ "use --noflags. If you want a single flag, you must use\n"
+ "--noflags first, then the --immutable or --immutable-mayunlink\n"
+ "flag.\n"
+ ;
+}
+
+static bool vunify_inside (vector<EXCLDIR> &dirs, const char *path)
+{
+ bool found = false;
+ for (unsigned i=0; i<dirs.size(); i++){
+ if (strncmp(dirs[i].prefix.c_str(),path,dirs[i].len)==0){
+ found = true;
+ break;
+ }
+ }
+ return found;
+}
+
+class PACKAGE_UNI: public PACKAGE{
+public:
+ list<string> files; // Files to unify
+ // This is loaded on demand
+ PACKAGE_UNI(string &_name, string &_version)
+ : PACKAGE(_name,_version)
+ {
+ }
+ PACKAGE_UNI(const char *_name, const char *_version)
+ : PACKAGE (_name,_version)
+ {
+ }
+ PACKAGE_UNI(const string &line)
+ : PACKAGE (line)
+ {
+ }
+ // Load the file member of the package, but exclude configuration file
+ void loadfiles(const string &ref)
+ {
+ if (files.empty()){
+ if (debug) cout << "Loading files for package " << name << endl;
+ string namever;
+ namever = name + '-' + version;
+ FILE *fin = vutil_execdistcmd (K_UNIFILES,ref,namever.c_str());
+ if (fin != NULL){
+ char tmp[1000];
+ while (fgets(tmp,sizeof(tmp)-1,fin)!=NULL){
+ int last = strlen(tmp)-1;
+ if (last >= 0 && tmp[last] == '\n') tmp[last] = '\0';
+ bool must_unify = false;
+ int type = 0; // K_UNIFILES only report unify-able files
+ if(type == 0 && !vunify_inside(excldirs,tmp)){
+ must_unify = true;
+ }else if(vunify_inside(incldirs,tmp)){
+ must_unify = true;
+ }
+ if (must_unify){
+ files.push_front (tmp);
+ }else if (debug){
+ cout << "Package " << name << " exclude " << tmp << endl;
+ }
+ }
+ }
+ if (debug) cout << "Done\n";
+ }
+ }
+};
+
+
+static ostream & operator << (ostream &c, const PACKAGE_UNI &p)
+{
+ return c << p.name << "-" << p.version;
+}
+
+template<class T>
+ void printit(T a){
+ cout << "xx " << a << endl;
+ }
+
+template<class T>
+ class printer{
+ string title;
+ public:
+ printer (const char *_title): title(_title){}
+ void operator()(T a){
+ cout << title << " " << a << endl;
+ }
+ };
+
+
+/*
+ Load the list of all packages in a vserver
+*/
+static void vunify_loadallpkg (string &refserver, list<PACKAGE_UNI> &packages)
+{
+ FILE *fin = vutil_execdistcmd (K_PKGVERSION,refserver,NULL);
+ if (fin != NULL){
+ char line[1000];
+ while (fgets(line,sizeof(line)-1,fin)!=NULL){
+ // fprintf (stderr,"line: %s",line);
+ int last = strlen(line)-1;
+ if (last >= 0 && line[last] == '\n') line[last] = '\0';
+ packages.push_back (PACKAGE_UNI(line));
+ }
+ pclose (fin);
+ }
+}
+
+/*
+ Object to unify a file
+ The file is first removed, then a hard link is made and then
+ the immutable flag is done
+*/
+class file_unifier{
+ string &ref_server,&target_server;
+ int &ret;
+ public:
+ file_unifier(string &_ref, string &_target, int &_ret)
+ : ref_server(_ref),target_server(_target), ret(_ret)
+ {}
+ void operator()(const string &file)
+ {
+ string refpath = VROOTDIR "/" + ref_server + file;
+ string dstpath = VROOTDIR "/" + target_server + file;
+ if (debug) cout << "Unify " << refpath << " -> " << dstpath << endl;
+ struct stat st;
+ if (stat(refpath.c_str(),&st)==-1){
+ if (debug) cout << "File " << refpath << " does not exist, ignored\n";
+ }else if (setext2flag(refpath.c_str(),false,ext2flags)==-1){
+ ret = -1;
+ }else if (vbuild_unlink(dstpath.c_str())==-1){
+ ret = -1;
+ cerr << "Can't delete file " << dstpath
+ << " (" << strerror(errno) << ")\n";
+ }else{
+ if (undo){
+ if (vbuild_file_copy(refpath.c_str(),dstpath.c_str(),st)==-1){
+ ret = -1;
+ cerr << "Can't copy file " << refpath << " to " << dstpath
+ << " (" << strerror(errno) << ")\n";
+ }
+ }else{
+ if (vbuild_link(refpath.c_str(),dstpath.c_str())==-1){
+ ret = -1;
+ cerr << "Can't link file " << refpath << " to " << dstpath
+ << " (" << strerror(errno) << ")\n";
+ }
+ }
+ // We put back the original immutable because other vservers
+ // may be unified on it.
+ if (setext2flag(refpath.c_str(),true,ext2flags)==-1){
+ ret = -1;
+ }
+ }
+ }
+};
+#if 0
+// Check if two package have the same name (but potentially different version)
+class same_name{
+ PACKAGE_UNI &pkg;
+public:
+ same_name(PACKAGE_UNI &_pkg) : pkg(_pkg) {}
+ bool operator()(const PACKAGE_UNI &p)
+ {
+ return pkg.name == p.name;
+ }
+};
+#endif
+// Predicate to decide if a package must be unified
+class package_unifier{
+public:
+ string &ref_server,&target_server;
+ list<PACKAGE_UNI> &target_packages;
+ int &ret;
+ package_unifier(string &_ref,
+ string &_target,
+ list<PACKAGE_UNI> &_target_packages,
+ int &_ret)
+ : ref_server(_ref),target_server(_target)
+ , target_packages(_target_packages) , ret(_ret)
+ {}
+ void operator()(PACKAGE_UNI &pkg)
+ {
+ if (find(target_packages.begin(),target_packages.end(),pkg)
+ !=target_packages.end()){
+ // Ok, the package is also in the target vserver
+ cout << "Unify pkg " << pkg << " from " << ref_server << " to "
+ << target_server << endl;
+
+ if (!testmode || debug){
+ pkg.loadfiles(ref_server);
+ for_each (pkg.files.begin(),pkg.files.end()
+ ,file_unifier(ref_server,target_server,ret));
+ }
+ }else if (testmode){
+ // The package is missing, in test mode we provide more information
+ if (find_if(target_packages.begin(),target_packages.end(),same_name(pkg))
+ !=target_packages.end()){
+ cout << pkg << " exist in server " << target_server << " not unified\n";
+ }else{
+ cout << pkg << " does not exist in server " << target_server << endl;
+ }
+ }
+ }
+};
+
+// For each vserver, find the common packages and unify them
+class server_unifier{
+public:
+ list<PACKAGE_UNI> &ref_packages;
+ string &ref_server;
+ int &ret;
+ server_unifier(string _ref_server, list<PACKAGE_UNI> &_packages, int &_ret)
+ : ref_packages(_packages),ref_server(_ref_server), ret(_ret)
+ {}
+ void operator()(string serv)
+ {
+ list<PACKAGE_UNI> pkgs;
+ vunify_loadallpkg (serv,pkgs);
+ for_each(ref_packages.begin(),ref_packages.end()
+ ,package_unifier(ref_server,serv,pkgs,ret));
+ }
+};
+class deleteif{
+public:
+ char **argv0,**argvn;
+ deleteif(char **_argv0, char **_argvn): argv0(_argv0),argvn(_argvn){}
+ bool operator()(const PACKAGE_UNI &pkg)
+ {
+ bool found = false;
+ for (char **pt = argv0; pt < argvn; pt++){
+ if (pkg.name == *pt){
+ found = true;
+ break;
+ }
+ }
+ return !found;
+ }
+};
+
+int main (int argc, char *argv[])
+{
+ int ret = -1;
+ int i;
+ for (i=1; i<argc; i++){
+ const char *arg = argv[i];
+ //const char *opt = argv[i+1];
+ if (strcmp(arg,"--test")==0){
+ testmode = true;
+ }else if (strcmp(arg,"--undo")==0){
+ undo = true;
+ }else if (strcmp(arg,"--debug")==0){
+ debug++;
+ }else if (strcmp(arg,"--noflags")==0){
+ ext2flags = 0;
+ }else if (strcmp(arg,"--immutable")==0){
+ ext2flags |= EXT2_IMMUTABLE_FILE_FL;
+ }else if (strcmp(arg,"--immutable-mayunlink")==0){
+ ext2flags |= EXT2_IMMUTABLE_LINK_FL;
+ }else if (strcmp(arg,"--excldir")==0){
+ i++;
+ //excldirs[excldirs.size()] = EXCLDIR(argv[i]);
+ excldirs.push_back (EXCLDIR(argv[i]));
+ }else if (strcmp(arg,"--incldir")==0){
+ i++;
+ incldirs.push_back (EXCLDIR(argv[i]));
+ }else{
+ break;
+ }
+ }
+ if (i==argc){
+ usage();
+ }else{
+ string refserv = argv[i++];
+ list<string> vservers;
+ for (; i<argc && strcmp(argv[i],"--")!=0; i++){
+ vservers.push_front (argv[i]);
+ }
+ for_each (vservers.begin(),vservers.end(),printer<string>("vservers"));
+ if (i == argc || strcmp(argv[i],"--")!=0){
+ usage();
+ }else{
+ i++;
+ if (i < argc){
+ list<PACKAGE_UNI> packages;
+ vunify_loadallpkg (refserv,packages);
+ if (i != argc-1 || strcmp(argv[i],"ALL")!=0){
+ // We keep only the packages supplied on the command line
+ packages.remove_if(deleteif (argv+i,argv+argc));
+ }
+ ret = 0;
+ umask (0);
+ for_each (vservers.begin(),vservers.end(),server_unifier(refserv,packages,ret));
+ }else{
+ usage();
+ }
+ }
+ }
+ return ret;
+}
+
+
+
+
--- /dev/null
+// $Id: vutil.cc,v 1.1.4.2 2003/11/18 22:30:44 ensc Exp $
+
+// Copyright (C) 2003 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+// based on vutil.cc by Jacques Gelinas
+//
+// 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, 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+#pragma implementation
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+#include "compat.h"
+
+#undef PACKAGE
+
+#include <stdio.h>
+#include <errno.h>
+#include <string.h>
+#include <sys/stat.h>
+#include <sys/wait.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <utime.h>
+#include "vutil.h"
+#include <sys/ioctl.h>
+
+#include "ext2fs.h"
+
+
+bool testmode;
+int debug;
+
+int file_copy (const char *src, const char *dst, struct stat &st)
+{
+ int ret = -1;
+ FILE *fin = fopen (src,"r");
+ if (fin == NULL){
+ fprintf (stderr,"Can't open file %s (%s)\n",src,strerror(errno));
+ }else{
+ FILE *fout = fopen (dst,"w");
+ if (fout == NULL){
+ fprintf (stderr,"Can't open file %s (%s)\n",dst,strerror(errno));
+ }else{
+ char buf[8192];
+ int len;
+ while ((len=fread(buf,1,sizeof(buf),fin))>0){
+ fwrite (buf,1,len,fout);
+ }
+ fflush (fout);
+ ret = 0;
+ if (fchown (fileno(fout),st.st_uid,st.st_gid)==-1){
+ fprintf (stderr,"Can't chown file %s (%s)\n"
+ ,dst,strerror(errno));
+ ret = -1;
+ }else if (fchmod (fileno(fout),st.st_mode)==-1){
+ fprintf (stderr,"Can't chmod file %s (%s)\n"
+ ,dst,strerror(errno));
+ ret = -1;
+ }
+ fclose(fout);
+ struct utimbuf timbuf;
+ timbuf.modtime = st.st_mtime;
+ timbuf.actime = st.st_atime;
+ if (utime (dst,&timbuf)==-1){
+ fprintf (stderr,"Can't set time stamp on file %s (%s)\n"
+ ,dst,strerror(errno));
+ }
+ }
+ fclose (fin);
+ }
+ return ret;
+}
+
+/*
+ Set the immutable flag on a file
+*/
+int setext2flag (const char *fname, bool set, int ext2flags)
+{
+ int ret = -1;
+ if (testmode){
+ ret = 0;
+ }else{
+ int fd = open (fname,O_RDONLY);
+ if (fd == -1){
+ fprintf (stderr,"Can't open file %s (%s)\n",fname
+ ,strerror(errno));
+ }else{
+ int flags = set ? ext2flags : 0;
+ ret = ioctl (fd,EXT2_IOC_SETFLAGS,&flags);
+ close (fd);
+ if (ret == -1){
+ fprintf (stderr,"Can't %s immutable flag on file %s (%s)\n"
+ ,(set ? "set" : "unset")
+ ,fname
+ ,strerror(errno));
+ }
+ }
+ }
+ return ret;
+}
+
+int vbuild_mkdir (const char *path, mode_t mode)
+{
+ int ret = -1;
+ if (testmode){
+ printf ("mkdir %s; chmod %o %s\n",path,mode,path);
+ ret = 0;
+ }else{
+ ret = mkdir (path,mode);
+ if (ret == -1 && errno == EEXIST){
+ struct stat st;
+ if (lstat(path,&st)!=-1 && S_ISDIR(st.st_mode)){
+ ret = chmod (path,mode);
+ }
+ }
+ }
+ return ret;
+}
+
+int vbuild_mknod(const char *path, mode_t mode, dev_t dev)
+{
+ int ret = -1;
+ if (testmode){
+ printf ("mknod %s %o %02x:%02x\n",path,mode,major(dev),minor(dev));
+ ret = 0;
+ }else{
+ ret = mknod (path,mode,dev);
+ if (ret == -1 && errno == EEXIST){
+ struct stat st;
+ lstat(path,&st);
+ if (lstat(path,&st)!=-1
+ && (st.st_mode & S_IFMT) == (mode & S_IFMT)
+ && st.st_rdev == dev){
+ ret = chmod (path,mode);
+ }
+ }
+ }
+ return ret;
+}
+int vbuild_symlink(const char *src, const char *dst)
+{
+ int ret = -1;
+ if (testmode){
+ printf ("ln -s %s %s\n",src,dst);
+ ret = 0;
+ }else{
+ ret = symlink (src,dst);
+ }
+ return ret;
+}
+
+int vbuild_link(const char *src, const char *dst)
+{
+ int ret = -1;
+ if (testmode){
+ printf ("ln %s %s\n",src,dst);
+ ret = 0;
+ }else{
+ ret = link (src,dst);
+ }
+ return ret;
+}
+
+int vbuild_unlink(const char *path)
+{
+ int ret = -1;
+ if (testmode){
+ printf ("unlink %s\n",path);
+ ret = 0;
+ }else{
+ ret = unlink (path);
+ }
+ return ret;
+}
+
+int vbuild_chown(const char *path, uid_t uid, gid_t gid)
+{
+ int ret = -1;
+ if (testmode){
+ printf ("chown %d.%d %s\n",uid,gid,path);
+ ret = 0;
+ }else{
+ ret = chown (path,uid,gid);
+ }
+ return ret;
+}
+
+int vbuild_file_copy(
+ const char *src,
+ const char *dst,
+ struct stat &st)
+{
+ int ret = -1;
+ if (testmode){
+ printf ("cp -a %s %s\n",src,dst);
+ ret = 0;
+ }else{
+ ret = file_copy (src,dst,st);
+ }
+ return ret;
+}
+
+/*
+ Load the list of all packages in a vserver
+*/
+void vutil_loadallpkg (string &refserver, list<PACKAGE> &packages)
+{
+ FILE *fin = vutil_execdistcmd (K_PKGVERSION,refserver,NULL);
+ if (fin != NULL){
+ char line[1000];
+ while (fgets(line,sizeof(line)-1,fin)!=NULL){
+ int last = strlen(line)-1;
+ if (last >= 0 && line[last] == '\n') line[last] = '\0';
+ packages.push_back (PACKAGE(line));
+ }
+ pclose (fin);
+ }
+}
+
+int vutil_lstat (string path, struct stat &st)
+{
+ int ret = 0;
+ if (lstat(path.c_str(),&st) == -1){
+ fprintf (stderr,"Can't lstat file %s (%s)\n"
+ ,path.c_str(),strerror(errno));
+ ret = -1;
+ }
+ return ret;
+}
+
+const char K_PKGVERSION[]="pkgversion";
+const char K_DUMPFILES[]="dumpfiles";
+const char K_UNIFILES[]="unifiles";
+
+FILE *vutil_execdistcmd (const char *key, const string &vserver, const char *args)
+{
+ string cmd = PKGLIBDIR "/distrib-info ";
+ cmd += vserver;
+ cmd += " ";
+ cmd += key;
+ if (args != NULL){
+ cmd += " ";
+ cmd += args;
+ }
+ FILE *ret = popen (cmd.c_str(),"r");
+ if (ret == NULL){
+ fprintf (stderr,"Can't execute command %s\n",cmd.c_str());
+ }else{
+ #if 0
+ char buf[1000];
+ while (fgets(buf,sizeof(buf)-1,fin)!=NULL){
+ int last = strlen(buf)-1;
+ if (last >= 0) buf[last] = '\0';
+ ret = buf;
+ break;
+ }
+ pclose (fin);
+ #endif
+ }
+ return ret;
+}
+
--- /dev/null
+// $Id: vutil.h,v 1.1 2003/09/29 22:01:57 ensc Exp $
+
+// Copyright (C) 2003 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+// based on vutil.h by Jacques Gelinas
+//
+// 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, 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+#pragma interface
+#ifndef VUTIL_H
+#define VUTIL_H
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/wait.h>
+#include <string>
+#include <set>
+#include <algorithm>
+#include <iostream>
+#include <list>
+
+using namespace std;
+
+extern int debug;
+extern bool testmode;
+
+// Patch to help compile this utility on unpatched kernel source
+#ifndef EXT2_IMMUTABLE_FILE_FL
+ #define EXT2_IMMUTABLE_FILE_FL 0x00000010
+ #define EXT2_IMMUTABLE_LINK_FL 0x00008000
+#endif
+
+
+FILE *vutil_execdistcmd (const char *, const string &, const char *);
+extern const char K_DUMPFILES[];
+extern const char K_UNIFILES[];
+extern const char K_PKGVERSION[];
+
+class PACKAGE{
+public:
+ string name;
+ string version; // version + release
+ PACKAGE(string &_name, string &_version)
+ : name (_name), version(_version)
+ {
+ }
+ PACKAGE(const char *_name, const char *_version)
+ : name (_name), version(_version)
+ {
+ }
+ PACKAGE(const string &line)
+ {
+ *this = line;
+ }
+ PACKAGE & operator = (const string &_line)
+ {
+ string line (_line);
+ string::iterator pos = find (line.begin(),line.end(),'=');
+ if (pos != line.end()){
+ name = string(line.begin(),pos);
+ version = string(pos + 1,line.end());
+ }
+ return *this;
+ }
+ PACKAGE (const PACKAGE &pkg)
+ {
+ name = pkg.name;
+ version = pkg.version;
+ }
+ bool operator == (const PACKAGE &v) const
+ {
+ return name == v.name && version == v.version;
+ }
+ bool operator < (const PACKAGE &v) const
+ {
+ bool ret = false;
+ if (name < v.name){
+ ret = true;
+ }else if (name == v.name && version < v.version){
+ ret = true;
+ }
+ return ret;
+ }
+ // Load the file member of the package, but exclude configuration file
+ void loadfiles(const string &ref, set<string> &files)
+ {
+ if (debug > 2) cout << "Loading files for package " << name << endl;
+ string namever = name + '-' + version;
+ FILE *fin = vutil_execdistcmd (K_UNIFILES,ref,namever.c_str());
+ if (fin != NULL){
+ char tmp[1000];
+ while (fgets(tmp,sizeof(tmp)-1,fin)!=NULL){
+ int last = strlen(tmp)-1;
+ if (last >= 0 && tmp[last] == '\n') tmp[last] = '\0';
+ files.insert (tmp);
+ }
+ }
+ if (debug > 2) cout << "Done\n";
+ }
+ #if 0
+ bool locate(const string &path)
+ {
+ return find (files.begin(),files.end(),path) != files.end();
+ }
+ #endif
+};
+
+// Check if two package have the same name (but potentially different version)
+class same_name{
+ const PACKAGE &pkg;
+public:
+ same_name(const PACKAGE &_pkg) : pkg(_pkg) {}
+ bool operator()(const PACKAGE &p)
+ {
+ return pkg.name == p.name;
+ }
+};
+
+
+#include "vutil.p"
+
+#endif
+
--- /dev/null
+// $Id: vutil.p,v 1.1 2003/09/29 22:01:57 ensc Exp $ --*- c++ -*--
+
+// Copyright (C) 2003 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+// based on vutil.p by Jacques Gelinas
+//
+// 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, 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+
+/* vutil.cc 11/04/2003 14.22.04 */
+int file_copy (const char *src, const char *dst, struct stat&st);
+int setext2flag (const char *fname, bool set, int ext2flags);
+int vbuild_mkdir (const char *path, mode_t mode);
+int vbuild_mknod (const char *path, mode_t mode, dev_t dev);
+int vbuild_symlink (const char *src, const char *dst);
+int vbuild_link (const char *src, const char *dst);
+int vbuild_unlink (const char *path);
+int vbuild_chown (const char *path, uid_t uid, gid_t gid);
+int vbuild_file_copy (const char *src,
+ const char *dst,
+ struct stat&st);
+void vutil_loadallpkg (string&refserver, list<PACKAGE>&packages);
+int vutil_lstat (string path, struct stat&st);
+FILE *vutil_execdistcmd (const char *key,
+ const string&vserver,
+ const char *args);
+/* syscall.cc 18/07/2003 09.50.10 */
+extern "C" int call_new_s_context (int nbctx,
+ int ctxs[],
+ int remove_cap,
+ int flags);
+extern "C" int call_set_ipv4root (unsigned long ip[],
+ int nb,
+ unsigned long bcast,
+ unsigned long mask[]);
+extern "C" int call_chrootsafe (const char *dir);
+extern "C" int has_chrootsafe (void);
+extern "C" int call_set_ctxlimit (int res, long limit);
--- /dev/null
+## $Id: Makefile-files,v 1.1.4.2 2003/10/30 15:16:30 ensc Exp $ -*- makefile -*-
+
+## Copyright (C) 2003 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+##
+## 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, 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+##
+
+sysv_XTRAS = sysv/rebootmgr.subst \
+ sysv/v_gated.subst \
+ sysv/v_httpd.subst \
+ sysv/v_named.subst \
+ sysv/v_portmap.subst \
+ sysv/v_sendmail.subst \
+ sysv/v_smb.subst \
+ sysv/v_sshd.subst \
+ sysv/v_xinetd.subst \
+ sysv/vservers.subst
+
+sysv_GENSCRPTS = sysv/rebootmgr \
+ sysv/v_gated \
+ sysv/v_httpd \
+ sysv/v_named \
+ sysv/v_portmap \
+ sysv/v_sendmail \
+ sysv/v_smb \
+ sysv/v_sshd \
+ sysv/v_xinetd \
+ sysv/vservers
+
+sysv_SCRPTS = $(sysv_GENSCRPTS)
+
+sysv_CFG = sysv/vservers.conf
+
+
+sysv/%: sysv/%.subst
+ @mkdir -p $$(dirname '$@')
+ sed -e 's!/usr/lib/util-vserver!$(pkglibdir)!g; \
+ s!^USR_SBIN=/usr/sbin$$!USR_SBIN=$(sbindir)!g; \
+ s!^VROOTDIR=/vservers$$!VROOTDIR=$(vserverdir)!g; \
+ ' '$<' >'$@.tmp'
+ if cmp -s '$<' '$@.tmp'; then \
+ cp -p '$<' '$@'; \
+ else \
+ mv -f '$@.tmp' '$@'; \
+ fi
+ -rm -f '$@.tmp'
+ @chmod a-w '$@'
--- /dev/null
+#!/bin/sh
+# chkconfig: - 98 10
+# description: The rebootmgr service is monitoring all virtual servers \
+# and restart them as need. Virtual servers are using \
+# the /sbin/vreboot command to talk with the reboot manager
+# processname: rebootmgr
+# config: /etc/vservers
+
+VROOTDIR=/vservers
+USR_SBIN=/usr/sbin
+PIDFILE=/var/run/rebootmgr.pid
+# See how we were called.
+case "$1" in
+ start)
+ echo "Starting the reboot manager"
+ cd /etc/vservers
+ VSERVERS=
+ for serv in *.conf
+ do
+ test -f "$serv" || continue
+
+ serv=`basename $serv .conf`
+ if [ -d $VROOTDIR/$serv ] ; then
+ VSERVERS="$VSERVERS $serv"
+ fi
+ done
+ $USR_SBIN/rebootmgr --pidfile $PIDFILE $VSERVERS &
+ touch /var/lock/subsys/rebootmgr
+ ;;
+ stop)
+ echo "Stopping the reboot manager"
+ kill `cat $PIDFILE`
+ rm -f /var/lock/subsys/rebootmgr
+ rm -f $PIDFILE
+ ;;
+ restart)
+ $0 stop
+ $0 start
+ ;;
+ reload)
+ echo Not implemented
+ ;;
+ status)
+ if [ -f $PIDFILE ] ; then
+ if kill -0 `cat $PIDFILE`
+ then
+ echo rebootmgr is running
+ else
+ echo rebootmgr is NOT running
+ fi
+ fi
+ ;;
+ *)
+ echo "Usage: rebootmgr {start|stop|restart|reload|status}"
+ exit 1
+esac
+
+exit 0
+
+
+
+
+
--- /dev/null
+#!/bin/sh
+# chkconfig: - 32 75
+# description: Wrapper to start gated bound to a single IP
+
+# normally, you will need /etc/vservices/gated.conf
+# with the following line
+# IP=0.0.0.0
+# so gated is started without restriction even if you
+# restart it from an ssh session, itself "chbounded" to a single
+# IP.
+USR_LIB_VSERVER=/usr/lib/util-vserver
+exec $USR_LIB_VSERVER/vsysvwrapper gated $*
+
--- /dev/null
+#!/bin/sh
+# chkconfig: - 85 15
+# description: Wrapper to start httpd bound to a single IP
+USR_LIB_VSERVER=/usr/lib/util-vserver
+exec $USR_LIB_VSERVER/vsysvwrapper httpd $*
+
--- /dev/null
+#!/bin/sh
+# chkconfig: - 55 45
+# description: Wrapper to start named bound to a single IP
+USR_LIB_VSERVER=/usr/lib/util-vserver
+exec $USR_LIB_VSERVER/vsysvwrapper named $*
+
+
+
+
+
+
--- /dev/null
+#!/bin/sh
+# chkconfig: - 91 35
+# description: Wrapper to start portmap bound to a single IP
+USR_LIB_VSERVER=/usr/lib/util-vserver
+exec $USR_LIB_VSERVER/vsysvwrapper portmap $*
+
+
+
+
+
+
--- /dev/null
+#!/bin/sh
+# chkconfig: - 80 30
+# description: Wrapper to start sendmail bound to a single IP
+USR_LIB_VSERVER=/usr/lib/util-vserver
+exec $USR_LIB_VSERVER/vsysvwrapper sendmail $*
+
--- /dev/null
+#!/bin/sh
+# chkconfig: - 91 35
+# description: Wrapper to start smb bound to a single IP
+USR_LIB_VSERVER=/usr/lib/util-vserver
+exec $USR_LIB_VSERVER/vsysvwrapper smb $*
+
+
+
+
+
+
--- /dev/null
+#!/bin/sh
+# chkconfig: - 55 25
+# description: Wrapper to start sshd bound to a single IP
+USR_LIB_VSERVER=/usr/lib/util-vserver
+exec $USR_LIB_VSERVER/vsysvwrapper sshd $*
+
+
+
+
+
+
--- /dev/null
+#!/bin/sh
+# chkconfig: - 56 50
+# description: Wrapper to start xinetd bound to a single IP
+USR_LIB_VSERVER=/usr/lib/util-vserver
+exec $USR_LIB_VSERVER/vsysvwrapper xinetd $*
+
--- /dev/null
+# Configuration file for the vservers service
+# BACKGROUND=yes
+# start the vservers on tty9, in background so the rest of the
+# boot process end early
+BACKGROUND=no
+
+
--- /dev/null
+#!/bin/sh
+# chkconfig: 345 98 10
+# description: The vservers service is used to start and stop all
+# the virtual servers.
+
+USR_SBIN=/usr/sbin
+
+
+# Print the vserver name in priority/alpha order
+sortserver(){
+ (
+ cd /etc/vservers
+ for serv in *.conf
+ do
+ test -f "$serv" || continue
+
+ PRIORITY=100
+ . $serv
+ printf "%03d %s\n" $PRIORITY `basename $serv .conf`
+ done
+ ) | sort $* | (while read a b; do echo $b; done)
+}
+
+startservers(){
+ echo "Starting the virtual servers"
+ cd /etc/vservers
+ for name in `sortserver`
+ do
+ ONBOOT=
+ . $name.conf
+ if [ "$ONBOOT" = "yes" ] ; then
+ $USR_SBIN/vserver $name start
+ else
+ echo virtual server $name not configured for on boot start
+ fi
+ done
+}
+
+BACKGROUND=off
+if [ -f /etc/vservers.conf ] ; then
+ . /etc/vservers.conf
+fi
+
+
+# See how we were called.
+case "$1" in
+ start)
+ if [ "$BACKGROUND" = "yes" ] ; then
+ startservers >/dev/tty8 </dev/tty8 2>/dev/tty8 &
+ else
+ startservers
+ fi
+ touch /var/lock/subsys/vservers
+ ;;
+ stop)
+ echo "Stopping the virtual servers"
+ cd /etc/vservers
+ for name in `sortserver -r`
+ do
+ $USR_SBIN/vserver $name stop
+ done
+ rm -f /var/lock/subsys/vservers
+ ;;
+ restart)
+ $0 stop
+ $0 start
+ ;;
+ reload)
+ echo Not implemented
+ ;;
+ status)
+ cd /etc/vservers
+ for serv in *.conf
+ do
+ ONBOOT=no
+ name=`basename $serv .conf`
+ . $serv
+ echo -n ONBOOT=$ONBOOT " "
+ $USR_SBIN/vserver $name running
+ done
+ ;;
+ *)
+ echo "Usage: vservers {start|stop|restart|reload|status}"
+ exit 1
+esac
+
+exit 0
+
+
+
+
--- /dev/null
+## $Id: Makefile-files,v 1.1.4.1 2003/11/28 23:10:08 ensc Exp $ -*- makefile -*-
+
+## Copyright (C) 2003 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+##
+## 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, 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+##
+
+test_PRGS = tests/escaperoot \
+ tests/forkbomb \
+ tests/testipc \
+ tests/testlimit \
+ tests/testopenf
+
+tests_escaperoot_SOURCES = tests/escaperoot.cc
+tests_forkbomb_SOURCES = tests/forkbomb.cc
+tests_testipc_SOURCES = tests/testipc.cc
+tests_testlimit_SOURCES = tests/testlimit.cc
+tests_testopenf_SOURCES = tests/testopenf.cc
--- /dev/null
+// $Id: escaperoot.cc,v 1.1.4.1 2003/10/30 15:12:34 ensc Exp $
+
+// Copyright (C) 2003 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+// based on tests/escaperoot.cc by Jacques Gelinas
+//
+// 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, 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+/*
+ This program tries to escape out of a vserver using chroot flaws.
+ Once escaped, it exec a shell.
+
+ None of this works on 2.4.13.
+*/
+#include <stdio.h>
+#include <unistd.h>
+#include <string.h>
+#include <errno.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <wait.h>
+#include <limits.h>
+
+static void print_pwd()
+{
+ char path[PATH_MAX];
+ if (getcwd(path,sizeof(path)-1)!=NULL){
+ printf ("PWD: %s\n",path);
+ }
+}
+/*
+ Just set a chroot in a sub-directory and keep the
+ current directory behind
+*/
+static void test1()
+{
+ printf ("test1\n");
+ print_pwd();
+ mkdir ("dummy_dir",0755);
+ if (chroot ("dummy_dir")==-1){
+ fprintf (stderr,"Can't chroot into dummy_dir (%s)\n",strerror(errno));
+ }else{
+ // Try to chdir into the real root
+ for (int i=0; i<1000; i++) chdir("..");
+ print_pwd();
+ if (execl ("/bin/sh","/bin/sh",NULL)==-1){
+ fprintf (stderr,"execl /bin/sh failed (%s)\n",strerror(errno));
+ }
+ }
+}
+
+/*
+ Same as test1, except we open the current directory and do
+ a fchdir() to it before trying to escape to the real root.
+*/
+static void test2()
+{
+ printf ("test2\n");
+ print_pwd();
+ mkdir ("dummy_dir",0755);
+ int fd = open (".",O_RDONLY);
+ if (fd == -1){
+ fprintf (stderr,"Can't open current directory (%s)\n",strerror(errno));
+ }else if (chroot ("dummy_dir")==-1){
+ fprintf (stderr,"Can't chroot into dummy_dir (%s)\n",strerror(errno));
+ }else if (fchdir(fd)==-1){
+ fprintf (stderr,"Can't fchdir to the current directory (%s)\n"
+ ,strerror(errno));
+ }else{
+ // Try to chdir into the real root
+ for (int i=0; i<1000; i++) chdir("..");
+ print_pwd();
+ if (execl ("/bin/sh","/bin/sh",NULL)==-1){
+ fprintf (stderr,"execl /bin/sh failed (%s)\n",strerror(errno));
+ }
+ }
+}
+
+/*
+ Perform the test in a sub-process so it won't affect the current one
+*/
+static void dotest (void (*f)())
+{
+ pid_t pid = fork();
+ if (pid == 0){
+ f();
+ _exit (0);
+ }else if (pid == -1){
+ fprintf (stderr,"Can't fork (%s)\n",strerror(errno));
+ }else{
+ int status;
+ wait (&status);
+ }
+}
+
+int main (int, char *[])
+{
+ dotest (test1);
+ dotest (test2);
+ printf ("All attempts failed\n");
+ return 0;
+}
+
+
--- /dev/null
+// $Id: forkbomb.cc,v 1.1 2003/09/29 22:01:57 ensc Exp $
+
+// Copyright (C) 2003 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+// based on tests/forkbomb.cc by Jacques Gelinas
+//
+// 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, 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+#include <stdlib.h>
+#include <errno.h>
+#include <string.h>
+#include <sys/types.h>
+#include <sys/wait.h>
+#include <unistd.h>
+#include <stdio.h>
+
+enum MODE {MODE_SLEEP,MODE_LOOP,MODE_FORK, MODE_FORKSHELL};
+
+
+static void forkbomb_userfork (MODE mode)
+{
+ pid_t pid = fork();
+ if (pid==-1){
+ fprintf (stderr,"Fork failed (%s)\n",strerror(errno));
+ }else if (pid == 0){
+ if (mode == MODE_SLEEP){
+ sleep(20);
+ }else if (mode == MODE_LOOP){
+ int k=0;
+ while (1) k++;
+ }else if (mode == MODE_FORKSHELL){
+ system ("/bin/false");
+ }
+ _exit (0);
+ }
+}
+
+
+int main (int argc, char *argv[])
+{
+ if (argc != 4){
+ fprintf (stderr,"formboom N M mode\n"
+ "where N is the number of process to start\n"
+ "and M is the number of user to start\n"
+ "Each user will try to start N process\n"
+ "\n"
+ "mode is:\n"
+ " sleep: Each process sleeps for 20 seconds and exits\n"
+ " loop: Each process loops forever\n"
+ " fork: Each process exits immediatly and is restarted\n"
+ " by the parent\n"
+ " forkshell: Each process runs /bin/false in a shell and\n"
+ " exits, then the parent start a new one\n"
+ );
+ }else{
+ MODE mode;
+ if (strcmp(argv[3],"sleep")==0){
+ mode = MODE_SLEEP;
+ }else if (strcmp(argv[3],"loop")==0){
+ mode = MODE_LOOP;
+ }else if (strcmp(argv[3],"fork")==0){
+ mode = MODE_FORK;
+ }else if (strcmp(argv[3],"forkshell")==0){
+ mode = MODE_FORKSHELL;
+ }else{
+ fprintf (stderr,"Invalid mode\n");
+ exit (-1);
+ }
+ for (int i=0; i<atoi(argv[2]); i++){
+ if (fork()==0){
+ if (setuid (i+1)==-1){
+ fprintf (stderr,"Can't setuid to uid %d (%s)\n",i+1
+ ,strerror(errno));
+ }else{
+ for (int j=0; j<atoi(argv[1]); j++){
+ forkbomb_userfork (mode);
+ }
+ if (mode == MODE_FORK || mode == MODE_FORKSHELL){
+ // Ok, all processes are started, in MODE_FORK
+ // we create a new one all the time
+ int status;
+ while (wait(&status)!=-1) forkbomb_userfork(mode);
+ }
+ }
+ _exit (0);
+ }
+ }
+ system ("ps ax | wc -l");
+ printf ("All the process are running now\n");
+ printf ("Exit to end all processes\n");
+ system ("/bin/sh");
+ system ("killall forkbomb");
+ }
+ return 0;
+}
+
--- /dev/null
+// $Id: testipc.cc,v 1.1 2003/09/29 22:01:57 ensc Exp $
+
+// Copyright (C) 2003 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+// based on tests/testipc.cc by Jacques Gelinas
+//
+// 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, 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+/*
+ Test to see isolation of the various IPC resources
+ between security context
+*/
+#include <stdio.h>
+#include <string.h>
+#include <errno.h>
+#include <stdlib.h>
+#include <sys/ipc.h>
+#include <sys/shm.h>
+#include <sys/sem.h>
+
+int main (int argc, char *argv[])
+{
+ int ret = -1;
+ if (argc < 2){
+ fprintf (stderr,
+ "testipc createshm\n"
+ );
+ }else if(strcmp(argv[1],"createshm")==0){
+ int id = shmget (1,1024,IPC_CREAT|0666);
+ if (id == -1){
+ fprintf (stderr,"shmget failed (%s)\n",strerror(errno));
+ }else{
+ printf ("shmget id %d\n",id);
+ void *pt = shmat (id,NULL,0);
+ if (pt == NULL){
+ fprintf (stderr,"can't shmat to id %d (%s)\n",id,strerror(errno));
+ }else{
+ strcpy ((char*)pt,"original string");
+
+ printf ("Letting a sub-program attach to this memory\n");
+ char tmp[100];
+ sprintf (tmp,"./testipc accessshm %d",id);
+ int ok = system (tmp);
+ printf ("\tSub-program returned %d\n",ok);
+
+ printf ("\tThe segment now hold :%s:\n",(char*)pt);
+ shmdt (pt);
+
+ printf ("A sub-program in another context can't attach\n");
+ sprintf (tmp,"/usr/sbin/chcontext ./testipc accessshm %d",id);
+ ok = system (tmp);
+ printf ("\tSub-program returned %d\n",ok);
+
+ printf ("Executing a sub-shell\n");
+ system ("/bin/sh");
+ }
+ printf ("Delete the share memory segment\n");
+ if (shmctl (id,IPC_RMID,NULL)==-1){
+ fprintf (stderr,"shmctl failed (%s)\n",strerror(errno));
+ }else{
+ ret = 0;
+ }
+ }
+ }else if(strcmp(argv[1],"accessshm")==0){
+ int id = atoi(argv[2]);
+ void *pt = shmat (id,NULL,0);
+ if (pt == (void*)-1){
+ fprintf (stderr,"can't shmat to id %d (%s)\n",id,strerror(errno));
+ }else{
+ printf ("\tWriting hello in share memory\n");
+ strcpy ((char*)pt,"hello");
+ ret = 0;
+ }
+ }else if(strcmp(argv[1],"createsem")==0){
+ int id = semget (1,1,IPC_CREAT|0666);
+ if (id == -1){
+ fprintf (stderr,"semget failed (%s)\n",strerror(errno));
+ }else{
+ printf ("semget id %d\n",id);
+
+ printf ("Letting a sub-program play with this semaphore\n");
+ char tmp[100];
+ sprintf (tmp,"./testipc accesssem %d",id);
+ int ok = system (tmp);
+ printf ("\tSub-program returned %d\n",ok);
+
+ printf ("A sub-program in another context can't use the semaphore\n");
+ sprintf (tmp,"/usr/sbin/chcontext ./testipc accesssem %d",id);
+ ok = system (tmp);
+ printf ("\tSub-program returned %d\n",ok);
+
+ printf ("Executing a sub-shell\n");
+ system ("/bin/sh");
+
+ printf ("Delete the semaphore\n");
+ if (semctl (id,0,IPC_RMID,NULL)==-1){
+ fprintf (stderr,"semctl failed (%s)\n",strerror(errno));
+ }else{
+ ret = 0;
+ }
+ }
+ }else if(strcmp(argv[1],"accesssem")==0){
+ int id = atoi(argv[2]);
+ struct sembuf ops[]={
+ {0,0,0}
+ };
+ if (semop (id,ops,1) == -1){
+ fprintf (stderr,"can't semop with id %d (%s)\n",id,strerror(errno));
+ }else{
+ ret = 0;
+ }
+ }
+ return ret;
+}
+
+
--- /dev/null
+// $Id: testlimit.cc,v 1.1 2003/09/29 22:01:57 ensc Exp $
+
+// Copyright (C) 2003 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+// based on tests/testlimit.cc by Jacques Gelinas
+//
+// 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, 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/wait.h>
+#include <string.h>
+#include <errno.h>
+#include <unistd.h>
+
+int main (int argc, char *argv[])
+{
+ if (argc != 3){
+ fprintf (stderr,"testlimit nbprocess malloc_size\n");
+ }else{
+ int nbproc = atoi(argv[1]);
+ int size = atoi(argv[2]);
+ for (int i=0; i<nbproc; i++){
+ if (fork()==0){
+ void *pt = malloc(size);
+ if (pt == NULL){
+ fprintf (stderr,"Child %d: can't malloc (%s)\n"
+ ,i,strerror(errno));
+ }else{
+ memset (pt,1,size);
+ }
+ sleep (100);
+ _exit (0);
+ }
+ }
+ int status;
+ while (wait(&status)!=-1);
+ }
+ return 0;
+}
+
--- /dev/null
+// $Id: testopenf.cc,v 1.1 2003/09/29 22:01:57 ensc Exp $
+
+// Copyright (C) 2003 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
+// based on tests/testopenf.cc by Jacques Gelinas
+//
+// 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, 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/wait.h>
+#include <string.h>
+#include <errno.h>
+#include <unistd.h>
+
+int main (int argc, char *argv[])
+{
+ if (argc != 3){
+ fprintf (stderr,"testlimit nbprocess nbopen\n");
+ }else{
+ int nbproc = atoi(argv[1]);
+ int nbopen = atoi(argv[2]);
+ for (int i=0; i<nbproc; i++){
+ if (fork()==0){
+ int j;
+ for (j=0; j<nbopen; j++){
+ FILE *fin = fopen ("/proc/self/status","r");
+ if (fin == NULL){
+ fprintf (stderr,"Can't open %d (%s)\n",errno,strerror(errno));
+ break;
+ }
+ }
+ printf ("%d open files, sleeping\n",j);
+ sleep (100);
+ _exit (0);
+ }
+ }
+ int status;
+ while (wait(&status)!=-1);
+ }
+ return 0;
+}
+
--- /dev/null
+%define __chattr /usr/bin/chattr
+
+Summary: Linux virtual server utilities
+Name: util-vserver
+Version: 0.29
+Release: 0
+Epoch: 0
+Copyright: GPL
+Group: System Environment/Base
+URL: http://savannah.nongnu.org/projects/util-vserver/
+Source0: http://savannah.nongnu.org/download/util-vserver/stable.pkg/%version/%name-%version.tar.bz2
+Provides: %name-devel = %epoch:%version-%release
+BuildRoot: %_tmppath/%name-%version-%release-root
+Provides: vserver = %epoch:%version-%release
+Conflicts: vserver < %epoch:%version-%release
+Conflicts: vserver > %epoch:%version-%release
+BuildRequires: e2fsprogs-devel
+Requires(post): %__chattr
+
+%package linuxconf
+Summary: Linuxconf administration modules for vservers
+Group: Applications/System
+Requires: %name = %epoch:%version-%release
+Provides: vserver-admin = %epoch:%version-%release
+Conflicts: vserver-admin < %epoch:%version-%release
+Conflicts: vserver-admin > %epoch:%version-%release
+
+%description
+This package provides the components and a framework to setup virtual
+servers. A virtual server runs inside a linux server. It is nevertheless
+highly independent. As such, you can run various services with normal
+configuration. The various vservers can't interact with each other and
+can't interact with services in the main server.
+
+This requires a special kernel supporting the new new_s_context and
+set_ipv4root system call.
+
+
+%description linuxconf
+This package provides the components to setup virtual servers with
+linuxconf.
+
+
+%prep
+%setup -q
+
+
+%build
+%configure --enable-linuxconf
+%__make %{?_smp_mflags}
+
+
+%install
+rm -rf $RPM_BUILD_ROOT
+%__make DESTDIR=$RPM_BUILD_ROOT install
+
+mkdir -p $RPM_BUILD_ROOT/vservers
+test "%_initrddir" = %_sysconfdir/init.d || {
+ mkdir -p ${RPM_BUILD_ROOT}%_initrddir
+ mv ${RPM_BUILD_ROOT}%_sysconfdir/init.d/* ${RPM_BUILD_ROOT}%_initrddir/
+}
+
+
+%clean
+rm -rf $RPM_BUILD_ROOT
+
+
+%define v_services httpd named portmap sendmail smb sshd xinetd
+%post
+/sbin/chkconfig --add vservers
+/sbin/chkconfig --add rebootmgr
+
+for i in %v_services; do
+ /sbin/chkconfig --add v_$i
+done
+
+%__chattr +t /vservers || :
+
+
+%preun
+test "$1" != 0 || for i in %v_services; do
+ /sbin/chkconfig --del v_$i
+done
+
+test "$1" != 0 || %{_initrddir}/rebootmgr stop &>/dev/null || :
+test "$1" != 0 || /sbin/chkconfig --del rebootmgr
+test "$1" != 0 || /sbin/chkconfig --del vservers
+
+
+%postun
+test "$1" = 0 || %{_initrddir}/rebootmgr condrestart >/dev/null || :
+
+
+%files
+%defattr(-,root,root)
+%doc AUTHORS COPYING ChangeLog NEWS README THANKS
+%doc doc/FAQ.txt
+%_sbindir/*
+%_libdir/%name
+%_includedir/vserver.h
+%_libdir/libvserver.a
+%_mandir/man8/*
+%config %_initrddir/*
+%config(noreplace) /etc/vservers.conf
+%attr(0,root,root) %dir /vservers
+
+%exclude %_sbindir/newvserver
+%exclude %_mandir/man8/newvserver*
+
+
+%files linuxconf
+%defattr(-,root,root)
+%config(noreplace) /etc/vservers/newvserver.defaults
+%_sbindir/newvserver
+%_mandir/man8/newvserver*
+
+
+%changelog
+
+* Fri Sep 26 2003 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de> - 0:0.23.4-1
+- initial build.
--- /dev/null
+%define __chattr /usr/bin/chattr
+
+Summary: Linux virtual server utilities
+Name: @PACKAGE@
+Version: @VERSION@
+Release: 0
+Epoch: 0
+Copyright: GPL
+Group: System Environment/Base
+URL: http://savannah.nongnu.org/projects/util-vserver/
+Source0: http://savannah.nongnu.org/download/util-vserver/stable.pkg/%version/%name-%version.tar.bz2
+Provides: %name-devel = %epoch:%version-%release
+BuildRoot: %_tmppath/%name-%version-%release-root
+Provides: vserver = %epoch:%version-%release
+Conflicts: vserver < %epoch:%version-%release
+Conflicts: vserver > %epoch:%version-%release
+BuildRequires: e2fsprogs-devel
+Requires(post): %__chattr
+
+%package linuxconf
+Summary: Linuxconf administration modules for vservers
+Group: Applications/System
+Requires: %name = %epoch:%version-%release
+Provides: vserver-admin = %epoch:%version-%release
+Conflicts: vserver-admin < %epoch:%version-%release
+Conflicts: vserver-admin > %epoch:%version-%release
+
+%description
+This package provides the components and a framework to setup virtual
+servers. A virtual server runs inside a linux server. It is nevertheless
+highly independent. As such, you can run various services with normal
+configuration. The various vservers can't interact with each other and
+can't interact with services in the main server.
+
+This requires a special kernel supporting the new new_s_context and
+set_ipv4root system call.
+
+
+%description linuxconf
+This package provides the components to setup virtual servers with
+linuxconf.
+
+
+%prep
+%setup -q
+
+
+%build
+%configure --enable-linuxconf
+%__make %{?_smp_mflags}
+
+
+%install
+rm -rf $RPM_BUILD_ROOT
+%__make DESTDIR=$RPM_BUILD_ROOT install
+
+mkdir -p $RPM_BUILD_ROOT/vservers
+test "%_initrddir" = %_sysconfdir/init.d || {
+ mkdir -p ${RPM_BUILD_ROOT}%_initrddir
+ mv ${RPM_BUILD_ROOT}%_sysconfdir/init.d/* ${RPM_BUILD_ROOT}%_initrddir/
+}
+
+
+%clean
+rm -rf $RPM_BUILD_ROOT
+
+
+%define v_services httpd named portmap sendmail smb sshd xinetd
+%post
+/sbin/chkconfig --add vservers
+/sbin/chkconfig --add rebootmgr
+
+for i in %v_services; do
+ /sbin/chkconfig --add v_$i
+done
+
+%__chattr +t /vservers || :
+
+
+%preun
+test "$1" != 0 || for i in %v_services; do
+ /sbin/chkconfig --del v_$i
+done
+
+test "$1" != 0 || %{_initrddir}/rebootmgr stop &>/dev/null || :
+test "$1" != 0 || /sbin/chkconfig --del rebootmgr
+test "$1" != 0 || /sbin/chkconfig --del vservers
+
+
+%postun
+test "$1" = 0 || %{_initrddir}/rebootmgr condrestart >/dev/null || :
+
+
+%files
+%defattr(-,root,root)
+%doc AUTHORS COPYING ChangeLog NEWS README THANKS
+%doc doc/FAQ.txt
+%_sbindir/*
+%_libdir/%name
+%_includedir/vserver.h
+%_libdir/libvserver.a
+%_mandir/man8/*
+%config %_initrddir/*
+%config(noreplace) /etc/vservers.conf
+%attr(0,root,root) %dir /vservers
+
+%exclude %_sbindir/newvserver
+%exclude %_mandir/man8/newvserver*
+
+
+%files linuxconf
+%defattr(-,root,root)
+%config(noreplace) /etc/vservers/newvserver.defaults
+%_sbindir/newvserver
+%_mandir/man8/newvserver*
+
+
+%changelog
+
+* Fri Sep 26 2003 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de> - 0:0.23.4-1
+- initial build.