Inserting VZGOT development tree within GIT
authorJean-Marc Pigeon <jmp@devel1.safe.ca>
Sat, 6 Mar 2010 16:40:31 +0000 (11:40 -0500)
committerJean-Marc Pigeon <jmp@devel1.safe.ca>
Sat, 6 Mar 2010 16:40:31 +0000 (11:40 -0500)
83 files changed:
Changes [new file with mode: 0644]
Makefile [new file with mode: 0644]
Makefile.inc [new file with mode: 0644]
RCS/Changes,v [new file with mode: 0644]
RCS/Makefile.inc,v [new file with mode: 0644]
RPM/RPMS/i386/el4.7/iputils-20020927-22.el4.i386.rpm [new file with mode: 0644]
RPM/RPMS/i386/rh7.3/procps-2.0.7-30.i386.rpm [new file with mode: 0644]
RPM/RPMS/i386/rh8.0/procps-2.0.7-35.i386.rpm [new file with mode: 0644]
RPM/RPMS/i386/rh9/procps-2.0.11-36.i386.rpm [new file with mode: 0644]
RPM/RPMS/x86_64/el4.7/iputils-20020927-22.el4.x86_64.rpm [new file with mode: 0644]
RPM/SRPMS/el4.7/iputils-20020927-22.el4.src.rpm [new file with mode: 0644]
RPM/SRPMS/rh7.3/procps-2.0.7-30.src.rpm [new file with mode: 0644]
RPM/SRPMS/rh8.0/procps-2.0.7-35.src.rpm [new file with mode: 0644]
RPM/SRPMS/rh9/procps-2.0.11-36.src.rpm [new file with mode: 0644]
app/Makefile [new file with mode: 0644]
app/Makefile.inc [new file with mode: 0644]
app/RCS/Makefile,v [new file with mode: 0644]
app/vzgot.c [new file with mode: 0644]
cgroup.d/Makefile [new file with mode: 0644]
cgroup.d/RCS/Makefile,v [new file with mode: 0644]
cgroup.d/devices.allow [new file with mode: 0644]
cgroup.d/devices.deny [new file with mode: 0644]
chkmake [new file with mode: 0644]
etc/Makefile [new file with mode: 0644]
etc/RCS/Makefile,v [new file with mode: 0644]
etc/groups [new file with mode: 0644]
etc/iptables [new file with mode: 0644]
etc/resolv.conf [new file with mode: 0644]
etc/shadow [new file with mode: 0644]
etc/snmpd.conf [new file with mode: 0644]
etc/sudoers [new file with mode: 0644]
etc/users [new file with mode: 0644]
lib/GPL [new file with mode: 0644]
lib/Makefile [new file with mode: 0644]
lib/Makefile.inc [new file with mode: 0644]
lib/RCS/subapl.h,v [new file with mode: 0644]
lib/dbgmem.c [new file with mode: 0644]
lib/dbgmem.h [new file with mode: 0644]
lib/lowtyp.h [new file with mode: 0644]
lib/subapl.c [new file with mode: 0644]
lib/subapl.h [new file with mode: 0644]
lib/subprc.c [new file with mode: 0644]
lib/subprc.h [new file with mode: 0644]
lib/unicnt.c [new file with mode: 0644]
lib/unicnt.h [new file with mode: 0644]
lib/unilck.c [new file with mode: 0644]
lib/unilck.h [new file with mode: 0644]
lib/utlprc.c [new file with mode: 0644]
lib/utlprc.h [new file with mode: 0644]
lib/utlvec.c [new file with mode: 0644]
lib/utlvec.h [new file with mode: 0644]
notes/cont [new file with mode: 0755]
notes/cont.c [new file with mode: 0644]
notes/cont.o [new file with mode: 0644]
shell/Makefile [new file with mode: 0644]
shell/RCS/Makefile,v [new file with mode: 0644]
shell/vzgot.close [new file with mode: 0755]
shell/vzgot.create [new file with mode: 0755]
shell/vzgot.destroy [new file with mode: 0755]
shell/vzgot.fboot [new file with mode: 0755]
shell/vzgot.fboot.debian [new file with mode: 0755]
shell/vzgot.fboot.redhat [new file with mode: 0755]
shell/vzgot.mksrvz [new file with mode: 0755]
shell/vzgot.net [new file with mode: 0755]
shell/vzgot.open [new file with mode: 0755]
shell/vzgot.redoall [new file with mode: 0755]
shell/vzgot.start [new file with mode: 0755]
support/Changes [new file with mode: 0644]
support/Makefile [new file with mode: 0644]
support/QUICK-START [new file with mode: 0644]
support/QUICK-START.old [new file with mode: 0644]
support/RCS/Changes,v [new file with mode: 0644]
support/RCS/sauver,v [new file with mode: 0755]
support/RCS/vzgot.spec,v [new file with mode: 0644]
support/README [new file with mode: 0644]
support/redhat_init.sh [new file with mode: 0755]
support/sauver [new file with mode: 0755]
support/tree [new file with mode: 0644]
support/vzgot.spec [new file with mode: 0644]
support/vzgot_config [new file with mode: 0644]
support/vzgot_list [new file with mode: 0644]
support/vzredoall [new file with mode: 0644]
support/worklogs [new file with mode: 0644]

diff --git a/Changes b/Changes
new file mode 100644 (file)
index 0000000..7aaeb55
--- /dev/null
+++ b/Changes
@@ -0,0 +1,35 @@
+       VZGOT Release and Changes logs
+
+#;---------------------------------------------------------------------- 
+#$Revision: 0.84.0.0 $, $Date: 2010/03/06 16:39:08 $
+#
+#;---------------------------------------------------------------------- 
+$Revision: 0.84.0.0 $, $Date: 2010/03/06 16:39:08 $
+- Improvements
+    * git handling
+
+;---------------------------------------------------------------------- 
+$Revision: 0.83.0.7, Date: 2010/02/18 14:28:18 
+- Bug Fix
+   * shell vzgot.create, changed etx4 to ext4 when
+     populating /etc/fstab with LVM partition data.
+
+;---------------------------------------------------------------------- 
+Revision: 0.83.0.0, Date: 2010/01/12 15:36:43
+- Improvements
+   * Better call to chkconfig within the rpm (%post) SPEC file.
+   * Able to start ubuntu-8.4 container type
+   * cgroup is used to limit container user priviledge
+   * LVM is used to make dedicated container root file system
+
+;---------------------------------------------------------------------- 
+Revision: 0.71.0.6, Date: 2010/01/04 16:11:33
+- Bug Fix
+   * In none debug flag, vzgot was not returning echo
+     from called shell
+   * Defining a 'FLINUX' env variable within shell script
+     vzgot.mksrvz to be pass to 'vzgot create' and used by
+     vzgot.fboot to prepare container with the right
+     linux family (RedHat,SUSE,...) structure
+
+;---------------------------------------------------------------------- 
diff --git a/Makefile b/Makefile
new file mode 100644 (file)
index 0000000..93c1631
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,242 @@
+#--------------------------------------------------------------------
+#to make Mentor executable
+#--------------------------------------------------------------------
+#variable checking
+#devbase est fait sur le nom de dieux goth
+#Odin,Gaus,Donar,Volla,Phol
+ORIG?="montreal"
+ifeq ("$(ORIG)","mercier")
+export DEVBASE=odin
+endif
+ifeq ("$(ORIG)","longueuil")
+export DEVBASE=gaus
+endif
+#defining devbase
+DEVDIR=`(cd /home/safe ; pwd)`/safetst/$(DEVBASE)
+#--------------------------------------------------------------------
+dev     :  fclean chkmake
+          @ $(MAKE) $(NCPU) -s fdebug
+
+devprod :  fclean chkmake
+          @ $(MAKE) $(NCPU) -s fprod
+
+chkmake :  Makefile.inc Makefile
+          @ $(MAKE) -s  fclean
+          @ touch chkmake
+
+fclean :  clean
+          @ for i in $(PRIVDIRS) ;                             \
+             do                                                        \
+            echo "Doing now \"$$i clean\"" ;                   \
+            $(MAKE) -s  -C $$i clean ;                         \
+             done                      
+          @ rm -fr $(RPMDIR)/SOURCES/$(APLR)*.tgz              \
+                   $(APPNAME)*.src.rpm 
+
+fdebug :  
+          @ $(MAKE) -s debug
+          @ for i in $(PRIVDIRS) ;                             \
+             do                                                        \
+            echo "Doing: $$i debug" ;                          \
+            $(MAKE) -s -C $$i debug ;                          \
+             done                      
+
+fprod  :  
+          @ $(MAKE) -s prod
+          @ for i in $(PRIVDIRS) ;                             \
+             do                                                        \
+            echo "Doing: $$i prod" ;                           \
+            $(MAKE) -s -C $$i prod ;                           \
+             done                      
+
+#--------------------------------------------------------------------
+#to test application localy
+vzboot :  dev
+          @ $(MAKE) ACTION="boot cont" vzgotry
+       
+vzgotry        :  
+          - exec app/$(APPNAME) -b $(DEVDIR) -v -f -d9 $(ACTION)
+
+#--------------------------------------------------------------------
+#to save the current distribution
+sauve  :  fclean
+          @ echo "starting RCS process"
+          @ support/sauver $(SRC)
+          @ for i in $(ALLDIRS) ; \
+             do  \
+             $(MAKE) -s -C $$i $@ ; \
+             done
+          @ echo "RCS process completed"
+#--------------------------------------------------------------------
+#creation d'un band de test
+devbase        :
+          @ (                                                  \
+            if [ -z $(DEVBASE) ] ; then                        \
+              echo "DEVBASE environment variable is missing" ; \
+            else                                               \
+              echo "Starting to build devbase \"$(DEVBASE)\"" ;\
+              $(MAKE) -s devil ;                               \
+            fi                                                 \
+            )
+
+devil  :
+          @ $(MAKE) -s fclean fdebug 
+          @ echo "Creating \"$(DEVBASE)\" test executable"; 
+          @ (                                                  \
+            if [ -d $(DEVDIR) ] ; then                         \
+              rm -fr $(DEVDIR)/* ;                             \
+            else                                               \
+              mkdir $(DEVDIR) ;                                \
+            fi ;                                               \
+            )
+          @ #creating basic prexisting system directory        
+          @ mkdir -p                                           \
+               $(DEVDIR)/$(VZDIR)/cont/.oldroot                \
+               $(DEVDIR)/$(VZDIR)/cont/rootfs                  \
+               $(DEVDIR)/usr/bin                               \
+               $(DEVDIR)/var/tmp                               \
+               $(DEVDIR)/var/lock/$(APPNAME)                   \
+               $(DEVDIR)/tmp
+          @ echo "\"$(DEVBASE)\" now ready"
+
+#--------------------------------------------------------------------
+#to make a full distribution
+
+distrib        :  fclean rpm
+          $(MAKE) dorpm_distrib
+#--------------------------------------------------------------------
+#to test application
+xtest  :  rpm
+          @ ssh -q -Y -t $(XTSTSYS) sudo                               \
+               rm -f ~safe/rpmbuild/RPMS/i586/$(APPNAME)*.i586.rpm
+          @ ssh -q -Y -t $(XTSTSYS) sudo                               \
+               rm -f ~safe/$(APPNAME)*.src.rpm
+          @ scp -q $(APPNAME)*.src.rpm $(XTSTSYS):
+          @ ssh -Y -t $(XTSTSYS)                               \
+               "rpmbuild --rebuild $(APPNAME)*.src.rpm"
+          @ ssh -Y -t $(XTSTSYS) sudo                          \
+               rpm -Uhv ~safe/rpmbuild/RPMS/i586/$(APPNAME)*.i586.rpm
+
+test   :  binary
+          @ ssh $(TSTSYS).safe.ca                              \
+               "rm -fr $(APPNAME)-*.x86_64.rpm"
+          @ scp -q                                             \
+               $(RPMDIR)/RPMS/x86_64/$(APPNAME)-*.x86_64.rpm   \
+               $(TSTSYS).safe.ca:
+           @ ssh -Y -t $(TSTSYS).safe.ca sudo                  \
+               rpm -Uhv ~safe/$(APPNAME)-*.x86_64.rpm
+
+binary :  rpm  
+          @ echo "Making RPM binary"
+          @ rm -fr $(RPMDIR)/RPMS/x86_64/$(APPNAME)-*.x86_64.rpm
+          @ rm -fr $(APPNAME)-*.x86_64.rpm
+          @ rpm --quiet -Uhv $(APLR)*.src.rpm  > /dev/null
+          @ rpmbuild                                           \
+               --ba                                            \
+               --quiet                                         \
+               --rebuild                                       \
+               $(RPMDIR)/SPECS/$(APPNAME).spec
+          @ cp $(RPMDIR)/RPMS/x86_64/$(APPNAME)-*.x86_64.rpm . 
+          @ echo "RPM binary completed"
+
+
+rpmlint        :  binary
+          @ rpmlint $(APPNAME)-*.x86_64.rpm 
+
+release        :  binary
+          @ ssh $(FTPSITE).safe.ca                             \
+               mkdir -p /var/ftp/pub/linux/vzgot/archives
+          @ ssh $(FTPSITE).safe.ca                             \
+               mv /var/ftp/pub/linux/vzgot/*.rpm               \
+                  /var/ftp/pub/linux/vzgot/archives
+          @ scp -p support/{README,QUICK-START}                \
+               $(APPNAME)-*.rpm                                \
+               $(FTPSITE).safe.ca:/var/ftp/pub/linux/vzgot
+          @ grep -v '^[#.*]' Changes   |                       \
+               ssh $(FTPSITE).safe.ca                          \
+                  "cat - > /var/ftp/pub/linux/vzgot/Changes"
+#--------------------------------------------------------------------
+#to make the RPM SRC file
+rpm    :
+          @ echo "Making RPM src"
+          @ $(MAKE) -s vztar
+          @ rm -fr                                             \
+               $(RPMDIR)/SOURCES/$(APLR)*.tgz                  \
+               $(APPNAME)*.src.rpm
+          @ mv $(APLR).tgz $(RPMDIR)/SOURCES
+          @ rpmbuild -bs                                       \
+               --quiet                                         \
+               --define "_topdir /home/safe/RPM"               \
+               support/$(APPNAME).spec > /dev/null 2>&1
+          @ mv $(RPMDIR)/SRPMS/$(APLR)*.src.rpm .
+          @ echo "RPM src completed"
+       
+vztar  :
+          @ rm -fr $(APLR).tgz
+          @ mkdir -p                                           \
+               $(APLR)/conf                                    \
+               $(APLR)/lib                                     \
+               $(APLR)/app                                     \
+               $(APLR)/cgroup.d                                \
+               $(APLR)/etc                                     \
+               $(APLR)/etc/sysconfig                           \
+               $(APLR)/etc/snmp                                \
+               $(APLR)/shell
+          @ #copying version, build_date and info file
+          @ date > $(APLR)/$(APLR).build_date
+          @ #adding RPM data
+          @ cp -ap RPM $(APLR)
+          @ #adding group information
+          @ cp -ap cgroup.d/devices.* $(APLR)/cgroup.d
+          @ #adding application sources
+          @ cp -a lib/{*.c,*.h} $(APLR)/lib
+          @ cp -a app/*.c $(APLR)/app
+          @ cp -a shell/vzgot.* $(APLR)/shell
+          @ #adding configuration file
+          @ cp -a support/vzgot_config $(APLR)/conf
+          @ cp -a support/vzgot_list $(APLR)/conf
+          @ cp -a support/redhat_init.sh $(APLR)/conf
+          @ cp -a support/{README,QUICK-START} $(APLR)
+          @ grep -v '^[#.*]' Changes > $(APLR)/Changes
+          @ cp -a etc/{users,groups,sudoers} $(APLR)/etc
+          @ cp -a etc/{resolv.conf,shadow} $(APLR)/etc
+          @ cp -a etc/iptables $(APLR)/etc/sysconfig
+          @ cp -a etc/snmpd.conf $(APLR)/etc/snmp
+          @ #adding construction file
+          @ cp -a Makefile.inc  $(APLR)/Makefile
+          @ @ cp -a lib/Makefile.inc $(APLR)/lib/Makefile
+          @ @ cp -a app/Makefile.inc $(APLR)/app/Makefile
+          @ tar zcf $(APLR).tgz $(APLR)
+          @ rm -fr $(APLR)
+
+#--------------------------------------------------------------------
+togit   :  fclean
+          @ git add .
+          @ git clean -f -q
+          @ echo "Ready for \"git commit -a\""
+
+#--------------------------------------------------------------------
+SRC    =                                                       \
+          Changes                                              \
+          Makefile.inc
+
+ALLDIRS        =                                                       \
+         $(SUBDIRS)                                            \
+         etc cgroup.d shell support
+
+
+PROG=  $(APPNAME)
+
+VZDIR=/var/lib/vzgot
+#--------------------------------------------------------------------
+include        ./Makefile.inc
+include        /etc/saferepo/Makefile.dorpm
+#--------------------------------------------------------------------
+#rpm definitions
+RPMDIR  =       ~/RPM
+TSTSYS =       Sorel
+XTSTSYS        =       192.219.254.58
+FTPSITE        =       ftploc
+#====================================================================
+.PHONY:        sauve binary rpm rpmlint chkmake togit
+#--------------------------------------------------------------------
diff --git a/Makefile.inc b/Makefile.inc
new file mode 100644 (file)
index 0000000..5d80a66
--- /dev/null
@@ -0,0 +1,71 @@
+#--------------------------------------------------------------------
+#To make a debugging executable
+prod                                                           \
+debug  :  
+          @ for i in $(SUBDIRS) ;                              \
+             do                                                        \
+            echo "Doing: $$i $@";                              \
+            $(MAKE) -C $$i $@ ;                                \
+            RETVAL=$$? ;                                       \
+            if [ $$RETVAL != 0 ] ; then                        \
+               exit $$RETVAL ;                                 \
+               fi ;                                            \
+             done
+
+#To clean distribution
+clean  :
+          @ for i in $(SUBDIRS) ;                              \
+             do                                                        \
+            echo "Doing now \"$$i $@\"" ;                      \
+            $(MAKE) -s  -C $$i $@ ;                            \
+             done                      
+          @ - rm -fr bin
+
+#--------------------------------------------------------------------
+#installing application
+install        :
+          @ install -d $(DESTDIR)/usr/sbin/
+          @ install -d $(DESTDIR)/var/lock/$(APPNAME)
+          @ #adding executable
+          @ install app/vzgot $(DESTDIR)/usr/sbin
+          @ mv shell/vzgot.mksrvz $(DESTDIR)/usr/sbin/
+          @ mv shell/vzgot.redoall $(DESTDIR)/usr/sbin/
+          @ #adding init file
+          @ install -d $(DESTDIR)/etc/rc.d/init.d
+          @ cp -ap conf/redhat_init.sh $(DESTDIR)/etc/rc.d/init.d/vzgot
+          @ #adding configuration file
+          @ install -d $(DESTDIR)/etc/$(APPNAME)
+          @ install -m 0644 conf/vzgot_config $(DESTDIR)/etc/$(APPNAME)
+          @ install -m 0644 conf/vzgot_list $(DESTDIR)/etc/$(APPNAME)
+          @ install -d $(DESTDIR)/var/lib/$(APPNAME)
+          @ cp -ap etc $(DESTDIR)/var/lib/$(APPNAME)
+          @ install -d $(DESTDIR)/var/lib/$(APPNAME)/etc/ssh
+          @ install -d $(DESTDIR)/var/lib/$(APPNAME)/etc/sysconfig
+          @ install -d $(DESTDIR)/var/lib/$(APPNAME)/home
+          @ cp -ap cgroup.d $(DESTDIR)/var/lib/$(APPNAME)
+          @ #adding template directory
+          @ install -d $(DESTDIR)/var/lib/$(APPNAME)/vztemplate
+          @ #adding special distribution RPM
+          @ cp -ap RPM $(DESTDIR)/var/lib/$(APPNAME)
+          @ install -d $(DESTDIR)/var/lib/$(APPNAME)/vzdir
+          @ #adding application shell script
+          @ install -d $(DESTDIR)/var/lib/$(APPNAME)/shell
+          @ install shell/vzgot.* $(DESTDIR)/var/lib/$(APPNAME)/shell
+
+#--------------------------------------------------------------------
+SUBDIRS=                                                       \
+          lib app
+
+#===================================================================
+#all support information
+.PHONY:        clean
+#--------------------------------------------------------------------
+#version management
+APPNAME=vzgot
+REVISION="$Revision: 0.84.0.0 $ "
+DATE="$Date: 2010/03/06 16:39:08 $"
+VERS=`echo $(REVISION) | cut -d' ' -f 2 | cut -d'.' -f1,2`
+REL=`echo $(REVISION) | cut -d' ' -f 2 | cut -d'.' -f4`
+SUBVERS=`echo $(DATE) | cut -d' ' -f2 | tr -d '/'`
+APLR=$(APPNAME)-$(VERS).$(REL)
+#--------------------------------------------------------------------
diff --git a/RCS/Changes,v b/RCS/Changes,v
new file mode 100644 (file)
index 0000000..f83d202
--- /dev/null
@@ -0,0 +1,173 @@
+head   0.84;
+access;
+symbols;
+locks
+       jmp:0.84.0.0; strict;
+comment        @# @;
+
+
+0.84
+date   2010.03.06.16.39.08;    author jmp;     state Exp;
+branches
+       0.84.0.0;
+next   0.83;
+
+0.83
+date   2010.03.06.16.39.08;    author jmp;     state Exp;
+branches
+       0.83.0.0;
+next   ;
+
+0.83.0.0
+date   2010.03.06.16.39.08;    author jmp;     state Exp;
+branches;
+next   0.83.0.1;
+
+0.83.0.1
+date   2010.03.06.16.39.08;    author jmp;     state Exp;
+branches;
+next   ;
+
+0.84.0.0
+date   2010.03.06.16.39.08;    author jmp;     state Exp;
+branches;
+next   ;
+
+
+desc
+@      VZGOT Release and Changes logs
+
+#;----------------------------------------------------------------------
+#$Revision: 0.84.0.0 $, $Date: 2010/03/06 16:38:31 $
+#
+#;----------------------------------------------------------------------
+$Revision: 0.84.0.0 $, $Date: 2010/03/06 16:38:31 $
+- Improvements
+    * git handling
+
+;----------------------------------------------------------------------
+$Revision: 0.83.0.7, Date: 2010/02/18 14:28:18
+- Bug Fix
+   * shell vzgot.create, changed etx4 to ext4 when
+     populating /etc/fstab with LVM partition data.
+
+;----------------------------------------------------------------------
+Revision: 0.83.0.0, Date: 2010/01/12 15:36:43
+- Improvements
+   * Better call to chkconfig within the rpm (%post) SPEC file.
+   * Able to start ubuntu-8.4 container type
+   * cgroup is used to limit container user priviledge
+   * LVM is used to make dedicated container root file system
+
+;----------------------------------------------------------------------
+Revision: 0.71.0.6, Date: 2010/01/04 16:11:33
+- Bug Fix
+   * In none debug flag, vzgot was not returning echo
+     from called shell
+   * Defining a 'FLINUX' env variable within shell script
+     vzgot.mksrvz to be pass to 'vzgot create' and used by
+     vzgot.fboot to prepare container with the right
+     linux family (RedHat,SUSE,...) structure
+
+;----------------------------------------------------------------------
+@
+
+
+0.84
+log
+@upgrade version
+@
+text
+@      VZGOT Release and Changes logs
+
+#;---------------------------------------------------------------------- 
+#$Revision: 0.83.0.1 $, $Date: 2010/03/06 16:39:08 $
+#
+#;---------------------------------------------------------------------- 
+$Revision: 0.83.0.1 $, $Date: 2010/03/06 16:39:08 $
+- Improvements
+    * git handling
+
+;---------------------------------------------------------------------- 
+$Revision: 0.83.0.7, Date: 2010/02/18 14:28:18 
+- Bug Fix
+   * shell vzgot.create, changed etx4 to ext4 when
+     populating /etc/fstab with LVM partition data.
+
+;---------------------------------------------------------------------- 
+Revision: 0.83.0.0, Date: 2010/01/12 15:36:43
+- Improvements
+   * Better call to chkconfig within the rpm (%post) SPEC file.
+   * Able to start ubuntu-8.4 container type
+   * cgroup is used to limit container user priviledge
+   * LVM is used to make dedicated container root file system
+
+;---------------------------------------------------------------------- 
+Revision: 0.71.0.6, Date: 2010/01/04 16:11:33
+- Bug Fix
+   * In none debug flag, vzgot was not returning echo
+     from called shell
+   * Defining a 'FLINUX' env variable within shell script
+     vzgot.mksrvz to be pass to 'vzgot create' and used by
+     vzgot.fboot to prepare container with the right
+     linux family (RedHat,SUSE,...) structure
+
+;---------------------------------------------------------------------- 
+@
+
+
+0.84.0.0
+log
+@Ratrapage numero de Version
+@
+text
+@d4 1
+a4 1
+#$Revision: 0.84 $, $Date: 2010/03/06 16:39:08 $
+d7 1
+a7 1
+$Revision: 0.84 $, $Date: 2010/03/06 16:39:08 $
+@
+
+
+0.83
+log
+@Creation
+#=================================================================================
+@
+text
+@d4 1
+a4 1
+#$Revision: 0.84.0.0 $, $Date: 2010/03/06 16:38:31 $
+d7 1
+a7 1
+$Revision: 0.84.0.0 $, $Date: 2010/03/06 16:38:31 $
+@
+
+
+0.83.0.0
+log
+@Ratrapage numero de Version
+@
+text
+@d4 1
+a4 1
+#$Revision: 0.83 $, $Date: 2010/03/06 16:39:08 $
+d7 1
+a7 1
+$Revision: 0.83 $, $Date: 2010/03/06 16:39:08 $
+@
+
+
+0.83.0.1
+log
+@Mise en place su GIT
+@
+text
+@d4 1
+a4 1
+#$Revision: 0.83.0.0 $, $Date: 2010/03/06 16:39:08 $
+d7 1
+a7 1
+$Revision: 0.83.0.0 $, $Date: 2010/03/06 16:39:08 $
+@
diff --git a/RCS/Makefile.inc,v b/RCS/Makefile.inc,v
new file mode 100644 (file)
index 0000000..e87b18d
--- /dev/null
@@ -0,0 +1,235 @@
+head   0.84;
+access;
+symbols;
+locks
+       jmp:0.84.0.0; strict;
+comment        @# @;
+
+
+0.84
+date   2010.03.06.16.39.08;    author jmp;     state Exp;
+branches
+       0.84.0.0;
+next   0.83;
+
+0.83
+date   2010.03.06.16.39.08;    author jmp;     state Exp;
+branches
+       0.83.0.0;
+next   ;
+
+0.83.0.0
+date   2010.03.06.16.39.08;    author jmp;     state Exp;
+branches;
+next   0.83.0.1;
+
+0.83.0.1
+date   2010.03.06.16.39.08;    author jmp;     state Exp;
+branches;
+next   ;
+
+0.84.0.0
+date   2010.03.06.16.39.08;    author jmp;     state Exp;
+branches;
+next   ;
+
+
+desc
+@#--------------------------------------------------------------------
+#To make a debugging executable
+prod                                                           \
+debug  :
+          @@ for i in $(SUBDIRS) ;                             \
+             do                                                        \
+            echo "Doing: $$i $@@";                             \
+            $(MAKE) -C $$i $@@ ;                               \
+            RETVAL=$$? ;                                       \
+            if [ $$RETVAL != 0 ] ; then                        \
+               exit $$RETVAL ;                                 \
+               fi ;                                            \
+             done
+
+#To clean distribution
+clean  :
+          @@ for i in $(SUBDIRS) ;                             \
+             do                                                        \
+            echo "Doing now \"$$i $@@\"" ;                     \
+            $(MAKE) -s  -C $$i $@@ ;                           \
+             done
+          @@ - rm -fr bin
+
+#--------------------------------------------------------------------
+#installing application
+install        :
+          @@ install -d $(DESTDIR)/usr/sbin/
+          @@ install -d $(DESTDIR)/var/lock/$(APPNAME)
+          @@ #adding executable
+          @@ install app/vzgot $(DESTDIR)/usr/sbin
+          @@ mv shell/vzgot.mksrvz $(DESTDIR)/usr/sbin/
+          @@ mv shell/vzgot.redoall $(DESTDIR)/usr/sbin/
+          @@ #adding init file
+          @@ install -d $(DESTDIR)/etc/rc.d/init.d
+          @@ cp -ap conf/redhat_init.sh $(DESTDIR)/etc/rc.d/init.d/vzgot
+          @@ #adding configuration file
+          @@ install -d $(DESTDIR)/etc/$(APPNAME)
+          @@ install -m 0644 conf/vzgot_config $(DESTDIR)/etc/$(APPNAME)
+          @@ install -m 0644 conf/vzgot_list $(DESTDIR)/etc/$(APPNAME)
+          @@ install -d $(DESTDIR)/var/lib/$(APPNAME)
+          @@ cp -ap etc $(DESTDIR)/var/lib/$(APPNAME)
+          @@ install -d $(DESTDIR)/var/lib/$(APPNAME)/etc/ssh
+          @@ install -d $(DESTDIR)/var/lib/$(APPNAME)/etc/sysconfig
+          @@ install -d $(DESTDIR)/var/lib/$(APPNAME)/home
+          @@ cp -ap cgroup.d $(DESTDIR)/var/lib/$(APPNAME)
+          @@ #adding template directory
+          @@ install -d $(DESTDIR)/var/lib/$(APPNAME)/vztemplate
+          @@ #adding special distribution RPM
+          @@ cp -ap RPM $(DESTDIR)/var/lib/$(APPNAME)
+          @@ install -d $(DESTDIR)/var/lib/$(APPNAME)/vzdir
+          @@ #adding application shell script
+          @@ install -d $(DESTDIR)/var/lib/$(APPNAME)/shell
+          @@ install shell/vzgot.* $(DESTDIR)/var/lib/$(APPNAME)/shell
+
+#--------------------------------------------------------------------
+SUBDIRS=                                                       \
+          lib app
+
+#===================================================================
+#all support information
+.PHONY:        clean
+#--------------------------------------------------------------------
+#version management
+APPNAME=vzgot
+REVISION="$Revision: 0.84.0.0 $ "
+DATE="$Date: 2010/03/06 16:38:31 $"
+VERS=`echo $(REVISION) | cut -d' ' -f 2 | cut -d'.' -f1,2`
+REL=`echo $(REVISION) | cut -d' ' -f 2 | cut -d'.' -f4`
+SUBVERS=`echo $(DATE) | cut -d' ' -f2 | tr -d '/'`
+APLR=$(APPNAME)-$(VERS).$(REL)
+#--------------------------------------------------------------------
+@
+
+
+0.84
+log
+@upgrade version
+@
+text
+@#--------------------------------------------------------------------
+#To make a debugging executable
+prod                                                           \
+debug  :  
+          @@ for i in $(SUBDIRS) ;                             \
+             do                                                        \
+            echo "Doing: $$i $@@";                             \
+            $(MAKE) -C $$i $@@ ;                               \
+            RETVAL=$$? ;                                       \
+            if [ $$RETVAL != 0 ] ; then                        \
+               exit $$RETVAL ;                                 \
+               fi ;                                            \
+             done
+
+#To clean distribution
+clean  :
+          @@ for i in $(SUBDIRS) ;                             \
+             do                                                        \
+            echo "Doing now \"$$i $@@\"" ;                     \
+            $(MAKE) -s  -C $$i $@@ ;                           \
+             done                      
+          @@ - rm -fr bin
+
+#--------------------------------------------------------------------
+#installing application
+install        :
+          @@ install -d $(DESTDIR)/usr/sbin/
+          @@ install -d $(DESTDIR)/var/lock/$(APPNAME)
+          @@ #adding executable
+          @@ install app/vzgot $(DESTDIR)/usr/sbin
+          @@ mv shell/vzgot.mksrvz $(DESTDIR)/usr/sbin/
+          @@ mv shell/vzgot.redoall $(DESTDIR)/usr/sbin/
+          @@ #adding init file
+          @@ install -d $(DESTDIR)/etc/rc.d/init.d
+          @@ cp -ap conf/redhat_init.sh $(DESTDIR)/etc/rc.d/init.d/vzgot
+          @@ #adding configuration file
+          @@ install -d $(DESTDIR)/etc/$(APPNAME)
+          @@ install -m 0644 conf/vzgot_config $(DESTDIR)/etc/$(APPNAME)
+          @@ install -m 0644 conf/vzgot_list $(DESTDIR)/etc/$(APPNAME)
+          @@ install -d $(DESTDIR)/var/lib/$(APPNAME)
+          @@ cp -ap etc $(DESTDIR)/var/lib/$(APPNAME)
+          @@ install -d $(DESTDIR)/var/lib/$(APPNAME)/etc/ssh
+          @@ install -d $(DESTDIR)/var/lib/$(APPNAME)/etc/sysconfig
+          @@ install -d $(DESTDIR)/var/lib/$(APPNAME)/home
+          @@ cp -ap cgroup.d $(DESTDIR)/var/lib/$(APPNAME)
+          @@ #adding template directory
+          @@ install -d $(DESTDIR)/var/lib/$(APPNAME)/vztemplate
+          @@ #adding special distribution RPM
+          @@ cp -ap RPM $(DESTDIR)/var/lib/$(APPNAME)
+          @@ install -d $(DESTDIR)/var/lib/$(APPNAME)/vzdir
+          @@ #adding application shell script
+          @@ install -d $(DESTDIR)/var/lib/$(APPNAME)/shell
+          @@ install shell/vzgot.* $(DESTDIR)/var/lib/$(APPNAME)/shell
+
+#--------------------------------------------------------------------
+SUBDIRS=                                                       \
+          lib app
+
+#===================================================================
+#all support information
+.PHONY:        clean
+#--------------------------------------------------------------------
+#version management
+APPNAME=vzgot
+REVISION="$Revision: 0.83.0.1 $ "
+DATE="$Date: 2010/03/06 16:39:08 $"
+VERS=`echo $(REVISION) | cut -d' ' -f 2 | cut -d'.' -f1,2`
+REL=`echo $(REVISION) | cut -d' ' -f 2 | cut -d'.' -f4`
+SUBVERS=`echo $(DATE) | cut -d' ' -f2 | tr -d '/'`
+APLR=$(APPNAME)-$(VERS).$(REL)
+#--------------------------------------------------------------------
+@
+
+
+0.84.0.0
+log
+@Ratrapage numero de Version
+@
+text
+@d65 1
+a65 1
+REVISION="$Revision: 0.84 $ "
+@
+
+
+0.83
+log
+@Creation
+#=================================================================================
+@
+text
+@d65 2
+a66 2
+REVISION="$Revision: 0.84.0.0 $ "
+DATE="$Date: 2010/03/06 16:38:31 $"
+@
+
+
+0.83.0.0
+log
+@Ratrapage numero de Version
+@
+text
+@d65 2
+a66 2
+REVISION="$Revision: 0.83 $ "
+DATE="$Date: 2010/03/06 16:39:08 $"
+@
+
+
+0.83.0.1
+log
+@Mise en place su GIT
+@
+text
+@d65 1
+a65 1
+REVISION="$Revision: 0.83.0.0 $ "
+@
diff --git a/RPM/RPMS/i386/el4.7/iputils-20020927-22.el4.i386.rpm b/RPM/RPMS/i386/el4.7/iputils-20020927-22.el4.i386.rpm
new file mode 100644 (file)
index 0000000..ad75d80
Binary files /dev/null and b/RPM/RPMS/i386/el4.7/iputils-20020927-22.el4.i386.rpm differ
diff --git a/RPM/RPMS/i386/rh7.3/procps-2.0.7-30.i386.rpm b/RPM/RPMS/i386/rh7.3/procps-2.0.7-30.i386.rpm
new file mode 100644 (file)
index 0000000..6fef142
Binary files /dev/null and b/RPM/RPMS/i386/rh7.3/procps-2.0.7-30.i386.rpm differ
diff --git a/RPM/RPMS/i386/rh8.0/procps-2.0.7-35.i386.rpm b/RPM/RPMS/i386/rh8.0/procps-2.0.7-35.i386.rpm
new file mode 100644 (file)
index 0000000..087d1d8
Binary files /dev/null and b/RPM/RPMS/i386/rh8.0/procps-2.0.7-35.i386.rpm differ
diff --git a/RPM/RPMS/i386/rh9/procps-2.0.11-36.i386.rpm b/RPM/RPMS/i386/rh9/procps-2.0.11-36.i386.rpm
new file mode 100644 (file)
index 0000000..4eb36ae
Binary files /dev/null and b/RPM/RPMS/i386/rh9/procps-2.0.11-36.i386.rpm differ
diff --git a/RPM/RPMS/x86_64/el4.7/iputils-20020927-22.el4.x86_64.rpm b/RPM/RPMS/x86_64/el4.7/iputils-20020927-22.el4.x86_64.rpm
new file mode 100644 (file)
index 0000000..50bdf1c
Binary files /dev/null and b/RPM/RPMS/x86_64/el4.7/iputils-20020927-22.el4.x86_64.rpm differ
diff --git a/RPM/SRPMS/el4.7/iputils-20020927-22.el4.src.rpm b/RPM/SRPMS/el4.7/iputils-20020927-22.el4.src.rpm
new file mode 100644 (file)
index 0000000..0cd4b32
Binary files /dev/null and b/RPM/SRPMS/el4.7/iputils-20020927-22.el4.src.rpm differ
diff --git a/RPM/SRPMS/rh7.3/procps-2.0.7-30.src.rpm b/RPM/SRPMS/rh7.3/procps-2.0.7-30.src.rpm
new file mode 100644 (file)
index 0000000..7ffe11a
Binary files /dev/null and b/RPM/SRPMS/rh7.3/procps-2.0.7-30.src.rpm differ
diff --git a/RPM/SRPMS/rh8.0/procps-2.0.7-35.src.rpm b/RPM/SRPMS/rh8.0/procps-2.0.7-35.src.rpm
new file mode 100644 (file)
index 0000000..30b301a
Binary files /dev/null and b/RPM/SRPMS/rh8.0/procps-2.0.7-35.src.rpm differ
diff --git a/RPM/SRPMS/rh9/procps-2.0.11-36.src.rpm b/RPM/SRPMS/rh9/procps-2.0.11-36.src.rpm
new file mode 100644 (file)
index 0000000..6e44476
Binary files /dev/null and b/RPM/SRPMS/rh9/procps-2.0.11-36.src.rpm differ
diff --git a/app/Makefile b/app/Makefile
new file mode 100644 (file)
index 0000000..2cbe3a7
--- /dev/null
@@ -0,0 +1,13 @@
+#--------------------------------------------------------------------
+sauve  : 
+          @ echo doing RCS on $(LOCDIR)
+          ../support/sauver $(SRC)
+#--------------------------------------------------------------------
+#Sources contents
+SRC=                                                           \
+          Makefile
+
+LOCDIR= app
+#--------------------------------------------------------------------
+include           Makefile.inc
+#--------------------------------------------------------------------
diff --git a/app/Makefile.inc b/app/Makefile.inc
new file mode 100644 (file)
index 0000000..c6bd73f
--- /dev/null
@@ -0,0 +1,44 @@
+#--------------------------------------------------------------------
+#to compile opensrc clement application
+#--------------------------------------------------------------------
+debug  :
+         @ $(MAKE) OPTIME="-g" DEBUG="-DDEBUG" exe
+
+prod   :
+         @ $(MAKE) OPTIME="-g3" exe
+
+exe    : 
+         @ $(MAKE) $(EXE)
+       
+clean  :
+         @ - rm -fr *.o $(EXE) *~ 
+
+#--------------------------------------------------------------------
+#Executable file to do
+EXE=                                                           \
+       vzgot 
+
+OBJS=                                                          \
+       vzgot.o
+
+VZLIB= ../lib/vzlb.a
+#--------------------------------------------------------------------
+#dependencies
+
+$(EXE) :  $(OBJS) $(VZLIB)
+          @ $(LD) $(LDFLAGS) -o $@ $@.o $(LIBS)
+#--------------------------------------------------------------------
+vzgot.o        :                                                       \
+          ../lib/lowtyp.h                                      \
+          ../lib/dbgmem.h                                      \
+          ../lib/subprc.h                                      \
+          ../lib/unilck.h ../lib/unicnt.h                      \
+          vzgot.c
+
+#--------------------------------------------------------------------
+#compiler and loader options
+CC=gcc $(OPTIME) $(DEBUG)
+LD=$(CC) 
+CFLAGS=-I ../lib -std=gnu99 -pedantic -D_GNU_SOURCE -Wall -Wshadow
+LIBS=$(VZLIB)
+#--------------------------------------------------------------------
diff --git a/app/RCS/Makefile,v b/app/RCS/Makefile,v
new file mode 100644 (file)
index 0000000..dbcaaf8
--- /dev/null
@@ -0,0 +1,105 @@
+head   0.84;
+access;
+symbols;
+locks
+       jmp:0.84.0.0; strict;
+comment        @# @;
+
+
+0.84
+date   2010.03.06.16.39.08;    author jmp;     state Exp;
+branches
+       0.84.0.0;
+next   0.83;
+
+0.83
+date   2010.03.06.16.39.08;    author jmp;     state Exp;
+branches
+       0.83.0.0;
+next   ;
+
+0.83.0.0
+date   2010.03.06.16.39.08;    author jmp;     state Exp;
+branches;
+next   0.83.0.1;
+
+0.83.0.1
+date   2010.03.06.16.39.08;    author jmp;     state Exp;
+branches;
+next   ;
+
+0.84.0.0
+date   2010.03.06.16.39.08;    author jmp;     state Exp;
+branches;
+next   ;
+
+
+desc
+@#--------------------------------------------------------------------
+sauve  :
+          @@ echo doing RCS on $(LOCDIR)
+          ../support/sauver $(SRC)
+#--------------------------------------------------------------------
+#Sources contents
+SRC=                                                           \
+          Makefile
+
+LOCDIR= app
+#--------------------------------------------------------------------
+include           Makefile.inc
+#--------------------------------------------------------------------
+@
+
+
+0.84
+log
+@upgrade version
+@
+text
+@#--------------------------------------------------------------------
+sauve  : 
+          @@ echo doing RCS on $(LOCDIR)
+          ../support/sauver $(SRC)
+#--------------------------------------------------------------------
+#Sources contents
+SRC=                                                           \
+          Makefile
+
+LOCDIR= app
+#--------------------------------------------------------------------
+include           Makefile.inc
+#--------------------------------------------------------------------
+@
+
+
+0.84.0.0
+log
+@Ratrapage numero de Version
+@
+text
+@@
+
+
+0.83
+log
+@Creation
+#=================================================================================
+@
+text
+@@
+
+
+0.83.0.0
+log
+@Ratrapage numero de Version
+@
+text
+@@
+
+
+0.83.0.1
+log
+@Mise en place su GIT
+@
+text
+@@
diff --git a/app/vzgot.c b/app/vzgot.c
new file mode 100644 (file)
index 0000000..c563f52
--- /dev/null
@@ -0,0 +1,787 @@
+/************************************************/
+/*                                             */
+/*      Copyright:                             */
+/*      Jean-Marc Pigeon <jmp@safe.ca>  2009   */
+/*                                             */
+/************************************************/
+/* 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., 51 Franklin Street,       */
+/* Fifth Floor, Boston, MA  02110-1301, USA.   */
+/************************************************/
+/*                                             */
+/*     VZBOOT                                  */
+/*     Its purpose its too boot container      */
+/*     process and wait for process completion */
+/*     or a SIGTERM signal, to initiate the    */
+/*     container shutdown.                     */
+/*                                             */
+/************************************************/
+#include       <sys/wait.h>
+#include       <sys/prctl.h>
+#include       <sys/capability.h>
+#include       <sys/utsname.h>
+#include       <sys/personality.h>
+#include       <errno.h>
+#include       <sched.h>
+#include       <stdio.h>
+#include       <string.h>
+#include       <syslog.h>
+#include       <signal.h>
+#include       <fcntl.h>
+#include       "lowtyp.h"
+#include       "dbgmem.h"
+#include       "subprc.h"
+#include       "subapl.h"
+#include       "unilck.h"
+#include       "unicnt.h"
+
+#define        APPNAME "vzgot"
+#define        VZOPEN  "vzgot.open"    /*preparing VZ  */
+#define        VZCLOSE "vzgot.close"   /*stopping VZ   */
+#define        VZSTART "vzgot.start"   /*container init*/
+#define        VZFBOOT "vzgot.fboot"   /*container boot*/
+#define        VZCREAT "vzgot.create"  /*make container*/
+#define        VZDEST  "vzgot.destroy" /*undo container*/
+
+#define        FBOOT   "firstboot"     /*firstboot rqst*/
+
+/*argument structure                           */
+typedef        struct  {
+       pid_t mspid;    /*vzgot master PID      */
+       char *arch;     /*container architecture*/
+       int argc;       /*number of argument    */
+       char **argv;    /*argument list         */
+       }ARGTYP;
+/*
+\f
+*/
+/************************************************/
+/*                                             */
+/*     Procedure to display the program usage  */
+/*                                             */
+/************************************************/
+static void usage()
+
+{
+(void) fprintf(stderr,"%s Version %s\n",appname,apl_getvers());
+(void) fprintf(stderr,"usage:  %s "
+                     "[-b base] "
+                     "[-d debug] "
+                     "[-f ] "
+                     "[-h ] "
+                     "[-v ] "
+                     "action_word "
+                     "container_name [starter]\n",appname);
+(void) fprintf(stderr,"\t\t-b base      : application working directory\n");
+(void) fprintf(stderr,"\t\t-d debug     : debug level\n");
+(void) fprintf(stderr,"\t\t-f           : foreground\n");
+(void) fprintf(stderr,"\t\t-h           : display usage\n");
+(void) fprintf(stderr,"\t\t-v           : verbose debug\n");
+(void) fprintf(stderr,"actionword       : boot|shutdown|firstboot|create|destroy,\n");
+(void) fprintf(stderr,"container_name   : container name to do action to\n");
+(void) fprintf(stderr,"[starter]        : program to start (default=\"/bin/init\")\n");
+}
+/*
+\f
+*/
+/************************************************/
+/*                                             */
+/*     Procedure to display the firstboot usage*/
+/*                                             */
+/************************************************/
+static void fbusage()
+
+{
+(void) fprintf(stderr,"%s: %s Version %s\n",appname,FBOOT,apl_getvers());
+(void) fprintf(stderr,"usage:  %s "
+                     "[-D distname] "
+                     "[-d domain] "
+                     "[-i IPNUM,[IPALIAS,...]] "
+                     "[-h ] "
+                     "[-n nodename] "
+                     "container_name [starter]\n",FBOOT);
+(void) fprintf(stderr,"\t\t-l distname: container linux distribution\n");
+(void) fprintf(stderr,"\t\t           : (default RedHat)\n");
+(void) fprintf(stderr,"\t\t-d domain  : container domainmame\n");
+(void) fprintf(stderr,"\t\t-h         : display firstboot usage\n");
+(void) fprintf(stderr,"\t\t-b IPNUM   : container ipnum\n");
+(void) fprintf(stderr,"\t\t-n nodename: container node name\n");
+(void) fprintf(stderr,"container_name : container name to initialize\n");
+(void) fprintf(stderr,"[starter]      : program to start\n");
+(void) fprintf(stderr,"\t\t           : (default=\"/bin/init\")\n");
+}
+/*
+^L
+*/
+/************************************************/
+/*                                             */
+/*     procedure to set the system architecture*/
+/*                                             */
+/************************************************/
+static int setarch(char *arch)
+
+{
+static struct  {
+               const char *arch;
+               u_long persona;
+               }pers[]={
+                       {"i386",PER_LINUX32},
+                       {"i686",PER_LINUX32},
+                       {"x86_64",PER_LINUX},
+                       {(const char *)0,PER_LINUX}
+                       };
+int status;
+int i;
+
+status=-1;
+errno=EINVAL;
+for (i=0;pers[i].arch!=(const char *)0;i++) {
+  if (strcmp(pers[i].arch,arch)==0) {
+    status=personality(pers[i].persona);
+    break;
+    }
+  }
+return status;
+}
+
+/*
+^L
+*/
+/************************************************/
+/*                                             */
+/*     procedure to boot a container           */
+/*                                             */
+/************************************************/
+static int doboot(void *args)
+
+{
+static int todrop[]={  /*capability to drop    */
+       CAP_SYS_BOOT,
+       CAP_SYS_TIME
+       };
+
+#define        SBININIT        "/sbin/init"
+ARGTYP *parms;
+int status;
+int foreground;
+int phase;
+int proceed;
+
+/*SIGCONT received                             */
+/*FIRST give time to master to send ITS SIGSTOP        */
+parms=(ARGTYP *)args;
+status=0;
+foreground=true;
+phase=0;
+proceed=true;
+while (proceed==true) {
+  switch (phase) {
+    case 0     :       /*give time to master   */
+      (void) sleep(1); /*to send SIGSTOP       */
+      break;           /*SIGCONT received      */
+    case 1     :       /*lets protect host     */
+      if (todrop!=(int *)0) {  /*always        */
+       int i;
+
+       for (i=0;i<sizeof(todrop)/sizeof(int);i++) {
+          if (prctl(PR_CAPBSET_DROP,todrop[i],0,0,0)<0) {
+           (void) apl_alert(0,"%s, container %s, unable to remove "
+                              "capability (todrop[%d]='%d', error=<%s>)",
+                               appname,parms->argv[0],i,todrop[i],strerror(errno));
+           status=phase;
+           phase=999;  /*trouble trouble       */
+           }
+         }
+       }
+      break;           /*SIGCONT received      */
+    case 2     :       /*doing preliminary init*/
+      if ((status=cnt_initscript(VZSTART,"%s %d %s",parms->argv[0],parms->mspid,base))!=0) {
+       (void) apl_alert(0,"%s, container %s unable to init itself (return %d)",
+                           appname,parms->argv[0],status);
+       status=phase;
+       phase=999;      /*trouble trouble       */
+       }
+      break;
+    case 3     :       /*doing root pivot      */
+      if (parms->argc==0)
+         foreground=false;
+      if (cnt_pivot(foreground,parms->argv[0])==false) {
+       (void) apl_alert(0,"%s, container %s unable to pivot itself (aborting)",
+                           appname,parms->argv[0]);
+       status=phase;
+       phase=999;      /*trouble trouble       */
+       }
+      break;
+    case 4     :       /*adjusting arch        */
+      if (setarch(parms->arch)<0) {
+       (void) apl_alert(0,"%s, container %s unable to set architecture to <%s> (error=<%s>)",
+                           appname,parms->argv[0],parms->arch,strerror(errno));
+       status=phase;
+       phase=999;      /*trouble trouble       */
+        }
+      break;
+    case 5     :       /*starting master jobs  */
+      parms->argc--;
+      parms->argv++;
+      if (parms->argc==0)      /*daemon start  */
+        (void) execl(SBININIT,SBININIT,(char *)0);
+      else
+        (void) execv(parms->argv[0],parms->argv);
+      (void) apl_alert(0,"%s, container %s unable to start exec (errro=<%s>)",
+                        appname,parms->argv[-1],strerror(errno));
+      status=phase;    /*trouble with exec!    */
+      break;
+    default    :       /*SAFE guard            */
+      proceed=false;
+      break;
+    }
+  phase++;
+  }
+(void) sleep(1);       /*lets relax                    */
+(void) exit(status);
+}
+/*
+^L
+*/
+/************************************************/
+/*                                             */
+/*     procedure to stop a container           */
+/*                                             */
+/************************************************/
+static int shutdown(int argc,char *argv[])
+
+{
+int status;
+pid_t cntpid;
+int phase;
+int proceed;
+
+status=1;
+cntpid=(pid_t)0;
+phase=0;
+proceed=true;
+while (proceed==true) {
+  switch (phase) {
+    case 0     :       /*getting container pid */
+      if ((cntpid=cnt_getclonepid(argv[0]))==(pid_t)0) {
+       (void) fprintf(stderr,"Shutdown is unable to find container <%s> "
+                             "main pid\n",argv[0]);
+       phase=999;      /*trouble trouble       */
+       }
+      break;
+    case 1     :       /*sending SIGINT        */
+      if (kill(cntpid,SIGINT)<0) {
+       (void) fprintf(stderr,"Shutdown is send signal INT to container "
+                             "<%s> main pid (error=<%s>)\n",
+                             argv[0],strerror(errno));
+        (void) cnt_rmclonepid(argv[0]);
+       phase=999;      /*trouble trouble       */
+       }
+      break;
+    case 2     :       /*waiting a little bit  */
+      (void) sleep(1); /*container stop        */
+      break;
+    case 3     :       /*waiting full stop     */
+      if (cntpid!=(pid_t)1) {  /*always        */
+       char *cmd;
+       int i;
+
+       (void) asprintf(&cmd," ps --ppid %d  | wc -l",cntpid);
+       for (i=0;i<15;i++) {
+         FILE *fichier;
+         int remaining;
+
+         remaining=0;
+         if ((fichier=popen(cmd,"r"))==(FILE *)0) {
+           (void) apl_alert(0,"%s, shutdown pipe <%s> unable to proceed (error=<%s>)",
+                               appname,cmd,strerror(errno));
+           break;
+           }
+         if (fscanf(fichier,"%d",&remaining)!=1) 
+           (void) apl_alert(0,"%s, shutdown pipe <%s> not able to catch answer)",appname,cmd);
+         (void) fclose(fichier);
+         if (remaining<2) {
+           status=0;
+           break;      /*only remaining line "PID TTY TIME CMD"        */
+           }
+         (void) sleep(1);
+         }
+        (void) free(cmd);
+       /*Terminating container main process    */
+       (void) kill(cntpid,SIGKILL);
+       }
+      break;
+    default    :       /*SAFE guard            */
+      proceed=false;
+      break;
+    }
+  phase++;
+  }
+return status;
+}
+/*
+^L
+*/
+/************************************************/
+/*                                             */
+/*     procedure to create a container         */
+/*     structure.                              */
+/*                                             */
+/************************************************/
+static int create(int argc,char *argv[])
+
+{
+#define        NCREATE 4
+#define        NPAR    "%s %s %s %s %s"
+
+int status;
+int phase;
+int proceed;
+
+status=0;
+phase=0;
+proceed=true;
+while (proceed==true) {
+  switch (phase) {
+    case 0     :       /*check parameters num  */
+      if (argc<NCREATE) {
+       (void) apl_alert(0,"Found %d parameter expecting %d",argc,NCREATE);
+       status=1;
+       phase=999;      /*trouble trouble       */
+       }
+      break;
+    case 1     :       /*calling initscript    */
+      if ((status=cnt_initscript(VZCREAT,NPAR,argv[0],argv[1],argv[2],argv[3],base))!=0) {
+       (void) apl_alert(0,"Unable to create container <%s> (status=%d)",argv[0],status);
+       status=2;
+       phase=999;      /*trouble trouble       */
+        }
+      break;
+    default    :       /*SAFE Guard            */
+      proceed=false;
+      break;
+    }
+  phase++;
+  }
+return status;
+}
+/*
+^L
+*/
+/************************************************/
+/*                                             */
+/*     procedure to destroy a container        */
+/*     structure.                              */
+/*                                             */
+/************************************************/
+static int destroy(int argc,char *argv[])
+
+{
+#define        NDEST   1
+
+int status;
+int phase;
+int proceed;
+
+status=0;
+phase=0;
+proceed=true;
+while (proceed==true) {
+  switch (phase) {
+    case 0     :       /*check parameters num  */
+      if (argc<NDEST) {
+       (void) apl_alert(0,"Found %d parameter expecting %d",argc,NDEST);
+       status=1;
+       phase=999;      /*trouble trouble       */
+       }
+      break;
+    case 1     :       /*calling initscript    */
+      if ((status=cnt_initscript(VZDEST,"%s %s",argv[0],base))!=0) {
+       (void) apl_alert(0,"Unable to destroy container <%s> (status=%d)",argv[0],status);
+       phase=999;      /*trouble trouble       */
+        }
+      break;
+    default    :       /*SAFE Guard            */
+      proceed=false;
+      break;
+    }
+  phase++;
+  }
+return status;
+}
+/*
+^L
+*/
+/************************************************/
+/*                                             */
+/*     procedure to start a container.         */
+/*                                             */
+/************************************************/
+static int boot(int argc,char *argv[])
+
+{
+#define        STKSIZE 16384   /*clone own stack       */
+
+int status;
+int cloneflg;
+char *clonestk;
+char *cntdist;
+char *cntarch;
+pid_t cpid;
+int phase;
+int proceed;
+
+status=0;
+cloneflg=SIGCHLD|__WCLONE;
+cloneflg|=CLONE_NEWNET|CLONE_NEWIPC|CLONE_NEWNS|CLONE_NEWPID;
+cloneflg|=CLONE_NEWUTS|CLONE_NEWUSER;
+clonestk=(char *)malloc(STKSIZE);
+cntdist=(char *)0;
+cntarch=(char *)0;
+cpid=(pid_t)0;
+phase=0;
+proceed=true;
+while (proceed==true) {
+  switch (phase) {
+    case 0     :       /*container name?       */
+      if ((argv[0]==(char *)0)||(strlen(argv[0])==0)) {
+       (void) apl_alert(0,"No container name specified!");
+       status=1;
+       proceed=false;  /*trouble trouble       */
+       }
+      break;
+    case 1     :       /*checking container    */
+      if (cnt_iscontgood(argv[0])==false) {
+       (void) apl_alert(0,"Aborting container start, check configuration!");
+       status=phase;
+       proceed=false;  /*trouble trouble       */
+       }
+      break;
+    case 2     :       /*getting a lock        */
+      cntarch=cnt_getarch(argv[0]);
+      cntdist=cnt_getdist(argv[0]);
+      (void) prc_divedivedive(apl_foreground);
+      (void) cnt_setstdio(apl_foreground,argv[0],"master.log");
+      (void) prc_settitle("%s, starting %s container",appname,argv[0]);
+      if (lck_locking(argv[0],LCK_LOCK,5)==false) {
+       (void) apl_alert(0,"Unable to lock container <%s> access",argv[0]);
+       status=phase;
+       proceed=false;  /*trouble trouble       */
+       }
+      break;
+    case 3     :       /*proceeding            */
+      if (argv[0]!=(char *)0) {        /*always        */
+       static ARGTYP args;
+       
+       args.mspid=getpid();
+       args.arch=cntarch;
+       args.argc=argc;
+       args.argv=argv;
+       if ((cpid=clone(&doboot,(void *)(clonestk+STKSIZE),cloneflg,(void *)&args))<0) {
+         (void) apl_alert(0,"%s, Unable to clone %s container process (error=<%s>)",
+                             appname,argv[0],strerror(errno));
+         status=phase;
+         phase=999;    /*trouble trouble       */
+         }
+       }
+      break;
+    case 4     :       /*call to init script   */      
+      /*stopping container first               */
+      (void) kill(cpid,SIGSTOP);
+      if ((status=cnt_initscript(VZOPEN,"%s %d %d %s",argv[0],getpid(),cpid,base))!=0) {
+       (void) apl_alert(0,"%s, Init script failure aborting %s container starting (return %d)",
+                               appname,argv[0],status);
+       (void) kill(cpid,SIGKILL);
+       status=phase;
+       phase=999;      /*trouble trouble       */
+       }
+      break;
+    case 5     :       /*setting clone PID     */
+      if (cnt_setclonepid(argv[0],cpid)==false) {
+       (void) kill(cpid,SIGKILL);
+       status=phase;
+       phase=999;      /*trouble trouble       */
+       }
+      break;
+    case 6     :       /*waking up container   */
+      if (kill(cpid,SIGCONT)<0) {
+       (void) apl_alert(0,"%s, Unable to wakeup container %s process (error=<%s>)",
+                           appname,argv[0],strerror(errno));
+       (void) kill(cpid,SIGKILL);
+       status=phase;
+       phase=999;      /*trouble trouble       */
+       }
+      break;
+    case 7     :       /*waiting process       */
+      (void) prc_settitle("%s: container %s (%s/%s) up",appname,argv[0],cntdist,cntarch);
+      (void) apl_settrap(true);
+      (void) cnt_mstconsole(argv[0],cpid);
+      (void) apl_settrap(false);
+      cntdist=apl_freestr(cntdist);
+      cntarch=apl_freestr(cntarch);
+      break;
+    default    :       /*SAFE guard            */
+      (void) prc_settitle("%s: container %s in shutdown process",appname,argv[0]);
+      if ((status=cnt_initscript(VZCLOSE,"%s %d %s",argv[0],cpid,base))!=0) {
+       (void) apl_alert(0,"%s, closing script failure for %s container stopping (return %d)",
+                               appname,argv[0],status);
+       }
+      (void) cnt_rmclonepid(argv[0]);
+      if (lck_locking(argv[0],LCK_UNLOCK,1)==false) {
+       (void) apl_alert(0,"Unable to unlock container <%s> acces",argv[0]);
+       status=10;
+       }
+      proceed=false;
+      break;
+    }
+  phase++;
+  }
+(void) free(clonestk);
+return status;
+}
+/*
+^L
+*/
+/************************************************/
+/*                                             */
+/*     procedure to start a container.         */
+/*                                             */
+/************************************************/
+static int firstboot(int argc,char *argv[])
+
+{
+#define        DFLDIST "RedHat"/*default distribution  */
+
+int status;
+char *distrib;
+char *domain;
+char *ipnums;
+char *nodename;
+int phase;
+int proceed;
+char c;
+
+status=0;
+distrib=strdup(DFLDIST);
+domain=(char *)0;
+ipnums=(char *)0;
+nodename=(char *)0;
+phase=0;
+proceed=true;
+optind=1;
+while ((c=getopt(argc,argv,"+D:d:hi:l:n:"))!=EOF) {
+  switch(c) {
+    case   'D'  :
+      if (distrib!=(char *)0)
+       (void) free(distrib);
+      distrib=strdup(optarg);
+      break;
+    case   'd'  :
+      if (domain!=(char *)0)
+       (void) free(domain);
+      domain=strdup(optarg);
+      break;
+    case   'i'  :
+      if (ipnums!=(char *)0)
+       (void) free(ipnums);
+      ipnums=strdup(optarg);
+      break;
+    case   'n'  :
+      if (nodename!=(char *)0)
+       (void) free(nodename);
+      nodename=strdup(optarg);
+      break;
+    case   'h'  :
+    default    :
+      (void) fbusage();
+      break;
+    }
+  }
+argc+=optind;
+argv+=optind;
+while (proceed==true) {
+  switch (phase) {
+    case 0     :       /*container name        */
+      if ((argv[0]==(char *)0)||(strlen(argv[0])==0)) {
+       (void) apl_alert(0,"No container name specified!");
+       status=1;
+       proceed=false;  /*trouble trouble       */
+       }
+      break;
+    case 1     :       /*checking parameters   */
+      if (nodename==(char *)0)
+       nodename=strdup(argv[0]);
+      if (domain==(char *)0) {
+       struct utsname un;
+       char *ptr;
+
+       (void) uname(&un);
+       if ((ptr=strchr(un.nodename,'.'))!=(char *)0)
+         ptr++;
+       else
+         ptr=un.nodename;
+       domain=strdup(ptr);
+       }
+      if (ipnums==(char *)0)
+       ipnums=strdup("");
+      break;
+    case 2     :       /*firstboot script      */
+      if ((status=cnt_initscript(VZFBOOT,"%s %s %s %s %s %s",
+                                argv[0],distrib,domain,nodename,ipnums,base))!=0) {
+       (void) apl_alert(0,"%s, container %s unable to proceed with %s (return %d)",
+                           appname,argv[0],VZFBOOT,status);
+       status=phase;
+       phase=999;      /*trouble trouble       */
+       }
+    default    :       /*SAFE Guard            */
+      proceed=false;
+      break;
+    }
+  phase++;
+  }
+(void) free(nodename);
+(void) free(ipnums);
+(void) free(domain);
+(void) free(distrib);
+return status;
+}
+/*
+^L
+*/
+/************************************************/
+/*                                             */
+/*     procedure to switch about proceeding    */
+/*                                             */
+/************************************************/
+static int action(int argc,char *argv[])
+
+{
+int status;
+
+status=0;
+if (argc<=0) {
+  (void) apl_alert(0,"%s action string requested");
+  (void) usage();
+  status=1;
+  }
+else {
+  typedef enum {
+       a_firstboot,    /*container firstboot   */
+       a_boot,         /*booting container     */
+       a_shutdown,     /*container shutdown    */
+       a_create,       /*creating container    */
+       a_destroy,      /*removing container    */
+       a_unknown       /*unknown action        */
+       }ACTTYP;
+
+  static VOCTYP vocaction[]={
+       {a_firstboot,FBOOT,(const void *)0},
+       {a_boot,"boot",(const void *)0},
+       {a_shutdown,"shutdown",(const void *)0},
+       {a_create,"create",(const void *)0},
+       {a_destroy,"destroy",(const void *)0},
+       {a_unknown,(char *)0,(const void *)0}
+       };
+
+  VOCTYP *voc;
+
+  if ((voc=apl_getvoca(vocaction,argv[0]))!=(VOCTYP *)0) {
+    switch(voc->code) {
+      case a_firstboot :       
+       (void) strncpy(argv[0],voc->key,strlen(voc->key)+1);
+        status=firstboot(argc,argv);
+        break;
+      case a_boot      :       
+         status=boot(argc-1,argv+1);
+        break;
+      case a_shutdown  :       
+        status=shutdown(argc-1,argv+1);
+        break;
+      case a_create    :       
+        status=create(argc-1,argv+1);
+        break;
+      case a_destroy   :       
+        status=destroy(argc-1,argv+1);
+        break;
+      case a_unknown   :
+      default          :
+        (void) apl_alert(0,"%s, <%s> unknown action string",appname,argv[0]);
+        status=1;      
+        break;
+      }
+    }
+  }
+return status;
+}
+/*
+^L
+*/
+/************************************************/
+/*                                             */
+/*     Program Entry.                          */
+/*                                             */
+/************************************************/
+int main(int argc,char *argv[])
+
+{
+int status;
+char c;
+
+appname=APPNAME;
+status=0;
+(void) apl_trapsegv(true);
+(void) dbg_setcurpath(argv[0]);
+memleak=DMTRACE;       /*setting memory leak detector ON       */
+(void) openlog(appname,LOG_PID,0);
+base=strdup(base);
+argv=prc_preptitle(argc,argv,environ);
+while ((c=getopt(argc,argv,"+b:d:fh:v"))!=EOF) {
+  switch(c) {
+    case   'b'  :
+      (void) free(base);
+      base=apl_mkbase(optarg);
+      break;
+    case   'd'  :
+      debug=atoi(optarg);
+      break;
+    case   'f'  :
+      apl_foreground=true;
+      break;
+    case   'v'  :
+      verbose=true;
+      break;
+    case   'h'  :
+    default    :
+      (void) usage();
+      break;
+    }
+  }
+(void) dbg_setcurbase(base);
+if (argc>=optind) {
+  status=action(argc-optind,argv+optind);
+  }
+else 
+  (void) usage();
+argv=prc_cleantitle();
+(void) free(base);
+(void) closelog();
+(void) dbg_dumpmem(appname,"");
+memleak=DMFALSE;       /*setting memory leak detector OFF      */
+(void) apl_trapsegv(false);
+exit(status);
+}
diff --git a/cgroup.d/Makefile b/cgroup.d/Makefile
new file mode 100644 (file)
index 0000000..b1f9569
--- /dev/null
@@ -0,0 +1,30 @@
+#--------------------------------------------------------------------
+#Support directory Management
+#--------------------------------------------------------------------
+clean  :       
+          @ for i in $(SUBDIRS) ;              \
+             do                                \
+            echo doing "\"$$i $@\"" ;          \
+            $(MAKE) -s -C $$i $@ ;             \
+             done
+
+
+sauve  :
+          @ for i in $(SUBDIRS) ;              \
+             do                                        \
+             $(MAKE) -s -C $$i $@ ;            \
+             done
+          @ echo doing RCS on $(LOCDIR)
+          @ ../support/sauver $(SRC)
+
+#--------------------------------------------------------------------
+SRC=                                           \
+       Makefile                                
+
+SUBDIRS=                                       \
+
+
+LOCDIR="cgroup.d"
+#===================================================================
+.PHONY:        sauve clean
+#--------------------------------------------------------------------
diff --git a/cgroup.d/RCS/Makefile,v b/cgroup.d/RCS/Makefile,v
new file mode 100644 (file)
index 0000000..3c69e95
--- /dev/null
@@ -0,0 +1,139 @@
+head   0.84;
+access;
+symbols;
+locks
+       jmp:0.84.0.0; strict;
+comment        @# @;
+
+
+0.84
+date   2010.03.06.16.39.08;    author jmp;     state Exp;
+branches
+       0.84.0.0;
+next   0.83;
+
+0.83
+date   2010.03.06.16.39.08;    author jmp;     state Exp;
+branches
+       0.83.0.0;
+next   ;
+
+0.83.0.0
+date   2010.03.06.16.39.08;    author jmp;     state Exp;
+branches;
+next   0.83.0.1;
+
+0.83.0.1
+date   2010.03.06.16.39.08;    author jmp;     state Exp;
+branches;
+next   ;
+
+0.84.0.0
+date   2010.03.06.16.39.08;    author jmp;     state Exp;
+branches;
+next   ;
+
+
+desc
+@#--------------------------------------------------------------------
+#Support directory Management
+#--------------------------------------------------------------------
+clean  :
+          @@ for i in $(SUBDIRS) ;             \
+             do                                \
+            echo doing "\"$$i $@@\"" ;         \
+            $(MAKE) -s -C $$i $@@ ;            \
+             done
+
+
+sauve  :
+          @@ for i in $(SUBDIRS) ;             \
+             do                                        \
+             $(MAKE) -s -C $$i $@@ ;           \
+             done
+          @@ echo doing RCS on $(LOCDIR)
+          @@ ../support/sauver $(SRC)
+
+#--------------------------------------------------------------------
+SRC=                                           \
+       Makefile
+
+SUBDIRS=                                       \
+
+
+LOCDIR="cgroup.d"
+#===================================================================
+.PHONY:        sauve clean
+#--------------------------------------------------------------------
+@
+
+
+0.84
+log
+@upgrade version
+@
+text
+@#--------------------------------------------------------------------
+#Support directory Management
+#--------------------------------------------------------------------
+clean  :       
+          @@ for i in $(SUBDIRS) ;             \
+             do                                \
+            echo doing "\"$$i $@@\"" ;         \
+            $(MAKE) -s -C $$i $@@ ;            \
+             done
+
+
+sauve  :
+          @@ for i in $(SUBDIRS) ;             \
+             do                                        \
+             $(MAKE) -s -C $$i $@@ ;           \
+             done
+          @@ echo doing RCS on $(LOCDIR)
+          @@ ../support/sauver $(SRC)
+
+#--------------------------------------------------------------------
+SRC=                                           \
+       Makefile                                
+
+SUBDIRS=                                       \
+
+
+LOCDIR="cgroup.d"
+#===================================================================
+.PHONY:        sauve clean
+#--------------------------------------------------------------------
+@
+
+
+0.84.0.0
+log
+@Ratrapage numero de Version
+@
+text
+@@
+
+
+0.83
+log
+@Creation
+#=================================================================================
+@
+text
+@@
+
+
+0.83.0.0
+log
+@Ratrapage numero de Version
+@
+text
+@@
+
+
+0.83.0.1
+log
+@Mise en place su GIT
+@
+text
+@@
diff --git a/cgroup.d/devices.allow b/cgroup.d/devices.allow
new file mode 100644 (file)
index 0000000..c8ab21b
--- /dev/null
@@ -0,0 +1,15 @@
+# /dev/null and zero
+c 1:3 rwm
+c 1:5 rwm
+# consoles
+c 5:1 rwm
+c 5:0 rwm
+c 4:0 rwm
+c 4:1 rwm
+# /dev/{,u}random
+c 1:9 rwm
+c 1:8 rwm
+# /dev/ptmx
+c 5:2 rwm
+# ALL /dev/pts
+c 136:* rwm
diff --git a/cgroup.d/devices.deny b/cgroup.d/devices.deny
new file mode 100644 (file)
index 0000000..d7d390b
--- /dev/null
@@ -0,0 +1,2 @@
+#all device are denied
+a
diff --git a/chkmake b/chkmake
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/etc/Makefile b/etc/Makefile
new file mode 100644 (file)
index 0000000..700c978
--- /dev/null
@@ -0,0 +1,30 @@
+#--------------------------------------------------------------------
+#Support directory Management
+#--------------------------------------------------------------------
+clean  :       
+          @ for i in $(SUBDIRS) ;              \
+             do                                \
+            echo doing "\"$$i $@\"" ;          \
+            $(MAKE) -s -C $$i $@ ;             \
+             done
+
+
+sauve  :
+          @ for i in $(SUBDIRS) ;              \
+             do                                        \
+             $(MAKE) -s -C $$i $@ ;            \
+             done
+          @ echo doing RCS on $(LOCDIR)
+          @ ../support/sauver $(SRC)
+
+#--------------------------------------------------------------------
+SRC=                                           \
+       Makefile                                
+
+SUBDIRS=                                       \
+
+
+LOCDIR="etc"
+#===================================================================
+.PHONY:        sauve clean
+#--------------------------------------------------------------------
diff --git a/etc/RCS/Makefile,v b/etc/RCS/Makefile,v
new file mode 100644 (file)
index 0000000..7c644ca
--- /dev/null
@@ -0,0 +1,139 @@
+head   0.84;
+access;
+symbols;
+locks
+       jmp:0.84.0.0; strict;
+comment        @# @;
+
+
+0.84
+date   2010.03.06.16.39.08;    author jmp;     state Exp;
+branches
+       0.84.0.0;
+next   0.83;
+
+0.83
+date   2010.03.06.16.39.08;    author jmp;     state Exp;
+branches
+       0.83.0.0;
+next   ;
+
+0.83.0.0
+date   2010.03.06.16.39.08;    author jmp;     state Exp;
+branches;
+next   0.83.0.1;
+
+0.83.0.1
+date   2010.03.06.16.39.08;    author jmp;     state Exp;
+branches;
+next   ;
+
+0.84.0.0
+date   2010.03.06.16.39.08;    author jmp;     state Exp;
+branches;
+next   ;
+
+
+desc
+@#--------------------------------------------------------------------
+#Support directory Management
+#--------------------------------------------------------------------
+clean  :
+          @@ for i in $(SUBDIRS) ;             \
+             do                                \
+            echo doing "\"$$i $@@\"" ;         \
+            $(MAKE) -s -C $$i $@@ ;            \
+             done
+
+
+sauve  :
+          @@ for i in $(SUBDIRS) ;             \
+             do                                        \
+             $(MAKE) -s -C $$i $@@ ;           \
+             done
+          @@ echo doing RCS on $(LOCDIR)
+          @@ ../support/sauver $(SRC)
+
+#--------------------------------------------------------------------
+SRC=                                           \
+       Makefile
+
+SUBDIRS=                                       \
+
+
+LOCDIR="etc"
+#===================================================================
+.PHONY:        sauve clean
+#--------------------------------------------------------------------
+@
+
+
+0.84
+log
+@upgrade version
+@
+text
+@#--------------------------------------------------------------------
+#Support directory Management
+#--------------------------------------------------------------------
+clean  :       
+          @@ for i in $(SUBDIRS) ;             \
+             do                                \
+            echo doing "\"$$i $@@\"" ;         \
+            $(MAKE) -s -C $$i $@@ ;            \
+             done
+
+
+sauve  :
+          @@ for i in $(SUBDIRS) ;             \
+             do                                        \
+             $(MAKE) -s -C $$i $@@ ;           \
+             done
+          @@ echo doing RCS on $(LOCDIR)
+          @@ ../support/sauver $(SRC)
+
+#--------------------------------------------------------------------
+SRC=                                           \
+       Makefile                                
+
+SUBDIRS=                                       \
+
+
+LOCDIR="etc"
+#===================================================================
+.PHONY:        sauve clean
+#--------------------------------------------------------------------
+@
+
+
+0.84.0.0
+log
+@Ratrapage numero de Version
+@
+text
+@@
+
+
+0.83
+log
+@Creation
+#=================================================================================
+@
+text
+@@
+
+
+0.83.0.0
+log
+@Ratrapage numero de Version
+@
+text
+@@
+
+
+0.83.0.1
+log
+@Mise en place su GIT
+@
+text
+@@
diff --git a/etc/groups b/etc/groups
new file mode 100644 (file)
index 0000000..214fe28
--- /dev/null
@@ -0,0 +1,4 @@
+#this file allow you to add common group to ALL
+#your container when creating them
+#format is
+#groupname
diff --git a/etc/iptables b/etc/iptables
new file mode 100644 (file)
index 0000000..13ee743
--- /dev/null
@@ -0,0 +1,52 @@
+# iptables file standard for all CONTAINER.
+# Firewall configuration written by vzgot
+# the file is common and added to each container
+# if present in HN /var/lib/vzgot/etc/sysconfig/iptables
+# this file is given as a working example
+*filter
+:INPUT          ACCEPT  [0:0]
+:FORWARD        ACCEPT  [0:0]
+:OUTPUT         ACCEPT  [0:0]
+:std            -       [0:0]
+#-----------------------------------------------------------
+#defining rule to display reject in logs
+#(/var/log/messages)
+-N logrjct
+-A logrjct -j LOG --log-level 6 --log-prefix "RJCT "
+-A logrjct -j REJECT --reject-with icmp-host-prohibited
+#defining rule to reject without log
+-N rjct
+-A rjct -j DROP
+#-----------------------------------------------------------
+#standard rules
+-A FORWARD -j std
+-A INPUT -j std
+#-----------------------------------------------------------
+#accepting local loop
+-A std -i lo -j ACCEPT
+#-----------------------------------------------------------
+#acceptin already established link
+-A std -m state --state ESTABLISHED,RELATED -j ACCEPT
+#-----------------------------------------------------------
+#accepting icmp packet (should be already pre-filtered by HN)
+-A std -p icmp -j ACCEPT
+#-----------------------------------------------------------
+#accepting auth server
+-A std -p tcp -m tcp    -j ACCEPT --dport auth
+#accepting all Email related services
+-A std -p tcp -m tcp    -j ACCEPT --dport smtp
+-A std -p tcp -m tcp    -j ACCEPT --dport pop-3
+-A std -p tcp -m tcp    -j ACCEPT --dport imaps
+-A std -p tcp -m tcp    -j ACCEPT --dport imap
+#accepting all WEB related services
+-A std -p tcp -m tcp    -j ACCEPT --dport www
+-A std -p tcp -m tcp    -j ACCEPT --dport https
+#accepting all SSH related services
+-A std -p tcp -m tcp   -j ACCEPT --dport ssh 
+#accepting all snmp related services
+-A std -p udp -m udp   -j ACCEPT --dport snmp 
+#===========================================================
+#reject and longging all other packet type
+-A std -j logrjct
+#-----------------------------------------------------------
+COMMIT
diff --git a/etc/resolv.conf b/etc/resolv.conf
new file mode 100644 (file)
index 0000000..cb6df67
--- /dev/null
@@ -0,0 +1 @@
+;this file was generated by vzgot script vzgot.fboot.redhat
diff --git a/etc/shadow b/etc/shadow
new file mode 100644 (file)
index 0000000..f38dcd1
--- /dev/null
@@ -0,0 +1,2 @@
+#this file allow you to set a specific password to container users
+#format is exactly the same as a standard shadow file
diff --git a/etc/snmpd.conf b/etc/snmpd.conf
new file mode 100644 (file)
index 0000000..b393678
--- /dev/null
@@ -0,0 +1,6 @@
+
+
+###############################################################################
+###############################################################################
+#This file part is added during the container creation
+###############################################################################
diff --git a/etc/sudoers b/etc/sudoers
new file mode 100644 (file)
index 0000000..eaeeab7
--- /dev/null
@@ -0,0 +1,2 @@
+#This file is a configuration file which contents is ADDED
+#to the container /etc/sudoers file
diff --git a/etc/users b/etc/users
new file mode 100644 (file)
index 0000000..3465de9
--- /dev/null
+++ b/etc/users
@@ -0,0 +1,4 @@
+#this file allow you to add common users to ALL
+#your container when creating them
+#format is
+#username encrypted_password groupd-name
diff --git a/lib/GPL b/lib/GPL
new file mode 100644 (file)
index 0000000..26c8c09
--- /dev/null
+++ b/lib/GPL
@@ -0,0 +1,25 @@
+/************************************************/
+/*                                             */
+/*      Copyright:                             */
+/*      Jean-Marc Pigeon <jmp@safe.ca>  2009   */
+/*                                             */
+/************************************************/
+/* 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., 51 Franklin Street,       */
+/* Fifth Floor, Boston, MA  02110-1301, USA.   */
+/************************************************/
diff --git a/lib/Makefile b/lib/Makefile
new file mode 100644 (file)
index 0000000..fe21329
--- /dev/null
@@ -0,0 +1,13 @@
+#--------------------------------------------------------------------
+sauve  : 
+          @ echo doing RCS on $(LOCDIR)
+          ../support/sauver $(SRC)
+#--------------------------------------------------------------------
+#Sources contents
+SRC=                                                           \
+       subapl.h
+
+LOCDIR= lib
+#--------------------------------------------------------------------
+include           Makefile.inc
+#--------------------------------------------------------------------
diff --git a/lib/Makefile.inc b/lib/Makefile.inc
new file mode 100644 (file)
index 0000000..843531c
--- /dev/null
@@ -0,0 +1,84 @@
+#--------------------------------------------------------------------
+#to compile vzgot opensrc library
+#--------------------------------------------------------------------
+debug  :
+         @ $(MAKE)                                             \
+               OPTIME="-g"                                     \
+               DEBUG="-DDEBUG"                                 \
+               YVERB="-v"                                      \
+               memlib
+
+prod   :
+         @ $(MAKE)                                             \
+               OPTIME="-g3"                                    \
+               memlib
+
+memlib :
+         @ $(MAKE) $(VZLB)
+
+clean  :
+          @ - rm -f $(VZLB) $(OBJS)
+          @ - rm -f *~
+
+#--------------------------------------------------------------------
+#Object file list to generate
+OBJS=                                                          \
+       unicnt.o unilck.o                                       \
+       subapl.o subprc.o                                       \
+       utlvec.o utlprc.o                                       \
+       dbgmem.o
+
+VZLB=                                                          \
+       vzlb.a
+#--------------------------------------------------------------------
+#dependancies
+vzlb.a :  $(OBJS)
+          ar -cr vzlb.a $(OBJS)
+#--------------------------------------------------------------------
+#'C' Definition
+
+unicnt.o:                                                      \
+         lowtyp.h                                              \
+         dbgmem.h                                              \
+         subapl.h                                              \
+         unicnt.h unicnt.c
+
+uniclk.o:                                                      \
+         lowtyp.h                                              \
+         dbgmem.h                                              \
+         subapl.h                                              \
+         unilck.h unilck.c
+
+subprc.o:                                                      \
+         lowtyp.h                                              \
+         dbgmem.h                                              \
+         utlvec.h                                              \
+         subprc.h subprc.c
+
+subapl.o:                                                      \
+         lowtyp.h                                              \
+         dbgmem.h                                              \
+         utlprc.h                                              \
+         subapl.h subapl.c
+
+utlprc.o:                                                      \
+         lowtyp.h                                              \
+         dbgmem.h                                              \
+         utlprc.h utlprc.c
+
+utlvec.o:                                                      \
+         lowtyp.h                                              \
+         dbgmem.h                                              \
+         utlvec.h utlvec.c
+
+dbgmem.o:                                                      \
+         dbgmem.h dbgmem.c
+
+#--------------------------------------------------------------------
+#compiler options
+YFLAGS= -p $* $(YVERB)
+CC=gcc $(OPTIME) $(DEBUG) $(POSTGRESQL) $(MYSQL)
+CFLAGS=-I .                                                    \
+       -DUCD_COMPATIBLE -std=gnu99 -pedantic -D_GNU_SOURCE     \
+       -Wall -Wshadow -DDIST_$(DIST)
+#--------------------------------------------------------------------
diff --git a/lib/RCS/subapl.h,v b/lib/RCS/subapl.h,v
new file mode 100644 (file)
index 0000000..1e0555d
--- /dev/null
@@ -0,0 +1,315 @@
+head   0.84;
+access;
+symbols;
+locks
+       jmp:0.84.0.0; strict;
+comment        @ * @;
+
+
+0.84
+date   2010.03.06.16.39.08;    author jmp;     state Exp;
+branches
+       0.84.0.0;
+next   0.83;
+
+0.83
+date   2010.03.06.16.39.08;    author jmp;     state Exp;
+branches
+       0.83.0.0;
+next   ;
+
+0.83.0.0
+date   2010.03.06.16.39.08;    author jmp;     state Exp;
+branches;
+next   0.83.0.1;
+
+0.83.0.1
+date   2010.03.06.16.39.08;    author jmp;     state Exp;
+branches;
+next   ;
+
+0.84.0.0
+date   2010.03.06.16.39.08;    author jmp;     state Exp;
+branches;
+next   ;
+
+
+desc
+@/************************************************/
+/*                                             */
+/*      Copyright:                             */
+/*      Jean-Marc Pigeon <jmp@@safe.ca>         2009   */
+/*                                             */
+/************************************************/
+/* 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., 51 Franklin Street,       */
+/* Fifth Floor, Boston, MA  02110-1301, USA.   */
+/************************************************/
+/*                                             */
+/*     Define sub level procedure needed by    */
+/*     the application.                        */
+/*                                             */
+/************************************************/
+#ifndef SUBAPL
+#define SUBAPL
+#include       <unistd.h>
+#include       <stdio.h>
+#include       <sys/types.h>
+#include       "lowtyp.h"
+
+
+/*vzboot application name              */
+#define        VZGOT   "vzgot"
+/*vzboot current application revision level    */
+#define        VZBVERS "$Revision: 0.84.0.0 $"
+
+
+/*transit subdirectory name                    */
+#define        TSUFFIX "-S"
+
+/*defining application directory               */
+typedef        enum    {
+       d_tmp,          /*directory /tmp        */
+       d_crash,        /*the crash directory   */
+       d_etc,          /*directory is /etc     */
+       d_ubin,         /*directory /usr/bin    */
+       d_usbin,        /*directory /usr/sbin   */
+       d_usrlib,       /*directory /usr/lib    */
+       d_varlib,       /*directory /var/lib    */
+       d_spool,        /*spool directory       */
+       d_log,          /*logs directory        */
+       d_lock,         /*locking directory     */
+       d_vzgot,        /*application main dir  */
+       d_null          /*no directoy specified */
+       }DIRENUM;
+
+typedef        struct  {       /*vocable table type    */
+       int code;       /*code value            */
+       const char *key;/*key code              */
+       const void *ptr;/*pay load              */
+       }VOCTYP;
+
+/*Signal flag definition                       */
+extern         int sigterm;
+extern         int sigquit;
+extern         int sigint;
+
+/*application current version number           */
+extern const char *curvers;
+/*application working base directory           */
+extern char *base;
+/*application name                             */
+extern char *appname;
+/*application debug level                      */
+extern int debug;
+/*application verbosity level                  */
+extern int verbose;
+/*application working mode foreground/background*/
+extern int apl_foreground;
+
+extern int apl_isdir(char *dirpath);
+extern char *apl_freestr(char *str);
+extern char *apl_getvers();
+extern u_long apl_getmillisec();
+extern char *apl_uniquename(unsigned int seq);
+extern u_long apl_date(time_t curtime);
+extern char *apl_ascsystime(time_t curtime);
+extern char *apl_ascsysdate(time_t curtime);
+extern char *apl_ascsysdatetime(time_t curtime);
+extern char *apl_ascsysstamp(time_t curtime);
+extern time_t apl_datetimesysasc(char *strdate,char *strtime);
+extern void apl_alert(const int dlevel,const char *fmt,...);
+extern void apl_argvtrace(const int dlevel,const char *fmt,char *argv[]);
+extern char *apl_mkbase(char *newbase);
+extern char *apl_appdir(DIRENUM dir);
+extern void apl_trapsegv(int onoff);
+extern void apl_core_dump(char *frmt, ...);
+extern void apl_settrap(int set);
+extern char *apl_strtolower(char *str);
+extern char *apl_getstr(FILE *fichier,char *str,u_int taille,char carcom);
+extern int apl_createdirs(char *dirname);
+extern char *apl_getapvers();
+extern VOCTYP *apl_getvoca(const VOCTYP *table,char *str);
+extern char *apl_cleanstring(char *str);
+#endif
+@
+
+
+0.84
+log
+@upgrade version
+@
+text
+@/************************************************/
+/*                                             */
+/*      Copyright:                             */
+/*      Jean-Marc Pigeon <jmp@@safe.ca>         2009   */
+/*                                             */
+/************************************************/
+/* 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., 51 Franklin Street,       */
+/* Fifth Floor, Boston, MA  02110-1301, USA.   */
+/************************************************/
+/*                                             */
+/*     Define sub level procedure needed by    */
+/*     the application.                        */
+/*                                             */
+/************************************************/
+#ifndef SUBAPL
+#define SUBAPL
+#include       <unistd.h>
+#include       <stdio.h>
+#include       <sys/types.h>
+#include       "lowtyp.h"
+
+
+/*vzboot application name              */
+#define        VZGOT   "vzgot"
+/*vzboot current application revision level    */
+#define        VZBVERS "$Revision: 0.83.0.1 $"
+
+
+/*transit subdirectory name                    */
+#define        TSUFFIX "-S"
+
+/*defining application directory               */
+typedef        enum    {
+       d_tmp,          /*directory /tmp        */
+       d_crash,        /*the crash directory   */
+       d_etc,          /*directory is /etc     */
+       d_ubin,         /*directory /usr/bin    */
+       d_usbin,        /*directory /usr/sbin   */
+       d_usrlib,       /*directory /usr/lib    */
+       d_varlib,       /*directory /var/lib    */
+       d_spool,        /*spool directory       */
+       d_log,          /*logs directory        */
+       d_lock,         /*locking directory     */
+       d_vzgot,        /*application main dir  */
+       d_null          /*no directoy specified */
+       }DIRENUM;
+
+typedef        struct  {       /*vocable table type    */
+       int code;       /*code value            */
+       const char *key;/*key code              */
+       const void *ptr;/*pay load              */
+       }VOCTYP;
+
+/*Signal flag definition                       */
+extern         int sigterm;
+extern         int sigquit;
+extern         int sigint;
+
+/*application current version number           */
+extern const char *curvers;
+/*application working base directory           */
+extern char *base;
+/*application name                             */
+extern char *appname;
+/*application debug level                      */
+extern int debug;
+/*application verbosity level                  */
+extern int verbose;
+/*application working mode foreground/background*/
+extern int apl_foreground;
+
+extern int apl_isdir(char *dirpath);
+extern char *apl_freestr(char *str);
+extern char *apl_getvers();
+extern u_long apl_getmillisec();
+extern char *apl_uniquename(unsigned int seq);
+extern u_long apl_date(time_t curtime);
+extern char *apl_ascsystime(time_t curtime);
+extern char *apl_ascsysdate(time_t curtime);
+extern char *apl_ascsysdatetime(time_t curtime);
+extern char *apl_ascsysstamp(time_t curtime);
+extern time_t apl_datetimesysasc(char *strdate,char *strtime);
+extern void apl_alert(const int dlevel,const char *fmt,...);
+extern void apl_argvtrace(const int dlevel,const char *fmt,char *argv[]);
+extern char *apl_mkbase(char *newbase);
+extern char *apl_appdir(DIRENUM dir);
+extern void apl_trapsegv(int onoff);
+extern void apl_core_dump(char *frmt, ...);
+extern void apl_settrap(int set);
+extern char *apl_strtolower(char *str);
+extern char *apl_getstr(FILE *fichier,char *str,u_int taille,char carcom);
+extern int apl_createdirs(char *dirname);
+extern char *apl_getapvers();
+extern VOCTYP *apl_getvoca(const VOCTYP *table,char *str);
+extern char *apl_cleanstring(char *str);
+#endif
+@
+
+
+0.84.0.0
+log
+@Ratrapage numero de Version
+@
+text
+@d42 1
+a42 1
+#define        VZBVERS "$Revision: 0.84 $"
+@
+
+
+0.83
+log
+@Creation
+#=================================================================================
+@
+text
+@d42 1
+a42 1
+#define        VZBVERS "$Revision: 0.84.0.0 $"
+@
+
+
+0.83.0.0
+log
+@Ratrapage numero de Version
+@
+text
+@d42 1
+a42 1
+#define        VZBVERS "$Revision: 0.83 $"
+@
+
+
+0.83.0.1
+log
+@Mise en place su GIT
+@
+text
+@d42 1
+a42 1
+#define        VZBVERS "$Revision: 0.83.0.0 $"
+@
diff --git a/lib/dbgmem.c b/lib/dbgmem.c
new file mode 100644 (file)
index 0000000..22c6728
--- /dev/null
@@ -0,0 +1,799 @@
+/************************************************/
+/*                                             */
+/*      Copyright:                             */
+/*      Jean-Marc Pigeon <jmp@safe.ca>  2009   */
+/*                                             */
+/************************************************/
+/* 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., 51 Franklin Street,       */
+/* Fifth Floor, Boston, MA  02110-1301, USA.   */
+/************************************************/
+/*                                             */
+/*     Implement very sub level procedure to   */
+/*     debug potential memory leak (or other)  */
+/*     trouble.                                */
+/*                                             */
+/************************************************/
+#include       <malloc.h>
+#include       <signal.h>
+#include       <errno.h>
+#include       <search.h>
+#include       <stdio.h>
+#include       <unistd.h>
+#include       <time.h>
+#include       <syslog.h>
+#include       <execinfo.h>
+#include       <sys/time.h>
+#include       <memory.h>
+#include       "dbgmem.h"
+
+#undef calloc
+#undef malloc
+#undef realloc
+#undef free
+#undef putenv
+#undef setenv
+#undef unsetenv
+#undef strdup
+#undef asprintf
+#undef vasprintf
+
+
+#define MXTB   10      /*max trace deep                */
+
+extern char **environ; /*application env varirable     */
+
+
+typedef        struct timeval  TIMEVAL;
+
+typedef struct         {       /*leak detection structure      */
+       void *ptr;      /*allocated memory              */
+       TIMEVAL date;   /*allocation date               */
+       size_t size;    /*memory size                   */
+       void *tb[MXTB]; /*back trace                    */
+       int noleak;     /*No leak consideration flag    */
+       }LEAKTYP;
+
+int memleak=DMFALSE;   /*flag to check for memory leak */
+
+static void *memory;   /*allocated memory structure    */
+static long nummem;    /*number of leak structure      */
+static char *cpath;    /*Application curpath           */
+static char *cbase;    /*Application base              */
+static int flgleak;    /*leak mod flag                 */
+static u_long collected;/*number of memory still open  */
+static LEAKTYP **memsort;
+/*
+\f
+*/
+/************************************************/
+/*                                             */
+/*     Procedure to compare to "leaking" memory*/
+/*     ptr, used by search routine             */
+/*                                             */
+/************************************************/
+static int cmpptr(const void *v1,const void *v2)
+
+{
+register u_long p1;
+register u_long p2;
+
+if (v1==(void *)0) {
+  if (v2==(void *)0)
+    return 0;
+  else
+    return -1;
+  }
+if (v2==(void *)0)
+  return 1;
+p1=(u_long)(((LEAKTYP *)v1)->ptr);
+p2=(u_long)(((LEAKTYP *)v2)->ptr);
+if (p1>p2)
+  return 1;
+if (p1<p2)
+  return -1;
+return 0;
+}
+/*
+\f
+*/
+/************************************************/
+/*                                             */
+/*     Procedure to compare to flag the leak   */
+/*     value withing collected open memory.    */
+/*                                             */
+/************************************************/
+static void setleakflg(const void *v1,const VISIT which,const int depth)
+
+{
+switch (which) {
+  case preorder:       /*no remote dump        */
+  case endorder:
+    break;
+  case postorder:      /*remote dump           */
+  case leaf:
+    (*((LEAKTYP **)v1))->noleak=flgleak;
+    break;
+  }
+}
+/*
+\f
+*/
+/************************************************/
+/*                                             */
+/*     Procedure to count collected "leaking"  */
+/*     memory.                                 */
+/*                                             */
+/************************************************/
+static void collectleakptr(const void *v1,const VISIT which,const int depth)
+
+{
+switch (which) {
+  case preorder:       /*no remote dump        */
+  case endorder:
+    break;
+  case postorder:      /*remote dump           */
+  case leaf:
+    if ((*((LEAKTYP **)v1))->noleak==0) {
+      memsort[collected]=*((LEAKTYP **)v1);
+      collected++;
+      }
+    break;
+  }
+}
+/*
+\f
+*/
+/************************************************/
+/*                                             */
+/*     Procedure to compare to "leaking" memory*/
+/*     information, from the backtrace stand   */
+/*     point.                                  */
+/*                                             */
+/************************************************/
+static int sametrace(const LEAKTYP *l1,const LEAKTYP *l2)
+
+{
+int inx;
+long diff;
+
+inx=0;
+diff=0;
+while ((inx<MXTB)&&(diff==(long)0)) {
+  diff=(long)(l1->tb[inx])-(long)(l2->tb[inx]);
+  inx++;
+  }
+return diff;
+}
+/*
+\f
+*/
+/************************************************/
+/*                                             */
+/*     Procedure to compare to "leaking" memory*/
+/*     information                             */
+/*                                             */
+/************************************************/
+static int cmpleak(const void *p1,const void *p2)
+
+{
+int diff;
+LEAKTYP *l1;
+LEAKTYP *l2;
+
+l1=((LEAKTYP **)p1)[0];
+l2=((LEAKTYP **)p2)[0];
+if ((diff=sametrace(l1,l2))==0)
+  diff=l1->date.tv_sec-l2->date.tv_sec;
+  if (diff==0)
+    diff=l1->date.tv_usec-l2->date.tv_usec;
+return diff;
+}
+/*
+\f
+*/
+/************************************************/
+/*                                             */
+/*     Procedure to convert back trace address */
+/*     to sources line information.            */
+/*                                             */
+/************************************************/
+static void disline(LEAKTYP *leak,const char *path,FILE *fichier)
+
+{
+#define ADDR2LINE      "addr2line"
+
+int i;
+FILE *canal;
+char command[1000];
+
+(void) sprintf(command,"%s -e %s",ADDR2LINE,path);
+for (i=0;i<MXTB;i++) {
+  char str[20];
+
+  if (leak->tb[i]==0)
+    break;
+  (void) sprintf(str," %08lx",(long)leak->tb[i]);
+  (void) strcat(command,str);
+  }
+if ((canal=popen(command,"r"))!=(FILE *)0) {
+  char line[200];
+
+  while (fgets(line,sizeof(line)-1,canal)!=(char *)0) {
+    (void) fprintf(fichier,"%s",line);
+    }
+  (void) fclose(canal);
+  }
+}
+/*
+\f
+*/
+/************************************************/
+/*                                             */
+/*     Procedure to assigne a Backtrace stack  */
+/*     (to trace back leak) to memory structure*/
+/*                                             */
+/************************************************/
+static void setbtrace(LEAKTYP *leak,int step)
+
+{
+#define MXSTEP 10
+
+void *zone[MXSTEP];
+int num;
+int i,j;
+struct timezone tz;
+
+(void) memset(zone,'\000',sizeof(zone));
+num=backtrace(zone,MXSTEP);
+for (j=0,i=step+1;(j<MXTB)&&(i<num);i++,j++) {
+  leak->tb[j]=zone[i];
+  }
+(void) gettimeofday(&(leak->date),&tz);
+}
+/*
+\f
+*/
+/************************************************/
+/*                                             */
+/*     Procedure to report backtrace via syslog*/
+/*                                             */
+/************************************************/
+static void logbacktrace(int loglev,int step)
+
+{
+#define MXSTEP 10
+
+void *zone[MXSTEP];
+int num;
+int i;
+
+(void) memset(zone,'\000',sizeof(zone));
+num=backtrace(zone,MXSTEP);
+for (i=step;i<num;i++) {
+  (void) syslog(loglev,"\tbt--> %08lx",(long)zone[i]);
+  }
+}
+/*
+\f
+*/
+/************************************************/
+/*                                             */
+/*     procedure to get a "leak proof" memory  */
+/*     email to a shell script                 */
+/*                                             */
+/************************************************/
+static void *getmemory(size_t size,int step)
+
+{
+register LEAKTYP *leak;
+register void **leakptr;
+
+leak=(LEAKTYP *)calloc(1,sizeof(LEAKTYP));
+leak->size=size;
+leak->ptr=malloc(size);
+(void) setbtrace(leak,step+1);
+leakptr=tsearch((void *)leak,&memory,cmpptr);
+if (*leakptr!=leak) {
+  (void) syslog(LOG_DEBUG,"getmemory trouble PTR already within tsearch");
+  }
+nummem++;
+return leak->ptr;
+}
+/*
+\f
+*/
+/************************************************/
+/*                                             */
+/*     Procedure to memorise the current       */
+/*     application path, will be used to       */
+/*     dump the memory stat.                   */
+/*                                             */
+/************************************************/
+void dbg_setcurpath(char *path)
+
+{
+cpath=strdup(path);
+}
+/*
+\f
+*/
+/************************************************/
+/*                                             */
+/*     Procedure to memorise the current       */
+/*     application base, will be used to       */
+/*     dump the memory stat.                   */
+/*                                             */
+/************************************************/
+void dbg_setcurbase(char *path)
+
+{
+cbase=strdup(path);
+}
+/*
+\f
+*/
+/************************************************/
+/*                                             */
+/*     Procedure to assigne new memory area    */
+/*     while checking (if needed) for memory   */
+/*     leakage.                                */
+/*                                             */
+/************************************************/
+void *dbg_malloc(size_t size)
+
+{
+void *ptr;
+
+if (memleak==DMTRUE) {
+  ptr=getmemory(size,1);
+  }
+else
+  ptr=malloc(size);
+return ptr;
+}
+/*
+\f
+*/
+/************************************************/
+/*                                             */
+/*     Procedure to assigne clean new memory   */
+/*     while checking (if needed) for memory   */
+/*     leakage.                                */
+/*                                             */
+/************************************************/
+void *dbg_calloc(size_t nmemb,size_t size)
+
+{
+void *ptr;
+
+if (memleak==DMTRUE) {
+  ptr=getmemory(nmemb*size,1);
+  (void) memset(ptr,'\000',nmemb*size);
+  }
+else
+  ptr=calloc(nmemb,size);
+return ptr;
+}
+/*
+\f
+*/
+/************************************************/
+/*                                             */
+/*     Procedure to free memory from memry pool*/
+/*     while checking (if needed) for memory   */
+/*     leakage.                                */
+/*                                             */
+/************************************************/
+void dbg_free(void *ptr)
+
+{
+if (memleak==DMTRUE) {
+  LEAKTYP **leakpt;
+  LEAKTYP leak;
+
+  leak.ptr=ptr;
+  if ((leakpt=(LEAKTYP **)tfind(&leak,&memory,cmpptr))!=(LEAKTYP **)0) {
+    LEAKTYP *lk;
+
+    lk=*leakpt;
+    (void) tdelete(*leakpt,&memory,cmpptr);
+    (void) free(lk->ptr);
+    (void) free(lk);
+    nummem--;
+    }
+  else {
+    char *strloc="subsys.c:dbg_free, Unable to find 'leak memory' "
+                "for ptr '%08lx'=<%s>\n";
+
+    (void) syslog(LOG_INFO,strloc,(long)ptr,(char *)ptr);
+    (void) setbtrace(&leak,0);
+    (void) fprintf(stderr,strloc,(long)ptr,(char *)ptr);
+    (void) disline(&leak,cpath,stderr);
+    (void) fprintf(stderr,"\n");
+    }
+  }
+else
+  (void) free(ptr);
+}
+/*
+\f
+*/
+/************************************************/
+/*                                             */
+/*     Procedure to remove a variable from the */
+/*     environement list                       */
+/*                                             */
+/************************************************/
+int dbg_unsetenv(const char *name)
+
+{
+int status;
+
+status=-1;
+errno=EINVAL;
+if (memleak==DMTRUE) {
+  if (environ!=(char **)0) {
+    int i;
+
+    for (i=0;environ[i]!=(char *)0;i++) {
+      char *ptr;
+
+      if ((ptr=strstr(environ[i],name))==(char *)0)
+       continue;
+      if (*(environ[i]+strlen(name))=='=') {
+       (void) dbg_free(ptr);
+        do {
+          environ[i]=environ[i+1];
+         i++;
+         }
+        while (environ[i]!=(char *)0);
+       status=0;
+       break;
+       }
+      }
+    }
+  }
+else 
+  status=unsetenv(name);
+return status;
+}
+/*
+\f
+*/
+/************************************************/
+/*                                             */
+/*     Procedure to install variable within the*/
+/*     environnement                           */
+/*                                             */
+/************************************************/
+int dbg_putenv(char *valeur)
+
+{
+int status;
+
+status=-1;
+if (memleak==DMTRUE) {
+  register char *ptr;
+  if ((ptr=strchr(valeur,'='))!=(char *)0) {
+    register int found;
+    register int taille;
+    register int tocheck;
+
+    found=0;
+    taille=0;
+    if ((tocheck=(ptr-valeur))<=0)
+      return status;
+    status=0;
+    if (environ!=(char **)0) {
+      for (;environ[taille]!=(char *)0;taille++) {
+        if (strncmp(valeur,environ[taille],tocheck)==0) {
+         (void) dbg_free(environ[taille]);
+         environ[taille]=valeur;
+         found=1;
+         break;
+         }
+       }
+      }
+    else
+      environ=dbg_calloc(1,sizeof(char *));
+    if (found==0) {
+      environ=(char **)dbg_realloc((void *)environ,(taille+2)*sizeof(char *));
+      environ[taille]=valeur;
+      environ[taille+1]=(char *)0;
+      }
+    }
+  }
+else {
+  status=putenv(valeur);
+  }
+return status;
+}
+/*
+\f
+*/
+/************************************************/
+/*                                             */
+/*     Procedure to set variable within the    */
+/*     environement                            */
+/*                                             */
+/************************************************/
+int dbg_setenv(const char *name,const char *value,int overwrite)
+
+{
+int status;
+
+status=0;
+if (memleak==DMTRUE) {
+  char *newvar;
+  char *ptr;
+
+  (void) dbg_asprintf(&newvar,"%s=%s",name,value);
+  if ((ptr=getenv(name))!=(char *)0) {
+    if (overwrite!=0) 
+      (void) dbg_unsetenv(name);
+    else {
+      (void) dbg_free(newvar);
+      newvar=(char *)0;
+      }
+    }
+  if (newvar!=(char *)0) {
+    (void) dbg_putenv(newvar);
+    }
+  }
+else {
+  status=setenv(name,value,overwrite);
+  }
+return status;
+}
+/*
+\f
+*/
+/************************************************/
+/*                                             */
+/*     Procedure to reallocate memory from pole*/
+/*     while checking (if needed) for memory   */
+/*     leakage.                                */
+/*                                             */
+/************************************************/
+void *dbg_realloc(void *ptr,size_t size)
+
+{
+if (memleak==DMTRUE) {
+  if (ptr==(void *)0)
+    ptr=getmemory(size,1);
+  else {
+    LEAKTYP **leakpt;
+    LEAKTYP leak;
+
+    leak.ptr=ptr;
+    if ((leakpt=(LEAKTYP **)tfind(&leak,&memory,cmpptr))!=(LEAKTYP **)0) {
+      LEAKTYP *lk;
+     
+      lk=*leakpt; 
+      (void) tdelete(*leakpt,&memory,cmpptr);
+      ptr=realloc(ptr,size);
+      lk->ptr=ptr;
+      lk->size=size;
+      (void) setbtrace(lk,1);
+      (void) tsearch(lk,&memory,cmpptr);
+      }
+    else {
+      char *strloc="subsys.c:dbg_realloc, Unable to find 'leak memory' "
+                  "for ptr '%08lx'=<%s>\n";
+
+      (void) fprintf(stderr,strloc,(long)ptr,(char *)ptr);
+      (void) syslog(LOG_DEBUG,strloc,(long)ptr,(char *)ptr);
+      (void) logbacktrace(LOG_DEBUG,2);
+      ptr=(void *)0;
+      }
+    }
+  }
+else
+  ptr=realloc(ptr,size);
+return ptr;
+}
+/*
+\f
+*/
+/************************************************/
+/*                                             */
+/*     Procedure to allocate memory to         */
+/*     duplicate a string.                     */
+/*                                             */
+/************************************************/
+char *dbg_strdup(const char *str)
+
+{
+char *ptr;
+
+if (str==(char *)0) {
+  /*NULL PTR to duplicate?! crashing HARD      */
+  (void) kill(getpid(),SIGSEGV);
+  }
+if (memleak==DMTRUE) {
+  ptr=getmemory(strlen(str)+3,1);
+  (void) strcpy(ptr,str);
+  }
+else
+  ptr=strdup(str);
+return ptr;
+}
+/*
+\f
+*/
+/************************************************/
+/*                                             */
+/*     Procedure to allocate a string within   */
+/*     a dynamic memory using a va_list        */
+/*                                             */
+/************************************************/
+int dbg_vasprintf(char **strp, const char *fmt,va_list args)
+
+{
+int count;
+
+count=-1;
+if (memleak==DMTRUE) {
+  char *strloc;
+
+  count=vasprintf(&strloc,fmt,args);
+  *strp=dbg_strdup(strloc);
+  (void) free(strloc);
+  }
+else {
+  count=vasprintf(strp,fmt,args);
+  }
+return count;
+}
+/*
+\f
+*/
+/************************************************/
+/*                                             */
+/*     Procedure to allocate a string within   */
+/*     a dynamic memory                        */
+/*                                             */
+/************************************************/
+int dbg_asprintf(char **strp, const char *fmt, ...)
+
+{
+int count;
+va_list args;
+
+count=-1;
+va_start(args,fmt);
+if (memleak==DMTRUE)
+  count=dbg_vasprintf(strp,fmt,args);
+else 
+  count=vasprintf(strp,fmt,args);
+va_end(args);
+return count;
+}
+/*
+\f
+*/
+/************************************************/
+/*                                             */
+/*     Procedure to free memory allocated by   */
+/*     a library procedure (as scandir)        */
+/*     Memory allocated by such library routine*/
+/*     are not known by leak detection.        */
+/*                                             */
+/************************************************/
+void dbg_sysfree(void *ptr)
+
+{
+(void) free(ptr);
+}
+/*
+\f
+*/
+/************************************************/
+/*                                             */
+/*     Procedure to flag current memory as not */
+/*     to be checked against memory leak       */
+/*     Implementation is such memory can be    */
+/*     flagged/unflagged as a no memory leak.  */
+/*     noleak value should always be positive. */
+/*                                             */
+/************************************************/
+void dbg_setnoleak(register int value)
+
+{
+flgleak=value;
+(void) twalk(memory,setleakflg);
+}
+/*
+\f
+*/
+/************************************************/
+/*                                             */
+/*     Procedure to dump current memory        */
+/*     allocation and detect memory allocation */
+/*                                             */
+/*     Data will be dumped on /tmp under       */
+/*     application name and process pid.       */
+/*                                             */
+/************************************************/
+void dbg_dumpmem(const char *apname,const char *extension)
+
+{
+#define        DUMPFRM "%s/var/tmp/%s%s%s.%05d"
+
+if (memleak==DMTRUE) {
+  char *sep;
+  FILE *fichier;
+  char *name;
+  LEAKTYP *leak;
+
+  sep="-";
+  collected=0;
+  if ((extension==(char *)0)||(strlen(extension)==0)) {
+    sep="";
+    extension="";
+    }
+  (void) asprintf(&name,DUMPFRM,cbase,apname,sep,extension,getpid());
+  if ((fichier=fopen(name,"w"))==(FILE *)0) {
+    (void) fprintf(stderr,"dbg_dumpmem unable to open file <%s> (error=<%s>)\n",
+                         name,strerror(errno));
+    fichier=stderr;
+    }
+  memsort=(LEAKTYP **)0;
+  if (nummem>0) {
+    memsort=(LEAKTYP **)calloc(nummem,sizeof(LEAKTYP *));
+    (void) twalk(memory,collectleakptr);
+    }
+  if (collected>0) {
+    register int i;
+
+    (void) fprintf(fichier,"%05ld memory allocation still open\n",collected);
+    (void) qsort(memsort,collected,sizeof(LEAKTYP *),cmpleak);
+    leak=(LEAKTYP *)0;
+    for (i=0;i<collected;i++) {
+      #define STRTIME  "%Y-%m-%d %H:%M:%S"
+      struct tm *tm;
+      char strtime[40];
+
+      if ((leak==(LEAKTYP *)0)||(sametrace(leak,memsort[i])!=0)) {
+        (void) fprintf(fichier,"\n");
+       leak=memsort[i];
+       (void) disline(leak,cpath,fichier);
+       }
+      tm=localtime(&(memsort[i]->date.tv_sec));
+      (void) strftime(strtime,sizeof(strtime),STRTIME,tm);
+      (void) fprintf(fichier,"\t size=%05ld age='%s.%06ld' ptr=%08lx->'%s'\n",
+                            (long)(memsort[i]->size),
+                            strtime,memsort[i]->date.tv_usec,
+                            (long)(memsort[i]->ptr),
+                            (char *)(memsort[i]->ptr));
+      }
+    }
+  else {
+#ifdef DEBUGMEM
+    (void) fprintf(fichier,"No memory leak detected\n");
+#else
+    (void) fprintf(fichier,"No memory leak detector\n(comment in "
+                          "'#define DEBUGMEM' within dbgmem.h)\n");
+#endif
+    }
+  (void) fclose(fichier);
+  (void) free(name);
+  }
+}
diff --git a/lib/dbgmem.h b/lib/dbgmem.h
new file mode 100644 (file)
index 0000000..9929c07
--- /dev/null
@@ -0,0 +1,94 @@
+/************************************************/
+/*                                             */
+/*      Copyright:                             */
+/*      Jean-Marc Pigeon <jmp@safe.ca>  2009   */
+/*                                             */
+/************************************************/
+/* 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., 51 Franklin Street,       */
+/* Fifth Floor, Boston, MA  02110-1301, USA.   */
+/************************************************/
+/*                                             */
+/*     Define sub level procedure to debug     */
+/*     memory problem                          */
+/*                                             */
+/************************************************/
+#ifndef DBGMEM
+#define DBGMEM
+#include       <stdlib.h>
+#include       <stdarg.h>
+
+/*define it at compile if you want to look for         */
+/*memory leak, report is displayed each time   */
+/*dbg_dumpmem is called.                       */
+#ifdef DEBUG
+#define DEBUGMEM
+/*
+*/
+#endif
+
+/*to activate Memory leak detector             */
+#define        DMTRUE  1       /*Boolean               */
+#define        DMFALSE 0       /*Boolean               */
+
+#ifdef DEBUGMEM
+#ifndef DEBUG
+#error "Caution, See dbgmem.h,"
+#error "you should use DEBUGMEM in DEBUG compilation mode"
+#endif
+#define DMTRACE        DMTRUE  
+#else
+#define DMTRACE        DMFALSE 
+#endif
+
+#ifdef DEBUGMEM        
+#define        calloc          dbg_calloc
+#define        malloc          dbg_malloc
+#define        realloc         dbg_realloc
+#define        free            dbg_free
+#define        putenv          dbg_putenv
+#define        setenv          dbg_setenv
+#define        unsetenv        dbg_unsetenv
+#define        asprintf        dbg_asprintf
+#define        vasprintf       dbg_vasprintf
+#define        SYSfree         dbg_sysfree
+
+#undef strdup
+#define        strdup          dbg_strdup
+#else
+#define        SYSfree         free
+#endif
+
+extern int memleak;
+
+extern void dbg_setcurpath(char *path);
+extern void dbg_setcurbase(char *path);
+extern void *dbg_malloc(size_t size);
+extern void *dbg_calloc(size_t nmemb,size_t size);
+extern void *dbg_realloc(void *ptr,size_t size);
+extern char *dbg_strdup(const char *str);
+extern void dbg_free(void *ptr);
+extern int dbg_putenv(char *valeur);
+extern int dbg_setenv(const char *name,const char *value,int overwrite);
+extern int dbg_unsetenv(const char *name);
+extern int dbg_vasprintf(char **strp, const char *fmt,va_list args);
+extern int dbg_asprintf(char **strp, const char *fmt, ...);
+extern void dbg_sysfree(void *ptr);
+extern void dbg_dumpmem(const char *apname,const char *extension);
+extern void dbg_setnoleak(int value);
+#endif
diff --git a/lib/lowtyp.h b/lib/lowtyp.h
new file mode 100644 (file)
index 0000000..d60a1bb
--- /dev/null
@@ -0,0 +1,43 @@
+/************************************************/
+/*                                             */
+/*      Copyright:                             */
+/*      Jean-Marc Pigeon <jmp@safe.ca>  2009   */
+/*                                             */
+/************************************************/
+/* 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., 51 Franklin Street,       */
+/* Fifth Floor, Boston, MA  02110-1301, USA.   */
+/************************************************/
+/*                                             */
+/*     Define very bottom level structure type */
+/*                                             */
+/************************************************/
+#ifndef LOWTYP
+#define LOWTYP
+
+/*defining troolean value                      */
+typedef enum {false,true,maybe} TROOL;
+
+typedef struct timespec TIMESPEC;
+
+/*a 8 Bytes wide integer                       */
+typedef unsigned long long u_vlong;
+typedef         long long vlong;
+
+#define        CHARNULL (void *)0
+#endif
diff --git a/lib/subapl.c b/lib/subapl.c
new file mode 100644 (file)
index 0000000..feaaf0b
--- /dev/null
@@ -0,0 +1,862 @@
+/************************************************/
+/*                                             */
+/*      Copyright:                             */
+/*              Jean-Marc Pigeon <jmp@safe.ca> */
+/*     Distributed under the Gnu Public        */
+/*     License, see the License file in this   */
+/*     package.                                */
+/*                                             */
+/*     Implement very sub level procedure to   */
+/*     handle clement specific needs.          */
+/*                                             */
+/************************************************/
+#include       <sys/time.h>
+#include       <sys/stat.h>
+#include       <sys/resource.h>
+#include       <sys/prctl.h>
+#include       <unistd.h>
+#include       <time.h>
+#include       <stdio.h>
+#include       <errno.h>
+#include       <syslog.h>
+#include       <signal.h>
+#include       <stdarg.h>
+#include       <string.h>
+#include       <ctype.h>
+#include       "dbgmem.h"
+#include       "lowtyp.h"
+#include       "utlprc.h"
+#include       "subapl.h"
+
+/*debug level                                  */
+#if DEBUG
+#define TRALOG  LOG_DEBUG
+#else
+#define TRALOG  LOG_INFO
+#endif
+
+/*setting the applocation version              */
+const  char *curvers=VZBVERS;
+/*sigterm request flag                         */
+       int sigterm=false;
+/*sigquit request flag                         */
+       int sigquit=false;
+/*sigint request flag                          */
+       int sigint=false;
+/*current debug level                          */
+       int debug=0;
+/*flag application running background/foreground*/
+       int apl_foreground=false;
+/*debug log in verbose mode                    */
+       int verbose=false;
+/*base directory (where to store internal data)        */
+       char    *base=""; /*no prefix           */
+
+/*application name                             */
+       char    *appname=VZGOT;
+/*
+\f
+*/
+/************************************************/
+/*                                             */
+/*     Procedure to catch signal and do what is*/
+/*     needed.                                 */
+/*                                             */
+/************************************************/
+static void trapsig(int sig)
+
+{
+sigset_t blockmask;
+sigset_t oldset;
+struct sigaction sa;
+
+(void) sigfillset(&blockmask);
+(void) sigprocmask(SIG_SETMASK,&blockmask,&oldset);
+if (debug>=20)
+  (void) fprintf(stderr,"subclm.c:trapsig <%s/%d> received (by pid='%d')\n",
+                         sys_siglist[sig],sig,getpid());
+switch (sig) {
+  case SIGINT  :
+    sigint=true;
+    break;
+  case SIGQUIT :
+    sigquit=true;
+    sigterm=true;
+    break;
+  case SIGUSR1 :
+    debug++;
+    (void) fprintf(stderr,"Increased debug level to '%d' (pid='%d')\n",debug,getpid());
+    break;
+  case SIGUSR2 :
+    if (debug>0) {
+      debug--;
+      (void) fprintf(stderr,"Decreased debug level to '%d' (pid='%d')\n",debug,getpid());
+      }
+    break;
+  case SIGTERM :
+    sigterm=true;
+    break;
+  default        :
+    (void) fprintf(stderr,"%s, Unexpected signal <%s> received\n",
+                          appname,sys_siglist[sig]);
+    break;
+  }
+/*restarting signal            */
+(void) sigemptyset(&sa.sa_mask);
+sa.sa_handler=trapsig;
+sa.sa_flags=0;
+(void) sigprocmask(SIG_SETMASK,&oldset,(sigset_t *)0);
+(void) sigaction(sig,&sa,(struct sigaction *)0);
+}
+/*
+\f
+*/
+/************************************************/
+/*                                             */
+/*     Procedure to catch signal and do what is*/
+/*     needed.                                 */
+/*                                             */
+/************************************************/
+static void trpmempbls(int sig)
+
+{
+#define        OPPB    "subclm.c:trpmempbls,"
+
+switch (sig) {
+  case SIGSEGV   :
+    (void) apl_core_dump("Program genuine memory violation");
+    break;
+  default        :
+    (void) apl_core_dump("%s Unexpected signal <%s> received",
+                        OPPB,sys_siglist[sig]);
+    break;
+  }
+}
+/*
+\f
+*/
+/************************************************/
+/*                                             */
+/*     Procedure to check if directory is      */
+/*     already existing.                       */
+/*                                             */
+/************************************************/
+int apl_isdir(char *dirpath)
+
+{
+int status;
+struct stat bufstat;
+
+status=-1;
+if (stat(dirpath,&bufstat)==0) {
+  if (S_ISDIR(bufstat.st_mode)!=0) {
+    status=0;
+    }
+  }
+return status;
+}
+/*
+\f
+*/
+/************************************************/
+/*                                             */
+/*     Procedure to free memory used by a      */
+/*     string, do not proceed if point is NULL.*/
+/*                                             */
+/************************************************/
+char *apl_freestr(char *str)
+
+{
+if (str!=(char *)0) {
+  (void) free(str);
+  }
+return (char *)0;
+}
+/*
+\f
+*/
+/************************************************/
+/*                                             */
+/*     Procedure to extract and return current */
+/*     version number.                         */
+/*                                             */
+/************************************************/
+char *apl_getvers()
+
+{
+static char *vernum=(char *)0;
+static char numero[30];
+
+if (vernum==(char *)0) {
+  int num1,num2,num3,num4;
+  char revision[30];
+
+  (void) sscanf(curvers,"%s %d.%d.%d.%d",revision,&num1,&num2,&num3,&num4);
+  (void) sprintf(numero,"%d.%d-%d",num1,num2,num4);
+  vernum=numero;
+  }
+return vernum;
+}
+/*
+^L
+*/
+/************************************************/
+/*                                             */
+/*      Procedure to return the current time   */
+/*     expressed with a millisecond precision. */
+/*                                             */
+/************************************************/
+u_long apl_getmillisec()
+
+{
+static time_t start=(time_t)0;
+
+u_long millisec;
+struct timeval newtime;
+
+millisec=(u_long)0;
+(void) gettimeofday(&newtime,(struct timezone *)0);
+if (start==(time_t)0)
+  start=(newtime.tv_sec-1);
+millisec=newtime.tv_sec-start;
+millisec*=1000;
+millisec+=(newtime.tv_usec/1000);
+return millisec;
+}
+/*
+\f
+*/
+/************************************************/
+/*                                             */
+/*     Procedure to make create a unique name  */
+/*     can be used to store process data       */
+/*     name return is dynamically allocated.   */
+/*                                             */
+/************************************************/
+char *apl_uniquename(unsigned int seq)
+
+{
+#define UFTIME "%Y%m%d%H%M%S"
+#define        UNIQUE  "%05d-%s-%08lx"
+
+char *uniquename;
+time_t curtime;
+struct tm *tminfo;
+char asctemps[100];
+
+curtime=time((time_t)0);
+tminfo=localtime(&curtime);
+(void) strftime(asctemps,sizeof(asctemps),UFTIME,tminfo);
+(void) asprintf(&uniquename,UNIQUE,getpid(),asctemps,apl_getmillisec()+seq);
+return uniquename;
+}
+/*
+\f
+*/
+/************************************************/
+/*                                             */
+/*     Procedure to return a time seen as local*/
+/*     time to a long express as YYYYMMDD      */
+/*                                             */
+/************************************************/
+u_long apl_date(time_t curtime)
+
+{
+struct tm *tm;
+
+tm=localtime(&curtime);
+return (tm->tm_year*10000)+(tm->tm_mon*100)+tm->tm_mday;
+}
+/*
+\f
+*/
+/************************************************/
+/*                                             */
+/*     Procedure to return the local time in   */
+/*     HH:MM:SS format.                        */
+/*     Time is stored in a STATIC memeory area */
+/*                                             */
+/************************************************/
+char *apl_ascsystime(time_t curtime)
+
+{
+#define TTIME  "%H:%M:%S"
+
+static char asctemps[100];
+
+struct tm *tminfo;
+
+tminfo=localtime(&curtime);
+(void) strftime(asctemps,sizeof(asctemps),TTIME,tminfo);
+return asctemps;
+}
+/*
+\f
+*/
+/************************************************/
+/*                                             */
+/*     Procedure to return system time from an */
+/*     YYYY-MM-DDD HH:MM:SS format.            */
+/*                                             */
+/************************************************/
+time_t apl_datetimesysasc(char *strdate,char *strtime)
+
+{
+#define        DBDTOUNIX       "%Y-%m-%d %H:%M:%S"
+time_t datetime;
+
+datetime=(time_t)0;
+if ((strdate!=(char *)0)&&(strtime!=(char *)0)) {
+  struct tm tm;
+  char strdt[100];
+
+  (void) memset(&tm,'\000',sizeof(struct tm));
+  tm.tm_isdst=-1;
+  (void) snprintf(strdt,sizeof(strdt),"%s %s",strdate,strtime);
+  if (strptime(strdt,DBDTOUNIX,&tm)!=(char *)0) {
+    datetime=mktime(&tm);
+    }
+  else {
+    (void) apl_alert(0,"subclm.c:apl_datetimesysasc Unable to convert <%s> to time_t",strdt);
+    }
+  }
+return datetime;
+}
+/*
+\f
+*/
+/************************************************/
+/*                                             */
+/*     Procedure to return the local time in   */
+/*     YYYY-MM-DDD format.                     */
+/*     date is stored in a STATIC memeory area */
+/*                                             */
+/************************************************/
+char *apl_ascsysdate(time_t curtime)
+
+{
+#define TDATE  "%Y-%m-%d"
+
+static char asctemps[100];
+
+struct tm *tminfo;
+
+tminfo=localtime(&curtime);
+(void) strftime(asctemps,sizeof(asctemps),TDATE,tminfo);
+return asctemps;
+}
+/*
+\f
+*/
+/************************************************/
+/*                                             */
+/*     Procedure to return the local time in   */
+/*     YYYY-MM-DDD HH:MM:SS format.            */
+/*     date is stored in a STATIC memeory area */
+/*                                             */
+/************************************************/
+char *apl_ascsysdatetime(time_t curtime)
+
+{
+#define TDTIME "%Y-%m-%d %H:%M:%S"
+
+static char asctemps[100];
+
+struct tm *tminfo;
+
+tminfo=localtime(&curtime);
+(void) strftime(asctemps,sizeof(asctemps),TDTIME,tminfo);
+return asctemps;
+}
+/*
+\f
+*/
+/************************************************/
+/*                                             */
+/*     Procedure to transform the local system */
+/*     time in ASCII time stamp.               */
+/*     Stored in STATIC memory area.           */
+/*                                             */
+/************************************************/
+char *apl_ascsysstamp(time_t curtime)
+
+{
+#define TSTAMP "%a, %d %b %Y %H:%M:%S"
+
+static char ascstamp[100];
+
+struct tm *tminfo;
+char asct[80];
+
+tminfo=localtime(&curtime);
+(void) strftime(asct,sizeof(asct),TSTAMP,tminfo);
+(void) snprintf(ascstamp,sizeof(ascstamp),"%s %05ld",asct,
+                                         ((tminfo->tm_gmtoff/3600)*100)+
+                                         ((tminfo->tm_gmtoff%3600)/60));
+return ascstamp;
+}
+/*
+\f
+*/
+/************************************************/
+/*                                             */
+/*     Procedure to display an alert in the    */
+/*     debug log.                              */
+/*                                             */
+/************************************************/
+void apl_alert(const int dlevel,const char *fmt,...)
+
+{
+if (debug>=dlevel)
+  {
+  va_list args;
+  char *strloc;
+
+  va_start(args,fmt);
+  (void) vasprintf(&strloc,fmt,args);
+  if ((apl_foreground==true)||((verbose==true))) {
+    time_t curtime;
+    char logtime[30];
+
+    curtime=time((long *)0);
+    (void) strftime(logtime,sizeof(logtime),"%H:%M:%S",localtime(&curtime));
+    (void) fprintf(stderr,"%s %s\n",logtime,strloc);
+    (void) fflush(stderr);
+    }
+  else {
+    (void) syslog(TRALOG,"%s\n",strloc);
+    }
+  (void) free(strloc);
+  va_end(args);
+  }
+}
+/*
+\f
+*/
+/************************************************/
+/*                                             */
+/*     Procedure to display an argv list       */
+/*                                             */
+/************************************************/
+void apl_argvtrace(const int dlevel,const char *fmt,char *argv[])
+
+{
+if ((debug>=dlevel)&&(argv[0]!=(char *)0)) {
+  register int i;
+  char *tmp;
+
+  tmp=strdup(argv[0]);
+  for (i=1;argv[i]!=(char *)0;i++) {
+    char *strloc;
+
+    (void) asprintf(&strloc,"%s %s",tmp,argv[i]);
+    (void) free(tmp);
+    tmp=strloc;
+    }
+  (void) apl_alert(dlevel,fmt,tmp);
+  (void) free(tmp);
+  }
+}
+/*
+\f
+*/
+/************************************************/
+/*                                             */
+/*     Procedure to 'compute' a new base       */
+/*     according the current directory         */
+/*     return a newly allocated memory         */
+/*                                             */
+/************************************************/
+char *apl_mkbase(char *newbase)
+
+{
+char *ptr;
+
+ptr=(char *)0;
+switch (newbase[0]) {
+  case '.'     : {
+    char curdir[512];
+    char newpath[1000];
+
+    if (getcwd(curdir,sizeof(curdir))!=(char *)0) {
+      (void) snprintf(newpath,sizeof(newpath),"%s/%s",curdir,newbase);
+      if (chdir(newpath)<0) {
+        (void) apl_alert(0,"Unable to reach directory <%s>",newpath);
+       break;  /*immediat exit */
+        }
+      (void) getcwd(newpath,sizeof(newpath));
+      if (chdir(curdir)<0) {
+        (void) apl_alert(0,"Unable to reach directory <%s>",curdir);
+       break;  /*immediat exit */
+        }
+      ptr=strdup(newpath);
+      } 
+    } 
+    break;
+  case '/'     :
+    ptr=strdup(newbase);
+    break;
+  default      :
+    break;
+  }
+if (ptr==(char *)0) {
+  (void) apl_alert(0,"Unable to assign new base '%s', immediat exit",newbase);
+  (void) exit(-1);
+  }
+return ptr;
+}
+/*
+\f
+*/
+/************************************************/
+/*                                             */
+/*     Procedure to 'compute' an application   */
+/*     directory according dir enum value      */
+/*                                             */
+/************************************************/
+char *apl_appdir(DIRENUM dir)
+
+{
+char *appdir;
+char *sysbase;
+char *apvers;
+char *subdir;
+
+appdir=(char *)0;
+sysbase=" ";   /*something impossible          */
+apvers=apl_getapvers();
+subdir="";
+switch (dir) {
+  case (d_null)                :
+    sysbase="";
+    apvers=""; 
+    break;
+  case (d_tmp)         :
+    sysbase="/var/tmp";
+    apvers=VZGOT"/"; 
+    break;
+  case (d_crash)       :
+    sysbase="/var/crash";
+    break;
+  case (d_etc)         :
+    sysbase="/etc";
+    break;
+  case (d_spool)       :
+    sysbase="/var/spool";
+    break;
+  case (d_lock)                :
+    sysbase="/var/lock";
+    apvers=VZGOT"/";
+    break;
+  case (d_vzgot)       :
+    sysbase="/var/lib";
+    apvers=VZGOT;
+    subdir="/vzdir";   
+    break;
+  case (d_log)         :
+    sysbase="/var/spool";
+    subdir="logs";
+    break;
+  case (d_ubin)                :
+    sysbase="/usr/bin";
+    apvers=""; 
+    break;
+  case (d_usbin)       :
+    sysbase="/usr/sbin";
+    apvers=""; 
+    break;
+  case (d_varlib)      :
+    sysbase="/var/lib";
+    apvers=VZGOT; 
+    break;
+  case (d_usrlib)      :
+    sysbase="/usr/lib";
+    break;
+  }
+(void) asprintf(&appdir,"%s%s/%s%s",base,sysbase,apvers,subdir);
+return appdir;
+}
+/*
+\f
+*/
+/************************************************/
+/*                                             */
+/*     Procedure to set the SIGV signal trap   */
+/*     purpose is to CORE_DUMP in case we have */
+/*     a memory failure of some kind.          */
+/*                                             */
+/************************************************/
+void apl_trapsegv(int onoff)
+
+{
+static struct sigaction oldsa;
+
+if (onoff==true) {
+  struct sigaction newsa;
+
+  newsa.sa_flags=0;
+  newsa.sa_handler=trpmempbls;
+  (void) sigemptyset(&newsa.sa_mask);
+  (void) sigaction(SIGSEGV,&newsa,&oldsa);
+  }
+else {
+  (void) sigaction(SIGSEGV,&oldsa,(struct sigaction *)0);
+  }
+}
+/*
+\f
+*/
+/************************************************/
+/*                                             */
+/*     Procedure to prepare a core_dump in     */
+/*     the right directory.                    */
+/*                                             */
+/************************************************/
+void apl_core_dump(char *frmt,...)
+
+{
+va_list args;
+char *crashdir;
+char *temps;
+
+va_start(args,frmt);
+temps=apl_ascsystime(time((time_t *)0));
+crashdir=apl_appdir(d_crash);
+(void) prc_core_dump(crashdir,temps,frmt,args);
+va_end(args);
+}
+/*
+\f
+*/
+/************************************************/
+/*                                             */
+/*     procedure to set/unset trapped signal   */
+/*                                             */
+/************************************************/
+void apl_settrap(int set)
+
+{
+static struct sigaction oldint;
+static struct sigaction oldterm;
+static struct sigaction oldquit;
+static struct sigaction oldusr1;
+static struct sigaction oldusr2;
+
+static int alldone=false;
+
+if (set==alldone) {
+  switch (set) {
+    case true  :
+      (void) apl_core_dump("apl_settrap already set");
+      break;
+    case false :
+      (void) apl_core_dump("apl_settrap not previously set");
+      break;
+    default    :
+      (void) apl_core_dump("apl_settrap unproper set value");
+      break;
+    } 
+  }
+(void) apl_trapsegv(set);
+if (set==true) {
+  struct sigaction newsa;
+
+  newsa.sa_flags=0;
+  newsa.sa_handler=trapsig;
+  (void) sigaction(SIGUSR2,&newsa,&oldusr2);
+  (void) sigaction(SIGUSR1,&newsa,&oldusr1);
+  (void) sigaction(SIGINT,&newsa,&oldint);
+  (void) sigaction(SIGTERM,&newsa,&oldterm);
+  (void) sigaction(SIGQUIT,&newsa,&oldquit);
+  }
+else {
+  (void) sigaction(SIGQUIT,&oldquit,(struct sigaction *)0);
+  (void) sigaction(SIGTERM,&oldterm,(struct sigaction *)0);
+  (void) sigaction(SIGINT,&oldint,(struct sigaction *)0);
+  (void) sigaction(SIGUSR1,&oldusr1,(struct sigaction *)0);
+  (void) sigaction(SIGUSR2,&oldusr2,(struct sigaction *)0);
+  }
+alldone=set;
+}
+/*
+\f
+*/
+/************************************************/
+/*                                             */
+/*     Procedure to set a string to lower case */
+/*     only.                                   */
+/*                                             */
+/************************************************/
+char *apl_strtolower(char *str)
+
+{
+if (str!=(char *)0) {
+  register char *ptr;
+
+  for (ptr=str;*ptr!='\000';ptr++)
+    *ptr=(char)tolower((int)*ptr);
+  }
+return str;
+}
+/*
+\f
+*/
+/************************************************/
+/*                                             */
+/*     Procedure extract line from a file,     */
+/*     forget about any line starting with     */
+/*     carcom character (if carcom character   */
+/*     not null).                              */
+/*     Doesn't return the '\r' and '\n'        */
+/*     character.                              */
+/*                                             */
+/************************************************/
+char *apl_getstr(FILE *fichier,char *str,u_int taille,char carcom)
+
+{
+char *strloc;
+
+(void) memset(str,'\000',taille);
+while ((strloc=fgets(str,taille,fichier))!=(char *)0) {
+  char *ptrloc;
+
+  if (carcom!='\000') {
+    if (str[0]==carcom)
+      continue;
+    ptrloc=str;
+    while ((ptrloc=strchr(ptrloc,carcom))!=(char *)0) {
+      if (*(ptrloc-1)=='\\') {
+       (void) memmove(ptrloc-1,ptrloc,strlen(ptrloc)+1);
+        ptrloc++;
+        }
+      else {
+        *ptrloc='\000';
+        break;
+        }
+      }
+    }
+  ptrloc=strloc+strlen(strloc);
+  while (ptrloc!=(char *)0) {
+    ptrloc--;
+    switch (*ptrloc) {
+      case '\n'     :
+      case '\r'     :
+        *ptrloc='\000';
+        break;
+      default       :
+        ptrloc=(char *)0;
+       break;
+      }
+    }
+  break;
+  }
+return strloc;
+}
+/*
+\f
+*/
+/************************************************/
+/*                                             */
+/*     Procedure to application+version name   */
+/*                                             */
+/************************************************/
+char *apl_getapvers()
+
+{
+static char *apvers=(char *)0;
+
+if (apvers==(char *)0) {
+  static char apinfo[50];
+
+  char *ptr;
+  char version[30];
+
+  (void) strcpy(version,apl_getvers());
+  if ((ptr=strchr(version,'-'))!=(char *)0)
+    *ptr='\000';
+  (void) snprintf(apinfo,sizeof(apinfo),"%s-%s/",appname,version);
+  apvers=apinfo;
+  }
+return apvers;
+}
+/*
+\f
+*/
+/************************************************/
+/*                                             */
+/*     Procedure to convert a string to a code,*/
+/*     remaining of the string is copy at the  */
+/*     beginning.                              */
+/*     Return a pointer to table, never a NULL */
+/*     pointer unless the table itself is NULL */
+/*                                             */
+/************************************************/
+VOCTYP *apl_getvoca(const VOCTYP *table,char *str)
+
+{
+VOCTYP *voc;
+
+voc=(VOCTYP *)0;
+if (table!=(VOCTYP *)0) {
+  int i;
+  char *sptr;
+
+  sptr=str; 
+  while (isspace(*sptr)!=0)
+    sptr++;
+  for (i=0;table[i].key!=(char *)0;i++) {
+    int max;
+
+    max=strlen(table[i].key);
+    if (strncasecmp(table[i].key,sptr,max)==0) {
+      if ((sptr[max]!='\000')&&(isalnum(sptr[max])!=0))
+        continue;/*it is not the right word    */
+      sptr+=max;
+      while (isspace(*sptr)!=0)
+        sptr++;
+      (void) memmove(str,sptr,strlen(sptr)+1);
+      voc=(VOCTYP *)(table+i);
+      break;
+      }
+    }
+  if (voc==(VOCTYP *)0)
+   voc=(VOCTYP *)(table+i);/*return the "unknown" info */
+  }
+return voc;
+}
+/*
+\f
+*/
+/************************************************/
+/*                                             */
+/*     Procedure to remove crlf and space AT   */
+/*     the string end.                         */
+/*     Remove space at the string start too.   */
+/*                                             */
+/************************************************/
+char *apl_cleanstring(char *str)
+
+{
+if (str!=(char *)0) {
+  register int taille;
+  register char *ptr;
+
+  taille=strlen(str); 
+  ptr=str+taille-1;
+  while (taille>0) {
+    if ((*ptr=='\n') || (*ptr=='\r') || (*ptr==' ')) {
+      *ptr='\000';
+      ptr--;
+      taille--;
+      continue;
+      }
+    break;
+    }
+  ptr=str;
+  while (isblank(*ptr)!=0)
+    ptr++;
+  if (str!=ptr)
+    (void) memmove(str,ptr,strlen(ptr)+1);
+  }
+return str;
+}
diff --git a/lib/subapl.h b/lib/subapl.h
new file mode 100644 (file)
index 0000000..f7d052a
--- /dev/null
@@ -0,0 +1,112 @@
+/************************************************/
+/*                                             */
+/*      Copyright:                             */
+/*      Jean-Marc Pigeon <jmp@safe.ca>  2009   */
+/*                                             */
+/************************************************/
+/* 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., 51 Franklin Street,       */
+/* Fifth Floor, Boston, MA  02110-1301, USA.   */
+/************************************************/
+/*                                             */
+/*     Define sub level procedure needed by    */
+/*     the application.                        */
+/*                                             */
+/************************************************/
+#ifndef SUBAPL
+#define SUBAPL
+#include       <unistd.h>
+#include       <stdio.h>
+#include       <sys/types.h>
+#include       "lowtyp.h"
+
+
+/*vzboot application name              */
+#define        VZGOT   "vzgot"
+/*vzboot current application revision level    */
+#define        VZBVERS "$Revision: 0.84.0.0 $"
+
+
+/*transit subdirectory name                    */
+#define        TSUFFIX "-S"
+
+/*defining application directory               */
+typedef        enum    {
+       d_tmp,          /*directory /tmp        */
+       d_crash,        /*the crash directory   */
+       d_etc,          /*directory is /etc     */
+       d_ubin,         /*directory /usr/bin    */
+       d_usbin,        /*directory /usr/sbin   */
+       d_usrlib,       /*directory /usr/lib    */
+       d_varlib,       /*directory /var/lib    */
+       d_spool,        /*spool directory       */
+       d_log,          /*logs directory        */
+       d_lock,         /*locking directory     */
+       d_vzgot,        /*application main dir  */
+       d_null          /*no directoy specified */
+       }DIRENUM;
+
+typedef        struct  {       /*vocable table type    */
+       int code;       /*code value            */
+       const char *key;/*key code              */
+       const void *ptr;/*pay load              */
+       }VOCTYP;
+
+/*Signal flag definition                       */
+extern         int sigterm;
+extern         int sigquit;
+extern         int sigint;
+
+/*application current version number           */
+extern const char *curvers;
+/*application working base directory           */
+extern char *base;
+/*application name                             */
+extern char *appname;
+/*application debug level                      */
+extern int debug;
+/*application verbosity level                  */
+extern int verbose;
+/*application working mode foreground/background*/
+extern int apl_foreground;
+
+extern int apl_isdir(char *dirpath);
+extern char *apl_freestr(char *str);
+extern char *apl_getvers();
+extern u_long apl_getmillisec();
+extern char *apl_uniquename(unsigned int seq);
+extern u_long apl_date(time_t curtime);
+extern char *apl_ascsystime(time_t curtime);
+extern char *apl_ascsysdate(time_t curtime);
+extern char *apl_ascsysdatetime(time_t curtime);
+extern char *apl_ascsysstamp(time_t curtime);
+extern time_t apl_datetimesysasc(char *strdate,char *strtime);
+extern void apl_alert(const int dlevel,const char *fmt,...);
+extern void apl_argvtrace(const int dlevel,const char *fmt,char *argv[]);
+extern char *apl_mkbase(char *newbase);
+extern char *apl_appdir(DIRENUM dir);
+extern void apl_trapsegv(int onoff);
+extern void apl_core_dump(char *frmt, ...);
+extern void apl_settrap(int set);
+extern char *apl_strtolower(char *str);
+extern char *apl_getstr(FILE *fichier,char *str,u_int taille,char carcom);
+extern int apl_createdirs(char *dirname);
+extern char *apl_getapvers();
+extern VOCTYP *apl_getvoca(const VOCTYP *table,char *str);
+extern char *apl_cleanstring(char *str);
+#endif
diff --git a/lib/subprc.c b/lib/subprc.c
new file mode 100644 (file)
index 0000000..e177f6a
--- /dev/null
@@ -0,0 +1,261 @@
+/************************************************/
+/*                                             */
+/*      Copyright:                             */
+/*      Jean-Marc Pigeon <jmp@safe.ca>  2009   */
+/*                                             */
+/************************************************/
+/* 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., 51 Franklin Street,       */
+/* Fifth Floor, Boston, MA  02110-1301, USA.   */
+/************************************************/
+/*                                             */
+/*     SUBPRC:                                 */
+/*     take care of all low level process      */
+/*     handling.                               */
+/*                                             */
+/************************************************/
+#include       <unistd.h>
+#include       <stdlib.h>
+#include       <stdio.h>
+#include       <string.h>
+#include       <signal.h>
+#include       <errno.h>
+#include       <sys/resource.h>
+#include       <sys/prctl.h>
+#include       <sys/time.h>
+#include       "dbgmem.h"
+#include       "lowtyp.h"
+#include       "utlvec.h"
+#include       "subprc.h"
+
+#define        DEVNULL "/dev/null"
+
+/*Process command override structure (proc)    */
+typedef        struct  {
+       int max;        /*title max size        */
+       char **newargv; /*newly set argv list   */
+       char *title;    /*title storage area    */
+       }TITLTYP;
+
+/*storage area for /proc title display         */
+static  TITLTYP *title=(TITLTYP *)0;
+/*
+\f
+*/
+/************************************************/
+/*                                             */
+/*     Procedure to catch a SIGALRM signal     */
+/*                                             */
+/************************************************/
+static void trppace(int sig)
+
+{
+#define        OPTR    "subprc.c:trppace,"
+
+static u_long tics=(u_long)0;
+
+switch (sig) {
+  case SIGALRM   :
+    tics++;
+    break;
+  default        :
+    (void) fprintf(stderr,"%s Unexpected signal <%s> received\n",
+                         OPTR,sys_siglist[sig]);
+    (void) fflush(stderr);
+    break;
+  }
+}
+/*
+\f
+*/
+/************************************************/
+/*                                             */
+/*     Procedure to free used title memory     */
+/*                                             */
+/************************************************/
+char **prc_cleantitle()
+
+{
+if (title!=(TITLTYP *)0) {
+  title->newargv=(char **)vec_freelstlst((void **)title->newargv,VECFREE);
+  if (environ!=(char **)0) {
+    int i;
+
+    for (i=0;environ[i]!=(char *)0;i++) {
+      (void) free(environ[i]);
+      environ[i]=(char *)0;
+      }
+    (void) free(environ);
+    environ=(char **)0;
+    }
+  (void) free(title);
+  title=(TITLTYP *)0;
+  }
+return (char **)0;
+}
+/*
+\f
+*/
+/************************************************/
+/*                                             */
+/*     Procedure to find and limit space to    */
+/*     be used as status information available */
+/*     from proc (ps ax)                       */
+/*                                             */
+/************************************************/
+char **prc_preptitle(int argc,char *argv[],char *env[])
+
+{
+extern char **environ;
+
+char *lastend;
+
+lastend=(char *)0;
+(void) prc_cleantitle();
+title=(TITLTYP *)calloc(1,sizeof(TITLTYP));
+if (argv!=(char **)0) {
+  int i;
+
+  title->title=argv[0];
+  title->newargv=(char **)vec_addlstlst((void **)title->newargv,(void *)strdup(argv[0]));
+  for (i=1;argv[i]!=(char *)0;i++) {
+    char *valeur;
+
+    lastend=argv[i]+strlen(argv[i]);
+    valeur=strdup(argv[i]);
+    title->newargv=(char **)vec_addlstlst((void **)title->newargv,(void *)valeur);
+    argv[i]=(char *)0;
+    }
+  }
+if (env!=(char **)0) {
+  int i;
+
+  environ=(char **)0;
+  for (i=0;env[i]!=(char *)0;i++) {
+    char *valeur;
+
+    lastend=env[i]+strlen(env[i]);
+    valeur=strdup(env[i]);
+    (void) putenv(valeur);
+    }
+  }
+title->max=lastend-title->title;
+return title->newargv;
+}
+/*
+\f
+*/
+/************************************************/
+/*                                             */
+/*     Procedure to update title information.  */
+/*     title information is available via the  */
+/*     "ps" command.                           */
+/*                                             */
+/************************************************/
+void prc_settitle(const char *fmt,...)
+
+{
+va_list args;
+
+va_start(args,fmt);
+if ((title!=(TITLTYP *)0)&&(title->title!=(char *)0)) {
+  (void) bzero(title->title,title->max);
+  (void) vsnprintf(title->title,title->max,fmt,args);
+  }
+va_end(args);
+}
+/*
+\f
+*/
+/************************************************/
+/*                                             */
+/*     Procedure to put a process in background*/
+/*     mode.                                   */
+/*                                             */
+/************************************************/
+void prc_divedivedive(int foreground)
+
+{
+#define        OPDI    "dbgprc.c:prc_divedivedive,"
+
+if (foreground==0) {
+  switch (fork()) {
+    case -1    :
+      (void) fprintf(stderr,"%s, Unable to dive! (error=<%s>)",
+                            OPDI,strerror(errno));
+      /*lets continue if foregorund mode               */
+      break;
+    case  0    :
+      /*we are now in background mode          */
+      if (foreground==0)       /*always        */
+       (void) setsid();
+      break;
+    default    :
+      /*waiting for ballast to fill up :-}}    */
+      (void) sleep(1); 
+      (void) exit(0);  /*just exit             */
+      break;           /*never reached         */
+    }
+  }
+}
+/*
+\f
+*/
+/************************************************/
+/*                                             */
+/*     Procedure to start or stop a 'Pacemaker'*/
+/*     within the application.                 */
+/*                                             */
+/************************************************/
+void prc_pace(u_long millisec,int onoff)
+
+{
+int static done=false;
+struct sigaction oldsa;
+
+if (onoff==true) {
+  if (done==false) {
+    struct sigaction newsa;
+    struct itimerval period;
+
+    newsa.sa_flags=0;
+    newsa.sa_handler=trppace;
+    (void) sigemptyset(&newsa.sa_mask);
+    (void) sigaction(SIGALRM,&newsa,&oldsa);
+    period.it_value.tv_sec=millisec/1000;
+    period.it_value.tv_usec=millisec*1000;
+    period.it_interval.tv_sec=period.it_value.tv_sec;
+    period.it_interval.tv_usec=period.it_value.tv_usec;
+    (void) setitimer(ITIMER_REAL,&period,(struct itimerval *)0);
+    done=true;
+    }
+  }
+else {
+  if (done==true) {
+    struct itimerval period;
+
+    period.it_value.tv_sec=0;
+    period.it_value.tv_usec=0;
+    period.it_interval.tv_sec=period.it_value.tv_sec;
+    period.it_interval.tv_usec=period.it_value.tv_usec;
+    (void) setitimer(ITIMER_REAL,&period,(struct itimerval *)0);
+    (void) sigaction(SIGALRM,&oldsa,(struct sigaction *)0);
+    done=false;
+    }
+  }
+}
diff --git a/lib/subprc.h b/lib/subprc.h
new file mode 100644 (file)
index 0000000..e33c986
--- /dev/null
@@ -0,0 +1,43 @@
+/************************************************/
+/*                                             */
+/*      Copyright:                             */
+/*      Jean-Marc Pigeon <jmp@safe.ca>  2009   */
+/*                                             */
+/************************************************/
+/* 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., 51 Franklin Street,       */
+/* Fifth Floor, Boston, MA  02110-1301, USA.   */
+/************************************************/
+/*                                             */
+/*     SUBPRC:                                 */
+/*     take care of all low level process      */
+/*     handling.                               */
+/*                                             */
+/************************************************/
+#include       <unistd.h>
+#include       <stdlib.h>
+#ifndef SUBPRC
+#define SUBPRC
+#include       <stdarg.h>
+
+extern char **prc_cleantitle();
+extern char **prc_preptitle(int argc,char *argv[],char *env[]);
+extern void prc_settitle(const char *fmt,...);
+extern void prc_divedivedive(int foreground);
+extern void prc_pace(u_long millisec,int onoff);
+#endif
diff --git a/lib/unicnt.c b/lib/unicnt.c
new file mode 100644 (file)
index 0000000..a16d0d9
--- /dev/null
@@ -0,0 +1,837 @@
+/************************************************/
+/*                                             */
+/*      Copyright:                             */
+/*      Jean-Marc Pigeon <jmp@safe.ca>  2009   */
+/*                                             */
+/************************************************/
+/* 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., 51 Franklin Street,       */
+/* Fifth Floor, Boston, MA  02110-1301, USA.   */
+/************************************************/
+/*                                             */
+/*     UNICNT:                                 */
+/*                                             */
+/************************************************/
+#include        <sys/mount.h>
+#include        <sys/syscall.h>
+#include        <sys/time.h>
+#include        <sys/wait.h>
+#include       <time.h>
+#include       <signal.h>
+#include       <stdio.h>
+#include       <string.h>
+#include       <syslog.h>
+#include       <errno.h>
+#include       <fcntl.h>
+#include       <unistd.h>
+
+#include       "lowtyp.h"
+#include       "dbgmem.h"
+#include       "subapl.h"
+#include       "unicnt.h"
+
+/*container filesystem                         */
+#define        ROOTFS  "rootfs"        /*container root*/
+#define        OLDROOT ".oldroot"      /*for pivot_root*/
+#define        CLONPID "first.pid"     /*cont process 1*/
+#define        MTAB    "/etc/mtab"     /*mtab file     */
+/*
+\f
+*/
+/************************************************/
+/*                                             */
+/*     Defining pivot_root system call         */
+/*                                             */
+/************************************************/
+static int pivot_root(const char * new_root,const char * put_old)
+
+{
+#ifndef __NR_pivot_root
+#pragma message ("the pivot_root syscall is not available within \"sys/syscall.h\"")
+#pragma message ("-> The pivot_root system call will generate an alert")
+(void) apl_alert(0,"%s need the pivot_root system call!!!.",appname);
+errno=ENOSYS;
+return -1;
+#else
+return(syscall(__NR_pivot_root, new_root, put_old));
+#endif
+}
+/*
+\f
+*/
+/************************************************/
+/*                                             */
+/*     Returning the container path.           */
+/*     contpath array is dynamically assigned  */
+/*     need to be freed when not need anymore. */
+/*                                             */
+/************************************************/
+static char *getcontpath(char *contname)
+
+{
+char *contpath;
+char *vzpath;
+
+contpath=(char *)0;
+vzpath=apl_appdir(d_vzgot);
+(void) asprintf(&contpath,"%s/%s",vzpath,contname);
+(void) free(vzpath);
+return contpath;
+}
+/*
+\f
+*/
+/************************************************/
+/*                                             */
+/*     Check is the container is here with     */
+/*     all needed parts.                       */
+/*                                             */
+/************************************************/
+int cnt_iscontgood(char *contname)
+
+{
+int isgood;
+char *contpath;
+int phase;
+int proceed;
+
+isgood=true;
+phase=0;
+proceed=true;
+contpath=getcontpath(contname);
+while (proceed==true) {
+  switch (phase) {
+    case 0     :       /*is container existing?*/
+      if (contpath!=(char *)0) {/*always.      */
+       char *rootpath; 
+
+       (void) asprintf(&rootpath,"%s/%s",contpath,ROOTFS);
+        if (apl_isdir(rootpath)<0) {
+          (void) apl_alert(0,"%s, rootfs directory missing within container \"cont\" directory",
+                            appname,contname);
+         isgood=false;
+         phase=999;    /*trouble trouble       */
+         }
+       (void) free(rootpath);
+       }
+      break;
+    case 1     :       /*check/make oldroot dir*/
+      if (contpath!=(char *)0) {/*always.      */
+       char *oldpath;
+
+       (void) asprintf(&oldpath,"%s/%s",contpath,OLDROOT);
+        if (apl_isdir(oldpath)<0) {
+         if (mkdir(oldpath,0700)<0) {
+            (void) apl_alert(0,"%s, unable to make %s directory for container <%s> (error=%s)",
+                               appname,OLDROOT,contname,strerror(errno));
+           isgood=false;
+           phase=999;  /*trouble trouble       */
+           }
+         }
+       (void) free(oldpath);
+        }
+      break;
+    default    :       /*SAFE Guard            */
+      proceed=false;
+      break;
+    }
+  phase++;
+  }
+(void) free(contpath);
+return isgood;
+}
+/*
+\f
+*/
+/************************************************/
+/*                                             */
+/*     procedure to set an initial mtab        */
+/*     contents WITHIN the clone rootfs        */
+/*                                             */
+/************************************************/
+static int setmtab(char *contname)
+
+{
+int done;
+FILE *fichier;
+int phase;
+int proceed;
+
+done=false;
+fichier=(FILE *)0;
+phase=0;
+proceed=true;
+while (proceed==true) {
+  switch (phase) {
+    case 0     :       /*removing mtab file    */
+      if (unlink(MTAB)<0) {
+       switch (errno)  {
+         case ENOENT   :/* file not existing:-}*/
+           break;
+         default       :
+            (void) apl_alert(0,"%s, Unable to remove %s from container <%s> rootfs (error=<%s>)",
+                               appname,MTAB,contname,strerror(errno));
+           phase=999;  /*trouble trouble       */
+           break;
+         }
+       }
+      break;
+    case 1     :       /*creating new MTAB file*/
+      if ((fichier=fopen(MTAB,"w"))==(FILE *)0) {
+        (void) apl_alert(0,"%s, Unable to create %s within container <%s> rootfs (error=<%s>)",
+                           appname,MTAB,contname,strerror(errno));
+       phase=999;      /*trouble trouble       */
+       }
+      break;
+    case 2     :       /*inserting contents    */
+      if (fprintf(fichier,"%s / roofs rw 0 0\n",appname)<0) {
+       (void) apl_alert(0,"%s, Unable to write %s file in container <%s> (error=<%s>)",
+                           appname,MTAB,contname,strerror(errno));
+       phase=999;      /*trouble trouble       */
+       }
+      (void) fclose(fichier);
+      break;
+    case 3     :       /*everything fine       */
+      done=true;
+      break;
+    default    :       /*SAFE Guard            */
+      proceed=false;
+      break;
+    }
+  phase++;
+  }
+return done;
+}
+/*
+\f
+*/
+/************************************************/
+/*                                             */
+/*     procedure to pivot the container root   */
+/*     file system.                            */
+/*                                             */
+/************************************************/
+int cnt_pivot(int foreground,char *contname)
+
+{
+int done;
+char *contpath;
+int phase;
+int proceed;
+
+done=false;
+contpath=getcontpath(contname);
+phase=0;
+proceed=true;
+while (proceed==true) {
+  switch (phase) {
+    case 0     :       /*binding container file*/
+      if (mount(contpath,contpath,0,MS_BIND,0)<0) {
+        (void) apl_alert(0,"%s, unable to bind container <%s> directory (error=%s)",
+                               appname,contname,strerror(errno));
+       phase=999;      /*trouble trouble       */
+       }
+      break;
+    case 1     :       /*moving to rootfs      */
+      (void) cnt_setstdio(foreground,contname,"container.log");
+      if (chdir(contpath)<0) {
+        (void) apl_alert(0,"%s, unable to reach container <%s> directory (error=%s)",
+                               appname,contname,strerror(errno));
+       phase=999;      /*trouble trouble       */
+       }
+      break;
+    case 2     :       /*moving to rootfs      */
+      if (pivot_root(".",OLDROOT)<0) {
+        (void) apl_alert(0,"%s, unable to pivot container <%s> root (error=%s)",
+                               appname,contname,strerror(errno));
+       phase=999;      /*trouble trouble       */
+       }
+      break;
+    case 3     :       /*umounting previous fs */
+      if (umount2(OLDROOT,MNT_DETACH)<0) {
+        (void) apl_alert(0,"%s, unable to unmount container <%s> oldroot (error=%s)",
+                               appname,contname,strerror(errno));
+       phase=999;      /*trouble trouble       */
+       }
+      break;
+    case 4     :       /* chrooting to rootfs  */
+      if (chdir(ROOTFS)<0) {
+        (void) apl_alert(0,"%s, unable to reach container <%s> rootfs (error=%s)",
+                               appname,contname,strerror(errno));
+       phase=999;      /*trouble trouble       */
+       }
+      break;
+    case 5     :       /* everything fine      */
+      if (chroot(".")<0) {
+        (void) apl_alert(0,"%s, unable to rootfs container <%s> (error=%s)",
+                               appname,contname,strerror(errno));
+       phase=999;      /*trouble trouble       */
+       }
+      break;
+    case 6     :       /* everything fine      */
+      (void) setmtab(contname);        /*initiat mtab  */
+      (void) fprintf(stdout,"%s container chroot done\n",apl_ascsystime(time((time_t *)0)));
+      (void) fflush(stdout);
+      done=true;
+      break;
+    default    :       /*SAFE Guard            */
+      proceed=false;
+      break;
+    }
+  phase++;
+  }
+(void) free(contpath);
+return done;
+}
+/*
+\f
+*/
+/************************************************/
+/*                                             */
+/*     procedure to set a file with the clone  */
+/*     ip number.                              */
+/*                                             */
+/************************************************/
+int cnt_setclonepid(char *contname,pid_t cpid)
+
+{
+int done;
+FILE *fichier;
+char *filename;
+char *contpath;
+int phase;
+int proceed;
+
+done=false;
+fichier=(FILE *)0;
+filename=(char *)0;
+contpath=getcontpath(contname);
+(void) asprintf(&filename,"%s/%s",contpath,CLONPID);
+phase=0;
+proceed=true;
+while (proceed==true) {
+  switch (phase) {
+    case 0     :       /*opening the file      */
+      if ((fichier=fopen(filename,"w"))==(FILE *)0) {
+       (void) apl_alert(0,"%s, Unable to open pidfile <%s> (error=<%s>)",
+                           appname,filename,strerror(errno));
+       phase=999;      /*trouble trouble       */
+       }
+      break;
+    case 1     :       /*writing  PID in it    */
+      if (fprintf(fichier,"%05d\n",cpid)<0) {
+       (void) apl_alert(0,"%s, Unable to write pidfile in container <%s> (error=<%s>)",
+                           appname,contname,strerror(errno));
+       phase=999;      /*trouble trouble       */
+       }
+      (void) fclose(fichier);
+      break;
+    case 2     :       /*everything fine       */
+      done=true;
+      break;
+    default    :       /*SAFE Guard            */
+      proceed=false;
+      break;
+    }
+  phase++;
+  }
+(void) free(filename);
+(void) free(contpath);
+return done;
+}
+/*
+\f
+*/
+/************************************************/
+/*                                             */
+/*     procedure to get the clone pid stored   */
+/*     within the clonpid file                 */
+/*                                             */
+/************************************************/
+pid_t cnt_getclonepid(char *contname)
+
+{
+pid_t clonepid;
+FILE *fichier;
+char *filename;
+char *contpath;
+
+clonepid=(pid_t)0;
+contpath=getcontpath(contname);
+(void) asprintf(&filename,"%s/%s",contpath,CLONPID);
+if ((fichier=fopen(filename,"r"))!=(FILE *)0) {
+  char strloc[80];
+
+  (void) fgets(strloc,sizeof(strloc)-1,fichier);
+  (void) sscanf(strloc,"%d",&clonepid);
+  (void) fclose(fichier);
+  }
+(void) free(filename);
+(void) free(contpath);
+return clonepid;
+}
+/*
+\f
+*/
+/************************************************/
+/*                                             */
+/*     procedure to remove the file with the   */
+/*     clone pid.                              */
+/*                                             */
+/************************************************/
+int cnt_rmclonepid(char *contname)
+
+{
+int done;
+char *filename;
+char *contpath;
+
+done=true;
+filename=(char *)0;
+contpath=getcontpath(contname);
+(void) asprintf(&filename,"%s/%s",contpath,CLONPID);
+if (unlink(filename)<0) {
+  (void) apl_alert(0,"%s, Unable to remove pidfile in container <%s> (error=<%s>)",
+                    appname,contname,strerror(errno));
+  done=false;
+  }
+(void) free(filename);
+(void) free(contpath);
+return done;
+}
+/*
+\f
+*/
+/************************************************/
+/*                                             */
+/*     procedure to initialize the HOST side   */
+/*                                             */
+/************************************************/
+int cnt_initscript(char *scriptname,const char *fmt,...)
+
+{
+#define        BSIZE   2048
+
+int status;
+va_list args;
+FILE *canal;
+char *varlibpath;
+char *parmlst;
+char *cmd;
+int phase;
+int proceed;
+
+status=0;
+va_start(args,fmt);
+canal=(FILE *)0;
+varlibpath=apl_appdir(d_varlib);
+(void) vasprintf(&parmlst,fmt,args);
+(void) asprintf(&cmd,"%s/shell/%s %s",varlibpath,scriptname,parmlst);
+phase=0;
+proceed=true;
+while (proceed==true) {
+  switch (phase) {
+    case 0     :       /*opening pip channel   */
+      if ((canal=popen(cmd,"r"))==(FILE *)0) {
+       (void) apl_alert(0,"%s, Unable to pipe cmd <%s> (error=<%s>)",
+                           appname,cmd,strerror(errno));
+       status=1;
+       phase=999;      /*trouble trouble       */      
+       }
+      break;
+    case 1     :       /*do we have feed back  */
+      if (canal!=(FILE *)0) {  /*always        */
+       char buffer[BSIZE];
+
+       while (fgets(buffer,BSIZE,canal)!=(char *)0) {
+         (void) apl_cleanstring(buffer);
+         if ((debug>0)&&(verbose==true))
+           (void) apl_alert(0,"%s, pipe say: <%s>",appname,buffer);
+         else {
+           (void) fprintf(stdout,"%s\n",buffer);
+           (void) fflush(stdout);
+           }
+         }
+       }
+      break;
+    case 2     :       /*closing pip           */
+      status=pclose(canal);/*get pipe status   */
+      break;
+    default    :       /*SAFE Guard            */
+      proceed=false;
+      break;
+    }
+  phase++;
+  }
+(void) free(cmd);
+(void) free(parmlst);
+(void) free(varlibpath);
+va_end(args);
+return status;
+}
+/*
+\f
+*/
+/************************************************/
+/*                                             */
+/*     procedure to extract the container      */
+/*     architecture available in the 'arch'    */
+/*     file.                                   */
+/*                                             */
+/************************************************/
+char *cnt_getarch(char *contname)
+
+{
+static char *availarch[]={
+       "i386","i686","x86_64",(char *)0
+       };
+
+char *arch;
+FILE *fichier;
+char *contpath;
+char *filename;
+int phase;
+int proceed;
+char buffer[200];
+
+arch=(char *)0;
+fichier=(FILE *)0;
+filename=(char *)0;
+contpath=getcontpath(contname);
+(void) asprintf(&filename,"%s/%s",contpath,"arch");
+phase=0;
+proceed=true;
+while (proceed==true) {
+  switch (phase) {
+    case 0     :       /*let open the file     */
+      if ((fichier=fopen(filename,"r"))==(FILE *)0) {
+       (void) apl_alert(0,"%s Unable to open file <%s> (error=<%s>)",
+                          appname,filename,strerror(errno));
+       phase=999;      /*trouble trouble       */
+       }
+      break;
+    case 1     :       /*reading first line    */
+      if (apl_getstr(fichier,buffer,sizeof(buffer),'#')==(char *)0) {
+       (void) apl_alert(0,"%s Unable to read file <%s> (file empty?)",
+                          appname,filename);
+       phase=999;      /*trouble trouble       */
+       }
+      (void) fclose(fichier);
+      break;
+    case 2     :       /*scanning line         */
+      (void) apl_cleanstring(buffer);
+      if (strlen(buffer)>0) {  /*always?       */
+       int i;
+
+        for (i=0;availarch[i]!=(char *)0;i++) {
+         if (strcmp(availarch[i],buffer)==0) {
+           arch=strdup(availarch[i]);
+           proceed=false;      /*found arch    */
+           break;
+           }
+         }
+       }
+      break;
+    case 3     :       /*scanning line         */
+      (void) apl_alert(0,"%s file <%s>, arch <%s> unknown, setting default",
+                          appname,filename,buffer);
+      break;
+    default    :       /*SAFE Guard            */
+      proceed=false;
+      break;
+    }
+  phase++;
+  }
+(void) free(filename);
+(void) free(contpath);
+if (arch==(char *)0) {
+  arch=strdup(availarch[0]);
+  }
+return arch;
+}
+/*
+\f
+*/
+/************************************************/
+/*                                             */
+/*     procedure to extract the container      */
+/*     distribution type available in the      */
+/*     'dist' file.                            */
+/*                                             */
+/************************************************/
+char *cnt_getdist(char *contname)
+
+{
+char *dist;
+FILE *fichier;
+char *contpath;
+char *filename;
+int phase;
+int proceed;
+char buffer[200];
+
+dist=(char *)0;
+fichier=(FILE *)0;
+filename=(char *)0;
+contpath=getcontpath(contname);
+(void) asprintf(&filename,"%s/%s",contpath,"dist");
+phase=0;
+proceed=true;
+while (proceed==true) {
+  switch (phase) {
+    case 0     :       /*let open the file     */
+      if ((fichier=fopen(filename,"r"))==(FILE *)0) {
+       (void) apl_alert(0,"%s Unable to open file <%s> (error=<%s>)",
+                          appname,filename,strerror(errno));
+       phase=999;      /*trouble trouble       */
+       }
+      break;
+    case 1     :       /*reading first line    */
+      if (apl_getstr(fichier,buffer,sizeof(buffer),'#')==(char *)0) {
+       (void) apl_alert(0,"%s Unable to read file <%s> (file empty?)",
+                          appname,filename);
+       phase=999;      /*trouble trouble       */
+       }
+      (void) fclose(fichier);
+      break;
+    case 2     :       /*scanning line         */
+      (void) apl_cleanstring(buffer);
+      dist=strdup(buffer);
+      break;
+    default    :       /*SAFE Guard            */
+      proceed=false;
+      break;
+    }
+  phase++;
+  }
+(void) free(filename);
+(void) free(contpath);
+if (dist==(char *)0) {
+  dist=strdup("unknown");
+  }
+return dist;
+}
+/*
+\f
+*/
+/************************************************/
+/*                                             */
+/*     procedure to assign a new STDOUT/STDERR */
+/*     and close STDIN. Done ONLY if the       */
+/*     process is in background mode.          */
+/*                                             */
+/************************************************/
+void cnt_setstdio(int foreground,char *contname,char *outname)
+
+{
+#define        OPIO    "unicnt.c:cnt_setstdio,"
+
+if (foreground==0) {
+  int newstdout;
+  int newstderr;
+  int phase;
+  int proceed;
+  char *contpath;
+  char *filename;
+
+  newstdout=-1;
+  newstderr=-1;
+  phase=0;
+  proceed=true;
+  contpath=getcontpath(contname);
+  (void) asprintf(&filename,"%s/%s.stdout",contpath,outname);
+  while (proceed==true) {
+    switch (phase) {
+      case 0   :       /*open the new stdout   */
+       (void) unlink(filename);
+       if ((newstdout=open(filename,O_CREAT|O_RDWR|O_TRUNC,S_IRUSR|S_IWUSR|S_IRGRP))<0) {
+         (void) apl_alert(0,"%s, Unable to open <%s> (error=<%s>)",
+                             OPIO,filename,strerror(errno));
+         phase=999;    /*trouble trouble       */
+         }
+       break;
+      case 1   :       /*open the new stderr   */
+       (void) free(filename);
+        (void) asprintf(&filename,"%s/%s.stderr",contpath,outname);
+       (void) unlink(filename);
+       if ((newstderr=open(filename,O_CREAT|O_RDWR|O_TRUNC,S_IRUSR|S_IWUSR|S_IRGRP))<0) {
+         (void) apl_alert(0,"%s, Unable to open <%s> (error=<%s>)",
+                             OPIO,filename,strerror(errno));
+         (void) close(newstdout);
+         phase=999;    /*trouble trouble       */
+         }
+       break;
+      case 2   :       /*duplicating stdout    */
+       if (dup2(newstdout,1)<0) {
+         (void) apl_alert(0,"%s, Unable to dup2 stdout (error=<%s>)",
+                             OPIO,strerror(errno));
+         (void) close(newstderr);
+         (void) close(newstdout);
+         phase=999;
+         }
+       break;
+      case 3   :       /*duplicating stderr    */
+       (void) close(newstdout);
+       if (dup2(newstderr,2)<0) {
+         (void) apl_alert(0,"%s, Unable to dup2 stderr (error=<%s>)",
+                             OPIO,strerror(errno));
+         (void) close(newstderr);
+         phase=999;
+         }
+       break;
+      case 4   :       /*setting new std       */
+       if ((stdout=fdopen(1,"w"))==(FILE *)0) {
+         (void) apl_alert(0,"%s, Unable to fdopen stdout (error=<%s>)",
+                             OPIO,strerror(errno));
+         }
+       if ((stderr=fdopen(2,"w"))==(FILE *)0) {
+         (void) apl_alert(0,"%s, Unable to fdopen stderr (error=<%s>)",
+                             OPIO,strerror(errno));
+         }
+       (void) fclose(stdin);
+       break;
+      case 5   :       /*write time stamp      */
+       (void) fprintf(stdout,"stdout start: %s\n",apl_ascsysdatetime(time((time_t *)0)));
+       (void) fprintf(stderr,"stderr start: %s\n",apl_ascsysdatetime(time((time_t *)0)));
+       (void) fflush(stdout);
+       (void) fflush(stderr);
+       break;
+      default  :       /*SAFE Guard            */
+       proceed=false;
+        break;
+      }
+    phase++;
+    }
+  (void) free(filename);
+  (void) free(contpath);
+  }
+}
+/*
+\f
+*/
+/************************************************/
+/*                                             */
+/*     Procedure to wait for entry on the      */
+/*     container console and forward it        */
+/*     on the Master_container console file.   */
+/*     A Management expiration is done         */
+/*     according time.                         */
+/*                                             */
+/************************************************/
+int cnt_mstconsole(char *contname,pid_t cntpid)
+
+{
+#define        OPCO    "unicnt.c:cnt_console,"
+
+#define        RLX     5       /*number of sec         */
+int status;
+int nbr;
+int cconsole;
+int mconsole;
+struct timeval relax;
+fd_set reading;
+char *contpath;
+char *filename;
+int phase;
+int proceed;
+char buffer[1000];
+
+status=0;
+nbr=0;
+cconsole=0;
+mconsole=0;
+relax.tv_sec=RLX;      /*sec relax time        */
+relax.tv_usec=0;
+FD_ZERO(&reading);
+contpath=getcontpath(contname);
+(void) asprintf(&filename,"%s/%s",contpath,"console");
+phase=0;
+proceed=true;
+while (proceed==true) {
+  switch (phase) {
+    case 0     :       /*opening the M-Console*/
+      if ((mconsole=open(filename,O_CREAT|O_WRONLY|O_TRUNC,S_IRUSR|S_IWUSR))<0) {
+       (void) apl_alert(0,"%s, Unable to open mconsole <%s> (error=<%s>)",
+                             OPCO,filename,strerror(errno));
+       phase=999;
+       status=-1;
+       }
+      break;
+    case 1     :       /*opening the C-Console*/
+      (void) free(filename);
+      (void) asprintf(&filename,"%s/rootfs/dev/%s",contpath,"console");
+      if ((cconsole=open(filename,O_RDWR|O_ASYNC))<0) {
+       (void) apl_alert(0,"%s, Unable to open cconsole <%s> (error=<%s>)",
+                             OPCO,filename,strerror(errno));
+       (void) close(mconsole);
+       phase=999;
+       status=-1;
+        }
+      break;
+    case 2     :       /*waiting event         */
+      relax.tv_sec=RLX;        /*sec relax time        */
+      relax.tv_usec=0;
+      FD_ZERO(&reading);
+      FD_SET(cconsole,&reading);
+      switch ((nbr=select(cconsole+1,&reading,(fd_set *)0,(fd_set *)0,&relax))) {
+        case   -1    :
+         switch (errno) {
+           case EINTR: /*received a signal, lets see...*/
+             break;    /*getting out fast              */
+           default   :
+             (void) apl_alert(0,"%s, unexpected select event (error=<%s>)",
+                                 OPCO,strerror(errno));
+             break;
+           }
+          break;
+        case      0   :        /*timeout child lost ?  */
+         switch (waitpid(cntpid,0,WNOHANG)) {
+           case -1   : /*exiting               */
+             (void) apl_alert(0,"Unexpect error on waitpid (error=<%s>)",strerror(errno));
+             status=-1;
+             break;
+           case 0    : /*process still up!     */
+             phase--;  /*lets wait for console */
+             break;
+           default   : /*process exited!       */
+                       /*going to next phase   */
+             break;
+           }
+          break;
+       default       : /*data ready in cconsole*/
+         if ((nbr=read(cconsole,buffer,sizeof(buffer)))>0) {
+           (void) write(mconsole,buffer,nbr);
+           }           /*forwarded to mconsole */
+         phase--;      /*stay put on phase     */
+          break;
+       }
+      break;
+    case 3     :       /*closing console       */
+      (void) close(mconsole);
+      (void) close(cconsole);
+      break;
+    default    :       /*SAFE Guard            */
+      proceed=false;
+      break;
+    }
+  phase++;
+  }
+(void) free(filename);
+(void) free(contpath);
+return status;
+}
diff --git a/lib/unicnt.h b/lib/unicnt.h
new file mode 100644 (file)
index 0000000..89809b2
--- /dev/null
@@ -0,0 +1,43 @@
+/************************************************/
+/*                                             */
+/*      Copyright:                             */
+/*      Jean-Marc Pigeon <jmp@safe.ca>  2009   */
+/*                                             */
+/************************************************/
+/* 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., 51 Franklin Street,       */
+/* Fifth Floor, Boston, MA  02110-1301, USA.   */
+/************************************************/
+/*                                             */
+/*     Define all routine to handle container  */
+/*     struture and access.                    */
+/*                                             */
+/************************************************/
+#ifndef        UNICNT
+#define UNICNT
+extern int cnt_iscontgood(char *contname);
+extern int cnt_pivot(int foreground,char *contname);
+extern int cnt_setclonepid(char *contname,pid_t cpid);
+extern pid_t cnt_getclonepid(char *contname);
+extern int cnt_rmclonepid(char *contname);
+extern int cnt_initscript(char *scriptname,const char *fmt,...);
+extern char *cnt_getarch(char *contname);
+extern char *cnt_getdist(char *contname);
+extern void cnt_setstdio(int foreground,char *contname,char *outname);
+extern int cnt_mstconsole(char *contname,pid_t cntpid);
+#endif
diff --git a/lib/unilck.c b/lib/unilck.c
new file mode 100644 (file)
index 0000000..eb2cb2d
--- /dev/null
@@ -0,0 +1,121 @@
+/************************************************/
+/*                                             */
+/*      Copyright:                             */
+/*      Jean-Marc Pigeon <jmp@safe.ca>  2009   */
+/*                                             */
+/************************************************/
+/* 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., 51 Franklin Street,       */
+/* Fifth Floor, Boston, MA  02110-1301, USA.   */
+/************************************************/
+/*                                             */
+/*     UNILCK:                                 */
+/*     Take Care of all process locking        */
+/*     function.                               */
+/*                                             */
+/************************************************/
+#include       <string.h>
+#include       <stdio.h>
+#include       <syslog.h>
+#include       <fcntl.h>
+#include       <unistd.h>
+#include       "lowtyp.h"
+#include       "dbgmem.h"
+#include       "utlprc.h"
+#include       "subapl.h"
+#include       "unilck.h"
+
+/*Application locking directory                        */
+#define        LOCKEXT "-lock" /*lock file extension   */
+
+/*
+\f
+*/
+/************************************************/
+/*                                             */
+/*     procedure to set/unset a lock           */
+/*     return true if successful,              */
+/*     false otherwise.                        */
+/*                                             */
+/************************************************/
+int lck_locking(const char *ident,int lock,int tentative)
+
+{
+int done;
+char *dlock;
+char *lockname;
+
+done=false;
+dlock=apl_appdir(d_lock); 
+(void) asprintf(&lockname,"%s%s%s",dlock,ident,LOCKEXT);
+if (lock==LCK_LOCK) {
+  (void) apl_alert(9,"Request locking <%s>",lockname);
+  while (tentative>0) {
+    int handle;
+
+    tentative--;
+    if ((handle=open(lockname,O_RDWR|O_EXCL|O_CREAT,0640))<0) {
+      FILE *fichier;
+
+      if ((fichier=fopen(lockname,"r"))!=(FILE *)0) {
+        int pid;
+        char strloc[80];
+
+       (void) fgets(strloc,sizeof(strloc)-1,fichier);
+       (void) fclose(fichier);
+        if (sscanf(strloc,"%d",&pid)==1) {
+          (void) apl_alert(1,"Locking, check %d process active",pid);
+         if (prc_checkprocess(pid)==false) {
+            (void) apl_alert(1,"Locking, remove unactive lock");
+           (void) unlink(lockname);
+            }
+          else {
+           if (tentative>0)
+              {
+              (void) apl_alert(2,"waiting 1 sec to be unlocked");
+              (void) sleep(1);
+             }
+           }
+          }
+        }
+      continue;
+      }
+    else
+      {
+      char numid[30];
+
+      (void) snprintf(numid,sizeof(numid),"%06d\n",getpid());
+      (void) write(handle,numid,strlen(numid));
+      (void) close(handle);
+      done=true;
+      break;
+      }
+    }
+  if (done==false)
+    (void) apl_alert(0,"Unable to set locking <%s>",lockname);
+  }
+else
+  {
+  (void) apl_alert(9,"Request unlocking <%s>",lockname);
+  (void) unlink(lockname);
+  done=true;
+  }
+(void) free(lockname);
+(void) free(dlock);
+return done;
+}
diff --git a/lib/unilck.h b/lib/unilck.h
new file mode 100644 (file)
index 0000000..bd9252e
--- /dev/null
@@ -0,0 +1,37 @@
+/************************************************/
+/*                                             */
+/*      Copyright:                             */
+/*      Jean-Marc Pigeon <jmp@safe.ca>  2009   */
+/*                                             */
+/************************************************/
+/* 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., 51 Franklin Street,       */
+/* Fifth Floor, Boston, MA  02110-1301, USA.   */
+/************************************************/
+/*                                             */
+/*     Define all routine to handle process    */
+/*     interlocking.                           */
+/*                                             */
+/************************************************/
+#ifndef        UNILCK
+#define UNILCK
+
+#define LCK_UNLOCK   0 /*unlocking request     */
+#define        LCK_LOCK     1  /*locking requets       */
+extern int lck_locking(const char *ident,int lock,int tentative);
+#endif
diff --git a/lib/utlprc.c b/lib/utlprc.c
new file mode 100644 (file)
index 0000000..0097e7d
--- /dev/null
@@ -0,0 +1,328 @@
+/************************************************/
+/*                                             */
+/*      Copyright:                             */
+/*      Jean-Marc Pigeon <jmp@safe.ca>  2009   */
+/*                                             */
+/************************************************/
+/* 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., 51 Franklin Street,       */
+/* Fifth Floor, Boston, MA  02110-1301, USA.   */
+/************************************************/
+/*                                             */
+/*     Implement very sub level procedure to   */
+/*     handle process sub function.            */
+/*                                             */
+/************************************************/
+#include       <sys/resource.h>
+#include       <sys/prctl.h>
+#include       <sys/wait.h>
+#include       <sys/time.h>
+#include       <unistd.h>
+#include       <stdlib.h>
+#include       <stdio.h>
+#include       <string.h>
+#include       <time.h>
+#include       <signal.h>
+#include       <errno.h>
+#include       "dbgmem.h"
+#include       "lowtyp.h"
+#include       "utlprc.h"
+/*
+\f
+*/
+/************************************************/
+/*                                             */
+/*     Procedure to catch signal and do what is*/
+/*     needed.                                 */
+/*                                             */
+/************************************************/
+static void trpsignal(int sig)
+
+{
+switch (sig) {
+  case SIGALRM   :
+    break;
+  default        :
+    (void) fprintf(stderr,"utlprc.c:trpalrm, Unexpected signal <%s> received",
+                          sys_siglist[sig]);
+    (void) fflush(stderr);
+    break;
+  }
+}
+/*
+\f
+*/
+/************************************************/
+/*                                             */
+/*     Procedure to display an core_dump       */
+/*     message and terminate application       */
+/*                                             */
+/************************************************/
+void prc_core_dump(char *crashdir,char *temps,const char *fmt,va_list args)
+
+{
+#define MXSTEP 30
+
+va_list ap;
+struct rlimit limites;
+
+va_copy(ap,args);
+if (getrlimit(RLIMIT_CORE,&limites)<0) {
+  (void) fprintf(stderr,"getrlimit error='%s'",strerror(errno));
+  }
+limites.rlim_cur=limites.rlim_max;
+if (setrlimit(RLIMIT_CORE,&limites)<0) {
+  (void) fprintf(stderr,"setrlimit error='%s'",strerror(errno));
+  }
+(void) prctl(PR_SET_DUMPABLE,1,0,0,0);/*to allow core-dump     */
+if (chdir(crashdir)<0) {
+  char command[2000];
+  char dirdump[1000];
+
+  (void) snprintf(dirdump,sizeof(dirdump),"%s/coredump/","/tmp");
+  (void) snprintf(command,sizeof(command),"mkdir -p %s",dirdump);
+  (void) system(command);
+  if (chdir(dirdump)<0) {
+    (void) abort();
+    }
+  crashdir=dirdump;
+  }
+if (temps!=(char *)0)
+  (void) fprintf(stderr,"%s ",temps);
+(void) vfprintf(stderr,fmt,ap);
+(void) fprintf(stderr,"\n");
+(void) fprintf(stderr,"going to CORE DUMP (in %score.%d)\n",
+                      crashdir,getpid());
+(void) fflush(stderr);
+(void) sleep(5);       /*to avoid crash avalanche      */
+(void) abort();                /*doing the abort               */
+(void) exit(-1);       /*Theoriticaly unreachable      */
+}
+/*
+^L
+*/
+/************************************************/
+/*                                             */
+/*     Procedure to check if a child process   */
+/*     is still alive.                         */
+/*                                             */
+/************************************************/
+int prc_checkprocess(pid_t pid)
+
+{
+int status;
+
+status=false;
+switch(pid) {
+  case (pid_t)0        :       /*0 means no process    */
+    status=false;
+    break;
+  case (pid_t)1        :       /*init process always OK*/
+    status=true;
+    break;
+  default      :       /*standard process      */
+    if (kill(pid,SIGCHECK)==0)
+      status=true;
+    break;
+  }
+return status;
+}
+/*
+\f
+*/
+/************************************************/
+/*                                             */
+/*     Procedure to allow exited child process */
+/*     to leave the zombie stat.               */
+/*                                             */
+/************************************************/
+void prc_nozombie()
+
+{
+while (waitpid(-1,(int *)0,WNOHANG)>0);
+}
+/*
+\f
+*/
+/************************************************/
+/*                                             */
+/*     Procedure to add a process number to    */
+/*     process list                            */
+/*                                             */
+/************************************************/
+PRCTYP *prc_addtoprc(PRCTYP *plst,pid_t pid)
+
+{
+register int taille;
+
+taille=1;
+if (plst==(PRCTYP *)0) {
+  plst=(PRCTYP *)calloc(1,sizeof(PRCTYP));
+  plst->pqueue=(pid_t *)calloc(taille,sizeof(pid_t));
+  } 
+plst->pqueue[plst->nbr]=pid;
+plst->nbr++;
+taille+=plst->nbr;
+plst->pqueue=(pid_t *)realloc((void *)plst->pqueue,taille*sizeof(pid_t));
+return plst;
+}
+/*
+\f
+*/
+/************************************************/
+/*                                             */
+/*     Procedure to terminate all child process*/
+/*     refered in a process list. if not       */
+/*     successful 'delay'  after SIGTERM try,  */
+/*     a SIGKILL signal is applied.            */
+/*                                             */
+/************************************************/
+PRCTYP *prc_childkill(PRCTYP *prclst,int delay)
+
+{
+if (prclst!=(PRCTYP *)0) {
+  pid_t *pid;
+  int overkill;
+  int i;
+
+  overkill=false;
+  pid=prclst->pqueue;
+  (void) prc_nozombie();
+  for (i=0;i<prclst->nbr;i++) {
+    if (pid[i]<=1)     /*no way to kill admin process  */
+      continue;
+    if (kill(pid[i],SIGTERM)==0)
+      overkill=true;
+    }
+  while (overkill==true) {
+    struct timespec timer;
+
+    timer.tv_sec=1;
+    timer.tv_nsec=0;
+    overkill=false;
+    while (nanosleep(&timer,&timer)!=0);
+    (void) prc_nozombie();
+    for (i=0;i<prclst->nbr;i++) {
+      if (pid[i]<=1)   /*no way to kill admin process  */
+        continue;
+      if (kill(pid[i],SIGCHECK)==0) 
+       overkill=true;
+      }
+    delay--;
+    if (delay==0)
+      break;
+    }
+  if (overkill==true) {
+    for (i=0;i<prclst->nbr;i++) {
+      if (pid[i]<=1)   /*no way to kill admin process  */
+        continue;
+      if (kill(pid[i],SIGCHECK)==0) {
+                               /*lets kill for sure            */
+        (void) kill(pid[i],SIGKILL);
+        (void) fprintf(stderr,"prc_childkill, overkilled process'%05d'\n",
+                              pid[i]);
+        (void) fflush(stderr);
+       }
+      }
+    }
+  (void) prc_nozombie();
+  (void) free(pid);
+  (void) free(prclst);
+  prclst=(PRCTYP *)0;
+  }
+return prclst;
+}
+/*
+\f
+*/
+/************************************************/
+/*                                             */
+/*     Procedure to check exited process among */
+/*     a process list, return only process     */
+/*     nomber still up and running.            */
+/*                                             */
+/************************************************/
+PRCTYP *prc_childcheck(PRCTYP *prclst)
+
+{
+PRCTYP *newprc;
+
+newprc=(PRCTYP *)0;
+if (prclst!=(PRCTYP *)0) {
+  if (prclst->nbr>0) {
+    register int i;
+
+    (void) prc_nozombie();
+    for (i=0;i<prclst->nbr;i++) {
+      if (prc_checkprocess(prclst->pqueue[i])==true) {
+       newprc=prc_addtoprc(newprc,prclst->pqueue[i]);
+       }
+      }
+    }
+  if (prclst->pqueue!=(pid_t *)0)
+    (void) free(prclst->pqueue);
+  (void) free(prclst);
+  }
+return newprc;
+}
+/*
+\f
+*/
+/************************************************/
+/*                                             */
+/*     Procedure to start or stop a 'Pacemaker'*/
+/*     within the application.                 */
+/*                                             */
+/************************************************/
+void prc_setpace(unsigned long millisec,int onoff)
+
+{
+int static done=false;
+struct sigaction oldsa;
+
+if (onoff==true) {
+  if (done==false) {
+    struct sigaction newsa;
+    struct itimerval period;
+
+    newsa.sa_flags=0;
+    newsa.sa_handler=trpsignal;
+    (void) sigemptyset(&newsa.sa_mask);
+    (void) sigaction(SIGALRM,&newsa,&oldsa);
+    period.it_value.tv_sec=millisec/1000;
+    period.it_value.tv_usec=millisec*1000;
+    period.it_interval.tv_sec=period.it_value.tv_sec;
+    period.it_interval.tv_usec=period.it_value.tv_usec;
+    (void) setitimer(ITIMER_REAL,&period,(struct itimerval *)0);
+    done=true;
+    }
+  }
+else {
+  if (done==true) {
+    struct itimerval period;
+
+    period.it_value.tv_sec=0;
+    period.it_value.tv_usec=0;
+    period.it_interval.tv_sec=period.it_value.tv_sec;
+    period.it_interval.tv_usec=period.it_value.tv_usec;
+    (void) setitimer(ITIMER_REAL,&period,(struct itimerval *)0);
+    (void) sigaction(SIGALRM,&oldsa,(struct sigaction *)0);
+    done=false;
+    }
+  }
+}
diff --git a/lib/utlprc.h b/lib/utlprc.h
new file mode 100644 (file)
index 0000000..57743da
--- /dev/null
@@ -0,0 +1,51 @@
+/************************************************/
+/*                                             */
+/*      Copyright:                             */
+/*      Jean-Marc Pigeon <jmp@safe.ca>  2009   */
+/*                                             */
+/************************************************/
+/* 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., 51 Franklin Street,       */
+/* Fifth Floor, Boston, MA  02110-1301, USA.   */
+/************************************************/
+/*                                             */
+/*     Define utility level procedure to handle*/
+/*     process function.                       */
+/*                                             */
+/************************************************/
+#ifndef UTLPRC
+#define UTLPRC
+#include       <stdarg.h>
+
+/*Signal to be send to check if a process is   */
+/*still up and running                         */
+#define SIGCHECK       0
+
+typedef        struct  {
+       u_int nbr;      /*nbr process in queue  */
+       pid_t *pqueue;  /*process queue         */
+       }PRCTYP;
+
+extern void prc_core_dump(char *crashdir,char *temps,const char *fmt,va_list args);
+extern int prc_checkprocess(pid_t pid);
+extern void prc_nozombie();
+extern PRCTYP *prc_addtoprc(PRCTYP *prclst,pid_t pid);
+extern PRCTYP *prc_childkill(PRCTYP *prclst,int delay);
+extern PRCTYP *prc_childcheck(PRCTYP *prclst);
+extern void prc_setpace(unsigned long millisec,int onoff);
+#endif
diff --git a/lib/utlvec.c b/lib/utlvec.c
new file mode 100644 (file)
index 0000000..e28d297
--- /dev/null
@@ -0,0 +1,264 @@
+/************************************************/
+/*                                             */
+/*      Copyright:                             */
+/*      Jean-Marc Pigeon <jmp@safe.ca>  2009   */
+/*                                             */
+/************************************************/
+/* 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., 51 Franklin Street,       */
+/* Fifth Floor, Boston, MA  02110-1301, USA.   */
+/************************************************/
+/*                                             */
+/*     Implement utlity level procedure to     */
+/*     manage linked list                      */
+/*                                             */
+/************************************************/
+#include       <stdio.h>
+#include       <memory.h>
+#include       "dbgmem.h"
+#include       "lowtyp.h"
+#include       "utlvec.h"
+/*
+\f
+*/
+/************************************************/
+/*                                             */
+/*     Procedure to add a payload within       */
+/*     a vectored list                         */
+/*                                             */
+/************************************************/
+VPTR *vec_addveclst(VPTR *vptr,void *payload)
+
+{
+VECLST *node;
+
+node=(VECLST *)calloc(1,sizeof(VECLST));
+node->payload=payload;
+if (vptr==(VPTR *)0) {
+  vptr=(VPTR *)calloc(1,sizeof(VPTR));
+  vptr->vcl=node;
+  node->nxt=node;
+  node->prv=node;
+  }
+else {
+  node->nxt=vptr->vcl;
+  node->prv=vptr->vcl->prv;
+  vptr->vcl->prv->nxt=node;
+  vptr->vcl->prv=node;
+  }
+vptr->numvec++;
+return vptr;
+}
+/*
+\f
+*/
+/************************************************/
+/*                                             */
+/*     Procedure to remove on vector from the  */
+/*     vector list, return the number of       */
+/*     payload subtracted.                     */
+/*                                             */
+/************************************************/
+int vec_rmveclst(VPTR **vptr,void *payload)
+
+{
+register int done;
+
+done=0;
+if (*vptr!=(VPTR *)0) {
+  register u_int i;
+  register VECLST *cur;
+
+  for (i=0,cur=(*vptr)->vcl;i<(*vptr)->numvec;i++) {
+    if (payload==cur->payload) {
+      register VECLST *prv;
+
+      prv=cur->prv;
+      (*vptr)->numvec--;
+      cur->prv->nxt=cur->nxt;
+      cur->nxt->prv=cur->prv;
+      (void) free(cur);
+      cur=prv;
+      done++;
+      }
+    cur=cur->nxt;
+    }
+  if ((*vptr)->numvec==0) {
+    (void) free(*vptr);
+    *vptr=(VPTR *)0;
+    }
+  }
+return done;
+}
+/*
+\f
+*/
+/************************************************/
+/*                                             */
+/*     Procedure to free a vector list,        */
+/*     memory used by payload is freed too.    */
+/*                                             */
+/************************************************/
+VPTR *vec_freeveclst(VPTR *vptr,void *(*freepayload)(void *))
+
+{
+if (vptr!=(VPTR *)0) {
+  register u_int i;
+  register VECLST *cur;
+
+  for (i=0,cur=vptr->vcl->prv;i<vptr->numvec;i++) {
+    register VECLST *tofree;
+    register void *payload;
+
+    tofree=cur;
+    payload=tofree->payload;
+    cur=tofree->prv;
+    (void) free(tofree);
+    if ((payload!=(void *)0)&&(freepayload!=(void *(*)(void*))0))
+      (void) freepayload(payload);
+    }
+  (void) free(vptr);
+  vptr=(VPTR *)0;
+  }
+return vptr;
+}
+/*
+\f
+*/
+/************************************************/
+/*                                             */
+/*     Procedure to count number of element    */
+/*     within an ordered list.                 */
+/*                                             */
+/************************************************/
+unsigned int vec_sizelstlst(void **lptr)
+
+{
+register unsigned int num;
+
+num=(unsigned int)0;
+if (lptr!=(void **)0) {
+  for (;*lptr!=(void *)0;lptr++,num++);
+  }
+return num;
+}
+/*
+\f
+*/
+/************************************************/
+/*                                             */
+/*     Procedure to add a payload within       */
+/*     an ordered list                         */
+/*                                             */
+/************************************************/
+void **vec_addlstlst(void **lptr,void *payload)
+
+{
+int num;
+
+num=0;
+if (lptr!=(void **)0) {
+  num=vec_sizelstlst(lptr);
+  lptr=(void **)realloc(lptr,(num+2)*sizeof(void *));
+  }
+else
+  lptr=(void **)calloc(2,sizeof(void *));
+lptr[num]=payload;
+lptr[num+1]=(void *)0;
+return lptr;
+}
+/*
+\f
+*/
+/************************************************/
+/*                                             */
+/*     Procedure to merge to ordereded list    */
+/*     second list array definition is freed   */
+/*                                             */
+/************************************************/
+void **vec_mrglstlst(void **lptr,void **ladd)
+
+{
+if (ladd!=(void **)0) {
+  register unsigned int t1;
+  register unsigned int t2;
+
+  if (lptr==(void **)0)
+    lptr=(void **)calloc(1,sizeof(void *));
+  t1=vec_sizelstlst(lptr);
+  t2=vec_sizelstlst(ladd);
+  lptr=(void **)realloc(lptr,(t1+t2+1)*sizeof(void *));
+  (void) memcpy(lptr+t1,ladd,(t2+1)*sizeof(void *));
+  (void) free(ladd);
+  }
+return lptr;
+}
+/*
+\f
+*/
+/************************************************/
+/*                                             */
+/*     Procedure to remove one payload from    */
+/*     within an ordered list                  */
+/*     Return true if success, false otherwise */
+/*                                             */
+/************************************************/
+int vec_rmlstlst(void **lptr,void *payload)
+
+{
+int success;
+
+success=false;
+if (lptr!=(void **)0) {
+  for (;*lptr!=(void *)0;lptr++) {
+    if (success==false) {
+      if (*lptr==payload) {
+       success=true;
+       lptr--;
+       }
+      }
+    else 
+      *lptr=*(lptr+1);
+    }
+  }
+return success;
+}
+/*
+\f
+*/
+/************************************************/
+/*                                             */
+/*     Procedure to remove all payload from    */
+/*     an ordered list.                        */
+/*                                             */
+/************************************************/
+void **vec_freelstlst(void **lptr,void *(*freepayload)(void *))
+
+{
+if (lptr!=(void **)0) {
+  register void **p;
+
+  for (p=lptr;*p!=(void *)0;p++) {
+    if (freepayload!=(void *(*)(void*))0)
+      *p=freepayload(*p);
+    }
+  (void) free(lptr);
+  lptr=(void **)0;
+  }
+return lptr;
+}
diff --git a/lib/utlvec.h b/lib/utlvec.h
new file mode 100644 (file)
index 0000000..9373291
--- /dev/null
@@ -0,0 +1,60 @@
+/************************************************/
+/*                                             */
+/*      Copyright:                             */
+/*      Jean-Marc Pigeon <jmp@safe.ca>  2009   */
+/*                                             */
+/************************************************/
+/* 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., 51 Franklin Street,       */
+/* Fifth Floor, Boston, MA  02110-1301, USA.   */
+/************************************************/
+/*                                             */
+/*     Define utility level procedure to manage*/
+/*     dynamic memory list                     */
+/*                                             */
+/************************************************/
+#ifndef UTLVEC
+#define UTLVEC
+#include       <stdlib.h>
+
+#define        VECFREE (void *(*)(void *))free
+
+
+/*Vector list definition                       */
+/*Doubly-circularly-linked lists               */
+typedef struct LIST VECLST;
+typedef struct LIST {
+       void *payload;  /*payload               */
+       VECLST *prv;    /*previous node         */
+       VECLST *nxt;    /*next node             */
+       }VECTOR;
+
+typedef        struct          {
+       u_int numvec;   /*number of vector      */
+       VECLST *vcl;    /*vector list           */
+       }VPTR;
+
+extern VPTR *vec_addveclst(VPTR *vptr,void *payload);
+extern int vec_rmveclst(VPTR **vptr,void *payload);
+extern VPTR *vec_freeveclst(VPTR *vptr,void *(*freepayload)(void *));
+extern unsigned int vec_sizelstlst(void **lptr);
+extern void **vec_addlstlst(void **lptr,void *payload);
+extern void **vec_mrglstlst(void **lptr,void **ltoadd);
+extern int vec_rmlstlst(void **lptr,void *payload);
+extern void **vec_freelstlst(void **lptr,void *(*freepayload)(void *));
+#endif
diff --git a/notes/cont b/notes/cont
new file mode 100755 (executable)
index 0000000..f8b0744
Binary files /dev/null and b/notes/cont differ
diff --git a/notes/cont.c b/notes/cont.c
new file mode 100644 (file)
index 0000000..1cdb9fa
--- /dev/null
@@ -0,0 +1,84 @@
+#define _GNU_SOURCE
+#include        <stdio.h>
+#include        <string.h>
+#include        <errno.h>
+#include        <malloc.h>
+#include        <unistd.h>
+#include        <stdlib.h>
+#include        <fcntl.h>
+#include        <sched.h>
+#include        <sys/wait.h>
+#include        <sys/mount.h>
+#include        <linux/fs.h>
+
+#define STKSIZE 16386
+
+int variable, fd;
+
+int do_contain()
+
+{
+(void) fprintf(stdout,"Clone started pid='%d', parent='%d'\n",getpid(),getppid());
+(void) fflush(stdout);
+(void) unshare(CLONE_NEWUTS|CLONE_NEWUSER|CLONE_NEWNS|CLONE_FILES|CLONE_FS);
+if (mount("/wrk/jail", "/mnt", NULL, MS_BIND, NULL)<0) {
+  (void) fprintf(stdout,"unable to mount /wrk/jail on mnt error=<%s>\n",strerror(errno));
+  (void) fflush(stdout);
+  (void) exit(1);
+  }
+if (chdir("/mnt")<0) {
+  (void) fprintf(stdout,"unable to chdir to /wrk/jail error=<%s>\n",strerror(errno));
+  (void) fflush(stdout);
+  (void) exit(1);
+  }
+if (pivot_root(".", "old_root")<0) {
+  (void) fprintf(stdout,"privot_root error=<%s>\n",strerror(errno));
+  (void) fflush(stdout);
+  (void) exit(1);
+  }
+if (chdir("/")<0) {
+  (void) fprintf(stdout,"unable to chdir to / error=<%s>\n",strerror(errno));
+  (void) fflush(stdout);
+  (void) exit(1);
+  }
+(void) chroot(".");
+if (mount("none", "/proc","proc",0,NULL)<0) {
+  (void) fprintf(stdout,"mount MOVE error=<%s>\n",strerror(errno));
+  (void) fflush(stdout);
+  (void) exit(1);
+  }
+if (umount2("old_root",MNT_DETACH)<0) {
+  (void) fprintf(stdout,"Unable to umount old_root error=<%s>\n",strerror(errno));
+  (void) fflush(stdout);
+  (void) exit(1);
+  }
+(void) fprintf(stderr,"Pret 3!\n");
+(void) fflush(stderr);
+(void) execl("/bin/bash", NULL);
+(void) fprintf(stdout,"Clone completed pid='%d' (UNEXPECTED!!)\n",getpid());
+_exit(0);
+}
+
+int main(int argc, char *argv[])
+
+{
+void **child_stack;
+pid_t cpid;
+
+child_stack=(void **)malloc(STKSIZE);
+if ((cpid=clone(&do_contain, child_stack+STKSIZE,SIGCHLD|__WCLONE|CLONE_NEWPID|CLONE_NEWNS,NULL))<0) {
+  (void) fprintf(stdout,"Unable to start container (error=%s)\n",strerror(errno));
+  (void) fflush(stdout);
+  (void) exit(1);
+  }
+if (waitpid(cpid,0,0)<0) {
+  (void) fprintf(stdout,"Waitpid error (%s)\n",strerror(errno));
+  (void) fflush(stdout);
+  (void) exit(2);
+  }
+(void) free(child_stack);
+(void) fprintf(stdout,"Everything done\n");
+(void) fflush(stdout);
+return 0;
+}
+
diff --git a/notes/cont.o b/notes/cont.o
new file mode 100644 (file)
index 0000000..8801a07
Binary files /dev/null and b/notes/cont.o differ
diff --git a/shell/Makefile b/shell/Makefile
new file mode 100644 (file)
index 0000000..ce56807
--- /dev/null
@@ -0,0 +1,29 @@
+#--------------------------------------------------------------------
+#Support directory Management
+#--------------------------------------------------------------------
+clean  :       
+          @ for i in $(SUBDIRS) ;              \
+             do                                \
+            echo doing "\"$$i $@\"" ;          \
+            $(MAKE) -s -C $$i $@ ;             \
+             done
+
+
+sauve  :
+          @ for i in $(SUBDIRS) ;              \
+             do                                        \
+             $(MAKE) -s -C $$i $@ ;            \
+             done
+          @ echo doing RCS on $(LOCDIR)
+          @ ../support/sauver $(SRC)
+
+#--------------------------------------------------------------------
+SRC=                                           \
+       Makefile
+
+SUBDIRS= \
+
+LOCDIR="shell"
+#===================================================================
+.PHONY:        sauve clean
+#--------------------------------------------------------------------
diff --git a/shell/RCS/Makefile,v b/shell/RCS/Makefile,v
new file mode 100644 (file)
index 0000000..70fe217
--- /dev/null
@@ -0,0 +1,137 @@
+head   0.84;
+access;
+symbols;
+locks
+       jmp:0.84.0.0; strict;
+comment        @# @;
+
+
+0.84
+date   2010.03.06.16.39.08;    author jmp;     state Exp;
+branches
+       0.84.0.0;
+next   0.83;
+
+0.83
+date   2010.03.06.16.39.08;    author jmp;     state Exp;
+branches
+       0.83.0.0;
+next   ;
+
+0.83.0.0
+date   2010.03.06.16.39.08;    author jmp;     state Exp;
+branches;
+next   0.83.0.1;
+
+0.83.0.1
+date   2010.03.06.16.39.08;    author jmp;     state Exp;
+branches;
+next   ;
+
+0.84.0.0
+date   2010.03.06.16.39.08;    author jmp;     state Exp;
+branches;
+next   ;
+
+
+desc
+@#--------------------------------------------------------------------
+#Support directory Management
+#--------------------------------------------------------------------
+clean  :
+          @@ for i in $(SUBDIRS) ;             \
+             do                                \
+            echo doing "\"$$i $@@\"" ;         \
+            $(MAKE) -s -C $$i $@@ ;            \
+             done
+
+
+sauve  :
+          @@ for i in $(SUBDIRS) ;             \
+             do                                        \
+             $(MAKE) -s -C $$i $@@ ;           \
+             done
+          @@ echo doing RCS on $(LOCDIR)
+          @@ ../support/sauver $(SRC)
+
+#--------------------------------------------------------------------
+SRC=                                           \
+       Makefile
+
+SUBDIRS= \
+
+LOCDIR="shell"
+#===================================================================
+.PHONY:        sauve clean
+#--------------------------------------------------------------------
+@
+
+
+0.84
+log
+@upgrade version
+@
+text
+@#--------------------------------------------------------------------
+#Support directory Management
+#--------------------------------------------------------------------
+clean  :       
+          @@ for i in $(SUBDIRS) ;             \
+             do                                \
+            echo doing "\"$$i $@@\"" ;         \
+            $(MAKE) -s -C $$i $@@ ;            \
+             done
+
+
+sauve  :
+          @@ for i in $(SUBDIRS) ;             \
+             do                                        \
+             $(MAKE) -s -C $$i $@@ ;           \
+             done
+          @@ echo doing RCS on $(LOCDIR)
+          @@ ../support/sauver $(SRC)
+
+#--------------------------------------------------------------------
+SRC=                                           \
+       Makefile
+
+SUBDIRS= \
+
+LOCDIR="shell"
+#===================================================================
+.PHONY:        sauve clean
+#--------------------------------------------------------------------
+@
+
+
+0.84.0.0
+log
+@Ratrapage numero de Version
+@
+text
+@@
+
+
+0.83
+log
+@Creation
+#=================================================================================
+@
+text
+@@
+
+
+0.83.0.0
+log
+@Ratrapage numero de Version
+@
+text
+@@
+
+
+0.83.0.1
+log
+@Mise en place su GIT
+@
+text
+@@
diff --git a/shell/vzgot.close b/shell/vzgot.close
new file mode 100755 (executable)
index 0000000..52ac37a
--- /dev/null
@@ -0,0 +1,39 @@
+#! /bin/sh
+#----------------------------------------------------
+#shell used to clean the host part (network, cgroup)
+#while stopping a vzgot Virtual Host
+#This shell is called from the vzgot executable
+#
+#----------------------------------------------------
+#Syntaxe
+#vzgot.open VE_name VE_pid [base_dir]
+#      VE_name is the container dir name
+#      VE_pid is the container main process ID as seen
+#      by the host
+#      base_dir is this application root directory
+#      used for devel only.
+#----------------------------------------------------
+CONTNAME=$1
+VEPID=$2
+BASE=$3
+#----------------------------------------------------
+if ! [ -f $BASE/etc/vzgot/vzgot_config ] ; then
+  echo "Missing vzgot config file"
+  exit 1       #trouble trouble
+  fi
+. $BASE/etc/vzgot/vzgot_config
+
+#specific container configuration override (if needed)
+if [ -f $BASE/$VZLIB/vzdir/$CONTNAME/vzgot_config ] ; then
+  $BASE/$VZLIB/vzdir/$CONTNAME/vzgot_config
+  fi
+#----------------------------------------------------
+#lets cancel all routing
+$BASE/$VZLIB/shell/vzgot.net $CONTNAME remove $BASE
+#----------------------------------------------------
+#Using cgroup if available and operational
+if [ -f $CGROUP/tasks ] ; then
+  rm -fr $BASE/$VZLIB/vzdir/$CONTNAME/cgroup
+  rmdir $CGROUP/$VEPID
+  fi
+exit 0
diff --git a/shell/vzgot.create b/shell/vzgot.create
new file mode 100755 (executable)
index 0000000..1860dda
--- /dev/null
@@ -0,0 +1,132 @@
+#! /bin/sh
+#----------------------------------------------------
+#shell used to create the root file system for the
+#container, incoming file is a tar file to
+#insert within the vzgot directory structure
+#
+#----------------------------------------------------
+#Syntaxe
+#vzgot.create VE_name tpl_tar_filename dist arch base_dir
+#      VE_name is the container dir name
+#      tpl_tar_filename is the template file name to be used
+#      dist is the distribution name (fc12, rh7.3, el5.4, etc...)
+#      arch is the architecture base (i386, x86_64)
+#      base_dir is this application root directory
+#      used for devel only.
+#----------------------------------------------------
+CONTNAME=$1
+TARFILE=$2
+DIST=$3
+ARCH=$4
+BASE=$5
+
+#-------------------------------------------------------------------
+#abort procedure
+abort ()
+
+{
+echo "$1"
+exit 1;
+}
+#----------------------------------------------------
+#default GETAR value, during the container create 
+#CAN BE overriden within /etc/vzgot/vzgot_config
+#if your template are somewhere else
+GETAR="cat /var/lib/vzgot/vztemplate/$TARFILE"
+#----------------------------------------------------
+if ! [ -f $BASE/etc/vzgot/vzgot_config ] ; then
+  abort "Missing vzgot config file"
+  fi
+. $BASE/etc/vzgot/vzgot_config
+
+#specific container configuration override (if needed)
+if [ -f $BASE/$VZLIB/vzdir/$CONTNAME/vzgot_config ] ; then
+  $BASE/$VZLIB/vzdir/$CONTNAME/vzgot_config
+  fi
+#----------------------------------------------------
+if [ -d $BASE/$VZLIB/vzdir/$CONTNAME ] ; then
+  echo "Container $CONTNAME already existing, must be destroyed first"
+  abort "Use command \"vzgot destroy $CONTNAME\" to do it"
+  fi
+
+#----------------------------------------------------
+#creating Container directory
+mkdir -p $BASE/$VZLIB/vzdir/$CONTNAME
+if [ ! -z "$LVM" ] ; then
+  if [ -z "$LVM_SIZE" ] ; then
+    LVM_SIZE="2G"
+    fi
+  VZCONTNAME=`echo $CONTNAME | sed 's/\.//g' | sed 's/-//g'`
+  lvcreate -L$LVM_SIZE -n$VZCONTNAME $LVM > /dev/null 2>&1
+  ret=$?
+  if [ $ret -ne 0 ]; then
+    abort "vzgot.create, unable to create LVM $VZCONTNAME on volume $LVM"
+    fi
+  mke2fs -q -t ext4 -j -L$VZCONTNAME /dev/$LVM/$VZCONTNAME
+  ret=$?
+  if [ $ret -ne 0 ]; then
+    abort "vzgot.create, unable to format LVM $VZCONTNAME with mke2fs"
+    fi
+  mount /dev/$LVM/$VZCONTNAME $BASE/$VZLIB/vzdir/$CONTNAME
+  ret=$?
+  if [ $ret -ne 0 ]; then
+    abort "vzgot.create, unable to mount LVM $VZCONTNAME on BASE/$VZLIB/vzdir/$CONTNAME"
+    fi
+  echo -e "/dev/$LVM/$VZCONTNAME\t$BASE/$VZLIB/vzdir/$CONTNAME\text4\tdefaults\t0 0" >> /etc/fstab
+  fi
+mkdir -p $BASE/$VZLIB/vzdir/$CONTNAME/rootfs
+
+#installing template
+$GETAR | tar zxCf $BASE/$VZLIB/vzdir/$CONTNAME/rootfs -
+ret=$?
+if [ $ret -ne 0 ]; then
+  abort "vzgot.create, Unable to install template file $TPL!"
+  fi
+#----------------------------------------------------
+#duplicating cgroup HOST setting (the limits you
+#want to be set to all created container)
+cp -ap $BASE/$VZLIB/cgroup.d $BASE/$VZLIB/vzdir/$CONTNAME
+#----------------------------------------------------
+#setting the container architecture 
+echo $ARCH > $BASE/$VZLIB/vzdir/$CONTNAME/arch
+#setting the container distribution 
+echo $DIST > $BASE/$VZLIB/vzdir/$CONTNAME/dist
+#----------------------------------------------------
+#cleaning mtab
+rm -fr $BASE/$VZLIB/vzdir/$CONTNAME/rootfs/etc/mtab*
+#----------------------------------------------------
+#specific configuration according distribution
+case "$DIST" in 
+  "rh9"        )       
+     #setting variable  LD_ASSUME_KERNEL to help RPM utility
+     export ENVRPM="LD_ASSUME_KERNEL=2.4.1"
+     echo "export $ENVRPM" >> $BASE/$VZLIB/vzdir/$CONTNAME/rootfs/etc/bashrc
+     ;;
+  "*"  )       #nothing to do
+     ;;
+  esac
+#----------------------------------------------------
+#installing needed RPM
+if [ -d $BASE/$VZLIB/RPM/RPMS/$ARCH/$DIST ] ; then
+  (
+  #do we have specific rpm to add to template
+  cd $BASE/$VZLIB/RPM/RPMS/$ARCH/$DIST
+  num=`ls -1 *.rpm | wc -l`
+  if [ $num -ge 1 ] ; then
+
+    VZROOT=$BASE/$VZLIB/vzdir/$CONTNAME/rootfs
+    CHROOT="/usr/bin/setarch $ARCH /usr/sbin/chroot"
+
+    mkdir $VZROOT/tmp/rpm
+    cp *.rpm $VZROOT/tmp/rpm
+    $CHROOT $VZROOT mount -t proc proc /proc
+    $CHROOT $VZROOT mount -t sysfs sysfs /sys
+    $CHROOT $VZROOT /bin/bash -c "$ENVRPM rpm -U --quiet tmp/rpm/*.rpm"
+    $CHROOT $VZROOT umount /sys
+    $CHROOT $VZROOT umount /proc
+    fi
+  )
+  fi
+#----------------------------------------------------
+#final exit
+exit $ret
diff --git a/shell/vzgot.destroy b/shell/vzgot.destroy
new file mode 100755 (executable)
index 0000000..b950e89
--- /dev/null
@@ -0,0 +1,53 @@
+#! /bin/sh
+#----------------------------------------------------
+#shell used to remove the root file system for a
+#container.
+#
+#----------------------------------------------------
+#Syntaxe
+#vzgot.destroy VE_name
+#      VE_name is the container dir name
+#      base_dir is this application root directory
+#      used for devel only.
+#----------------------------------------------------
+CONTNAME=$1
+BASE=$2
+#----------------------------------------------------
+if ! [ -f $BASE/etc/vzgot/vzgot_config ] ; then
+  echo "Missing vzgot config file"
+  exit 1       #trouble trouble
+  fi
+. $BASE/etc/vzgot/vzgot_config
+
+#specific container configuration override (if needed)
+if [ -f $BASE/$VZLIB/vzdir/$CONTNAME/vzgot_config ] ; then
+  $BASE/$VZLIB/vzdir/$CONTNAME/vzgot_config
+  fi
+#----------------------------------------------------
+if [ ! -d $BASE/$VZLIB/vzdir/$CONTNAME ] ; then
+  echo "Container $CONTNAME not existing"
+  exit 1
+  fi
+
+#----------------------------------------------------
+#checking if container is up and running
+if [ -f $BASE/$VZLIB/vzdir/$CONTNAME/first.pid ] ; then
+  echo "Container $CONTNAME is up and running"
+  echo "Container must be stop first, try \"vzgot shutdown $CONTNAME\""
+  exit 2
+  fi
+#----------------------------------------------------
+if [ ! -z "$LVM" ] ; then
+  VZCONTNAME=`echo $CONTNAME | sed 's/\.//g' | sed 's/-//g'`
+  umount $BASE/$VZLIB/vzdir/$CONTNAME 
+  sed -i -e/"vzdir\/$CONTNAME"/d /etc/fstab
+  lvremove --quiet -f /dev/$LVM/$VZCONTNAME > /dev/null 2>&1
+  ret=$?
+  if [ $ret -ne 0 ]; then
+    echo "vzgot.destroy, unable to destroy LVM $VZCONTNAME with lvremove"
+    exit $ret
+    fi
+  fi
+mv $BASE/$VZLIB/vzdir/$CONTNAME $BASE/$VZLIB/vzdir/$CONTNAME.$$
+rm -fr $BASE/$VZLIB/vzdir/$CONTNAME.$$ &
+exit 0
diff --git a/shell/vzgot.fboot b/shell/vzgot.fboot
new file mode 100755 (executable)
index 0000000..7f6b614
--- /dev/null
@@ -0,0 +1,63 @@
+#! /bin/sh
+#----------------------------------------------------
+#shell used to prepare container struture, this script
+#is called by the vzgot before any root pivot action.
+#It is used on the firstboot to prepare all needed file.
+#or restructure container.
+#
+#----------------------------------------------------
+#Syntaxe
+#vzgot.fistboot VE_name VE_pid Distrib domain node name ip_list [Base]
+#      VE_name is the container dir name
+#      Linux family (RedHat...)
+#      Domain is the container domainname 
+#      Node is the container hostname
+#      IP_LIST is an ip list (ip,ip1,ip2,..) used
+#              to prepare container network
+#      base_dir is this application root directory
+#              (used for devel only).
+#----------------------------------------------------
+CONTNAME=$1
+FLINUX=$2
+DOMAIN=$3
+NODE=$4
+LSTIP=$5
+BASE=$6
+#----------------------------------------------------
+if ! [ -f $BASE/etc/vzgot/vzgot_config ] ; then
+  echo "Missing vzgot config file"
+  exit 1       #trouble trouble
+  fi
+. $BASE/etc/vzgot/vzgot_config
+
+#specific container configuration override (if needed)
+if [ -f $BASE/$VZLIB/vzdir/$CONTNAME/vzgot_config ] ; then
+  $BASE/$VZLIB/vzdir/$CONTNAME/vzgot_config
+  fi
+
+#====================================================
+#Main script
+
+#setting linux family in configuration file
+echo "$FLINUX" > $BASE/$VZLIB/vzdir/$CONTNAME/linux
+
+case "$FLINUX" in
+  "RedHat"     )
+     $BASE/$VZLIB/shell/vzgot.fboot.redhat     \
+               $CONTNAME $NODE $DOMAIN $LSTIP $BASE
+    ;;
+  "Debian"     )
+     $BASE/$VZLIB/shell/vzgot.fboot.debian     \
+               $CONTNAME $NODE $DOMAIN $LSTIP $BASE
+    ;;
+  "*"          )
+    /bin/echo "<"$FLINUX"> not yet an implemented linux family"
+    exit 1;
+    ;;
+  esac
+#----------------------------------------------------
+#setting the container status to "ON"
+#used by /etc/init.d/vzgot when hot is booting
+echo "BOOT=ON" > $BASE/$VZLIB/vzdir/$CONTNAME/status
+#----------------------------------------------------
+exit 0
diff --git a/shell/vzgot.fboot.debian b/shell/vzgot.fboot.debian
new file mode 100755 (executable)
index 0000000..6153c5d
--- /dev/null
@@ -0,0 +1,226 @@
+#! /bin/sh
+#----------------------------------------------------
+#shell used to prepare container structure, this script
+#is called by the vzgot before any root pivot action.
+#It is used on the firstboot to prepare all needed file.
+#
+#----------------------------------------------------
+#Syntaxe
+#vzgot.fistboot VE_name node domain ip_list [Base]
+#      VE_name is the container dir name
+#      Node is the container hostname
+#      Domain is the container domainname 
+#      IP_LIST is an ip list (ip,ip1,ip2,..) used
+#              to prepare container network
+#      base_dir is this application root directory
+#              (used for devel only).
+#----------------------------------------------------
+CONTNAME=$1
+NODE=$2
+DOMAIN=$3
+LSTIP=$4
+BASE=$5
+#----------------------------------------------------
+if ! [ -f $BASE/etc/vzgot/vzgot_config ] ; then
+  echo "Missing vzgot config file"
+  exit 1       #trouble trouble
+  fi
+. $BASE/etc/vzgot/vzgot_config
+
+#specific container configuration override (if needed)
+if [ -f $BASE/$VZLIB/vzdir/$CONTNAME/vzgot_config ] ; then
+  $BASE/$VZLIB/vzdir/$CONTNAME/vzgot_config
+  fi
+#----------------------------------------------------
+VZROOT=$BASE/$VZLIB/vzdir/$CONTNAME/rootfs
+#====================================================
+#procedure to implement redhat distribution file
+#----------------------------------------------------
+#Prepare /etc/hosts file
+#----------------------------------------------------
+
+HOSTS="$BASE/$VZLIB/vzdir/$CONTNAME/rootfs/etc/hosts"
+(
+echo "#----------------------------------------------------"
+echo "#done by vzgot.fboot"
+echo "#----------------------------------------------------"
+echo -e "127.0.0.1\tlocalhost.localdomain\tlocalhost"
+) > $HOSTS
+
+if [ -n $LSTIP ] ; then
+  (
+  echo -n `echo $LSTIP | tr ',' ' ' | cut -d' ' -f1`
+  echo -e "\t$NODE.$DOMAIN\t\t$NODE"
+  echo "#----------------------------------------------------"
+  ) >> $HOSTS
+  fi
+
+#----------------------------------------------------
+#Prepare /etc/hostname
+#----------------------------------------------------
+HST="$BASE/$VZLIB/vzdir/$CONTNAME/rootfs/etc/hostname"
+(
+echo "$NODE.$DOMAIN"
+) > $HST
+
+#----------------------------------------------------
+#Prepare /etc/network/interface
+#----------------------------------------------------
+#need directory to have /etc/init.d/networking to work
+mkdir -p $BASE/$VZLIB/vzdir/$CONTNAME/rootfs/var/run/network
+
+#defining interface
+INT="$BASE/$VZLIB/vzdir/$CONTNAME/rootfs/etc/network/interfaces"
+(
+echo "# Used by ifup(8) and ifdown(8). See the interfaces(5) manpage or"
+echo "# /usr/share/doc/ifupdown/examples for more information."
+echo
+echo "auto lo"
+echo "iface lo inet loopback"
+) > $INT
+if [ -n $LSTIP ] ; then
+  ETH0=`echo $LSTIP | tr ',' ' ' | cut -d' ' -f1`
+  (
+  echo
+  echo "auto eth0"
+  echo "iface eth0 inet static"
+  echo "address $ETH0"
+  echo "netmask 255.255.255.255"
+  echo "up route add default dev eth0"
+  ) >> $INT
+  ETHX=`echo $LSTIP | tr ',' ' ' | cut -s -d' ' -f2-`
+  aliasnum=1
+  for eth in $ETHX 
+    do
+    (
+    echo "auto eth0:$aliasnum"
+    echo "address $eth"
+    echo "netmask 255.255.255.255"
+    ) >> $INT
+    let aliasnum=aliasnum+1
+    done
+  fi
+#----------------------------------------------------
+#Prepare /dev directoy contents
+#----------------------------------------------------
+DEV="$VZROOT/dev"
+
+rm -fr $DEV
+mkdir -p $DEV
+mknod -m 666 $DEV/null c 1 3
+mknod -m 666 $DEV/zero c 1 5
+mknod -m 666 $DEV/random c 1 8
+mknod -m 666 $DEV/urandom c 1 9
+mkdir -m 755 $DEV/pts
+mkdir -m 1777 $DEV/shm
+mknod -m 666 $DEV/tty c 5 0
+mknod -m 600 $DEV/console p
+mknod -m 666 $DEV/tty0 c 4 0
+mknod -m 666 $DEV/full c 1 7
+mknod -m 600 $DEV/initctl p
+mknod -m 666 $DEV/ptmx c 5 2
+
+#----------------------------------------------------
+#Prepare /dev directoy fstab
+#----------------------------------------------------
+FSTAB="$VZROOT/etc/fstab"
+(
+echo -e "/vzgot\t\t/\t\text3\tdefaults\t0 0"
+echo -e "proc\t\t/proc\t\tproc\tdefaults\t0 0"
+echo -e "sysfs\t\t/sys\t\tsysfs\tdefaults\t0 0"
+echo -e "devpts\t\t/dev/pts\t\tdevpts\tdefaults\t0 0"
+echo -e "tmpfs\t\t/dev/shm\t\ttmpfs\tdefaults\t0 0"
+) > $FSTAB
+
+#====================================================
+#starting common container configuration process
+(
+
+cd $BASE/$VZLIB
+#----------------------------------------------------
+#insert a common root password within the vz
+
+if [ -f etc/shadow ] ; then
+  SHAD="$VZROOT/etc/shadow"
+  sed 's/#.*//g' etc/shadow | grep -v '^[[:space:]]*$' |       \
+  while read -r LINE
+    do
+    NAME=`echo $LINE | cut -d':' -f1`
+    (echo $LINE ; grep -v "^$NAME:" $SHAD) > $SHAD.new
+    mv -f $SHAD.new $SHAD
+    done
+  chmod 440 $SHAD
+  fi
+
+#setting the DNS resolver
+if [ -f etc/resolv.conf ] ; then
+  cp -a etc/resolv.conf $VZROOT/etc
+  fi
+
+#duplicating ssh Key if we want to have all container even.
+if [ -d etc/ssh ] ; then
+  #removing the hack to make original KEY
+  rm -fr $VZROOT/etc/rc2.d/S11sshhack
+  rm -fr $VZROOT/etc/init.d/ssh_key_hack.sh
+  for k in `ls etc/ssh/*key* 2> /dev/null` 
+    do
+    cp -a $k $VZROOT/etc/ssh
+    done
+  fi
+
+#insert iptables script
+if [ -f etc/sysconfig/iptables ] ; then
+  cp -a etc/sysconfig/iptables $VZROOT/etc/sysconfig
+  fi
+
+#adding sudoer informations
+if [ -f etc/sudoers ] ; then
+  cat etc/sudoers >> $VZROOT/etc/sudoers
+  fi
+
+#adding snmpd.conf specific to ALL container
+if [ -d $VZROOT/etc/snmp/ ] && [ -f etc/snmp/snmpd.conf ] ; then
+  cat etc/snmp/snmpd.conf>> $VZROOT/etc/snmp/snmpd.conf
+  fi
+
+)
+#end common container configuration  process
+#====================================================
+#lets create common users and groups
+ARCH=`cat $VZLIB/vzdir/$CONTNAME/arch`
+CHROOT="/usr/bin/setarch $ARCH /usr/sbin/chroot"
+
+$CHROOT $VZROOT mount -t proc proc /proc
+$CHROOT $VZROOT mount -t sysfs sysfs /sys
+
+#creating common group
+if [ -f $VZLIB/etc/groups ] ; then
+  sed 's/#.*//g' $VZLIB/etc/groups | grep -v '^[[:space:]]*$' |        \
+  while read -r GRPNAME
+    do
+    $CHROOT $VZROOT groupadd $GRPNAME
+    done
+  fi
+
+#creating common users
+if [ -f $VZLIB/etc/users ] ; then
+  sed 's/#.*//g' $VZLIB/etc/users | grep -v '^[[:space:]]*$' | \
+  while read -r NAME CRYPTED GRPNAME
+    do
+    if [ -d $VZLIB/home/$NAME ] ; then
+      cp -a $VZLIB/home/$NAME $VZROOT/tmp
+      SKEL="-k /tmp/$NAME"
+      fi
+    $CHROOT $VZROOT useradd -m $SKEL -p "$CRYPTED" -g $GRPNAME $NAME
+    rm -fr $VZROOT/tmp/$NAME
+    done
+  fi
+
+#removing udev family auto start
+$CHROOT $VZROOT update-rc.d -f udev remove > /dev/null 2>&1
+$CHROOT $VZROOT update-rc.d -f udev-finish remove > /dev/null 2>&1
+
+$CHROOT $VZROOT umount /sys
+$CHROOT $VZROOT umount /proc
+#====================================================
+exit 0
diff --git a/shell/vzgot.fboot.redhat b/shell/vzgot.fboot.redhat
new file mode 100755 (executable)
index 0000000..769b124
--- /dev/null
@@ -0,0 +1,216 @@
+#! /bin/sh
+#----------------------------------------------------
+#shell used to prepare container structure, this script
+#is called by the vzgot before any root pivot action.
+#It is used on the firstboot to prepare all needed file.
+#
+#----------------------------------------------------
+#Syntaxe
+#vzgot.fistboot VE_name node domain ip_list [Base]
+#      VE_name is the container dir name
+#      Node is the container hostname
+#      Domain is the container domainname 
+#      IP_LIST is an ip list (ip,ip1,ip2,..) used
+#              to prepare container network
+#      base_dir is this application root directory
+#              (used for devel only).
+#----------------------------------------------------
+CONTNAME=$1
+NODE=$2
+DOMAIN=$3
+LSTIP=$4
+BASE=$5
+#----------------------------------------------------
+if ! [ -f $BASE/etc/vzgot/vzgot_config ] ; then
+  echo "Missing vzgot config file"
+  exit 1       #trouble trouble
+  fi
+. $BASE/etc/vzgot/vzgot_config
+
+#specific container configuration override (if needed)
+if [ -f $BASE/$VZLIB/vzdir/$CONTNAME/vzgot_config ] ; then
+  $BASE/$VZLIB/vzdir/$CONTNAME/vzgot_config
+  fi
+#----------------------------------------------------
+VZROOT=$BASE/$VZLIB/vzdir/$CONTNAME/rootfs
+#====================================================
+#procedure to implement redhat distribution file
+#----------------------------------------------------
+#Prepare /etc/hosts file
+#----------------------------------------------------
+
+HOSTS="$BASE/$VZLIB/vzdir/$CONTNAME/rootfs/etc/hosts"
+(
+echo "#----------------------------------------------------"
+echo "#done by vzgot.fboot"
+echo "#----------------------------------------------------"
+echo -e "127.0.0.1\tlocalhost.localdomain\tlocalhost"
+) > $HOSTS
+
+if [ -n $LSTIP ] ; then
+  (
+  echo -n `echo $LSTIP | tr ',' ' ' | cut -d' ' -f1`
+  echo -e "\t$NODE.$DOMAIN\t\t$NODE"
+  echo "#----------------------------------------------------"
+  ) >> $HOSTS
+  fi
+#----------------------------------------------------
+#Prepare /etc/sysconfig/network file
+#----------------------------------------------------
+NET="$BASE/$VZLIB/vzdir/$CONTNAME/rootfs/etc/sysconfig/network"
+(
+echo "NETWORK=yes"
+echo "HOSTNAME=$NODE.$DOMAIN"
+echo "GATEWAYDEV=$ETHNAME"
+) > $NET
+
+#----------------------------------------------------
+#Prepare /etc/sysconfig/network-scripts/sysconfig-eth* file
+#----------------------------------------------------
+
+ETH="$BASE/$VZLIB/vzdir/$CONTNAME/rootfs/etc/sysconfig/network-scripts/ifcfg"
+if [ -n $LSTIP ] ; then
+  ETH0=`echo $LSTIP | tr ',' ' ' | cut -d' ' -f1`
+  (
+  echo "DEVICE=eth0"
+  echo "ONBOOT=yes"
+  echo "IPADDR=$ETH0"
+  echo "NETWORK=$ETH0"
+  echo "NETMASK=255.255.255.255"
+  ) > $ETH-eth0
+  ETHX=`echo $LSTIP | tr ',' ' ' | cut -s -d' ' -f2-`
+  aliasnum=1
+  for eth in $ETHX 
+    do
+    (
+    echo "DEVICE=eth0:$aliasnum"
+    echo "ONBOOT=yes"
+    echo "IPADDR=$eth"
+    echo "NETWORK=$ETH0"
+    echo "NETMASK=255.255.255.255"
+    ) > $ETH-eth0:$aliasnum
+    let aliasnum=aliasnum+1
+    done
+  fi
+#----------------------------------------------------
+#Prepare /dev directoy contents
+#----------------------------------------------------
+DEV="$VZROOT/dev"
+
+rm -fr $DEV
+mkdir -p $DEV
+mknod -m 666 $DEV/null c 1 3
+mknod -m 666 $DEV/zero c 1 5
+mknod -m 666 $DEV/random c 1 8
+mknod -m 666 $DEV/urandom c 1 9
+mkdir -m 755 $DEV/pts
+mkdir -m 1777 $DEV/shm
+mknod -m 666 $DEV/tty c 5 0
+mknod -m 600 $DEV/console p
+mknod -m 666 $DEV/tty0 c 4 0
+mknod -m 666 $DEV/full c 1 7
+mknod -m 600 $DEV/initctl p
+mknod -m 666 $DEV/ptmx c 5 2
+
+#----------------------------------------------------
+#Prepare /dev directoy fstab
+#----------------------------------------------------
+FSTAB="$VZROOT/etc/fstab"
+(
+echo -e "/vzgot\t\t/\t\text3\tdefaults\t0 0"
+echo -e "proc\t\t/proc\t\tproc\tdefaults\t0 0"
+echo -e "sysfs\t\t/sys\t\tsysfs\tdefaults\t0 0"
+echo -e "devpts\t\t/dev/pts\t\tdevpts\tdefaults\t0 0"
+echo -e "tmpfs\t\t/dev/shm\t\ttmpfs\tdefaults\t0 0"
+) > $FSTAB
+
+#====================================================
+#starting common container configuration process
+(
+
+cd $BASE/$VZLIB
+#----------------------------------------------------
+#insert a common root password within the vz
+
+if [ -f etc/shadow ] ; then
+  SHAD="$VZROOT/etc/shadow"
+  sed 's/#.*//g' etc/shadow | grep -v '^[[:space:]]*$' |       \
+  while read -r LINE
+    do
+    NAME=`echo $LINE | cut -d':' -f1`
+    (echo $LINE ; grep -v "^$NAME:" $SHAD) > $SHAD.new
+    mv -f $SHAD.new $SHAD
+    done
+  chmod 440 $SHAD
+  fi
+
+#setting the DNS resolver
+if [ -f etc/resolv.conf ] ; then
+  cp -a etc/resolv.conf $VZROOT/etc
+  fi
+
+#duplicating ssh Key if we want to have all container even.
+if [ -d etc/ssh ] ; then
+  for i in `ls etc/ssh/*key* 2> /dev/null` 
+    do
+    cp -a $k $VZROOT/etc/ssh
+    done
+  fi
+
+#insert iptables script
+if [ -f etc/sysconfig/iptables ] ; then
+  cp -a etc/sysconfig/iptables $VZROOT/etc/sysconfig
+  fi
+
+#adding sudoer informations
+if [ -f etc/sudoers ] ; then
+  cat etc/sudoers >> $VZROOT/etc/sudoers
+  fi
+
+#adding snmpd.conf specific to ALL container
+if [ -f etc/snmp/snmpd.conf ] ; then
+  cat etc/snmp/snmpd.conf>> $VZROOT/etc/snmp/snmpd.conf
+  fi
+
+)
+#end common container configuration  process
+#====================================================
+#lets create common users and groups
+ARCH=`cat $VZLIB/vzdir/$CONTNAME/arch`
+CHROOT="/usr/bin/setarch $ARCH /usr/sbin/chroot"
+
+$CHROOT $VZROOT mount -t proc proc /proc
+$CHROOT $VZROOT mount -t sysfs sysfs /sys
+
+#creating common group
+if [ -f $VZLIB/etc/groups ] ; then
+  sed 's/#.*//g' $VZLIB/etc/groups | grep -v '^[[:space:]]*$' |        \
+  while read -r GRPNAME 
+    do
+    $CHROOT $VZROOT groupadd $GRPNAME
+    done
+  fi
+
+#creating common users
+if [ -f $VZLIB/etc/users ] ; then
+  sed 's/#.*//g' $VZLIB/etc/users | grep -v '^[[:space:]]*$' | \
+  while read -r NAME CRYPTED GRPNAME
+    do
+    if [ -d $VZLIB/home/$NAME ] ; then
+      cp -a $VZLIB/home/$NAME $VZROOT/tmp
+      SKEL="-k /tmp/$NAME"
+      fi
+    $CHROOT $VZROOT useradd -m $SKEL -p "$CRYPTED" -g $GRPNAME $NAME
+    rm -fr $VZROOT/tmp/$NAME
+    done
+  fi
+
+#removing udev family auto start
+UDEV="/sbin/start_udev"
+$CHROOT $VZROOT /bin/mv $UDEV $UDEV.org > /dev/null 2>&1
+$CHROOT $VZROOT /bin/ln /bin/true $UDEV > /dev/null 2>&1
+
+$CHROOT $VZROOT umount /sys
+$CHROOT $VZROOT umount /proc
+#====================================================
+exit 0
diff --git a/shell/vzgot.mksrvz b/shell/vzgot.mksrvz
new file mode 100755 (executable)
index 0000000..ae65112
--- /dev/null
@@ -0,0 +1,129 @@
+#! /bin/bash
+#vzgot.mksrvz
+#-------------------------------------------------------------------
+#procedure to install a specific VZserver 
+#$1 is the vserver node name    (will become nodename.your_domain.name)
+#-------------------------------------------------------------------
+NODENAME=$1
+DOMAIN=`dnsdomainname`
+VSR=$NODENAME.$DOMAIN
+#===================================================================
+#setting default distribution and Architecture.
+DISTRIB="fc12"
+CPUARCH="i386"
+#===================================================================
+#defining default template name 
+#you can modify it according your own template setup name rule
+TPL=linux-$DISTRIB-$CPUARCH-vzserver.tar.gz
+#===================================================================
+#lock procedure
+lockproc()
+
+{
+LOCKFILE=/var/lock/`basename $0`.$1.lck
+
+trap "rm -f $LOCKFILE ; exit 1" 1 2 3 15
+if (set -C; : > $LOCKFILE) 2> /dev/null ; then
+    echo $$ >> $LOCKFILE
+  else
+    echo "Another '`basename $0` $1' is running, existing at once!"
+    echo "remove $LOCKFILE, if it is not the case"
+    rm -f $LOCKFILE
+    exit 0;
+  fi
+}
+#-------------------------------------------------------------------
+#abort procedure
+abort ()
+
+{
+echo "$1"
+rm -f $LOCKFILE
+exit 1;
+}
+
+#===================================================================
+#main process
+
+#locking building process
+lockproc $1
+#===================================================================
+#getting all the needed information from the vzgot_list file
+sed 's/#.*//g' /etc/vzgot/vzgot_list     |     \
+                grep -v '^[[:space:]]*$' |     \
+                grep $NODENAME           |     \
+while read -r NODE TEMPLATE DISTRIB CPUARCH
+  do
+
+#setting distribution
+  FLINUX="RedHat"
+  case "$DISTRIB" in
+    "ovzel5.4" |                               \
+    "el5.2"    |                               \
+    "el5.3"    |                               \
+    "el5.4"    |                               \
+    "el4.8"    |                               \
+    "el4.7"    |                               \
+    "el4.6"    |                               \
+    "ovzfc12"  |                               \
+    "fc12"     |                               \
+    "fc11"     |                               \
+    "fc10"     |                               \
+    "fc9"      |                               \
+    "fc8"      |                               \
+    "fc7"      |                               \
+    "fc6"      |                               \
+    "fc5"      |                               \
+    "fc4"      |                               \
+    "fc3"      |                               \
+    "fc2"      |                               \
+    "rhel4"    |                               \
+    "rh9"      |                               \
+    "rh8.0"    |                               \
+    "rh7.3"    )
+      FLINUX="RedHat"  #Redhat family distribution
+      ;;
+    "ovzubu9.4"        |                               \
+    "ubu9.4"   |                               \
+    "ubu8.4"   )
+      FLINUX="Debian"  #Debian family distribution
+      ;;
+    "*"                )
+      abort "Unknown Linux distribution, exiting"
+      exit 1 
+      ;;
+    esac;
+#===================================================================
+#extracting node ip number
+  IPNUM=`dig +short $VSR | grep -v [a-z]`
+  if [ -z "$IPNUM" ] ; then
+    abort "No IP number found for $VSR hostname"
+    fi
+#-------------------------------------------------------------------
+#lets create the node file system
+  TPL=$TEMPLATE.tar.gz
+  vzgot create $NODENAME $TPL $DISTRIB $CPUARCH
+  RETVAL=$?
+  if [ $RETVAL -ne 0 ] ; then 
+    abort "Unable to create $NODENAME root file system"
+    fi
+#-------------------------------------------------------------------
+#lets do the node first boot
+  vzgot firstboot -D $FLINUX -i $IPNUM -d $DOMAIN -n $NODENAME $NODENAME
+  RETVAL=$?
+  if [ $RETVAL -ne 0 ] ; then 
+    abort "Unable to do $NODENAME first boot"
+    fi
+#-------------------------------------------------------------------
+#lets start vzgot
+  vzgot boot $NODENAME
+  RETVAL=$?
+  if [ $RETVAL -ne 0 ] ; then 
+    abort "Unable to boot $NODENAME"
+    fi
+  #everything fine
+  echo "$NODENAME is now installed and 'up and running'"
+#===================================================================
+  done
+#END
+rm -f $LOCKFILE
diff --git a/shell/vzgot.net b/shell/vzgot.net
new file mode 100755 (executable)
index 0000000..1895822
--- /dev/null
@@ -0,0 +1,86 @@
+#! /bin/sh
+#----------------------------------------------------
+#shell used to assign/remove route needed by
+#a container when container is started or stopped
+#
+#----------------------------------------------------
+#Syntaxe
+#vzgot.net VE_name assign|remove [base_dir]
+#      VE_name is the container dir name
+#      "assign" to set container needed route 
+#      "remove" to reset container needed route 
+#      base_dir is this application root directory
+#      used for devel only.
+#----------------------------------------------------
+CONTNAME=$1
+ACTION=$2
+BASE=$3
+#----------------------------------------------------
+if ! [ -f $BASE/etc/vzgot/vzgot_config ] ; then
+  echo "Missing vzgot config file"
+  exit 1       #trouble trouble
+  fi
+. $BASE/etc/vzgot/vzgot_config
+
+#specific container configuration override (if needed)
+if [ -f $BASE/$VZLIB/vzdir/$CONTNAME/vzgot_config ] ; then
+  $BASE/$VZLIB/vzdir/$CONTNAME/vzgot_config
+  fi
+#----------------------------------------------------
+FLINUX="RedHat"
+if [ -f $VZLIB/vzdir/$CONTNAME/linux ] ; then
+  FLINUX=`cat $VZLIB/vzdir/$CONTNAME/linux`
+  fi
+
+#lets prepare all routing according type of linux
+#RedHat beeing the default
+case "$FLINUX" in 
+  "*"          |                                               \
+  "RedHat"     )
+     NETINFO="$BASE/$VZLIB/vzdir/$CONTNAME/rootfs/etc/sysconfig/network-scripts"
+     for f in $NETINFO/ifcfg-*
+       do
+       EXT=`basename $f | cut -d'-' -f2`
+       case "$EXT" in 
+         "lo"  )       #local interface, nothing to do 
+           ;;
+         *     )
+           ADDR=`grep IPADDR $f | cut -d'=' -f2`
+           case "$ACTION" in
+            "assign"   )
+                #pre-emptive route assignation
+                /sbin/route add $ADDR dev $BRIDGENAME
+              ;;
+            "remove"   )
+                /sbin/route del $ADDR dev $BRIDGENAME
+              ;;
+            *          )
+              echo "ACTION request '$ACTION' is unexpected!"
+              ;;
+            esac
+           ;;
+         esac
+       done
+     ;;
+
+  "Debian"     )
+     NETINFO="$BASE/$VZLIB/vzdir/$CONTNAME/rootfs/etc/network"
+     for ADDR in `grep address $NETINFO/interfaces | cut -d' ' -f2`
+       do
+       case "$ACTION" in
+        "assign"       )
+           #pre-emptive route assignation
+           /sbin/route add $ADDR dev $BRIDGENAME
+           ;;
+        "remove"       )
+           /sbin/route del $ADDR dev $BRIDGENAME
+           ;;
+        *              )
+           echo "ACTION request '$ACTION' is unexpected!"
+           ;;
+        esac
+       done
+     ;;
+  esac
+#----------------------------------------------------
+exit 0
diff --git a/shell/vzgot.open b/shell/vzgot.open
new file mode 100755 (executable)
index 0000000..0f422ff
--- /dev/null
@@ -0,0 +1,87 @@
+#! /bin/sh
+#----------------------------------------------------
+#shell used to setup the host part (network, cgroup)
+#while starting a vzgot Virtual Host
+#This shell is called from the vzgot executable
+#      vzgot boot cont_name
+#
+#----------------------------------------------------
+#Syntaxe
+#vzgot.open VE_name VE_pid [base_dir]
+#      VE_name is the container dir name
+#      HS_pid is the vzgot container master process
+#      VE_pid is the container main process ID as seen
+#      by the host
+#      base_dir is this application root directory
+#      used for devel only.
+#----------------------------------------------------
+CONTNAME=$1
+HSPID=$2
+VEPID=$3
+BASE=$4
+#----------------------------------------------------
+if ! [ -f $BASE/etc/vzgot/vzgot_config ] ; then
+  echo "Missing vzgot config file"
+  exit 1       #trouble trouble
+  fi
+. $BASE/etc/vzgot/vzgot_config
+
+#specific container configuration override (if needed)
+if [ -f $BASE/$VZLIB/vzdir/$CONTNAME/vzgot_config ] ; then
+  $BASE/$VZLIB/vzdir/$CONTNAME/vzgot_config
+  fi
+#----------------------------------------------------
+#Using cgroup if available and operational
+if [ -f $CGROUP/tasks ] ; then
+  ln -nsf $CGROUP/$VEPID $BASE/$VZLIB/vzdir/$CONTNAME/cgroup
+  if [ -d $BASE/$VZLIB/vzdir/$CONTNAME/cgroup.d ] ; then
+    for c in `ls $BASE/$VZLIB/vzdir/$CONTNAME/cgroup.d`
+       do      #setting container limits
+       sed 's/#.*//g' $BASE/$VZLIB/vzdir/$CONTNAME/cgroup.d/$c | \
+                grep -v '^[[:space:]]*$' > /tmp/$c.$$
+       exec 5< /tmp/$c.$$
+       while read -r -u 5 COMMAND
+        do
+        echo $COMMAND > $BASE/$VZLIB/vzdir/$CONTNAME/cgroup/$c
+        done
+       exec 5<&-
+       rm -fr /tmp/$c.$$
+       
+       done
+    fi
+  fi
+#----------------------------------------------------
+#to be sure to start fresh with veth pair
+ip link del To_$HSPID > /dev/null 2>&1
+#creation the veth pair.
+ip link add name To_$HSPID type veth peer name From_$HSPID
+ret=$?
+if [ $ret -ne 0 ]; then
+  echo "vzgot.init, unable to create veth To_$HSPID/From_$HSPID pair"
+  exit $ret
+  fi
+#activating vteh HOST interface
+ifconfig To_$HSPID up
+ret=$?
+if [ $ret -ne 0 ]; then
+  echo "vzgot.init, unable to activate veth HOST part"
+  exit $ret
+  fi
+#linking HOST vteh to bridge
+brctl addif $BRIDGENAME To_$HSPID
+ret=$?
+if [ $ret -ne 0 ]; then
+  echo "vzgot.init, unable to link veth HOST part to bridge"
+  exit $ret
+  fi
+#giving the "from" part of the pair to VZ
+ip link set From_$HSPID netns $VEPID
+if [ $ret -ne 0 ]; then
+  echo "vzgot.init, unable to give From_$HSPID veth pair to VZ process"
+  exit $ret
+  fi
+#----------------------------------------------------
+#lets prepare all routing
+$BASE/$VZLIB/shell/vzgot.net $CONTNAME assign $BASE
+#----------------------------------------------------
+exit 0
diff --git a/shell/vzgot.redoall b/shell/vzgot.redoall
new file mode 100755 (executable)
index 0000000..19ec091
--- /dev/null
@@ -0,0 +1,82 @@
+#! /bin/bash
+#vzgot.redoall
+#-------------------------------------------------------------------
+#procedure to re-install a set of predefined container.
+#its purpose is to generate 'clean' container over and over
+#$1 is the file with the container list
+#$2 base_dir is this application root directory
+#   used for devel only.
+#container list format is
+# container_name distrinution architecture
+#-------------------------------------------------------------------
+LIST=$1
+BASE=$2
+#===================================================================
+#lock procedure
+lockproc()
+
+{
+LOCKFILE=/var/lock/`basename $0`.$1.lck
+
+trap "rm -f $LOCKFILE ; exit 1" 1 2 3 15
+if (set -C; : > $LOCKFILE) 2> /dev/null ; then
+    echo $$ >> $LOCKFILE
+  else
+    echo "Another '`basename $0` $1' is running, existing at once!"
+    echo "remove $LOCKFILE, if it is not the case"
+    rm -f $LOCKFILE
+    exit 0;
+  fi
+}
+#-------------------------------------------------------------------
+#abort procedure
+abort ()
+
+{
+echo "$1"
+rm -f $LOCKFILE
+exit 1;
+}
+
+#===================================================================
+#main process
+#===================================================================
+
+#locking building process
+lockproc $1
+
+if ! [ -f $BASE/etc/vzgot/vzgot_config ] ; then
+  echo "Missing vzgot config file"
+  exit 1       #trouble trouble
+  fi
+. $BASE/etc/vzgot/vzgot_config
+
+#specific container configuration override (if needed)
+if [ -f $BASE/$VZLIB/vzdir/$CONTNAME/vzgot_config ] ; then
+  $BASE/$VZLIB/vzdir/$CONTNAME/vzgot_config
+  fi
+
+#-------------------------------------------------------------------
+#is the list file file existing
+if [ -f $BASE/etc/vzgot/$LIST ] ; then
+  cat $BASE/etc/vzgot/$LIST | sed 's/#.*//g' | grep -v '^[[:space:]]*$' > /tmp/redo.$$
+  exec 5< /tmp/redo.$$
+  while read -r -u 5 CONTNAME REMAINING 
+    do
+    if [ -f $BASE/$VZLIB/vzdir/$CONTNAME/first.pid ] ; then
+      vzgot shutdown $CONTNAME
+      while [ -f $BASE/$VZLIB/vzdir/$CONTNAME/first.pid ] 
+       do
+       sleep 1
+       done
+      fi
+    if [ -d $BASE/$VZLIB/vzdir/$CONTNAME ] ; then
+      vzgot destroy $CONTNAME 
+      fi
+    vzgot.mksrvz $CONTNAME
+    done
+  exec 5<&-
+  rm -fr /tmp/redo.$$
+  fi
+
+rm -f $LOCKFILE
diff --git a/shell/vzgot.start b/shell/vzgot.start
new file mode 100755 (executable)
index 0000000..241e30b
--- /dev/null
@@ -0,0 +1,43 @@
+#! /bin/sh
+#----------------------------------------------------
+#shell used to initiate container, this script
+#is called by the container BEFORE all the
+#pivot root action.
+#
+#----------------------------------------------------
+#Syntaxe
+#vzgot.start VE_name VE_pid [base_dir]
+#      VE_name is the container dir name
+#      VE_pid is the container main process ID as seen
+#      by the host
+#      base_dir is this application root directory
+#      used for devel only.
+#----------------------------------------------------
+CONTNAME=$1
+VEPID=$2
+BASE=$3
+#----------------------------------------------------
+if ! [ -f $BASE/etc/vzgot/vzgot_config ] ; then
+  echo "Missing vzgot config file"
+  exit 1       #trouble trouble
+  fi
+. $BASE/etc/vzgot/vzgot_config
+
+#specific container configuration override (if needed)
+if [ -f $BASE/$VZLIB/vzdir/$CONTNAME/vzgot_config ] ; then
+  $BASE/$VZLIB/vzdir/$CONTNAME/vzgot_config
+  fi
+#----------------------------------------------------
+#renaming VETH pair to a standard ETH name
+ip link set From_$2 name $ETHNAME
+ret=$?
+if [ $ret -ne 0 ]; then
+  echo "vzgot.container.start, unable to rename veth From_$2 to $ETHNAME"
+  exit $ret
+  fi
+#----------------------------------------------------
+#setting the fastboot flag
+rm -fr $BASE/$VZLIB/vzdir/$CONTNAME/rootfs/.autofsck
+touch $BASE/$VZLIB/vzdir/$CONTNAME/rootfs/fastboot
+#----------------------------------------------------
+exit 0
diff --git a/support/Changes b/support/Changes
new file mode 100644 (file)
index 0000000..fd975c1
--- /dev/null
@@ -0,0 +1,2290 @@
+#Log des mises a jour RCS
+#---------------------------------------------------------------------------------
+#Ce fichier est pour tracer les changements fait dans le developpement
+#de MentorX
+$Log: Changes,v $
+Revision 0.84.0.0  2010/03/06 16:39:08  jmp
+Ratrapage numero de Version
+
+Revision 0.84  2010/03/06 16:39:08  jmp
+upgrade version
+
+Revision 0.83.0.1  2010/03/06 16:39:08  jmp
+Mise en place su GIT
+
+Revision 0.83.0.0  2010/03/06 16:39:08  jmp
+Ratrapage numero de Version
+
+Revision 0.83  2010/03/06 16:39:08  jmp
+Creation
+#=================================================================================
+
+Revision 0.84.0.0  2010/03/06 16:38:31  jmp
+Ratrapage numero de Version
+
+Revision 0.84  2010/03/06 16:38:31  jmp
+upgrade version
+
+Revision 0.83.0.1  2010/03/06 16:38:31  jmp
+Mise en place su GIT
+
+Revision 0.83.0.0  2010/03/06 16:38:31  jmp
+Ratrapage numero de Version
+
+Revision 0.83  2010/03/06 16:38:31  jmp
+Creation
+#=================================================================================
+
+Revision 0.84.0.0  2010/03/06 16:36:51  jmp
+Ratrapage numero de Version
+
+Revision 0.84  2010/03/06 16:36:51  jmp
+upgrade version
+
+Revision 0.83.0.2  2010/03/06 16:36:51  jmp
+Mise en place su GIT
+
+Revision 0.83.0.1  2010/03/06 16:36:51  jmp
+Ratrapage numero de Version
+
+Revision 0.83  2010/03/06 16:36:51  jmp
+Creation
+#=================================================================================
+
+Revision 0.84.0.1  2010/03/06 16:36:32  jmp
+Mise en place su GIT
+
+Revision 0.84.0.0  2010/03/06 16:36:32  jmp
+Ratrapage numero de Version
+
+Revision 0.84  2010/03/06 16:36:32  jmp
+Creation
+#=================================================================================
+
+Revision 0.84.0.0  2010/03/06 16:36:03  jmp
+Ratrapage numero de Version
+
+Revision 0.84  2010/03/06 16:36:03  jmp
+upgrade version
+
+Revision 0.83.0.8  2010/03/06 16:36:03  jmp
+Mise en place su GIT
+
+Revision 0.83.0.7  2010/03/06 16:36:03  jmp
+Ratrapage numero de Version
+
+Revision 0.83  2010/03/06 16:36:03  jmp
+Creation
+#=================================================================================
+
+Revision 0.83.0.7  2010/02/18 14:28:22  safe
+Suppression de la definition de CLONE_SYSLOG
+
+#=================================================================================
+
+Revision 0.83.0.6  2010/02/15 21:03:45  safe
+itest de fonctionnement de syslog sans CLONE_SYSLOG
+
+#=================================================================================
+
+Revision 0.83.0.5  2010/02/15 21:02:28  safe
+itest de fonctionnement de syslog sans CLONE_SYSLOG
+
+#=================================================================================
+
+Revision 0.83.0.4  2010/02/15 17:13:54  safe
+creation d'un clone avec CLONE_SYSLOG
+
+#=================================================================================
+
+Revision 0.83.0.3  2010/02/10 02:50:09  safe
+creation d'un clone avec CLONE_NEWUSER
+
+#=================================================================================
+
+Revision 0.83.0.2  2010/02/01 18:44:35  safe
+Modification de la copie des clefs dans fboot.{redhat,debian}
+prise II
+
+#=================================================================================
+
+Revision 0.83.0.1  2010/02/01 18:32:54  safe
+Modification de la copie des clefs dans fboot.{redhat,debian}
+
+#=================================================================================
+
+Revision 0.83.0.0  2010/01/12 15:36:45  safe
+Ratrapage numero de Version
+
+Revision 0.83  2010/01/12 15:36:45  safe
+upgrade version
+
+Revision 0.82.0.27  2010/01/12 15:36:45  safe
+release
+
+#=================================================================================
+
+Revision 0.82.0.26  2010/01/12 15:25:05  safe
+Correction dans champ i386 manquant dans vxgot_list (rhel4)
+
+#=================================================================================
+
+Revision 0.82.0.25  2010/01/12 13:54:15  safe
+Correction dans champ i386 manquant dans vxgot_list
+
+#=================================================================================
+
+Revision 0.82.0.24  2010/01/12 05:24:32  safe
+Correction dans vzgot.mksrvz, variable CPUARCH
+
+#=================================================================================
+
+Revision 0.82.0.23  2010/01/12 05:03:13  safe
+ajustement useradd dans fboot.redhat prise IV
+
+#=================================================================================
+
+Revision 0.82.0.22  2010/01/12 05:00:21  safe
+ajustement useradd dans fboot.redhat prise III
+
+#=================================================================================
+
+Revision 0.82.0.21  2010/01/12 04:57:53  safe
+ajustement useradd dans fboot.redhat prise II
+
+#=================================================================================
+
+Revision 0.82.0.20  2010/01/12 04:53:56  safe
+ajustement useradd dans fboot.redhat
+
+#=================================================================================
+
+Revision 0.82.0.19  2010/01/12 04:42:44  safe
+modification fichier groups
+
+#=================================================================================
+
+Revision 0.82.0.18  2010/01/12 04:22:46  safe
+extension du fichier vzgost_list
+modification du script vzgot.redoall
+
+#=================================================================================
+
+Revision 0.82.0.17  2010/01/12 04:03:38  safe
+inclusion du repertoire /var/lib/vzgot/etc/ssh
+
+#=================================================================================
+
+Revision 0.82.0.16  2010/01/11 21:06:32  safe
+Test d'installation a partir de zero
+gestion de udev pour les versions de type redhat prise III
+
+#=================================================================================
+
+Revision 0.82.0.15  2010/01/11 21:04:25  safe
+Test d'installation a partir de zero
+gestion de udev pour les versions de type redhat prise II
+
+#=================================================================================
+
+Revision 0.82.0.14  2010/01/11 21:01:58  safe
+Test d'installation a partir de zero
+gestion de udev pour les versions de type redhat
+
+#=================================================================================
+
+Revision 0.82.0.13  2010/01/11 20:49:55  safe
+Test d'installation a partir de zero
+ajustement shell script vzgot.create (retour d'erreur) prise IX
+
+#=================================================================================
+
+Revision 0.82.0.12  2010/01/11 20:47:00  safe
+Test d'installation a partir de zero
+ajustement shell script vzgot.create (retour d'erreur) prise VIII
+
+#=================================================================================
+
+Revision 0.82.0.11  2010/01/11 20:42:46  safe
+Test d'installation a partir de zero
+ajustement shell script vzgot.create (retour d'erreur) prise VII
+
+#=================================================================================
+
+Revision 0.82.0.10  2010/01/11 20:39:50  safe
+Test d'installation a partir de zero
+ajustement shell script vzgot.create (retour d'erreur) prise VI
+
+#=================================================================================
+
+Revision 0.82.0.9  2010/01/11 20:28:49  safe
+Test d'installation a partir de zero
+ajustement shell script vzgot.create (retour d'erreur) prise V
+
+#=================================================================================
+
+Revision 0.82.0.8  2010/01/11 20:26:32  safe
+Test d'installation a partir de zero
+ajustement shell script vzgot.create (retour d'erreur) prise IV
+
+#=================================================================================
+
+Revision 0.82.0.7  2010/01/11 20:19:25  safe
+Test d'installation a partir de zero
+ajustement shell script vzgot.create (retour d'erreur) prose III
+
+#=================================================================================
+
+Revision 0.82.0.6  2010/01/11 20:15:35  safe
+Test d'installation a partir de zero
+ajustement shell script vzgot.create (retour d'erreur) prose II
+
+#=================================================================================
+
+Revision 0.82.0.5  2010/01/11 20:13:47  safe
+Test d'installation a partir de zero
+ajustement shell script vzgot.create (retour d'erreur)
+
+#=================================================================================
+
+Revision 0.82.0.4  2010/01/11 20:08:15  safe
+Test d'installation a partir de zero
+ajustement shell script vzgot.mksrvz
+
+#=================================================================================
+
+Revision 0.82.0.3  2010/01/11 20:04:49  safe
+Test d'installation a partir de zero
+configuration de etc/shadow et etc/resolv.conf
+a partir des informations du host.
+
+#=================================================================================
+
+Revision 0.82.0.2  2010/01/11 16:49:38  safe
+Test d'installation a partir de zero
+changement de vzgot.mxsrvz
+
+#=================================================================================
+
+Revision 0.82.0.1  2010/01/11 16:05:57  safe
+Test d'installation a partir de zero
+introduction de vzgot_list
+
+#=================================================================================
+
+Revision 0.82.0.0  2010/01/10 03:28:28  safe
+Ratrapage numero de Version
+
+Revision 0.82  2010/01/10 03:28:28  safe
+upgrade version
+
+Revision 0.81.0.12  2010/01/10 03:28:28  safe
+Test d'installation a partir de zero
+
+#=================================================================================
+
+Revision 0.81.0.11  2010/01/09 15:38:30  safe
+utilisation des partitions LVM
+ajustement des shell destroy et create prise XXI
+
+#=================================================================================
+
+Revision 0.81.0.10  2010/01/09 15:34:44  safe
+utilisation des partitions LVM
+ajustement des shell destroy et create prise XX
+
+#=================================================================================
+
+Revision 0.81.0.9  2010/01/09 15:31:42  safe
+utilisation des partitions LVM
+ajustement des shell destroy et create prise XIX
+
+#=================================================================================
+
+Revision 0.81.0.8  2010/01/09 14:57:24  safe
+utilisation des partitions LVM
+ajustement des shell destroy et create prise VIII
+
+#=================================================================================
+
+Revision 0.81.0.7  2010/01/09 14:49:02  safe
+utilisation des partitions LVM
+ajustement des shell destroy et create prise VII
+
+#=================================================================================
+
+Revision 0.81.0.6  2010/01/09 03:47:32  safe
+utilisation des partitions LVM
+ajustement des shell destroy et create prise VI
+
+#=================================================================================
+
+Revision 0.81.0.5  2010/01/09 03:46:11  safe
+utilisation des partitions LVM
+ajustement des shell destroy et create prise V
+
+#=================================================================================
+
+Revision 0.81.0.4  2010/01/09 03:41:05  safe
+utilisation des partitions LVM
+ajustement des shell destroy et create prise IV
+
+#=================================================================================
+
+Revision 0.81.0.3  2010/01/09 03:30:32  safe
+utilisation des partitions LVM
+ajustement des shell destroy et create prise III
+
+#=================================================================================
+
+Revision 0.81.0.2  2010/01/09 03:25:29  safe
+utilisation des partitions LVM
+ajustement des shell destroy et create prise II
+
+#=================================================================================
+
+Revision 0.81.0.1  2010/01/09 03:20:34  safe
+utilisation des partitions LVM
+ajustement des shell destroy et create
+
+#=================================================================================
+
+Revision 0.81.0.0  2010/01/09 03:20:15  safe
+Ratrapage numero de Version
+
+Revision 0.81  2010/01/09 03:20:15  safe
+upgrade version
+
+Revision 0.79.0.1  2010/01/09 03:20:15  safe
+utilisation des partitions LVM
+ajustement des shell destroy et create
+
+#=================================================================================
+
+Revision 0.79.0.0  2010/01/09 03:16:25  safe
+Ratrapage numero de Version
+
+Revision 0.79  2010/01/09 03:16:25  safe
+utilisation des partitions LVM
+ajustement des shell destroy et create
+
+#=================================================================================
+
+Revision 0.78  2010/01/09 03:16:06  safe
+utilisation des partitions LVM
+ajustement des shell destroy et create
+
+#=================================================================================
+
+Revision 0.77.0.1  2010/01/09 03:15:48  safe
+utilisation des partitions LVM
+ajustement des shell destroy et create
+
+#=================================================================================
+
+Revision 0.77.0.0  2010/01/08 18:37:09  safe
+Ratrapage numero de Version
+
+Revision 0.77  2010/01/08 18:37:09  safe
+upgrade version
+
+Revision 0.75.0.16  2010/01/08 18:37:09  safe
+utilisation des partitions LVM
+
+#=================================================================================
+
+Revision 0.75.0.15  2010/01/08 04:44:44  safe
+Probleme avec Debian ubu8.4,  Prise V
+problem useradd
+
+#=================================================================================
+
+Revision 0.75.0.14  2010/01/08 03:44:53  safe
+Probleme avec Debian ubu8.4,  Prise IV
+changement de la routine de useradd pour ne pas cree
+le home directory directement
+
+#=================================================================================
+
+Revision 0.75.0.13  2010/01/08 03:39:10  safe
+Probleme avec Debian ubu8.4,  Prise III
+changement de la routine de useradd pour ne pas cree
+le home directory directement
+
+#=================================================================================
+
+Revision 0.75.0.12  2010/01/08 03:35:54  safe
+Probleme avec Debian ubu8.4,  Prise II
+changement de la routine de useradd pour ne pas cree
+le home directory directement
+
+#=================================================================================
+
+Revision 0.75.0.11  2010/01/08 03:26:36  safe
+Probleme avec Debian ubu8.4,
+changement de la routine de useradd pour ne pas cree
+le home directory directement
+
+#=================================================================================
+
+Revision 0.75.0.10  2010/01/07 20:31:44  safe
+insertion de ubu9.4 comme apartenant a Debian
+creation du repertoir /var/run/networking
+modification devices.allow pour permerttre les devices PTS Prise II
+
+#=================================================================================
+
+Revision 0.75.0.9  2010/01/07 20:25:30  safe
+insertion de ubu9.4 comme apartenant a Debian
+creation du repertoir /var/run/networking
+modification devices.allow pour permerttre les devices PTS
+
+#=================================================================================
+
+Revision 0.75.0.8  2010/01/07 20:05:55  safe
+insertion de ubu9.4 comme apartenant a Debian
+
+#=================================================================================
+
+Revision 0.75.0.7  2010/01/07 18:56:34  safe
+cgroup operationel, mise en place de iptables
+
+#=================================================================================
+
+Revision 0.75.0.6  2010/01/07 05:15:18  safe
+Creation du repertoir cgroup.d et gestion Prise IV
+
+#=================================================================================
+
+Revision 0.75.0.5  2010/01/07 04:58:32  safe
+Creation du repertoir cgroup.d et gestion Prise III
+
+#=================================================================================
+
+Revision 0.75.0.4  2010/01/06 21:05:28  safe
+Creation du repertoir cgroup.d et gestion Prise II
+
+#=================================================================================
+
+Revision 0.75.0.3  2010/01/06 20:43:25  safe
+Creation du repertoir cgroup.d et gestion
+
+#=================================================================================
+
+Revision 0.75.0.2  2010/01/06 03:11:33  safe
+Creation du repertoire vztemplate
+
+#=================================================================================
+
+Revision 0.75.0.1  2010/01/06 02:52:01  safe
+Mise en place de cgroup Prise II
+
+#=================================================================================
+
+Revision 0.75.0.0  2010/01/06 02:38:45  safe
+Ratrapage numero de Version
+
+Revision 0.75  2010/01/06 02:38:45  safe
+upgrade version
+
+Revision 0.71.0.19  2010/01/06 02:38:45  safe
+Mise en place de cgroup
+
+#=================================================================================
+
+Revision 0.71.0.18  2010/01/05 05:25:39  safe
+Container de type ubuntu Prise XXI (ajustement shell debian)
+
+#=================================================================================
+
+Revision 0.71.0.17  2010/01/05 05:19:55  safe
+Container de type ubuntu Prise XX (ajustement shell debian)
+
+#=================================================================================
+
+Revision 0.71.0.16  2010/01/05 05:02:49  safe
+Container de type ubuntu Prise XIX (ajustement shell debian)
+
+#=================================================================================
+
+Revision 0.71.0.15  2010/01/05 04:32:35  safe
+Container de type ubuntu Prise VIII (ajustement shell debian)
+
+#=================================================================================
+
+Revision 0.71.0.14  2010/01/05 04:27:22  safe
+Container de type ubuntu Prise VII (removing udev auto start)
+
+Mise en route Debian (Ubuntu)
+- Template lxc-ubuntu-8.04-i386.tar.gz  (stephane graber lxc)
+  le rootfs est mal positionner
+- le fichier network est dans /etc/network/interface (a construire)
+- removing udev family auto start
+
+#=================================================================================
+
+Revision 0.71.0.13  2010/01/05 01:18:58  safe
+Container de type ubuntu Prise VI (correction setting reseau)
+
+#=================================================================================
+
+Revision 0.71.0.12  2010/01/04 23:27:58  safe
+Container de type ubuntu Prise V (correction setting reseau)
+
+#=================================================================================
+
+Revision 0.71.0.11  2010/01/04 23:24:54  safe
+Container de type ubuntu Prise IV (correction setting reseau)
+
+#=================================================================================
+
+Revision 0.71.0.10  2010/01/04 20:24:28  safe
+Container de type ubuntu Prise III (corrction setting reseau)
+
+#=================================================================================
+
+Revision 0.71.0.9  2010/01/04 20:10:34  safe
+Container de type unbutu Prise II (c'est un debian!)
+
+#=================================================================================
+
+Revision 0.71.0.8  2010/01/04 19:46:55  safe
+Container de type unbutu Prise I
+
+#=================================================================================
+
+Revision 0.71.0.7  2010/01/04 18:53:15  safe
+Ajustement spec file chkconfig
+
+#=================================================================================
+
+Revision 0.71.0.6  2010/01/04 16:11:34  safe
+Inclusion de Change et affichage des resultats
+de pipe en mode no debug
+
+#=================================================================================
+
+Revision 0.71.0.5  2010/01/04 16:07:38  safe
+Inclusion de Change et affichage des resultats
+de pipe en mode no debug
+
+#=================================================================================
+
+Revision 0.71.0.4  2010/01/04 15:45:34  safe
+Inclusion de Change et affichage des resultats
+de pipe en mode no debug
+
+#=================================================================================
+
+Revision 0.71.0.3  2010/01/04 02:13:12  safe
+README Operationnel
+
+#=================================================================================
+
+Revision 0.71.0.2  2010/01/04 01:23:05  safe
+ajout du README Prise II
+
+#=================================================================================
+
+Revision 0.71.0.1  2010/01/04 01:18:11  safe
+ajout du README
+
+#=================================================================================
+
+Revision 0.71.0.0  2010/01/03 23:29:18  safe
+Ratrapage numero de Version
+
+Revision 0.71  2010/01/03 23:29:18  safe
+upgrade version
+
+Revision 0.70.0.85  2010/01/03 23:29:18  safe
+service vzgot start est operationnel
+
+#=================================================================================
+
+Revision 0.70.0.84  2010/01/03 22:24:19  safe
+mise en place d'une console prise XXVII
+
+#=================================================================================
+
+Revision 0.70.0.83  2010/01/03 22:13:15  safe
+mise en place d'une console prise XXVI
+
+#=================================================================================
+
+Revision 0.70.0.82  2010/01/03 22:07:54  safe
+mise en place d'une console prise XXV
+
+#=================================================================================
+
+Revision 0.70.0.81  2010/01/03 22:04:37  safe
+mise en place d'une console prise XXIV
+
+#=================================================================================
+
+Revision 0.70.0.80  2010/01/03 21:58:41  safe
+mise en place d'une console prise XXIII
+
+#=================================================================================
+
+Revision 0.70.0.79  2010/01/03 21:46:32  safe
+mise en place d'une console prise XXII
+
+#=================================================================================
+
+Revision 0.70.0.78  2010/01/03 21:41:28  safe
+mise en place d'une console prise XXI
+
+#=================================================================================
+
+Revision 0.70.0.77  2010/01/03 21:26:54  safe
+mise en place d'une console prise XX
+
+#=================================================================================
+
+Revision 0.70.0.76  2010/01/03 21:24:07  safe
+mise en place d'une console prise XIX
+
+#=================================================================================
+
+Revision 0.70.0.75  2010/01/03 21:22:55  safe
+mise en place d'une console prise XVIII
+
+#=================================================================================
+
+Revision 0.70.0.74  2010/01/03 21:20:18  safe
+mise en place d'une console prise XVII
+
+#=================================================================================
+
+Revision 0.70.0.73  2010/01/03 21:16:08  safe
+mise en place d'une console prise XVI
+
+#=================================================================================
+
+Revision 0.70.0.72  2010/01/03 21:14:20  safe
+mise en place d'une console prise XV
+
+#=================================================================================
+
+Revision 0.70.0.71  2010/01/03 21:11:26  safe
+mise en place d'une console prise XIV
+
+#=================================================================================
+
+Revision 0.70.0.70  2010/01/03 19:48:04  safe
+mise en place d'une console prise XIII
+
+#=================================================================================
+
+Revision 0.70.0.69  2010/01/03 19:45:36  safe
+mise en place d'une console prise XII
+
+#=================================================================================
+
+Revision 0.70.0.68  2010/01/03 19:30:24  safe
+mise en place d'une console prise XI
+
+#=================================================================================
+
+Revision 0.70.0.67  2010/01/03 19:27:53  safe
+mise en place d'une console prise X
+
+#=================================================================================
+
+Revision 0.70.0.66  2010/01/03 18:18:31  safe
+mise en place d'une console prise IX
+
+#=================================================================================
+
+Revision 0.70.0.65  2010/01/03 18:10:15  safe
+mise en place d'une console prise VIII
+
+#=================================================================================
+
+Revision 0.70.0.64  2010/01/03 18:07:47  safe
+mise en place d'une console prise VII
+
+#=================================================================================
+
+Revision 0.70.0.63  2010/01/03 18:06:06  safe
+mise en place d'une console prise VI
+
+#=================================================================================
+
+Revision 0.70.0.62  2010/01/03 18:04:44  safe
+mise en place d'une console prise V
+
+#=================================================================================
+
+Revision 0.70.0.61  2010/01/03 18:01:26  safe
+mise en place d'une console prise IV
+
+#=================================================================================
+
+Revision 0.70.0.60  2010/01/03 17:59:22  safe
+mise en place d'une console prise III
+
+#=================================================================================
+
+Revision 0.70.0.59  2010/01/03 17:57:44  safe
+mise en place d'une console prise II
+
+#=================================================================================
+
+Revision 0.70.0.58  2010/01/03 17:53:48  safe
+mise en place d'une console prise I
+
+#=================================================================================
+
+Revision 0.70.0.57  2010/01/03 06:29:35  safe
+traitement problem de message au demarrage boot systeme Prise IX
+
+#=================================================================================
+
+Revision 0.70.0.56  2010/01/03 06:27:02  safe
+traitement problem de message au demarrage boot systeme Prise VIII
+
+#=================================================================================
+
+Revision 0.70.0.55  2010/01/03 06:22:27  safe
+traitement problem de message au demarrage boot systeme Prise VII
+
+#=================================================================================
+
+Revision 0.70.0.54  2010/01/03 06:20:50  safe
+traitement problem de message au demarrage boot systeme Prise VI
+
+#=================================================================================
+
+Revision 0.70.0.53  2010/01/03 06:17:25  safe
+traitement problem de message au demarrage boot systeme Prise V
+
+#=================================================================================
+
+Revision 0.70.0.52  2010/01/03 06:13:23  safe
+traitement problem de message au demarrage boot systeme Prise IV
+
+#=================================================================================
+
+Revision 0.70.0.51  2010/01/03 06:11:29  safe
+traitement problem de message au demarrage boot systeme Prise III
+
+#=================================================================================
+
+Revision 0.70.0.50  2010/01/03 06:06:49  safe
+traitement problem de message au demarrage boot systeme Prise II
+
+#=================================================================================
+
+Revision 0.70.0.49  2010/01/03 05:53:08  safe
+traitement problem de message au demarrage boot systeme Prise I
+
+#=================================================================================
+
+Revision 0.70.0.48  2010/01/03 04:50:29  safe
+traitement problem de message au demarrage boot systeme
+
+#=================================================================================
+
+Revision 0.70.0.47  2010/01/03 01:30:05  safe
+creation du fichier /etc/init.d/vzgot prise XXVI
+
+#=================================================================================
+
+Revision 0.70.0.46  2010/01/03 01:28:52  safe
+creation du fichier /etc/init.d/vzgot prise XXV
+
+#=================================================================================
+
+Revision 0.70.0.45  2010/01/03 01:25:37  safe
+creation du fichier /etc/init.d/vzgot prise XXIV
+
+#=================================================================================
+
+Revision 0.70.0.44  2010/01/03 01:23:25  safe
+creation du fichier /etc/init.d/vzgot prise XXIII
+
+#=================================================================================
+
+Revision 0.70.0.43  2010/01/03 01:17:40  safe
+creation du fichier /etc/init.d/vzgot prise XXII
+
+#=================================================================================
+
+Revision 0.70.0.42  2010/01/02 21:18:57  safe
+creation du fichier /etc/init.d/vzgot prise XXI
+
+#=================================================================================
+
+Revision 0.70.0.41  2010/01/02 21:16:38  safe
+creation du fichier /etc/init.d/vzgot prise XX
+
+#=================================================================================
+
+Revision 0.70.0.40  2010/01/02 20:57:02  safe
+creation du fichier /etc/init.d/vzgot prise XIX
+
+#=================================================================================
+
+Revision 0.70.0.39  2010/01/02 20:28:55  safe
+creation du fichier /etc/init.d/vzgot prise XVIII
+
+#=================================================================================
+
+Revision 0.70.0.38  2010/01/02 20:28:18  safe
+creation du fichier /etc/init.d/vzgot prise XVII
+
+#=================================================================================
+
+Revision 0.70.0.37  2010/01/02 20:26:56  safe
+creation du fichier /etc/init.d/vzgot prise XVI
+
+#=================================================================================
+
+Revision 0.70.0.36  2010/01/02 20:23:55  safe
+creation du fichier /etc/init.d/vzgot prise XV
+
+#=================================================================================
+
+Revision 0.70.0.35  2010/01/02 20:21:19  safe
+creation du fichier /etc/init.d/vzgot prise XIV
+
+#=================================================================================
+
+Revision 0.70.0.34  2010/01/02 20:20:09  safe
+creation du fichier /etc/init.d/vzgot prise XIII
+
+#=================================================================================
+
+Revision 0.70.0.33  2010/01/02 20:16:04  safe
+creation du fichier /etc/init.d/vzgot prise XII
+
+#=================================================================================
+
+Revision 0.70.0.32  2010/01/02 20:11:37  safe
+creation du fichier /etc/init.d/vzgot prise XI
+
+#=================================================================================
+
+Revision 0.70.0.31  2010/01/02 20:10:25  safe
+creation du fichier /etc/init.d/vzgot prise X
+
+#=================================================================================
+
+Revision 0.70.0.30  2010/01/02 20:09:17  safe
+creation du fichier /etc/init.d/vzgot prise IX
+
+#=================================================================================
+
+Revision 0.70.0.29  2010/01/02 20:03:58  safe
+creation du fichier /etc/init.d/vzgot prise VIII
+
+#=================================================================================
+
+Revision 0.70.0.28  2010/01/02 20:00:40  safe
+creation du fichier /etc/init.d/vzgot prise VII
+
+#=================================================================================
+
+Revision 0.70.0.27  2010/01/02 19:59:14  safe
+creation du fichier /etc/init.d/vzgot prise VI
+
+#=================================================================================
+
+Revision 0.70.0.26  2010/01/02 19:58:16  safe
+creation du fichier /etc/init.d/vzgot prise V
+
+#=================================================================================
+
+Revision 0.70.0.25  2010/01/02 19:49:31  safe
+creation du fichier /etc/init.d/vzgot prise IV
+
+#=================================================================================
+
+Revision 0.70.0.24  2010/01/02 19:48:51  safe
+creation du fichier /etc/init.d/vzgot prise III
+
+#=================================================================================
+
+Revision 0.70.0.23  2010/01/02 19:48:01  safe
+creation du fichier /etc/init.d/vzgot prise II
+
+#=================================================================================
+
+Revision 0.70.0.22  2010/01/02 19:38:33  safe
+creation du fichier /etc/init.d/vzgot
+
+#=================================================================================
+
+Revision 0.70.0.21  2010/01/02 14:58:18  safe
+adjustemen shell prise II
+
+#=================================================================================
+
+Revision 0.70.0.20  2010/01/02 14:36:54  safe
+creation du fichier VZLIB/vzsir/CONTNAME/status
+adjustemen shell
+
+#=================================================================================
+
+Revision 0.70.0.19  2010/01/01 22:56:30  safe
+correction format vzredoall (ajout d'un delais)
+
+#=================================================================================
+
+Revision 0.70.0.18  2010/01/01 22:55:26  safe
+correction format vzredoall (ajout d'un delais)
+
+#=================================================================================
+
+Revision 0.70.0.17  2010/01/01 22:34:02  safe
+correction format vzredoall (fc12 a la place de fc13!)
+
+#=================================================================================
+
+Revision 0.70.0.16  2010/01/01 20:44:31  safe
+correction format vzredoall
+
+#=================================================================================
+
+Revision 0.70.0.15  2010/01/01 20:40:43  safe
+mise en place du shell vzgot.redoall prise III
+
+#=================================================================================
+
+Revision 0.70.0.14  2010/01/01 20:14:53  safe
+mise en place du shell vzgot.redoall prise II
+
+#=================================================================================
+
+Revision 0.70.0.13  2010/01/01 18:56:42  safe
+mise en place du shell vzgot.redoall
+
+#=================================================================================
+
+Revision 0.70.0.12  2010/01/01 18:38:13  safe
+prise en compte et affichage des information distribution et architecture
+
+#=================================================================================
+
+Revision 0.70.0.11  2010/01/01 16:54:15  safe
+addition de etc/snmp/snmpd.conf prise III
+
+#=================================================================================
+
+Revision 0.70.0.10  2010/01/01 16:50:52  safe
+addition de etc/snmp/snmpd.conf prise II
+
+#=================================================================================
+
+Revision 0.70.0.9  2010/01/01 16:47:19  safe
+addition de etc/snmp/snmpd.conf
+
+#=================================================================================
+
+Revision 0.70.0.8  2010/01/01 15:37:39  safe
+addition de etc/sudoers
+
+#=================================================================================
+
+Revision 0.70.0.7  2010/01/01 15:27:09  safe
+addition de etc/sudoers
+
+#=================================================================================
+
+Revision 0.70.0.6  2010/01/01 15:23:03  safe
+correction vzgot.fboot.redhat pour addition de users
+
+#=================================================================================
+
+Revision 0.70.0.5  2010/01/01 15:15:55  safe
+correction vzgot.fboot.redhat
+
+#=================================================================================
+
+Revision 0.70.0.4  2010/01/01 15:10:59  safe
+meilleur set de protection des fichiers
+
+#=================================================================================
+
+Revision 0.70.0.3  2010/01/01 15:08:06  safe
+fichier de configuration resolv.conf
+
+#=================================================================================
+
+Revision 0.70.0.2  2010/01/01 15:05:33  safe
+fichier de configuration shadow
+
+#=================================================================================
+
+Revision 0.70.0.1  2010/01/01 13:47:10  safe
+meilleur fichier de configuration
+
+#=================================================================================
+
+Revision 0.70.0.0  2010/01/01 12:58:32  safe
+Ratrapage numero de Version
+
+Revision 0.70  2010/01/01 12:58:32  safe
+upgrade version
+
+Revision 0.6.0.20  2010/01/01 12:58:32  safe
+33 distribution operationnel dans vzgot
+
+#=================================================================================
+
+Revision 0.6.0.19  2009/12/31 21:29:48  safe
+ajustement de l'addition des RPM extra dans un container prise V
+
+#=================================================================================
+
+Revision 0.6.0.18  2009/12/31 21:27:38  safe
+ajustement de l'addition des RPM extra dans un container prise IV
+
+#=================================================================================
+
+Revision 0.6.0.17  2009/12/31 21:18:34  safe
+ajustement de l'addition des RPM extra dans un container prise III
+
+#=================================================================================
+
+Revision 0.6.0.16  2009/12/31 21:11:01  safe
+ajustement de l'addition des RPM extra dans un container prise II
+
+#=================================================================================
+
+Revision 0.6.0.15  2009/12/31 21:00:43  safe
+ajustement de l'addition des RPM extra dans un container
+
+#=================================================================================
+
+Revision 0.6.0.14  2009/12/31 20:23:55  safe
+inclusion rpm iputils dans el4.7-ix86-64
+
+#=================================================================================
+
+Revision 0.6.0.13  2009/12/31 17:45:07  safe
+correction personlity pour x86_64
+
+#=================================================================================
+
+Revision 0.6.0.12  2009/12/31 15:10:36  safe
+correction vzgot.fboot.redhat, pour l'extraction des numero IP des alias
+
+#=================================================================================
+
+Revision 0.6.0.11  2009/12/31 03:12:54  safe
+container el4.7 operationel
+
+#=================================================================================
+
+Revision 0.6.0.10  2009/12/31 00:43:44  safe
+on prend en compte l'architecture Prise VII
+definition de la variable LD_ASSUME_KERNEL
+
+#=================================================================================
+
+Revision 0.6.0.9  2009/12/31 00:41:23  safe
+on prend en compte l'architecture Prise VI
+definition de la variable LD_ASSUME_KERNEL
+
+#=================================================================================
+
+Revision 0.6.0.8  2009/12/31 00:22:20  safe
+on prend en compte l'architecture Prise V
+
+#=================================================================================
+
+Revision 0.6.0.7  2009/12/30 19:29:48  safe
+on prend en compte l'architecture Prise IV
+
+#=================================================================================
+
+Revision 0.6.0.6  2009/12/30 19:27:27  safe
+on prend en compte l'architecture Prise III
+
+#=================================================================================
+
+Revision 0.6.0.5  2009/12/30 19:27:08  safe
+on prend en compte l'architecture
+
+#=================================================================================
+
+Revision 0.6.0.4  2009/12/30 19:24:59  safe
+on prend en compte l'architecture
+
+#=================================================================================
+
+Revision 0.6.0.3  2009/12/30 18:45:46  safe
+Mise en place du traietemnt de l'architecture
+
+#=================================================================================
+
+Revision 0.6.0.2  2009/12/30 15:20:47  safe
+verification problem RPM de rh9
+
+#=================================================================================
+
+Revision 0.6.0.1  2009/12/30 15:18:18  safe
+RPM pour rh9
+
+#=================================================================================
+
+Revision 0.6.0.0  2009/12/30 15:04:54  safe
+Ratrapage numero de Version
+
+Revision 0.6  2009/12/30 15:04:54  safe
+upgrade version
+
+Revision 0.5.0.112  2009/12/30 15:04:54  safe
+Passage a la versions 0.6
+
+#=================================================================================
+
+Revision 0.5.0.111  2009/12/30 15:04:28  safe
+inclusion de procps pour rh8.0
+
+#=================================================================================
+
+Revision 0.5.0.110  2009/12/29 21:00:51  safe
+verifications installation Prise II
+
+#=================================================================================
+
+Revision 0.5.0.109  2009/12/29 20:57:52  safe
+verifications installation
+
+#=================================================================================
+
+Revision 0.5.0.108  2009/12/29 20:55:25  safe
+debugging de vzgot.fboot.redhat prise XII
+
+#=================================================================================
+
+Revision 0.5.0.107  2009/12/29 20:49:15  safe
+debugging de vzgot.fboot.redhat prise XI
+
+#=================================================================================
+
+Revision 0.5.0.106  2009/12/29 20:42:34  safe
+debugging de vzgot.fboot.redhat prise X
+
+#=================================================================================
+
+Revision 0.5.0.105  2009/12/29 20:40:57  safe
+debugging de vzgot.fboot.redhat prise IX
+
+#=================================================================================
+
+Revision 0.5.0.104  2009/12/29 20:37:12  safe
+debugging de vzgot.fboot.redhat prise VIII
+
+#=================================================================================
+
+Revision 0.5.0.103  2009/12/29 20:31:46  safe
+debugging de vzgot.fboot.redhat prise VII
+
+#=================================================================================
+
+Revision 0.5.0.102  2009/12/29 20:27:57  safe
+debugging de vzgot.fboot.redhat prise VI
+
+#=================================================================================
+
+Revision 0.5.0.101  2009/12/29 20:16:14  safe
+debugging de vzgot.fboot.redhat prise V
+
+#=================================================================================
+
+Revision 0.5.0.100  2009/12/29 20:12:58  safe
+debugging de vzgot.fboot.redhat prise IV
+
+#=================================================================================
+
+Revision 0.5.0.99  2009/12/29 19:43:25  safe
+debugging de vzgot.fboot.redhat prise III
+
+#=================================================================================
+
+Revision 0.5.0.98  2009/12/29 19:40:03  safe
+debugging de vzgot.fboot.redhat prise II
+
+#=================================================================================
+
+Revision 0.5.0.97  2009/12/29 19:37:13  safe
+debugging de vzgot.fboot.redhat
+
+#=================================================================================
+
+Revision 0.5.0.96  2009/12/29 19:25:53  safe
+mise en place du repertoir etc
+
+#=================================================================================
+
+Revision 0.5.0.95  2009/12/28 21:33:55  safe
+Ajustement du nom des interfaces veth  prise VIII
+utilisation du numero de pid
+
+#=================================================================================
+
+Revision 0.5.0.94  2009/12/28 21:24:40  safe
+Ajustement du nom des interfaces veth  prise VII
+utilisation du numero de pid
+
+#=================================================================================
+
+Revision 0.5.0.93  2009/12/28 21:06:38  safe
+Ajustement du nom des interfaces veth  prise VI
+utilisation du numero de pid
+
+#=================================================================================
+
+Revision 0.5.0.92  2009/12/28 21:01:26  safe
+Ajustement du nom des interfaces veth  prise V
+utilisation du numero de pid
+
+#=================================================================================
+
+Revision 0.5.0.91  2009/12/28 21:00:28  safe
+Ajustement du nom des interfaces veth  prise IV
+utilisation du numero de pid
+
+#=================================================================================
+
+Revision 0.5.0.90  2009/12/28 20:49:31  safe
+Ajustement du nom des interfaces veth  prise III
+utilisation du numero de pid
+
+#=================================================================================
+
+Revision 0.5.0.89  2009/12/28 20:48:19  safe
+Ajustement du nom des interfaces veth  prise II
+utilisation du numero de pid
+
+#=================================================================================
+
+Revision 0.5.0.88  2009/12/28 20:42:38  safe
+Ajustement du nom des interfaces veth
+utilisation du numero de pid
+
+#=================================================================================
+
+Revision 0.5.0.87  2009/12/28 20:20:14  safe
+Creation du shell vzgot.mksrvz, prise V
+
+#=================================================================================
+
+Revision 0.5.0.86  2009/12/28 20:16:00  safe
+Creation du shell vzgot.mksrvz, prise IV
+
+#=================================================================================
+
+Revision 0.5.0.85  2009/12/28 20:13:23  safe
+Creation du shell vzgot.mksrvz, prise III
+
+#=================================================================================
+
+Revision 0.5.0.84  2009/12/28 20:08:51  safe
+Creation du shell vzgot.mksrvz, prise II
+
+#=================================================================================
+
+Revision 0.5.0.83  2009/12/28 20:05:55  safe
+Creation du shell vzgot.mksrvz
+
+#=================================================================================
+
+Revision 0.5.0.82  2009/12/28 16:01:21  safe
+Mise en place la fonction destroy prise III
+
+#=================================================================================
+
+Revision 0.5.0.81  2009/12/28 15:59:31  safe
+Mise en place la fonction destroy prise II
+
+#=================================================================================
+
+Revision 0.5.0.80  2009/12/28 15:55:38  safe
+Mise en place la fonction destroy prise I
+
+#=================================================================================
+
+Revision 0.5.0.79  2009/12/28 15:36:35  safe
+Mise en place la fonction create Prise X (fin)
+
+#=================================================================================
+
+Revision 0.5.0.78  2009/12/28 15:35:02  safe
+Mise en place la fonction create Prise IX
+
+#=================================================================================
+
+Revision 0.5.0.77  2009/12/28 15:33:28  safe
+Mise en place la fonction create Prise VIII
+
+#=================================================================================
+
+Revision 0.5.0.76  2009/12/28 15:31:56  safe
+Mise en place la fonction create Prise VII
+<