import repository from arizona
smbaker [Fri, 4 May 2012 01:46:20 +0000 (18:46 -0700)]
1399 files changed:
2.0/c/keyconvert/Makefile [new file with mode: 0644]
2.0/c/keyconvert/README [new file with mode: 0644]
2.0/c/keyconvert/asn1.py [new symlink]
2.0/c/keyconvert/b64decode.c [new file with mode: 0644]
2.0/c/keyconvert/keyconvert [new file with mode: 0755]
2.0/c/keyconvert/keyconvert.c [new file with mode: 0644]
2.0/c/keyconvert/keyconvert.py [new file with mode: 0644]
2.0/c/keyconvert/keyconvertext.c [new file with mode: 0644]
2.0/c/keyconvert/keyconvertmain.c [new file with mode: 0644]
2.0/c/keyconvert/setup.py [new file with mode: 0644]
2.0/c/keyconvert/test.sh [new file with mode: 0755]
2.0/c/keyconvert/test/openssh_dsa_1024 [new file with mode: 0644]
2.0/c/keyconvert/test/openssh_dsa_1024.pub [new file with mode: 0644]
2.0/c/keyconvert/test/openssh_dsa_2048 [new file with mode: 0644]
2.0/c/keyconvert/test/openssh_dsa_2048.pub [new file with mode: 0644]
2.0/c/keyconvert/test/openssh_dsa_512 [new file with mode: 0644]
2.0/c/keyconvert/test/openssh_dsa_512.pub [new file with mode: 0644]
2.0/c/keyconvert/test/openssh_rsa1_1024 [new file with mode: 0644]
2.0/c/keyconvert/test/openssh_rsa1_1024.pub [new file with mode: 0644]
2.0/c/keyconvert/test/openssh_rsa1_2048 [new file with mode: 0644]
2.0/c/keyconvert/test/openssh_rsa1_2048.pub [new file with mode: 0644]
2.0/c/keyconvert/test/openssh_rsa1_512 [new file with mode: 0644]
2.0/c/keyconvert/test/openssh_rsa1_512.pub [new file with mode: 0644]
2.0/c/keyconvert/test/openssh_rsa_1024 [new file with mode: 0644]
2.0/c/keyconvert/test/openssh_rsa_1024.pub [new file with mode: 0644]
2.0/c/keyconvert/test/openssh_rsa_2048 [new file with mode: 0644]
2.0/c/keyconvert/test/openssh_rsa_2048.pub [new file with mode: 0644]
2.0/c/keyconvert/test/openssh_rsa_512 [new file with mode: 0644]
2.0/c/keyconvert/test/openssh_rsa_512.pub [new file with mode: 0644]
2.0/c/keyconvert/testkey.sh [new file with mode: 0755]
2.0/c/keyconvert/testpy.sh [new file with mode: 0755]
2.0/docs/NR05-charts_7-12-07_7-30-07.tgz [new file with mode: 0644]
2.0/docs/Nr05_Journal.txt [new file with mode: 0644]
2.0/docs/storkdoc.txt [new file with mode: 0644]
2.0/owl/README [new file with mode: 0644]
2.0/owl/conf.d/arizonatransfer.conf [new file with mode: 0644]
2.0/owl/conf.d/stork.conf [new file with mode: 0644]
2.0/owl/scripts.d/arizonatransfer [new file with mode: 0755]
2.0/owl/scripts.d/stork [new file with mode: 0755]
2.0/plush/gen-update.sh [new file with mode: 0755]
2.0/plush/pacmand.plush [new file with mode: 0755]
2.0/plush/start-storkplushd [new file with mode: 0755]
2.0/plush/start-storkplushd.sh [new file with mode: 0755]
2.0/plush/storkplushd [new file with mode: 0755]
2.0/plush/storksyncd [new file with mode: 0755]
2.0/python/arizonacrypt_signature.dtd [new file with mode: 0644]
2.0/python/comonscript.py [new file with mode: 0644]
2.0/python/default.publickey [new file with mode: 0644]
2.0/python/gen-update.sh [new file with mode: 0755]
2.0/python/graphs/transfers_nest.py [new file with mode: 0755]
2.0/python/images/addbutton-1.gif [new file with mode: 0644]
2.0/python/images/in-synch-1.gif [new file with mode: 0644]
2.0/python/images/out-of-synch-1.gif [new file with mode: 0644]
2.0/python/images/upload-1.gif [new file with mode: 0644]
2.0/python/images/user-1.gif [new file with mode: 0644]
2.0/python/images/xbutton-1.gif [new file with mode: 0644]
2.0/python/images/xbutton-2.gif [new file with mode: 0644]
2.0/python/init_script_nr06 [new file with mode: 0644]
2.0/python/log.properties [new file with mode: 0644]
2.0/python/logging/.postinstall [new file with mode: 0755]
2.0/python/logging/.preinstall [new file with mode: 0755]
2.0/python/logging/.preremove [new file with mode: 0644]
2.0/python/logging/buildpackage [new file with mode: 0755]
2.0/python/logging/filter-strace [new file with mode: 0755]
2.0/python/logging/install-logging [new file with mode: 0755]
2.0/python/logging/logging.crontab [new file with mode: 0644]
2.0/python/logging/logging.key [new file with mode: 0644]
2.0/python/logging/logging.pub [new file with mode: 0644]
2.0/python/logging/nestlogging.tar.bz2 [new file with mode: 0644]
2.0/python/logging/storklog.py [new file with mode: 0755]
2.0/python/logging/straced [new file with mode: 0755]
2.0/python/logging/stracedaemon.py [new file with mode: 0755]
2.0/python/logging/syslog [new file with mode: 0644]
2.0/python/logging/tcpdumpd [new file with mode: 0755]
2.0/python/logging/tcpdumpdaemon.py [new file with mode: 0755]
2.0/python/logging/uniqify.py [new file with mode: 0644]
2.0/python/metadata_/MetaData.class [new file with mode: 0644]
2.0/python/metadata_/PackageData.class [new file with mode: 0644]
2.0/python/metadata_/PackageData.java [new file with mode: 0644]
2.0/python/metadata_/PackageData.java~ [new file with mode: 0644]
2.0/python/metadata_/jrpm.jar [new file with mode: 0644]
2.0/python/metadata_/log.properties [new file with mode: 0644]
2.0/python/metadata_/log4j.jar [new file with mode: 0644]
2.0/python/metadata_/stubs_/RPMReader.class [new file with mode: 0644]
2.0/python/package/__init__.py [new file with mode: 0644]
2.0/python/pacmand.plush [new file with mode: 0755]
2.0/python/prepare/__init__.py [new file with mode: 0644]
2.0/python/replace.py [new file with mode: 0755]
2.0/python/s3/README [new file with mode: 0644]
2.0/python/s3/S3.py [new file with mode: 0644]
2.0/python/s3/__init__.py [new file with mode: 0644]
2.0/python/s3/s3-driver.py [new file with mode: 0644]
2.0/python/s3/s3-test.py [new file with mode: 0644]
2.0/python/s3tool.py [new file with mode: 0644]
2.0/python/storkbtsharedaemon [new file with mode: 0644]
2.0/python/storkclientversion.py [new file with mode: 0644]
2.0/python/storkplushd [new file with mode: 0755]
2.0/python/storks3.py [new file with mode: 0644]
2.0/python/storktrackusage.py [new file with mode: 0644]
2.0/python/test/PyXML-0.8.3-6.i386.rpm [new file with mode: 0644]
2.0/python/test/StorkTesting [new file with mode: 0644]
2.0/python/test/arizonacommTest.py [new file with mode: 0644]
2.0/python/test/arizonaconfigTest.py [new file with mode: 0755]
2.0/python/test/arizonaconfigTest.pyc [new file with mode: 0644]
2.0/python/test/arizonaconfigTest_testfile.py [new file with mode: 0644]
2.0/python/test/arizonaconfigTest_testfile2.py [new file with mode: 0644]
2.0/python/test/arizonaconfigTest_testfile3.py [new file with mode: 0644]
2.0/python/test/arizonaconfigTest_testfile4.py [new file with mode: 0644]
2.0/python/test/arizonacryptTest.py [new file with mode: 0755]
2.0/python/test/arizonacurlTest.py [new file with mode: 0644]
2.0/python/test/arizonageneralTest.py [new file with mode: 0755]
2.0/python/test/arizonagroupTest.py [new file with mode: 0644]
2.0/python/test/arizonagroupTest.pyc [new file with mode: 0644]
2.0/python/test/arizonareportTest.py [new file with mode: 0755]
2.0/python/test/arizonatemplateTest.py [new file with mode: 0755]
2.0/python/test/arizonatransferTest.py [new file with mode: 0755]
2.0/python/test/arizonatransfer_bittorrentTest.py [new file with mode: 0644]
2.0/python/test/arizonatransfer_coblitzTest.py [new file with mode: 0755]
2.0/python/test/arizonatransfer_coralTest.py [new file with mode: 0644]
2.0/python/test/arizonatransfer_ftpTest.py [new file with mode: 0755]
2.0/python/test/arizonatransfer_httpTest.py [new file with mode: 0755]
2.0/python/test/arizonatransfer_nestTest.py [new file with mode: 0644]
2.0/python/test/example.tar.gz [new file with mode: 0644]
2.0/python/test/invalid.publickey [new file with mode: 0644]
2.0/python/test/invalid2.publickey [new file with mode: 0644]
2.0/python/test/planetlab_shareTest.py [new file with mode: 0755]
2.0/python/test/securerandomTest.py [new file with mode: 0644]
2.0/python/test/storkTest.py [new file with mode: 0644]
2.0/python/test/stork_nest_commTest.py [new file with mode: 0644]
2.0/python/test/stork_nestrpm_prepare_packageTest.py [new file with mode: 0755]
2.0/python/test/storkdependencyTest.py [new file with mode: 0644]
2.0/python/test/storkendusertar-2.0b-30.tar.gz [new file with mode: 0644]
2.0/python/test/storkextractmetaTest.py [new file with mode: 0644]
2.0/python/test/storkidentifyTest.py [new file with mode: 0644]
2.0/python/test/storkpackageTest.py [new file with mode: 0644]
2.0/python/test/storkpackagelistTest.py [new file with mode: 0644]
2.0/python/test/storkrpmTest.py [new file with mode: 0755]
2.0/python/test/storktarTest.py [new file with mode: 0755]
2.0/python/test/storktransactionTest.py [new file with mode: 0644]
2.0/python/test/storktrustedpackagesparseTest.py [new file with mode: 0644]
2.0/python/test/storkusernameTest.py [new file with mode: 0755]
2.0/python/test/storkvalidatepackageTest.py [new file with mode: 0644]
2.0/python/test/storkvalidatepubkeyTest.py [new file with mode: 0644]
2.0/python/test/storkverifysignedfileTest.py [new file with mode: 0644]
2.0/python/test/test.txt [new file with mode: 0644]
2.0/python/test/testkeys.privatekey [new file with mode: 0644]
2.0/python/test/testkeys.publickey [new file with mode: 0644]
2.0/python/trustedpackages.dtd [new file with mode: 0644]
apps/digdug/Makefile [new file with mode: 0644]
apps/digdug/build/digdugcli/.hash [new file with mode: 0644]
apps/digdug/build/digdugcli/.requires [new file with mode: 0644]
apps/digdug/build/digdugcli/.version [new file with mode: 0644]
apps/digdug/build/digdugcli/autorun.sh [new file with mode: 0755]
apps/digdug/build/digdugclient/.hash [new file with mode: 0644]
apps/digdug/build/digdugclient/.requires [new file with mode: 0644]
apps/digdug/build/digdugclient/.version [new file with mode: 0644]
apps/digdug/build/digdugclient/autorun.sh [new file with mode: 0755]
apps/digdug/build/digdugserver/.hash [new file with mode: 0644]
apps/digdug/build/digdugserver/.requires [new file with mode: 0644]
apps/digdug/build/digdugserver/.version [new file with mode: 0644]
apps/digdug/build/digdugserver/autorun.sh [new file with mode: 0644]
apps/digdug/clienttest.sh [new file with mode: 0755]
apps/digdug/digdug.py [new file with mode: 0644]
apps/digdug/digdugclient.py [new file with mode: 0644]
apps/digdug/digdugserver.py [new file with mode: 0644]
apps/digdug/initscripts/digdugclient [new file with mode: 0755]
apps/digdug/initscripts/digdugserver [new file with mode: 0755]
apps/digdug/owl/digdugclient [new file with mode: 0644]
apps/digdug/owl/digdugclient.conf [new file with mode: 0644]
apps/digdug/resettest.sh [new file with mode: 0755]
apps/digdug/servertest.sh [new file with mode: 0644]
apps/digdug/test_transition_sort.py [new file with mode: 0644]
apps/digdug/transition.py [new file with mode: 0644]
apps/errorlog/copy.sh [new file with mode: 0755]
apps/errorlog/db.py [new file with mode: 0644]
apps/errorlog/errlogging.py [new file with mode: 0644]
apps/errorlog/errorlog.conf [new file with mode: 0644]
apps/errorlog/html.py [new file with mode: 0644]
apps/errorlog/index.py [new file with mode: 0644]
apps/failsafe/failsafe.sh [new file with mode: 0644]
apps/failsafe/stork-failsafe.cron [new file with mode: 0644]
apps/gacks/API.py [new file with mode: 0644]
apps/gacks/Makefile [new file with mode: 0644]
apps/gacks/README [new file with mode: 0644]
apps/gacks/build/gacksresources/.hash [new file with mode: 0644]
apps/gacks/build/gacksresources/.version [new file with mode: 0644]
apps/gacks/dumpInvoice.py [new file with mode: 0644]
apps/gacks/etc/gacks-api.conf [new file with mode: 0644]
apps/gacks/gacksaccount.py [new file with mode: 0644]
apps/gacks/gacksaccount_test.py [new file with mode: 0644]
apps/gacks/gacksaccountmanager.py [new file with mode: 0644]
apps/gacks/gacksadmin.py [new file with mode: 0644]
apps/gacks/gacksauth.py [new file with mode: 0644]
apps/gacks/gacksbackend.py [new file with mode: 0644]
apps/gacks/gackscalendar.py [new file with mode: 0644]
apps/gacks/gackscalendar_db.py [new file with mode: 0644]
apps/gacks/gackscalendar_list.py [new file with mode: 0644]
apps/gacks/gackscalendar_mysql.py [new file with mode: 0644]
apps/gacks/gackscentral.cron [new file with mode: 0644]
apps/gacks/gackscentral.init [new file with mode: 0644]
apps/gacks/gackscli.py [new file with mode: 0644]
apps/gacks/gacksclient.py [new file with mode: 0644]
apps/gacks/gackscomponent.py [new file with mode: 0644]
apps/gacks/gacksenforce.py [new file with mode: 0644]
apps/gacks/gacksenforce_test.py [new file with mode: 0644]
apps/gacks/gacksexcep.py [new file with mode: 0644]
apps/gacks/gackshandle.py [new file with mode: 0644]
apps/gacks/gackshandler_base.py [new file with mode: 0644]
apps/gacks/gackshandler_plc.py [new file with mode: 0644]
apps/gacks/gacksinvoice.py [new file with mode: 0644]
apps/gacks/gacksinvoice_test.py [new file with mode: 0644]
apps/gacks/gacksjob.py [new file with mode: 0644]
apps/gacks/gackslog.py [new file with mode: 0644]
apps/gacks/gackslog_mysql.py [new file with mode: 0644]
apps/gacks/gacksnm.conf [new file with mode: 0644]
apps/gacks/gacksnm.init [new file with mode: 0644]
apps/gacks/gacksnm.py [new file with mode: 0644]
apps/gacks/gacksnodepicker.py [new file with mode: 0644]
apps/gacks/gacksnodepicker_test.py [new file with mode: 0644]
apps/gacks/gackspolicy.py [new file with mode: 0644]
apps/gacks/gacksqueue.py [new file with mode: 0644]
apps/gacks/gacksqueue_mysql.py [new file with mode: 0644]
apps/gacks/gacksreceipt.py [new file with mode: 0644]
apps/gacks/gacksreset.py [new file with mode: 0644]
apps/gacks/gacksresource.py [new file with mode: 0644]
apps/gacks/gacksrspec.py [new file with mode: 0644]
apps/gacks/gackswatcher.py [new file with mode: 0644]
apps/gacks/localhost-gacks-defragment.sh [new file with mode: 0644]
apps/gacks/localhost-gacks-garbagecollect.sh [new file with mode: 0644]
apps/gacks/localhost-gacks-reset.sh [new file with mode: 0644]
apps/gacks/localhost-gacks-runasap.sh [new file with mode: 0644]
apps/gacks/resources.d/plc.conf [new file with mode: 0644]
apps/gacks/resources.d/vicci.conf [new file with mode: 0644]
apps/gacks/setpaths.sh [new file with mode: 0644]
apps/gacks/storkrepository-gacks-defragment.sh [new file with mode: 0644]
apps/gacks/storkrepository-gacks-garbagecollect.sh [new file with mode: 0644]
apps/gacks/testAsapCli.sh [new file with mode: 0755]
apps/gacks/testCli.sh [new file with mode: 0644]
apps/gacks/testGacksCalendar.py [new file with mode: 0644]
apps/gacks/testGacksHandle.py [new file with mode: 0644]
apps/gacks/testGacksQueue.py [new file with mode: 0644]
apps/gacks/testGacksReceipt.py [new file with mode: 0644]
apps/gacksui/Makefile [new file with mode: 0644]
apps/gacksui/build/gacksui/.hash [new file with mode: 0644]
apps/gacksui/build/gacksui/.requires [new file with mode: 0644]
apps/gacksui/build/gacksui/.version [new file with mode: 0644]
apps/gacksui/build/gacksui/autorun.sh [new file with mode: 0644]
apps/gacksui/gackshelper.py [new file with mode: 0644]
apps/gacksui/gacksscreen.py [new file with mode: 0644]
apps/gacksui/gacksscreen_dev.py [new file with mode: 0644]
apps/gacksui/gacksui.py [new file with mode: 0644]
apps/geni/README [new file with mode: 0644]
apps/geni/geniclientbase.py [new file with mode: 0644]
apps/geni/geniserverbase.py [new file with mode: 0644]
apps/geni/mprepo_geni_libs/sfa/__init__.py [new file with mode: 0755]
apps/geni/mprepo_geni_libs/sfa/trust/__init__.py [new file with mode: 0755]
apps/geni/mprepo_geni_libs/sfa/trust/certificate.py [new file with mode: 0755]
apps/geni/mprepo_geni_libs/sfa/trust/credential.py [new file with mode: 0755]
apps/geni/mprepo_geni_libs/sfa/trust/gid.py [new file with mode: 0755]
apps/geni/mprepo_geni_libs/sfa/trust/rights.py [new file with mode: 0755]
apps/geni/mprepo_geni_libs/sfa/trust/trustedroot.py [new file with mode: 0755]
apps/geni/mprepo_geni_libs/sfa/util/__init__.py [new file with mode: 0755]
apps/geni/mprepo_geni_libs/sfa/util/faults.py [new file with mode: 0755]
apps/geni/mprepo_geni_libs/sfa/util/geniclient.py [new file with mode: 0755]
apps/geni/mprepo_geni_libs/sfa/util/geniserver.py [new file with mode: 0755]
apps/geni/mprepo_geni_libs/sfa/util/misc.py [new file with mode: 0755]
apps/geni/mprepo_geni_libs/sfa/util/parameter.py [new file with mode: 0755]
apps/geni/mprepo_geni_libs/sfa/util/record.py [new file with mode: 0755]
apps/geni/mprepo_geni_libs/sfa/util/report.py [new file with mode: 0755]
apps/geni/mprepo_geni_libs/sfa/util/rspec.py [new file with mode: 0755]
apps/geni/mprepo_geni_libs/sfa/util/sfaticket.py [new file with mode: 0755]
apps/geni/mprepo_geni_libs/sfa/util/xmlrpcprotocol.py [new file with mode: 0755]
apps/geni/mprepo_geni_libs_old/__init__.py [new file with mode: 0755]
apps/geni/mprepo_geni_libs_old/util/__init__.py [new file with mode: 0755]
apps/geni/mprepo_geni_libs_old/util/cert.py [new file with mode: 0755]
apps/geni/mprepo_geni_libs_old/util/credential.py [new file with mode: 0755]
apps/geni/mprepo_geni_libs_old/util/excep.py [new file with mode: 0755]
apps/geni/mprepo_geni_libs_old/util/geniclient.py [new file with mode: 0755]
apps/geni/mprepo_geni_libs_old/util/geniserver.py [new file with mode: 0755]
apps/geni/mprepo_geni_libs_old/util/geniticket.py [new file with mode: 0755]
apps/geni/mprepo_geni_libs_old/util/gid.py [new file with mode: 0755]
apps/geni/mprepo_geni_libs_old/util/misc.py [new file with mode: 0755]
apps/geni/mprepo_geni_libs_old/util/record.py [new file with mode: 0755]
apps/geni/mprepo_geni_libs_old/util/report.py [new file with mode: 0755]
apps/geni/mprepo_geni_libs_old/util/rights.py [new file with mode: 0755]
apps/geni/mprepo_geni_libs_old/util/rspec.py [new file with mode: 0644]
apps/geni/mprepo_geni_libs_old/util/trustedroot.py [new file with mode: 0755]
apps/gui1/storkcurlfuncs.py [new file with mode: 0644]
apps/gui1/storkslicemanager.py [new file with mode: 0755]
apps/gui2/storkcurlfuncs.py [new file with mode: 0644]
apps/gui2/storkslicemanager.py [new file with mode: 0755]
apps/importyum/copyquake.sh [new file with mode: 0755]
apps/importyum/create_fedora8_tpfile.sh [new file with mode: 0755]
apps/importyum/download.sh [new file with mode: 0755]
apps/importyum/download1.sh [new file with mode: 0755]
apps/importyum/downloadfl.sh [new file with mode: 0755]
apps/importyum/import.sh [new file with mode: 0755]
apps/importyum/importsample.sh [new file with mode: 0755]
apps/importyum/keys/yum.publickey [new file with mode: 0644]
apps/importyum/sample/primary.xml [new file with mode: 0644]
apps/importyum/test.py [new file with mode: 0755]
apps/importyum/yumflparse.py [new file with mode: 0644]
apps/importyum/yumimport.py [new file with mode: 0755]
apps/importyum/yumxmlparse.py [new file with mode: 0755]
apps/kong-ui/__init__.py [new file with mode: 0644]
apps/kong-ui/kong_controller.py [new file with mode: 0644]
apps/kong-ui/kong_layout.glade [new file with mode: 0644]
apps/kong-ui/kong_ui.py [new file with mode: 0755]
apps/kong/Makefile [new file with mode: 0644]
apps/kong/build/kong/.hash [new file with mode: 0644]
apps/kong/build/kong/.requires [new file with mode: 0644]
apps/kong/build/kong/.version [new file with mode: 0644]
apps/kong/build/kong/autorun.sh [new file with mode: 0755]
apps/kong/initscripts/kong [new file with mode: 0755]
apps/kong/kong.py [new file with mode: 0644]
apps/kong/kongversion.py [new file with mode: 0644]
apps/kong/owl/kong.conf [new file with mode: 0644]
apps/logmon/Makefile [new file with mode: 0644]
apps/logmon/analyze.py [new file with mode: 0644]
apps/logmon/build/logmon/.hash [new file with mode: 0644]
apps/logmon/build/logmon/.requires [new file with mode: 0644]
apps/logmon/build/logmon/.version [new file with mode: 0644]
apps/logmon/classify.txt [new file with mode: 0644]
apps/logmon/copy.sh [new file with mode: 0755]
apps/logmon/db.py [new file with mode: 0644]
apps/logmon/do_logmon.sh [new file with mode: 0755]
apps/logmon/do_logmon_www.sh [new file with mode: 0644]
apps/logmon/errlogging.py [new file with mode: 0644]
apps/logmon/html.py [new file with mode: 0644]
apps/logmon/index.py [new file with mode: 0644]
apps/logmon/logmon.conf [new file with mode: 0644]
apps/logmon/logmon.cron [new file with mode: 0644]
apps/logmon/logmon_www.cron [new file with mode: 0644]
apps/logmon/searchhelp.html [new file with mode: 0644]
apps/mapdisplay/copy.sh [new file with mode: 0755]
apps/mapdisplay/gec4demo.conf [new file with mode: 0644]
apps/mapdisplay/index.py [new file with mode: 0644]
apps/mapdisplay/js/mapdisplay.js [new file with mode: 0755]
apps/mapdisplay/map.py [new file with mode: 0644]
apps/mapdisplay/mapviewer.conf [new file with mode: 0644]
apps/mapdisplay/schema.sql [new file with mode: 0644]
apps/mapdisplay/templates/index.html [new file with mode: 0644]
apps/mapdisplay/templates/mapframe.html [new file with mode: 0644]
apps/mprepo/cleanup.sh [new file with mode: 0644]
apps/mprepo/copy_geni_certs.sh [new file with mode: 0644]
apps/mprepo/creategid.sh [new file with mode: 0644]
apps/mprepo/etc/PLEauthenticate.stemp [new file with mode: 0644]
apps/mprepo/etc/PLEauthenticatefail.stemp [new file with mode: 0644]
apps/mprepo/etc/PLauthenticate.stemp [new file with mode: 0644]
apps/mprepo/etc/PLauthenticatefail.stemp [new file with mode: 0644]
apps/mprepo/etc/browsepage.stemp [new file with mode: 0644]
apps/mprepo/etc/errorpage.stemp [new file with mode: 0644]
apps/mprepo/etc/footer.stemp [new file with mode: 0644]
apps/mprepo/etc/gacks_detail.stemp [new file with mode: 0644]
apps/mprepo/etc/gacks_footer.stemp [new file with mode: 0644]
apps/mprepo/etc/gacks_gethandle.stemp [new file with mode: 0644]
apps/mprepo/etc/gacks_header.stemp [new file with mode: 0644]
apps/mprepo/etc/gacks_home.stemp [new file with mode: 0644]
apps/mprepo/etc/gacks_login.stemp [new file with mode: 0644]
apps/mprepo/etc/gacks_login_error.stemp [new file with mode: 0644]
apps/mprepo/etc/gacks_reserve.stemp [new file with mode: 0644]
apps/mprepo/etc/gacks_reserve_asap.stemp [new file with mode: 0644]
apps/mprepo/etc/gacks_reserve_cores.stemp [new file with mode: 0644]
apps/mprepo/etc/gacks_result.stemp [new file with mode: 0644]
apps/mprepo/etc/gacks_result_debug.stemp [new file with mode: 0644]
apps/mprepo/etc/gacks_viewlog.stemp [new file with mode: 0644]
apps/mprepo/etc/gacks_viewupdate.stemp [new file with mode: 0644]
apps/mprepo/etc/grm-apache.conf [new file with mode: 0644]
apps/mprepo/etc/grm.conf [new file with mode: 0644]
apps/mprepo/etc/header.stemp [new file with mode: 0644]
apps/mprepo/etc/home.stemp [new file with mode: 0644]
apps/mprepo/etc/loginpage.stemp [new file with mode: 0644]
apps/mprepo/etc/mprepo.conf [new file with mode: 0644]
apps/mprepo/etc/mustloginpage.stemp [new file with mode: 0644]
apps/mprepo/etc/passfileauthenticate.stemp [new file with mode: 0644]
apps/mprepo/etc/passfileauthenticatefail.stemp [new file with mode: 0644]
apps/mprepo/etc/searchpage.stemp [new file with mode: 0644]
apps/mprepo/etc/stork-mprepo-apache.conf [new file with mode: 0644]
apps/mprepo/etc/storkcontrol.stemp [new file with mode: 0644]
apps/mprepo/etc/test.stemp [new file with mode: 0644]
apps/mprepo/etc/uploadlegacy.stemp [new file with mode: 0644]
apps/mprepo/etc/uploadpage.stemp [new file with mode: 0644]
apps/mprepo/etc/uploadstatus.stemp [new file with mode: 0644]
apps/mprepo/frontend.py [new file with mode: 0644]
apps/mprepo/grm.py [new file with mode: 0644]
apps/mprepo/grmfrontend.py [new file with mode: 0644]
apps/mprepo/grminstall.sh [new file with mode: 0644]
apps/mprepo/html.py [new file with mode: 0644]
apps/mprepo/index.py [new file with mode: 0644]
apps/mprepo/install.sh [new file with mode: 0644]
apps/mprepo/make_gacks_central_user.sh [new file with mode: 0644]
apps/mprepo/mprfrontend.py [new file with mode: 0644]
apps/mprepo/mprinstall.sh [new file with mode: 0644]
apps/mprepo/passfile.py [new file with mode: 0644]
apps/mprepo/repo_xmlrpc_server.py [new file with mode: 0644]
apps/mprepo/repoauth.py [new file with mode: 0644]
apps/mprepo/repobackend.py [new file with mode: 0644]
apps/mprepo/repoclassify.py [new file with mode: 0644]
apps/mprepo/repocli.py [new file with mode: 0644]
apps/mprepo/repoconfig.py [new file with mode: 0644]
apps/mprepo/repogeni.py [new file with mode: 0755]
apps/mprepo/repometafileupdate.py [new file with mode: 0644]
apps/mprepo/repoplc.py [new file with mode: 0644]
apps/mprepo/repopublish.py [new file with mode: 0644]
apps/mprepo/repopubsub.init [new file with mode: 0755]
apps/mprepo/repopubsub.py [new file with mode: 0644]
apps/mprepo/repouid.py [new file with mode: 0755]
apps/mprepo/repoutil.py [new file with mode: 0644]
apps/mprepo/static/canopus-header.png [new file with mode: 0644]
apps/mprepo/static/canopus-orig.bmp [new file with mode: 0644]
apps/mprepo/static/index.html [new file with mode: 0755]
apps/mprepo/static/pbpl.png [new file with mode: 0644]
apps/mprepo/static/powered_by_pl_grey.png [new file with mode: 0644]
apps/mprepo/static/stork-header.png [new file with mode: 0644]
apps/mprepo/static/stork.css [new file with mode: 0644]
apps/mprepo/static/template_logo_small_grey.png [new file with mode: 0644]
apps/mprepo/static/uacs.png [new file with mode: 0644]
apps/mprepo/test.sh [new file with mode: 0644]
apps/mprepo/test_compat.py [new file with mode: 0644]
apps/mprepo/test_repogeni.py [new file with mode: 0644]
apps/nestproxy/owl/conf.d/nestproxy.conf [new file with mode: 0755]
apps/nestproxy/owl/scripts.d/nestproxy [new file with mode: 0755]
apps/nestproxy/stork_nest_proxy.init [new file with mode: 0644]
apps/nestproxy/stork_nest_proxy.py [new file with mode: 0644]
apps/ravenpublish/Makefile [new file with mode: 0644]
apps/ravenpublish/actions.d/kong.packages.pacman [new file with mode: 0644]
apps/ravenpublish/actions.d/owl.packages.pacman [new file with mode: 0644]
apps/ravenpublish/actions.d/stork.packages.pacman [new file with mode: 0644]
apps/ravenpublish/arizonaconfig_compat.py [new file with mode: 0755]
apps/ravenpublish/builder.py [new file with mode: 0755]
apps/ravenpublish/container.py [new file with mode: 0644]
apps/ravenpublish/crypto.py [new file with mode: 0755]
apps/ravenpublish/errorparser.py [new file with mode: 0755]
apps/ravenpublish/etc/abort [new file with mode: 0644]
apps/ravenpublish/etc/complete [new file with mode: 0644]
apps/ravenpublish/etc/copyscripts.sh [new file with mode: 0755]
apps/ravenpublish/etc/default.publickey [new file with mode: 0644]
apps/ravenpublish/etc/fedora8.publickey [new file with mode: 0644]
apps/ravenpublish/etc/kong-server.conf [new file with mode: 0644]
apps/ravenpublish/etc/opt_out [new file with mode: 0644]
apps/ravenpublish/etc/prepare [new file with mode: 0644]
apps/ravenpublish/etc/prepared [new file with mode: 0644]
apps/ravenpublish/etc/raven-stork.conf [new file with mode: 0644]
apps/ravenpublish/etc/return_result [new file with mode: 0755]
apps/ravenpublish/etc/start [new file with mode: 0644]
apps/ravenpublish/etc/stop [new file with mode: 0644]
apps/ravenpublish/etc/stork.conf.template [new file with mode: 0755]
apps/ravenpublish/etc/stork.publickey [new file with mode: 0644]
apps/ravenpublish/get_protogeni_cred.py [new file with mode: 0644]
apps/ravenpublish/help.py [new file with mode: 0755]
apps/ravenpublish/kongclient.py [new file with mode: 0644]
apps/ravenpublish/konggui.py [new file with mode: 0644]
apps/ravenpublish/kongscreen.py [new file with mode: 0644]
apps/ravenpublish/kongscreen_dev.py [new file with mode: 0644]
apps/ravenpublish/raven.man [new file with mode: 0644]
apps/ravenpublish/raven.py [new file with mode: 0755]
apps/ravenpublish/raven.x [new file with mode: 0755]
apps/ravenpublish/ravenbuilder.py [new file with mode: 0644]
apps/ravenpublish/ravengui.py [new file with mode: 0644]
apps/ravenpublish/ravengui_passphrase.py [new file with mode: 0644]
apps/ravenpublish/ravenscreen.py [new file with mode: 0644]
apps/ravenpublish/ravenscreen_dev.py [new file with mode: 0644]
apps/ravenpublish/ravenversion.py [new file with mode: 0755]
apps/ravenpublish/setpaths.sh [new file with mode: 0755]
apps/ravenpublish/slicerun.py [new file with mode: 0644]
apps/ravenpublish/template/stork.conf.template [new file with mode: 0755]
apps/ravenpublish/testsign.py [new file with mode: 0644]
apps/servicemonitor/Makefile [new file with mode: 0644]
apps/servicemonitor/autorun.sh [new file with mode: 0644]
apps/servicemonitor/build/servicemonitor.hash [new file with mode: 0644]
apps/servicemonitor/build/servicemonitor.version [new file with mode: 0644]
apps/servicemonitor/cron.d/servicemonitor [new file with mode: 0644]
apps/servicemonitor/sample/sample.conf [new file with mode: 0644]
apps/servicemonitor/sample/sample.init [new file with mode: 0755]
apps/servicemonitor/sample/sample.py [new file with mode: 0755]
apps/servicemonitor/servicemonitor.py [new file with mode: 0644]
apps/stork/stork.py [new file with mode: 0755]
apps/stork/storkconfigsync.py [new file with mode: 0755]
apps/stork/storkdependency.py [new file with mode: 0644]
apps/stork/storkerror.py [new file with mode: 0644]
apps/stork/storkexception.py [new file with mode: 0644]
apps/stork/storklog.py [new file with mode: 0644]
apps/stork/storkmetapoll.py [new file with mode: 0755]
apps/stork/storkmutex.py [new file with mode: 0755]
apps/stork/storkoutputfuncs.py [new file with mode: 0644]
apps/stork/storkpackagelist.py [new file with mode: 0644]
apps/stork/storkpackagesort.py [new file with mode: 0644]
apps/stork/storkpoison.py [new file with mode: 0644]
apps/stork/storkquery.py [new file with mode: 0755]
apps/stork/storkrepodl.py [new file with mode: 0755]
apps/stork/storkrepolist.py [new file with mode: 0755]
apps/stork/storkreposync.py [new file with mode: 0755]
apps/stork/storkstats.py [new file with mode: 0644]
apps/stork/storkstatuscodes.py [new file with mode: 0644]
apps/stork/storktpqualify.py [new file with mode: 0644]
apps/stork/storktrustedpackagesparse.py [new file with mode: 0755]
apps/stork/storkusername.py [new file with mode: 0644]
apps/stork/storkversion.py [new file with mode: 0644]
apps/tempest/actions.d/bootstrap.packages.pacman [new file with mode: 0644]
apps/tempest/actions.d/unmanaged.packages.pacman [new file with mode: 0644]
apps/tempest/groups.dtd [new file with mode: 0644]
apps/tempest/owl/conf.d/tempestd.conf [new file with mode: 0644]
apps/tempest/owl/scripts.d/tempestd [new file with mode: 0755]
apps/tempest/packages.dtd [new file with mode: 0644]
apps/tempest/tempest.init [new file with mode: 0755]
apps/tempest/tempest.py [new file with mode: 0755]
apps/tempest/tempestd.py [new file with mode: 0755]
apps/tempest/tempestpubsub.py [new file with mode: 0644]
apps/tempest/tempestversion.py [new file with mode: 0755]
apps/tempest/xmlgroupparse.py [new file with mode: 0755]
apps/tempest/xmlpackageparse.py [new file with mode: 0755]
apps/tppublish/storktptohtml.py [new file with mode: 0755]
apps/tppublish/tppublish.cron [new file with mode: 0755]
apps/tppublish/tppublish.sh [new file with mode: 0644]
apps/tppublish/tppublish_tag.sh [new file with mode: 0755]
demo/cpubench/prepare [new file with mode: 0644]
demo/cpubench/start [new file with mode: 0644]
demo/deb-repo/README [new file with mode: 0644]
demo/deb-repo/RPMS/sfa-1.0-25.onelab.i686.rpm [new file with mode: 0644]
demo/deb-repo/RPMS/sfa-client-1.0-25.onelab.i686.rpm [new file with mode: 0644]
demo/deb-repo/RPMS/sface-0.1-15.onelab.i686.rpm [new file with mode: 0644]
demo/deb-repo/apt/conf/distributions [new file with mode: 0644]
demo/deb-repo/buildrepo.sh [new file with mode: 0644]
demo/deb-repo/rpm_to_deb.sh [new file with mode: 0755]
demo/gec11/Makefile [new file with mode: 0644]
demo/gec11/build/account_setup/.hash [new file with mode: 0644]
demo/gec11/build/account_setup/.version [new file with mode: 0644]
demo/gec11/keys/guest1 [new file with mode: 0644]
demo/gec11/keys/guest1.pub [new file with mode: 0644]
demo/gec11/keys/guest10 [new file with mode: 0644]
demo/gec11/keys/guest10.pub [new file with mode: 0644]
demo/gec11/keys/guest11 [new file with mode: 0644]
demo/gec11/keys/guest11.pub [new file with mode: 0644]
demo/gec11/keys/guest12 [new file with mode: 0644]
demo/gec11/keys/guest12.pub [new file with mode: 0644]
demo/gec11/keys/guest13 [new file with mode: 0644]
demo/gec11/keys/guest13.pub [new file with mode: 0644]
demo/gec11/keys/guest14 [new file with mode: 0644]
demo/gec11/keys/guest14.pub [new file with mode: 0644]
demo/gec11/keys/guest15 [new file with mode: 0644]
demo/gec11/keys/guest15.pub [new file with mode: 0644]
demo/gec11/keys/guest16 [new file with mode: 0644]
demo/gec11/keys/guest16.pub [new file with mode: 0644]
demo/gec11/keys/guest17 [new file with mode: 0644]
demo/gec11/keys/guest17.pub [new file with mode: 0644]
demo/gec11/keys/guest18 [new file with mode: 0644]
demo/gec11/keys/guest18.pub [new file with mode: 0644]
demo/gec11/keys/guest19 [new file with mode: 0644]
demo/gec11/keys/guest19.pub [new file with mode: 0644]
demo/gec11/keys/guest2 [new file with mode: 0644]
demo/gec11/keys/guest2.pub [new file with mode: 0644]
demo/gec11/keys/guest20 [new file with mode: 0644]
demo/gec11/keys/guest20.pub [new file with mode: 0644]
demo/gec11/keys/guest21 [new file with mode: 0644]
demo/gec11/keys/guest21.pub [new file with mode: 0644]
demo/gec11/keys/guest22 [new file with mode: 0644]
demo/gec11/keys/guest22.pub [new file with mode: 0644]
demo/gec11/keys/guest23 [new file with mode: 0644]
demo/gec11/keys/guest23.pub [new file with mode: 0644]
demo/gec11/keys/guest24 [new file with mode: 0644]
demo/gec11/keys/guest24.pub [new file with mode: 0644]
demo/gec11/keys/guest25 [new file with mode: 0644]
demo/gec11/keys/guest25.pub [new file with mode: 0644]
demo/gec11/keys/guest26 [new file with mode: 0644]
demo/gec11/keys/guest26.pub [new file with mode: 0644]
demo/gec11/keys/guest27 [new file with mode: 0644]
demo/gec11/keys/guest27.pub [new file with mode: 0644]
demo/gec11/keys/guest28 [new file with mode: 0644]
demo/gec11/keys/guest28.pub [new file with mode: 0644]
demo/gec11/keys/guest29 [new file with mode: 0644]
demo/gec11/keys/guest29.pub [new file with mode: 0644]
demo/gec11/keys/guest3 [new file with mode: 0644]
demo/gec11/keys/guest3.pub [new file with mode: 0644]
demo/gec11/keys/guest30 [new file with mode: 0644]
demo/gec11/keys/guest30.pub [new file with mode: 0644]
demo/gec11/keys/guest31 [new file with mode: 0644]
demo/gec11/keys/guest31.pub [new file with mode: 0644]
demo/gec11/keys/guest4 [new file with mode: 0644]
demo/gec11/keys/guest4.pub [new file with mode: 0644]
demo/gec11/keys/guest5 [new file with mode: 0644]
demo/gec11/keys/guest5.pub [new file with mode: 0644]
demo/gec11/keys/guest6 [new file with mode: 0644]
demo/gec11/keys/guest6.pub [new file with mode: 0644]
demo/gec11/keys/guest7 [new file with mode: 0644]
demo/gec11/keys/guest7.pub [new file with mode: 0644]
demo/gec11/keys/guest8 [new file with mode: 0644]
demo/gec11/keys/guest8.pub [new file with mode: 0644]
demo/gec11/keys/guest9 [new file with mode: 0644]
demo/gec11/keys/guest9.pub [new file with mode: 0644]
demo/gec11/scripts/change_plc_passwords.py [new file with mode: 0644]
demo/gec11/scripts/configsfi.sh [new file with mode: 0644]
demo/gec11/scripts/copykeys.sh [new file with mode: 0644]
demo/gec11/scripts/createusers.sh [new file with mode: 0644]
demo/gec11/scripts/genkeys.sh [new file with mode: 0644]
demo/gec11/scripts/setpasswords.sh [new file with mode: 0644]
demo/helloworld/README [new file with mode: 0644]
demo/helloworld/autorun.sh [new file with mode: 0755]
demo/helloworld/helloworld [new file with mode: 0755]
demo/pingpong/guests.doc.docx [new file with mode: 0644]
demo/pingpong/keys/guest1 [new file with mode: 0644]
demo/pingpong/keys/guest1.pub [new file with mode: 0644]
demo/pingpong/keys/guest10 [new file with mode: 0644]
demo/pingpong/keys/guest10.pub [new file with mode: 0644]
demo/pingpong/keys/guest11 [new file with mode: 0644]
demo/pingpong/keys/guest11.pub [new file with mode: 0644]
demo/pingpong/keys/guest12 [new file with mode: 0644]
demo/pingpong/keys/guest12.pub [new file with mode: 0644]
demo/pingpong/keys/guest13 [new file with mode: 0644]
demo/pingpong/keys/guest13.pub [new file with mode: 0644]
demo/pingpong/keys/guest14 [new file with mode: 0644]
demo/pingpong/keys/guest14.pub [new file with mode: 0644]
demo/pingpong/keys/guest15 [new file with mode: 0644]
demo/pingpong/keys/guest15.pub [new file with mode: 0644]
demo/pingpong/keys/guest16 [new file with mode: 0644]
demo/pingpong/keys/guest16.pub [new file with mode: 0644]
demo/pingpong/keys/guest17 [new file with mode: 0644]
demo/pingpong/keys/guest17.pub [new file with mode: 0644]
demo/pingpong/keys/guest18 [new file with mode: 0644]
demo/pingpong/keys/guest18.pub [new file with mode: 0644]
demo/pingpong/keys/guest19 [new file with mode: 0644]
demo/pingpong/keys/guest19.pub [new file with mode: 0644]
demo/pingpong/keys/guest2 [new file with mode: 0644]
demo/pingpong/keys/guest2.pub [new file with mode: 0644]
demo/pingpong/keys/guest20 [new file with mode: 0644]
demo/pingpong/keys/guest20.pub [new file with mode: 0644]
demo/pingpong/keys/guest21 [new file with mode: 0644]
demo/pingpong/keys/guest21.pub [new file with mode: 0644]
demo/pingpong/keys/guest22 [new file with mode: 0644]
demo/pingpong/keys/guest22.pub [new file with mode: 0644]
demo/pingpong/keys/guest23 [new file with mode: 0644]
demo/pingpong/keys/guest23.pub [new file with mode: 0644]
demo/pingpong/keys/guest24 [new file with mode: 0644]
demo/pingpong/keys/guest24.pub [new file with mode: 0644]
demo/pingpong/keys/guest25 [new file with mode: 0644]
demo/pingpong/keys/guest25.pub [new file with mode: 0644]
demo/pingpong/keys/guest26 [new file with mode: 0644]
demo/pingpong/keys/guest26.pub [new file with mode: 0644]
demo/pingpong/keys/guest27 [new file with mode: 0644]
demo/pingpong/keys/guest27.pub [new file with mode: 0644]
demo/pingpong/keys/guest28 [new file with mode: 0644]
demo/pingpong/keys/guest28.pub [new file with mode: 0644]
demo/pingpong/keys/guest29 [new file with mode: 0644]
demo/pingpong/keys/guest29.pub [new file with mode: 0644]
demo/pingpong/keys/guest3 [new file with mode: 0644]
demo/pingpong/keys/guest3.pub [new file with mode: 0644]
demo/pingpong/keys/guest30 [new file with mode: 0644]
demo/pingpong/keys/guest30.pub [new file with mode: 0644]
demo/pingpong/keys/guest31 [new file with mode: 0644]
demo/pingpong/keys/guest31.pub [new file with mode: 0644]
demo/pingpong/keys/guest32 [new file with mode: 0644]
demo/pingpong/keys/guest32.pub [new file with mode: 0644]
demo/pingpong/keys/guest33 [new file with mode: 0644]
demo/pingpong/keys/guest33.pub [new file with mode: 0644]
demo/pingpong/keys/guest34 [new file with mode: 0644]
demo/pingpong/keys/guest34.pub [new file with mode: 0644]
demo/pingpong/keys/guest35 [new file with mode: 0644]
demo/pingpong/keys/guest35.pub [new file with mode: 0644]
demo/pingpong/keys/guest4 [new file with mode: 0644]
demo/pingpong/keys/guest4.pub [new file with mode: 0644]
demo/pingpong/keys/guest5 [new file with mode: 0644]
demo/pingpong/keys/guest5.pub [new file with mode: 0644]
demo/pingpong/keys/guest6 [new file with mode: 0644]
demo/pingpong/keys/guest6.pub [new file with mode: 0644]
demo/pingpong/keys/guest7 [new file with mode: 0644]
demo/pingpong/keys/guest7.pub [new file with mode: 0644]
demo/pingpong/keys/guest8 [new file with mode: 0644]
demo/pingpong/keys/guest8.pub [new file with mode: 0644]
demo/pingpong/keys/guest9 [new file with mode: 0644]
demo/pingpong/keys/guest9.pub [new file with mode: 0644]
demo/pingpong/nodelists/all_nodes [new file with mode: 0644]
demo/pingpong/nodelists/guest10_nodes [new file with mode: 0644]
demo/pingpong/nodelists/guest11_nodes [new file with mode: 0644]
demo/pingpong/nodelists/guest12_nodes [new file with mode: 0644]
demo/pingpong/nodelists/guest13_nodes [new file with mode: 0644]
demo/pingpong/nodelists/guest14_nodes [new file with mode: 0644]
demo/pingpong/nodelists/guest15_nodes [new file with mode: 0644]
demo/pingpong/nodelists/guest16_nodes [new file with mode: 0644]
demo/pingpong/nodelists/guest17_nodes [new file with mode: 0644]
demo/pingpong/nodelists/guest18_nodes [new file with mode: 0644]
demo/pingpong/nodelists/guest19_nodes [new file with mode: 0644]
demo/pingpong/nodelists/guest1_nodes [new file with mode: 0644]
demo/pingpong/nodelists/guest20_nodes [new file with mode: 0644]
demo/pingpong/nodelists/guest21_nodes [new file with mode: 0644]
demo/pingpong/nodelists/guest22_nodes [new file with mode: 0644]
demo/pingpong/nodelists/guest23_nodes [new file with mode: 0644]
demo/pingpong/nodelists/guest24_nodes [new file with mode: 0644]
demo/pingpong/nodelists/guest25_nodes [new file with mode: 0644]
demo/pingpong/nodelists/guest26_nodes [new file with mode: 0644]
demo/pingpong/nodelists/guest27_nodes [new file with mode: 0644]
demo/pingpong/nodelists/guest28_nodes [new file with mode: 0644]
demo/pingpong/nodelists/guest29_nodes [new file with mode: 0644]
demo/pingpong/nodelists/guest2_nodes [new file with mode: 0644]
demo/pingpong/nodelists/guest30_nodes [new file with mode: 0644]
demo/pingpong/nodelists/guest31_nodes [new file with mode: 0644]
demo/pingpong/nodelists/guest32_nodes [new file with mode: 0644]
demo/pingpong/nodelists/guest33_nodes [new file with mode: 0644]
demo/pingpong/nodelists/guest34_nodes [new file with mode: 0644]
demo/pingpong/nodelists/guest35_nodes [new file with mode: 0644]
demo/pingpong/nodelists/guest3_nodes [new file with mode: 0644]
demo/pingpong/nodelists/guest4_nodes [new file with mode: 0644]
demo/pingpong/nodelists/guest5_nodes [new file with mode: 0644]
demo/pingpong/nodelists/guest6_nodes [new file with mode: 0644]
demo/pingpong/nodelists/guest7_nodes [new file with mode: 0644]
demo/pingpong/nodelists/guest8_nodes [new file with mode: 0644]
demo/pingpong/nodelists/guest9_nodes [new file with mode: 0644]
demo/pingpong/packages/helloworld-0.1-0.noarch.rpm [new file with mode: 0644]
demo/pingpong/ping.py [new file with mode: 0644]
demo/pingpong/pong.conf [new file with mode: 0644]
demo/pingpong/pong.py [new file with mode: 0644]
demo/pingpong/prepare [new file with mode: 0644]
demo/pingpong/scripts/allocatenodes.sh [new file with mode: 0644]
demo/pingpong/scripts/configraven.sh [new file with mode: 0644]
demo/pingpong/scripts/configsfi.sh [new file with mode: 0644]
demo/pingpong/scripts/copydemo.sh [new file with mode: 0644]
demo/pingpong/scripts/copykeys.sh [new file with mode: 0644]
demo/pingpong/scripts/copypingpong.sh [new file with mode: 0755]
demo/pingpong/scripts/createusers.sh [new file with mode: 0644]
demo/pingpong/scripts/delusers.py [new file with mode: 0644]
demo/pingpong/scripts/delusers_orig.py [new file with mode: 0644]
demo/pingpong/scripts/gennodelist.py [new file with mode: 0644]
demo/pingpong/scripts/setinitscripts.sh [new file with mode: 0644]
demo/pingpong/scripts/setpasswords.sh [new file with mode: 0644]
demo/pingpong/start [new file with mode: 0644]
docs/comment guidelines.sxw [new file with mode: 0644]
lib/arizona-lib/arizonacomm.py [new file with mode: 0644]
lib/arizona-lib/arizonaconfig.py [new file with mode: 0644]
lib/arizona-lib/arizonacrypt.py [new file with mode: 0755]
lib/arizona-lib/arizonacurl.py [new file with mode: 0755]
lib/arizona-lib/arizonaerror.py [new file with mode: 0644]
lib/arizona-lib/arizonageneral.py [new file with mode: 0644]
lib/arizona-lib/arizonareport.py [new file with mode: 0644]
lib/arizona-lib/arizonatemplate.py [new file with mode: 0644]
lib/arizona-lib/arizonatransfer.py [new file with mode: 0644]
lib/arizona-lib/arizonaunittest.py [new file with mode: 0644]
lib/arizona-lib/arizonawarning.py [new file with mode: 0644]
lib/arizona-lib/arizonaxml.py [new file with mode: 0755]
lib/arizona-lib/aztransfer.py [new file with mode: 0644]
lib/arizona-lib/download_indicator.py [new file with mode: 0644]
lib/arizona-lib/planetlabAPI.py [new file with mode: 0644]
lib/arizona-lib/planetlabCall.py [new file with mode: 0644]
lib/arizona-lib/securerandom.py [new file with mode: 0644]
lib/arizona-lib/setup.py [new file with mode: 0644]
lib/arizona-lib/storkbtdownloadheadless.py [new file with mode: 0644]
lib/arizona-lib/transfer/arizonatransfer_bittorrent.py [new file with mode: 0644]
lib/arizona-lib/transfer/arizonatransfer_coblitz.py [new file with mode: 0644]
lib/arizona-lib/transfer/arizonatransfer_coral.py [new file with mode: 0644]
lib/arizona-lib/transfer/arizonatransfer_ftp.py [new file with mode: 0644]
lib/arizona-lib/transfer/arizonatransfer_http.py [new file with mode: 0644]
lib/arizona-lib/transfer/arizonatransfer_https.py [new file with mode: 0644]
lib/arizona-lib/transfer/arizonatransfer_nestproxy.py [new file with mode: 0644]
lib/arizona-lib/transfer/arizonatransfer_s3.py [new file with mode: 0644]
lib/ravenlib/__init__.py [new file with mode: 0644]
lib/ravenlib/acl/__init__.py [new file with mode: 0644]
lib/ravenlib/acl/baseacl.py [new file with mode: 0644]
lib/ravenlib/acl/mysqlacl.py [new file with mode: 0644]
lib/ravenlib/acl/testAcl.py [new file with mode: 0644]
lib/ravenlib/client/__init__.py [new file with mode: 0644]
lib/ravenlib/client/digdugapi.py [new file with mode: 0644]
lib/ravenlib/client/repoclient.py [new file with mode: 0644]
lib/ravenlib/crypto.py [new file with mode: 0644]
lib/ravenlib/daemon.py [new file with mode: 0644]
lib/ravenlib/dirchecker.py [new file with mode: 0644]
lib/ravenlib/dirchecker_test.py [new file with mode: 0644]
lib/ravenlib/files/__init__.py [new file with mode: 0644]
lib/ravenlib/files/asn1.py [new file with mode: 0644]
lib/ravenlib/files/pacgroups.py [new file with mode: 0644]
lib/ravenlib/files/pacpackages.py [new file with mode: 0755]
lib/ravenlib/files/sshkey.py [new file with mode: 0644]
lib/ravenlib/files/tpfile.py [new file with mode: 0755]
lib/ravenlib/files/tpparse.py [new file with mode: 0644]
lib/ravenlib/hash.py [new file with mode: 0644]
lib/ravenlib/listutil.py [new file with mode: 0644]
lib/ravenlib/modpythonapi/ApiExceptionCodes.py [new file with mode: 0644]
lib/ravenlib/modpythonapi/AuthenticatedApi.py [new file with mode: 0755]
lib/ravenlib/modpythonapi/AuthenticatedClient.py [new file with mode: 0755]
lib/ravenlib/modpythonapi/BaseApi.py [new file with mode: 0755]
lib/ravenlib/modpythonapi/BaseClient.py [new file with mode: 0755]
lib/ravenlib/modpythonapi/ModPython.py [new file with mode: 0755]
lib/ravenlib/modpythonapi/TestApi.py [new file with mode: 0755]
lib/ravenlib/modpythonapi/__init__.py [new file with mode: 0644]
lib/ravenlib/modpythonapi/gackstestuser.gid [new file with mode: 0644]
lib/ravenlib/modpythonapi/gackstestuser.pkey [new file with mode: 0644]
lib/ravenlib/modpythonapi/installTest.sh [new file with mode: 0755]
lib/ravenlib/modpythonapi/server.py [new file with mode: 0644]
lib/ravenlib/modpythonapi/test.py [new file with mode: 0755]
lib/ravenlib/modpythonapi/test.sh [new file with mode: 0755]
lib/ravenlib/modpythonapi/testapi.conf [new file with mode: 0644]
lib/ravenlib/modpythonapi/trusted_roots/planetlab.gid [new file with mode: 0644]
lib/ravenlib/modpythonapi/trusted_roots/plc-princeton.gid [new file with mode: 0644]
lib/ravenlib/package/__init__.py [new file with mode: 0644]
lib/ravenlib/package/exception.py [new file with mode: 0644]
lib/ravenlib/package/rpm.py [new file with mode: 0644]
lib/ravenlib/package/storkpackage.py [new file with mode: 0644]
lib/ravenlib/package/tar.py [new file with mode: 0644]
lib/ravenlib/package/transaction.py [new file with mode: 0644]
lib/ravenlib/platform/__init__.py [new file with mode: 0644]
lib/ravenlib/platform/all.py [new file with mode: 0644]
lib/ravenlib/platform/platform_planetlab.py [new file with mode: 0644]
lib/ravenlib/platform/platform_protogeni.py [new file with mode: 0644]
lib/ravenlib/platform/platform_sfa.py [new file with mode: 0644]
lib/ravenlib/platform/platform_unix.py [new file with mode: 0644]
lib/ravenlib/pubsub/__init__.py [new file with mode: 0644]
lib/ravenlib/pubsub/receiver.py [new file with mode: 0644]
lib/ravenlib/pubsub/repeater.py [new file with mode: 0644]
lib/ravenlib/pubsub/sender.py [new file with mode: 0644]
lib/ravenlib/ravenconfigparser.py [new file with mode: 0644]
lib/ravenlib/ravenlog.py [new file with mode: 0644]
lib/ravenlib/report.py [new file with mode: 0644]
lib/ravenlib/setup.py [new file with mode: 0644]
lib/ravenlib/stats.py [new file with mode: 0755]
lib/ravenlib/tableformat.py [new file with mode: 0644]
lib/ravenlib/tableprint.py [new file with mode: 0644]
lib/ravenlib/typecheck.py [new file with mode: 0644]
lib/ravenlib/xmlrpc/__init__.py [new file with mode: 0644]
lib/ravenlib/xmlrpc/client.py [new file with mode: 0644]
lib/ravenlib/xmlrpc/server.py [new file with mode: 0644]
lib/ravenlib/xmlrpc/test_xmlrpcclient.py [new file with mode: 0644]
lib/ravenlib/xmlrpc/test_xmlrpcserver.py [new file with mode: 0644]
lib/ravenstats [new file with mode: 0755]
lib/tests/dirchecker_test.py [new file with mode: 0644]
our-sfa-build/sfa/__init__.py [new file with mode: 0644]
our-sfa-build/sfa/trust/__init__.py [new file with mode: 0644]
our-sfa-build/sfa/trust/certificate.old [new file with mode: 0644]
our-sfa-build/sfa/trust/certificate.py [new file with mode: 0644]
our-sfa-build/sfa/trust/credential.py [new file with mode: 0644]
our-sfa-build/sfa/trust/credential_legacy.py [new file with mode: 0644]
our-sfa-build/sfa/trust/gid.py [new file with mode: 0644]
our-sfa-build/sfa/trust/rights.py [new file with mode: 0644]
our-sfa-build/sfa/trust/trustedroot.py [new file with mode: 0644]
our-sfa-build/sfa/util/__init__.py [new file with mode: 0644]
our-sfa-build/sfa/util/faults.py [new file with mode: 0644]
our-sfa-build/sfa/util/parameter.py [new file with mode: 0644]
our-sfa-build/sfa/util/record.py [new file with mode: 0644]
our-sfa-build/sfa/util/rspec.py [new file with mode: 0644]
our-sfa-build/sfa/util/sfalogging.py [new file with mode: 0644]
our-sfa-build/sfa/util/sfaticket.py [new file with mode: 0644]
our-sfa-build/sfa/util/xmlrpcprotocol.py [new file with mode: 0644]
our-sfa-build/sfa/util/xrn.py [new file with mode: 0644]
owl/client/Makefile [new file with mode: 0644]
owl/client/autorun-lib.sh [new file with mode: 0644]
owl/client/autorun.sh [new file with mode: 0644]
owl/client/build/config-alpha.hash [new file with mode: 0644]
owl/client/build/config-alpha.version [new file with mode: 0644]
owl/client/build/config-beta.hash [new file with mode: 0644]
owl/client/build/config-beta.version [new file with mode: 0644]
owl/client/build/config.hash [new file with mode: 0644]
owl/client/build/config.version [new file with mode: 0644]
owl/client/build/lib.hash [new file with mode: 0644]
owl/client/build/lib.version [new file with mode: 0644]
owl/client/build/pl-scripts.hash [new file with mode: 0644]
owl/client/build/pl-scripts.version [new file with mode: 0644]
owl/client/build/scripts.hash [new file with mode: 0644]
owl/client/build/scripts.version [new file with mode: 0644]
owl/client/client [new file with mode: 0644]
owl/client/conf.d/basic.conf [new file with mode: 0644]
owl/client/conf.d/mapviewer.conf [new file with mode: 0644]
owl/client/conf.d/memory.conf [new file with mode: 0644]
owl/client/conf.d/owl.conf [new file with mode: 0644]
owl/client/conf.d/planetlab.conf [new file with mode: 0644]
owl/client/conf.d/processes.conf [new file with mode: 0644]
owl/client/conf.d/sfa.conf [new file with mode: 0644]
owl/client/conf.d/slice.conf [new file with mode: 0644]
owl/client/conf.d/uptime.conf [new file with mode: 0644]
owl/client/config [new file with mode: 0644]
owl/client/config.rpm [new file with mode: 0644]
owl/client/local.conf [new file with mode: 0644]
owl/client/owl [new file with mode: 0755]
owl/client/owl.conf [new file with mode: 0644]
owl/client/owl.cron [new file with mode: 0644]
owl/client/owl.init [new file with mode: 0755]
owl/client/owl.man [new file with mode: 0644]
owl/client/owl.py [new file with mode: 0755]
owl/client/owl.rpm [new file with mode: 0644]
owl/client/owl.x [new file with mode: 0644]
owl/client/scripts.d/basic [new file with mode: 0755]
owl/client/scripts.d/mapviewer [new file with mode: 0644]
owl/client/scripts.d/memory [new file with mode: 0755]
owl/client/scripts.d/owl [new file with mode: 0755]
owl/client/scripts.d/planetlab [new file with mode: 0755]
owl/client/scripts.d/processes [new file with mode: 0755]
owl/client/scripts.d/sfa [new file with mode: 0755]
owl/client/scripts.d/slice [new file with mode: 0755]
owl/client/scripts.d/uptime [new file with mode: 0755]
owl/client/seattle/README [new file with mode: 0644]
owl/client/seattle/benchexperiment.repy [new file with mode: 0644]
owl/client/seattle/compile.sh [new file with mode: 0755]
owl/client/seattle/compile_benchexperiment.sh [new file with mode: 0755]
owl/client/seattle/config.sh [new file with mode: 0644]
owl/client/seattle/owl.repy [new file with mode: 0644]
owl/client/seattle/owltest.repy [new file with mode: 0644]
owl/client/seattle/restrictions.test [new file with mode: 0644]
owl/client/seattle/seash.sh [new file with mode: 0755]
owl/client/seattle/test.sh [new file with mode: 0644]
owl/client/seattle/test_benchexperiment.sh [new file with mode: 0755]
owl/client/setup-owl.py [new file with mode: 0755]
owl/client/test.conf [new file with mode: 0644]
owl/client/testOwl.py [new file with mode: 0644]
owl/client/utils/json [new file with mode: 0755]
owl/server/Makefile [new file with mode: 0644]
owl/server/RPMS/owl-server-0.17-0.noarch.rpm [new file with mode: 0644]
owl/server/RPMS/owl-server-alpha-0.17-0.noarch.rpm [new file with mode: 0644]
owl/server/RPMS/owl-server-beta-0.17-0.noarch.rpm [new file with mode: 0644]
owl/server/RPMS/owl-server-beta_0.15-1_all.deb [new file with mode: 0644]
owl/server/RPMS/owl-server-beta_0.16-1_all.deb [new file with mode: 0644]
owl/server/alpha_version.py [new file with mode: 0644]
owl/server/alpha_version.template [new file with mode: 0644]
owl/server/autorun.sh [new file with mode: 0644]
owl/server/beta_version.py [new file with mode: 0644]
owl/server/beta_version.template [new file with mode: 0644]
owl/server/db.py [new file with mode: 0644]
owl/server/httpd/owl.conf [new file with mode: 0644]
owl/server/httpd/owl_alpha.conf [new file with mode: 0755]
owl/server/httpd/owl_beta.conf [new file with mode: 0755]
owl/server/index.py [new file with mode: 0755]
owl/server/owl-server-alpha.conf [new file with mode: 0644]
owl/server/owl-server-beta.conf [new file with mode: 0644]
owl/server/owl-server.conf [new file with mode: 0644]
owl/server/owlacl.py [new file with mode: 0644]
owl/server/owllib.py [new file with mode: 0644]
owl/server/owlpurge.cron [new file with mode: 0755]
owl/server/templates/display.psp [new file with mode: 0644]
owl/server/templates/index.psp [new file with mode: 0644]
owl/server/templates/legend.psp [new file with mode: 0644]
owl/server/templates/prefs.psp [new file with mode: 0644]
owl/server/templates/row.psp [new file with mode: 0644]
owl/server/templates/xml.psp [new file with mode: 0755]
owl/server/test.py [new file with mode: 0755]
owl/server/version.py [new file with mode: 0644]
owl/server/version.template [new file with mode: 0644]
publish/digdug/build/digdugdemo/.requires [new file with mode: 0644]
publish/digdug/build/digdugdemo/autorun.sh [new file with mode: 0644]
publish/digdug/build/digdugdemo/usr/local/digdugdemo/clienttest.sh [new file with mode: 0755]
publish/digdug/build/digdugdemo/usr/local/digdugdemo/clienttest_background.sh [new file with mode: 0755]
publish/digdug/build/digdugdemo/usr/local/digdugdemo/clienttest_old.sh [new file with mode: 0755]
publish/digdug/build/digdugdemo/usr/local/digdugdemo/conf.sh [new file with mode: 0644]
publish/digdug/build/digdugdemo/usr/local/digdugdemo/experiment.sh [new file with mode: 0755]
publish/digdug/kong/abort [new file with mode: 0644]
publish/digdug/kong/complete [new file with mode: 0644]
publish/digdug/kong/kong-raven.conf [new file with mode: 0644]
publish/digdug/kong/kong-server.conf [new file with mode: 0644]
publish/digdug/kong/prepare [new file with mode: 0644]
publish/digdug/kong/prepared [new file with mode: 0644]
publish/digdug/kong/return_result [new file with mode: 0755]
publish/digdug/kong/start [new file with mode: 0644]
publish/digdug/kong/stop [new file with mode: 0644]
publish/digdug/packages/digdugcli.name [new file with mode: 0644]
publish/digdug/packages/digdugclient.name [new file with mode: 0644]
publish/digdug/raven.conf [new file with mode: 0644]
publish/digdug/scripts/reset.sh [new file with mode: 0755]
publish/digdug/scripts/run.sh [new file with mode: 0755]
publish/digdug/scripts/status.sh [new file with mode: 0755]
publish/digdug/tempest/actions.d/owl.packages.pacman [new file with mode: 0644]
publish/digdug/tempest/actions.d/stork.packages.pacman [new file with mode: 0644]
publish/digdug/template/stork.conf.template [new file with mode: 0644]
publish/digdug/users/10.stork.publickey [new file with mode: 0644]
publish/digdug/users/20.fedora8.publickey [new file with mode: 0644]
publish/gec4demo/buildpackage-tar.sh [new file with mode: 0755]
publish/gec4demo/buildpackage.sh [new file with mode: 0755]
publish/gec4demo/incver.sh [new file with mode: 0755]
publish/gec4demo/phonehome/autorun.sh [new file with mode: 0755]
publish/gec4demo/phonehome/demophonehome.spec [new file with mode: 0644]
publish/gec4demo/phonehome/gecdemo [new file with mode: 0755]
publish/gec4demo/phonehome/gecdemo.conf [new file with mode: 0644]
publish/gec4demo/phonehome/rundemo.sh [new file with mode: 0755]
publish/gec4demo/raven.conf [new file with mode: 0644]
publish/gec4demo/tellcolor.sh [new file with mode: 0755]
publish/gec4demo/template/stork.conf.template [new file with mode: 0644]
publish/gec4demo/tgztest/autorun.sh [new file with mode: 0755]
publish/gec4demo/updatepackage.sh [new file with mode: 0755]
publish/gec4demo/users/10.stork.publickey [new file with mode: 0644]
publish/gec4demo/users/20.fedora8.publickey [new file with mode: 0644]
publish/gec4demo/ver.sh [new file with mode: 0644]
publish/gec7demo/buildpackage-tar.sh [new file with mode: 0755]
publish/gec7demo/buildpackage.sh [new file with mode: 0755]
publish/gec7demo/incver.sh [new file with mode: 0755]
publish/gec7demo/phonehome/autorun.sh [new file with mode: 0755]
publish/gec7demo/phonehome/demophonehome.spec [new file with mode: 0644]
publish/gec7demo/phonehome/gecdemo [new file with mode: 0755]
publish/gec7demo/phonehome/gecdemo.conf [new file with mode: 0644]
publish/gec7demo/phonehome/rundemo.sh [new file with mode: 0755]
publish/gec7demo/raven.conf [new file with mode: 0644]
publish/gec7demo/tellcolor.sh [new file with mode: 0755]
publish/gec7demo/tempest/actions.d/gec7.packages.pacman [new file with mode: 0644]
publish/gec7demo/tempest/actions.d/owl.packages.pacman [new file with mode: 0644]
publish/gec7demo/tempest/actions.d/stork.packages.pacman [new file with mode: 0644]
publish/gec7demo/tempest/groups.d/managed.groups.pacman [new file with mode: 0644]
publish/gec7demo/template/stork.conf.template [new file with mode: 0644]
publish/gec7demo/tgztest/autorun.sh [new file with mode: 0755]
publish/gec7demo/updatepackage.sh [new file with mode: 0755]
publish/gec7demo/users/10.stork.publickey [new file with mode: 0644]
publish/gec7demo/users/20.fedora8.publickey [new file with mode: 0644]
publish/gec7demo/ver.sh [new file with mode: 0644]
publish/gec8demo2/buildpackage-tar.sh [new file with mode: 0755]
publish/gec8demo2/buildpackage.sh [new file with mode: 0755]
publish/gec8demo2/incver.sh [new file with mode: 0755]
publish/gec8demo2/packages/cpubench.name [new file with mode: 0644]
publish/gec8demo2/packages/pingbench.name [new file with mode: 0644]
publish/gec8demo2/phonehome/autorun.sh [new file with mode: 0755]
publish/gec8demo2/phonehome/demophonehome.spec [new file with mode: 0644]
publish/gec8demo2/phonehome/gecdemo [new file with mode: 0755]
publish/gec8demo2/phonehome/gecdemo.conf [new file with mode: 0644]
publish/gec8demo2/phonehome/rundemo.sh [new file with mode: 0755]
publish/gec8demo2/raven.conf [new file with mode: 0644]
publish/gec8demo2/tellcolor.sh [new file with mode: 0755]
publish/gec8demo2/tempest/.hash [new file with mode: 0644]
publish/gec8demo2/tempest/.version [new file with mode: 0644]
publish/gec8demo2/tempest/actions.d/gec7_2.packages.pacman [new file with mode: 0644]
publish/gec8demo2/tempest/actions.d/owl.packages.pacman [new file with mode: 0644]
publish/gec8demo2/tempest/actions.d/stork.packages.pacman [new file with mode: 0644]
publish/gec8demo2/tempest/groups.d/managed.groups.pacman [new file with mode: 0644]
publish/gec8demo2/template/stork.conf.template [new file with mode: 0644]
publish/gec8demo2/tgztest/autorun.sh [new file with mode: 0755]
publish/gec8demo2/updatepackage.sh [new file with mode: 0755]
publish/gec8demo2/users/10.stork.publickey [new file with mode: 0644]
publish/gec8demo2/users/20.fedora8.publickey [new file with mode: 0644]
publish/gec8demo2/users/30.smbaker-experiment.publickey [new file with mode: 0644]
publish/gec8demo2/ver.sh [new file with mode: 0644]
publish/raven-beta/raven.conf [new file with mode: 0644]
publish/raven-beta/tempest/actions.d/owl.packages.pacman [new file with mode: 0644]
publish/raven-beta/tempest/actions.d/raven-beta.packages.pacman [new file with mode: 0644]
publish/raven-beta/tempest/actions.d/stork.packages.pacman [new file with mode: 0644]
publish/raven-beta/tempest/actions.d/vini.packages.pacman [new file with mode: 0644]
publish/raven-beta/tempest/groups.d/managed.groups.pacman [new file with mode: 0644]
publish/raven-beta/tempest/raven-beta.packages.pacman [new file with mode: 0644]
publish/raven-beta/template/stork.conf.template [new file with mode: 0644]
publish/raven-beta/users/10.stork.publickey [new file with mode: 0644]
publish/raven-beta/users/20.fedora8.publickey [new file with mode: 0644]
publish/raven-beta/users/30.smbaker-experiment.publickey [new file with mode: 0644]
publish/smbaker-experiment/build/cpubench/etc/owl/conf.d/cpubench.conf [new file with mode: 0644]
publish/smbaker-experiment/build/cpubench/etc/owl/scripts.d/cpubench [new file with mode: 0755]
publish/smbaker-experiment/build/pingbench/etc/owl/conf.d/pingbench.conf [new file with mode: 0644]
publish/smbaker-experiment/build/pingbench/etc/owl/scripts.d/pingbench [new file with mode: 0644]
publish/smbaker-experiment/build/pubsubexperiment/.hash [new file with mode: 0644]
publish/smbaker-experiment/build/pubsubexperiment/.version [new file with mode: 0644]
publish/smbaker-experiment/build/pubsubexperiment/usr/local/pubsubexperiment/autorun.sh [new file with mode: 0755]
publish/smbaker-experiment/build/pubsubexperiment/usr/local/pubsubexperiment/expreceiver.py [new file with mode: 0644]
publish/smbaker-experiment/build/pubsubexperiment/usr/local/pubsubexperiment/expsender.py [new file with mode: 0644]
publish/smbaker-experiment/build/viniexperiment/.hash [new file with mode: 0644]
publish/smbaker-experiment/build/viniexperiment/.version [new file with mode: 0644]
publish/smbaker-experiment/build/viniexperiment/autorun.sh [new file with mode: 0755]
publish/smbaker-experiment/build/viniexperiment/etc/cron.d/viniexperiment [new file with mode: 0644]
publish/smbaker-experiment/build/viniexperiment/etc/viniexperiment/vini_rspec.xml [new file with mode: 0644]
publish/smbaker-experiment/build/viniexperiment/usr/local/bin/viniexperiment.py [new file with mode: 0755]
publish/smbaker-experiment/build/viniexperiment/usr/local/bin/vinirspecparse.py [new file with mode: 0755]
publish/smbaker-experiment/raven.conf [new file with mode: 0644]
publish/smbaker-experiment/tempest/actions.d/owl.packages.pacman [new file with mode: 0644]
publish/smbaker-experiment/tempest/actions.d/stork.packages.pacman [new file with mode: 0644]
publish/smbaker-experiment/template/stork.conf.template [new file with mode: 0644]
publish/smbaker-release/build/gacksnmrestart/.requires [new file with mode: 0644]
publish/smbaker-release/build/gacksnmrestart/etc/servicemonitor.d/gacksnm.conf [new file with mode: 0644]
publish/smbaker-release/build/owlrestart/.hash [new file with mode: 0644]
publish/smbaker-release/build/owlrestart/.requires [new file with mode: 0644]
publish/smbaker-release/build/owlrestart/.spec [new file with mode: 0644]
publish/smbaker-release/build/owlrestart/.version [new file with mode: 0644]
publish/smbaker-release/build/owlrestart/etc/servicemonitor.d/owl.conf [new file with mode: 0644]
publish/smbaker-release/build/storkbench/autorun.sh [new file with mode: 0644]
publish/smbaker-release/build/storkbench/etc/cron.d/storkbench [new file with mode: 0644]
publish/smbaker-release/build/storkbench/etc/owl/conf.d/storkbench.conf [new file with mode: 0644]
publish/smbaker-release/build/storkbench/etc/owl/scripts.d/storkbench [new file with mode: 0755]
publish/smbaker-release/build/storkbench/usr/local/bin/storkbench.sh [new file with mode: 0755]
publish/smbaker-release/build/tempestrestart/.requires [new file with mode: 0644]
publish/smbaker-release/build/tempestrestart/etc/servicemonitor.d/tempest.conf [new file with mode: 0644]
publish/smbaker-release/copy_owl.sh [new file with mode: 0755]
publish/smbaker-release/packages/sfa/myplc-config-4.3-37.planetlab.noarch.rpm [new file with mode: 0644]
publish/smbaker-release/packages/sfa/postgresql-libs-8.2.11-1.fc8.i386.rpm [new file with mode: 0644]
publish/smbaker-release/packages/sfa/pyOpenSSL-0.9-1.planetlab.i386.rpm [new file with mode: 0644]
publish/smbaker-release/packages/sfa/python-psycopg2-2.0.6-2.fc8.i386.rpm [new file with mode: 0644]
publish/smbaker-release/packages/sfa/sfa-0.9-10.planetlab.i386.rpm [new file with mode: 0644]
publish/smbaker-release/raven.conf [new file with mode: 0644]
publish/smbaker-release/template/stork.conf.template [new file with mode: 0755]
publish/stork-install/raven.conf [new file with mode: 0644]
publish/stork-install/template/stork.conf.template [new file with mode: 0644]
publish/stork-install/users/10.stork.publickey [new file with mode: 0644]
publish/stork-install/users/20.fedora8.publickey [new file with mode: 0644]
push/config [new file with mode: 0755]
push/push-nonnest-stork [new file with mode: 0755]
push/upload-stage2-initscript.sh [new file with mode: 0755]
push/upload-stage2-stopscript.sh [new file with mode: 0755]
pyspecer/empty [new file with mode: 0644]
pyspecer/pyspecer.notes [new file with mode: 0644]
pyspecer/pyspecer.py [new file with mode: 0755]
pyspecer/quietbuild [new file with mode: 0755]
pyspecer/rpms/i386/rpms_moved.readme [new file with mode: 0644]
pyspecer/stork.pyspec [new file with mode: 0644]
pyspecer/stork/BitTorrent-4.0.4-1.noarch.rpm [new file with mode: 0644]
pyspecer/stork/PlanetLab.publickey [new file with mode: 0644]
pyspecer/stork/PyXML-0.8.3-6.i386.rpm [new file with mode: 0644]
pyspecer/stork/StorkRepository_nr06.publickey [new file with mode: 0644]
pyspecer/stork/arizona_stork2.publickey [new file with mode: 0644]
pyspecer/stork/client_stork.conf [new file with mode: 0644]
pyspecer/stork/cpio-2.5-6.i386.rpm [new file with mode: 0644]
pyspecer/stork/default.MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKgZCjfKDl9ISoclfBuZsQze6bXtu+QYF64TLQlI9fgEg2CDyGQVOsZ2CaX1ZEZ_O69AYZp8nj+YJLIJM3+W3DMCAwEAAQ.packages.pacman [new file with mode: 0644]
pyspecer/stork/default.publickey [new file with mode: 0644]
pyspecer/stork/home_stork.conf [new file with mode: 0644]
pyspecer/stork/libproper.so.0 [new file with mode: 0755]
pyspecer/stork/libstorkwrap.so [new file with mode: 0755]
pyspecer/stork/nest_stork.conf [new file with mode: 0644]
pyspecer/stork/nr06.certificate [new file with mode: 0644]
pyspecer/stork/pacman.lnk [new file with mode: 0644]
pyspecer/stork/pseprpusher.lnk [new file with mode: 0644]
pyspecer/stork/repository_stork.conf [new file with mode: 0644]
pyspecer/stork/stork.lnk [new file with mode: 0644]
pyspecer/stork/stork.publickey [new file with mode: 0644]
pyspecer/stork/storkquery.lnk [new file with mode: 0644]
pyspecer/stork/storkutil.lnk [new file with mode: 0644]
rpm_builds/README.rpmmacros [new file with mode: 0644]
rpm_builds/SPECS/arizona-lib.spec.template [new file with mode: 0644]
rpm_builds/SPECS/cherryrepo.spec.template [new file with mode: 0644]
rpm_builds/SPECS/gackscentral.spec.template [new file with mode: 0644]
rpm_builds/SPECS/gacksnm.spec.template [new file with mode: 0644]
rpm_builds/SPECS/grm.spec.template [new file with mode: 0644]
rpm_builds/SPECS/raven.spec.template [new file with mode: 0755]
rpm_builds/SPECS/ravenlib.spec.template [new file with mode: 0644]
rpm_builds/SPECS/stork-client-config.spec.template [new file with mode: 0644]
rpm_builds/SPECS/stork-client.spec.template [new file with mode: 0644]
rpm_builds/SPECS/stork-enduser.spec.template [new file with mode: 0644]
rpm_builds/SPECS/stork-failsafe.spec.template [new file with mode: 0644]
rpm_builds/SPECS/stork-mp-repository.spec.template [new file with mode: 0644]
rpm_builds/SPECS/stork-nest-config.spec.template [new file with mode: 0644]
rpm_builds/SPECS/stork-nest.spec.template [new file with mode: 0644]
rpm_builds/SPECS/stork-nestproxy.spec.template [new file with mode: 0644]
rpm_builds/SPECS/stork-planetlab.spec.template [new file with mode: 0644]
rpm_builds/SPECS/stork-repository.spec.template [new file with mode: 0644]
rpm_builds/SPECS/stork-tppublish.spec.template [new file with mode: 0755]
rpm_builds/SPECS/stork.spec.template [new file with mode: 0755]
rpm_builds/SPECS/tempest.spec.template [new file with mode: 0755]
rpm_builds/SPECS/testrpm-2.0-0.1.spec [new file with mode: 0644]
rpm_builds/build-arizona_lib [new file with mode: 0755]
rpm_builds/build-cherryrepo [new file with mode: 0755]
rpm_builds/build-client [new file with mode: 0755]
rpm_builds/build-clientconfig [new file with mode: 0755]
rpm_builds/build-enduser [new file with mode: 0755]
rpm_builds/build-enduser-tar [new file with mode: 0755]
rpm_builds/build-failsafe [new file with mode: 0755]
rpm_builds/build-gackscentral [new file with mode: 0755]
rpm_builds/build-gacksnm [new file with mode: 0644]
rpm_builds/build-grm [new file with mode: 0755]
rpm_builds/build-mp-repository [new file with mode: 0755]
rpm_builds/build-nest [new file with mode: 0755]
rpm_builds/build-nestconfig [new file with mode: 0755]
rpm_builds/build-nestproxy [new file with mode: 0755]
rpm_builds/build-planetlab [new file with mode: 0755]
rpm_builds/build-raven [new file with mode: 0755]
rpm_builds/build-ravenlib [new file with mode: 0755]
rpm_builds/build-repository [new file with mode: 0755]
rpm_builds/build-stork [new file with mode: 0755]
rpm_builds/build-tempest [new file with mode: 0755]
rpm_builds/build-tppublish [new file with mode: 0755]
rpm_builds/buildall [new file with mode: 0755]
rpm_builds/publish-client [new file with mode: 0755]
rpm_builds/publish-settings [new file with mode: 0755]
rpm_builds/push-to-repo [new file with mode: 0755]
rpm_builds/source [new file with mode: 0644]
testscripts/scott/missingtpfile/README [new file with mode: 0644]
testscripts/scott/missingtpfile/gen.sh [new file with mode: 0644]
testscripts/scott/missingtpfile/upload.sh [new file with mode: 0644]
testscripts/scott/pacmanactive/activecomon.groups.pacman [new file with mode: 0755]
testscripts/scott/pacmanactive/activecomon.packages.pacman [new file with mode: 0755]
testscripts/scott/pacmanactive/activecomon.privatekey [new file with mode: 0644]
testscripts/scott/pacmanactive/activecomon.publickey [new file with mode: 0644]
testscripts/scott/pacmanactive/generate.sh [new file with mode: 0644]
testscripts/scott/pacmanactive/signed/activecomon.5fafdafe7c17389b12d6986903d2839093d86b7d.groups.pacman [new file with mode: 0644]
testscripts/scott/pacmanactive/signed/activecomon.5fafdafe7c17389b12d6986903d2839093d86b7d.packages.pacman [new file with mode: 0644]
testscripts/scott/pacmanactive/signed/activecomon.groups.pacman [new file with mode: 0644]
testscripts/scott/pacmanactive/signed/activecomon.packages.pacman [new file with mode: 0644]
testscripts/scott/pacmanparse/smbaker-client2.groups.pacman [new file with mode: 0644]
testscripts/scott/pacmanparse/smbaker-client2.packages.pacman [new file with mode: 0644]
testscripts/scott/pacmanparse/test.sh [new file with mode: 0644]
testscripts/scott/poison/gen.sh [new file with mode: 0644]
testscripts/scott/poison/upload.sh [new file with mode: 0644]
testscripts/scott/storkutil/test.sh [new file with mode: 0644]
tools/.classpath [new file with mode: 0644]
tools/.project [new file with mode: 0644]
tools/create_default_tpfiles/create_default_tpfile.sh [new file with mode: 0755]
tools/create_default_tpfiles/create_stork_tpfile.sh [new file with mode: 0755]
tools/faqtory/Category.java [new file with mode: 0644]
tools/faqtory/FAQtory.java [new file with mode: 0644]
tools/faqtory/Page.java [new file with mode: 0644]
tools/faqtory/Parser.java [new file with mode: 0644]
tools/faqtory/Question.java [new file with mode: 0644]
tools/faqtory/TableOfContents.java [new file with mode: 0644]
tools/faqtory/faqtory.jar [new file with mode: 0644]
tools/highproc_killer/README [new file with mode: 0644]
tools/highproc_killer/highproc_killer.py [new file with mode: 0755]
tools/highproc_killer/plcapilib.py [new file with mode: 0755]
tools/misc/arizonaconfigDebug.py [new file with mode: 0644]
tools/misc/logfilter.py [new file with mode: 0755]
tools/misc/percent.py [new file with mode: 0755]
tools/misc/runvisitors.sh [new file with mode: 0644]
tools/misc/storkremove.sh [new file with mode: 0755]
tools/phonehome/README [new file with mode: 0644]
tools/phonehome/errors.html [new file with mode: 0644]
tools/phonehome/index.html [new file with mode: 0644]
tools/phonehome/installtools.sh [new file with mode: 0755]
tools/phonehome/make.sh [new file with mode: 0755]
tools/phonehome/maketools.sh [new file with mode: 0755]
tools/phonehome/phonehome.php [new file with mode: 0644]
tools/phonehome/phonehome.py [new file with mode: 0755]
tools/phonehome/phonehome_account.sh [new file with mode: 0755]
tools/phonehome/phonehome_control.py [new file with mode: 0755]
tools/phonehome/phonehome_restart.sh [new file with mode: 0755]
tools/phonehome/plcapilib.py [new file with mode: 0755]
tools/phonehome/report.php [new file with mode: 0644]
tools/phonehome/report.py [new file with mode: 0755]
tools/phonehome/report_cpubench.php [new file with mode: 0644]
tools/phonehome/report_membench.php [new file with mode: 0644]
tools/phonehome/report_tarbench.php [new file with mode: 0644]
tools/phonehome/report_tarbench_yesterday.php [new file with mode: 0644]
tools/phonehome/report_yesterday.php [new file with mode: 0644]
tools/phonehome/reporthistory.py [new file with mode: 0755]
tools/phonehome/reportrecur.py [new file with mode: 0644]
tools/phonehome/restartowl.py [new file with mode: 0755]
tools/phonehome/runinitscript.py [new file with mode: 0755]
tools/phonehome/runinitscript_hostnames.py [new file with mode: 0644]
tools/phonehome/sieve.py [new file with mode: 0644]
tools/phonehome/smbcpubench.postinstall [new file with mode: 0755]
tools/phonehome/smbdelay.postinstall [new file with mode: 0755]
tools/phonehome/smbfinal.postinstall [new file with mode: 0755]
tools/phonehome/smbhttpbench.postinstall [new file with mode: 0755]
tools/phonehome/smbloopbench.postinstall [new file with mode: 0755]
tools/phonehome/smbmembench.postinstall [new file with mode: 0755]
tools/phonehome/smbpacktest.postinstall [new file with mode: 0755]
tools/phonehome/smbphonehome.postinstall [new file with mode: 0755]
tools/phonehome/smbrepeat.postinstall [new file with mode: 0755]
tools/phonehome/smbs3bench.postinstall [new file with mode: 0755]
tools/phonehome/smbsha1bench.postinstall [new file with mode: 0755]
tools/phonehome/smbtarbench.postinstall [new file with mode: 0755]
tools/screencast/README.txt [new file with mode: 0644]
tools/screencast/demo-gui-custompackage.txt [new file with mode: 0644]
tools/screencast/demo-gui-packageinstalled.txt [new file with mode: 0644]
tools/screencast/demo-kong.txt [new file with mode: 0644]
tools/screencast/demo1.txt [new file with mode: 0644]
tools/screencast/demo2.txt [new file with mode: 0644]
tools/screencast/demo_gui_install.txt [new file with mode: 0644]
tools/screencast/demo_raveninstall.txt [new file with mode: 0644]
tools/screencast/demo_sfainstall.txt [new file with mode: 0644]
tools/screencast/demo_storkmanualinstall.txt [new file with mode: 0644]
tools/screencast/reset_raveninstall.sh [new file with mode: 0755]
tools/screencast/reset_sfainstall.sh [new file with mode: 0755]
tools/screencast/sendfile.vbs [new file with mode: 0644]
tools/screencast/teleprompter.vbs [new file with mode: 0644]
tools/sfastuff/configSfi.sh [new file with mode: 0644]
tools/sfastuff/fixgid.py [new file with mode: 0644]
tools/sfastuff/get_vini_rspec.sh [new file with mode: 0755]
tools/sfastuff/keypackages/Makefile [new file with mode: 0644]
tools/sfastuff/keypackages/gackscentral_keys/.hash [new file with mode: 0644]
tools/sfastuff/keypackages/gackscentral_keys/.version [new file with mode: 0644]
tools/sfastuff/keypackages/grm_keys/.hash [new file with mode: 0644]
tools/sfastuff/keypackages/grm_keys/.version [new file with mode: 0644]
tools/sfastuff/keys/planetlab.gid [new file with mode: 0644]
tools/sfastuff/keys/plc-princeton-new.gid [new file with mode: 0644]
tools/sfastuff/keys/plc-princeton.gid [new file with mode: 0644]
tools/sfastuff/make_gadmin_user.sh [new file with mode: 0644]
tools/sfastuff/make_gadmin_user2.sh [new file with mode: 0644]
tools/sfastuff/make_user.sh [new file with mode: 0644]
tools/sfastuff/pl_rspec.xml [new file with mode: 0644]
tools/sfastuff/test.xml [new file with mode: 0644]
tools/sfastuff/test2.xml [new file with mode: 0644]
tools/sfastuff/test3.xml [new file with mode: 0644]
tools/sfastuff/test4.xml [new file with mode: 0644]
tools/sfastuff/test5.xml [new file with mode: 0644]
tools/sfastuff/user.record [new file with mode: 0644]
tools/sfastuff/vini_request.xml [new file with mode: 0644]
tools/sfastuff/vini_rspec.xml [new file with mode: 0644]
tools/startstop/plcapilib.py [new file with mode: 0755]
tools/startstop/startstop.py [new file with mode: 0644]
tools/statuscheck/checknode.py [new file with mode: 0755]
tools/statuscheck/copytools.sh [new file with mode: 0755]
tools/statuscheck/index.html [new file with mode: 0644]
tools/statuscheck/installtools.sh [new file with mode: 0755]
tools/statuscheck/maketools.sh [new file with mode: 0755]
tools/statuscheck/plcapilib.py [new file with mode: 0755]
tools/statuscheck/run_now.sh [new file with mode: 0755]
tools/statuscheck/start.sh [new file with mode: 0755]
tools/statuscheck/start_2.sh [new file with mode: 0755]
tools/statuscheck/status.html [new file with mode: 0644]
tools/statuscheck/statuscheck.py [new file with mode: 0644]
tools/statuscheck/statuscheck_remote.py [new file with mode: 0644]
tools/statuscheck/statusreport.php [new file with mode: 0755]
tools/statuscheck/statusreport.py [new file with mode: 0644]
tools/statuscheck/stop.sh [new file with mode: 0755]
tools/statuscheck/test.py [new file with mode: 0755]
tools/stylecheck/got_generic_try_except.py [new file with mode: 0755]
tools/stylecheck/got_lambda.py [new file with mode: 0755]
tools/stylecheck/stylecheck.py [new file with mode: 0755]
tools/testnodes/README [new file with mode: 0644]
tools/testnodes/plcapilib.py [new file with mode: 0755]
tools/testnodes/test_base.sh [new file with mode: 0755]
tools/testnodes/test_getsshkeys.sh [new file with mode: 0755]
tools/testnodes/test_getsshkeys_remote.py [new file with mode: 0755]
tools/testnodes/test_pacmansummary.sh [new file with mode: 0755]
tools/testnodes/test_pacmansummary_remote.py [new file with mode: 0755]
tools/testnodes/testnodes.py [new file with mode: 0644]
tools/xsugar/README.txt [new file with mode: 0644]
tools/xsugar/config.sh [new file with mode: 0755]
tools/xsugar/pacgroups.xsg [new file with mode: 0644]
tools/xsugar/pacpackages.xsg [new file with mode: 0755]
tools/xsugar/test1.sh [new file with mode: 0755]
tools/xsugar/test1.txt [new file with mode: 0644]
tools/xsugar/test1.xml [new file with mode: 0644]
tools/xsugar/test2.sh [new file with mode: 0755]
tools/xsugar/test2.txt [new file with mode: 0644]
tools/xsugar/test2.xml [new file with mode: 0644]
tools/xsugar/test3.sh [new file with mode: 0755]
tools/xsugar/test3.txt [new file with mode: 0644]
tools/xsugar/test4.sh [new file with mode: 0755]
tools/xsugar/test4.txt [new file with mode: 0644]
tpfiles/PlanetLab-Updates.3b1a950673d03d95577af97153248564000cef0f.tpfile [new file with mode: 0644]
tpfiles/PlanetLab-Updates.MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAMo+lp8V+eNwbEHtQBWMe_b6QBlKWLLumzPHNNpKYqF7SqLU8Twos_iFv_vCz3kAzZ8XDGzfDW+DAf8SHZXiEVECAwEAAQ.tpfile [new file with mode: 0644]
tpfiles/PlanetLab-V3.MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAMo+lp8V+eNwbEHtQBWMe_b6QBlKWLLumzPHNNpKYqF7SqLU8Twos_iFv_vCz3kAzZ8XDGzfDW+DAf8SHZXiEVECAwEAAQ.tpfile [new file with mode: 0644]
tpfiles/PlanetLab-V4.MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBANYjI_jXNLDUJl5Ree3IdQELzOYCpFAjkIy_T2XfIriItPt9GQBOrgBBIrfQ3asL9mNuS0f1o1FuiGk_U4SNRnUCAwEAAQ.tpfile [new file with mode: 0644]
tpfiles/PlanetLab.42748cbed7f4a5fcafac12352332a8eb70f3179d.tpfile [new file with mode: 0644]
tpfiles/PlanetLab.MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAL5RyfKp+Zqdh_1tCqFHLZboanf7aMBjnyMqM_a3Qy6p34m++5y1C1f8aBYt6RKd7O4v6nMWqMC9abjNshnqjV0CAwEAAQ.tpfile [new file with mode: 0644]
tpfiles/default.MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKgZCjfKDl9ISoclfBuZsQze6bXtu+QYF64TLQlI9fgEg2CDyGQVOsZ2CaX1ZEZ_O69AYZp8nj+YJLIJM3+W3DMCAwEAAQ.tpfile [new file with mode: 0644]
tpfiles/justin-release.MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBALtFvqwbOuIg_qSNO83st_uH95vdmdrLmzum7aKCQ59eKyBicN146+1ne+Liy3zVvpMvSE5ENYw87R0gm_IqFmUCAwEAAQ.tpfile [new file with mode: 0644]
tpfiles/smbaker-release.MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBALtGteQPdLa0kYv+klFWTklH9Y7frYhl5JV1hgJa5PlGI3yK+R22UsD65_J4PV92RUgVd_uJMuB8Q4bi1w4o6JMCAwEAAQ.tpfile [new file with mode: 0644]
tpfiles/stork.MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBALAfnXGY23wti1DrlMU2i4292LS6Pd1j6JyL3wZjCs3TIn0bmKDX4kPUUGJ3cExU7FUtgm6FX8h5daNojni7wVECAwEAAQ.tpfile [new file with mode: 0644]
webpage/Links.html [new file with mode: 0644]
webpage/about.html [new file with mode: 0644]
webpage/advanced.html [new file with mode: 0644]
webpage/apps.html [new file with mode: 0644]
webpage/arch.html [new file with mode: 0644]
webpage/architecture.JPG [new file with mode: 0644]
webpage/architecture.jpg [new file with mode: 0644]
webpage/blkfade.gif [new file with mode: 0644]
webpage/cleantut.html [new file with mode: 0644]
webpage/coblitz.gif [new file with mode: 0644]
webpage/comon.gif [new file with mode: 0644]
webpage/construction030.gif [new file with mode: 0644]
webpage/contact.html [new file with mode: 0644]
webpage/coral.jpg [new file with mode: 0644]
webpage/developer.html [new file with mode: 0644]
webpage/docconfig.html [new file with mode: 0644]
webpage/docfiles.html [new file with mode: 0644]
webpage/docgen.html [new file with mode: 0644]
webpage/docinst.html [new file with mode: 0644]
webpage/docmain.html [new file with mode: 0644]
webpage/docman.html [new file with mode: 0644]
webpage/docpac.html [new file with mode: 0644]
webpage/docpkg.html [new file with mode: 0644]
webpage/doctp.html [new file with mode: 0644]
webpage/docup.html [new file with mode: 0644]
webpage/downloads/initscript [new file with mode: 0755]
webpage/downloads/initscript_stage2 [new file with mode: 0644]
webpage/downloads/initscript_stage2.signature [new file with mode: 0644]
webpage/downloads/sample-stork.conf [new file with mode: 0644]
webpage/downloads/stopscript [new file with mode: 0644]
webpage/downloads/stopscript_stage2 [new file with mode: 0644]
webpage/example.tar.gz [new file with mode: 0644]
webpage/filelist.html [new file with mode: 0644]
webpage/images/arch/group1.jpg [new file with mode: 0644]
webpage/images/arch/group2.jpg [new file with mode: 0644]
webpage/images/arch/rep1.JPG [new file with mode: 0644]
webpage/images/arch/rep2.JPG [new file with mode: 0644]
webpage/images/arch/rep3.JPG [new file with mode: 0644]
webpage/images/arch/share1.jpg [new file with mode: 0644]
webpage/images/arch/share2.jpg [new file with mode: 0644]
webpage/images/arch/share3.jpg [new file with mode: 0644]
webpage/images/arch/share4.jpg [new file with mode: 0644]
webpage/images/pl_logo.png [new file with mode: 0644]
webpage/index.html [new file with mode: 0644]
webpage/metadata.html [new file with mode: 0644]
webpage/olddesign/future.html [new file with mode: 0644]
webpage/olddesign/globe8.gif [new file with mode: 0644]
webpage/olddesign/index.html [new file with mode: 0644]
webpage/olddesign/lost+found.html [new file with mode: 0644]
webpage/olddesign/mainpage.html [new file with mode: 0644]
webpage/olddesign/platform.html [new file with mode: 0644]
webpage/olddesign/powered_by_pl.png [new file with mode: 0644]
webpage/olddesign/sidebar.html [new file with mode: 0644]
webpage/olddesign/slice.html [new file with mode: 0644]
webpage/olddesign/sorry.html [new file with mode: 0644]
webpage/olddesign/stork-noink2.jpg [new file with mode: 0644]
webpage/repositorysetup.html [new file with mode: 0644]
webpage/stork-enduser-tar-2.0b-30.tar.gz [new file with mode: 0644]
webpage/stork.css [new file with mode: 0644]
webpage/storkasyum.html [new file with mode: 0644]
webpage/storkclient.html [new file with mode: 0644]
webpage/storkutil.html [new file with mode: 0644]
webpage/template-grad.html [new file with mode: 0644]
webpage/template.html [new file with mode: 0644]
webpage/tpcheck.JPG [new file with mode: 0644]
webpage/tpcheck.jpg [new file with mode: 0644]
webpage/tpfile.html [new file with mode: 0644]
webpage/tptags.html [new file with mode: 0644]
webpage/tut.html [new file with mode: 0644]
webpage/tutconfig.html [new file with mode: 0644]
webpage/tutfiles.html [new file with mode: 0644]
webpage/tutgen.html [new file with mode: 0644]
webpage/tutgui.html [new file with mode: 0644]
webpage/tutinst.html [new file with mode: 0644]
webpage/tutmain.html [new file with mode: 0644]
webpage/tutman.html [new file with mode: 0644]
webpage/tutorial-walkthrough.html [new file with mode: 0644]
webpage/tutpac.html [new file with mode: 0644]
webpage/tutpkg.html [new file with mode: 0644]
webpage/tuttp.html [new file with mode: 0644]
webpage/tutup.html [new file with mode: 0644]
webpage/util.html [new file with mode: 0644]

diff --git a/2.0/c/keyconvert/Makefile b/2.0/c/keyconvert/Makefile
new file mode 100644 (file)
index 0000000..eda3f9b
--- /dev/null
@@ -0,0 +1,5 @@
+keyconvert:
+       gcc -o keyconvert keyconvert.c keyconvertmain.c b64decode.c /usr/lib/libcrypto.a
+
+clean:
+       rm -rf keyconvert
diff --git a/2.0/c/keyconvert/README b/2.0/c/keyconvert/README
new file mode 100644 (file)
index 0000000..1826d15
--- /dev/null
@@ -0,0 +1,8 @@
+for conversion of SSH public keys to SSL keys
+
+keyconvert.c - C version
+keyconvert.py - python version
+asn1.py - python ASN1 routines for use by keyconvert.py
+
+Official python versions of the code have been moved to the libraries 
+directory (trunk/lib/ravenlib). 
diff --git a/2.0/c/keyconvert/asn1.py b/2.0/c/keyconvert/asn1.py
new file mode 120000 (symlink)
index 0000000..13987a3
--- /dev/null
@@ -0,0 +1 @@
+../../../lib/ravenlib/files/asn1.py
\ No newline at end of file
diff --git a/2.0/c/keyconvert/b64decode.c b/2.0/c/keyconvert/b64decode.c
new file mode 100644 (file)
index 0000000..07dc452
--- /dev/null
@@ -0,0 +1,62 @@
+#include "b64decode.h"
+
+#define UNDEF_CH -2
+
+char s64table[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
+int     charmap[257];
+int     *pcharmap;
+
+void b64decodeinit()
+{
+   int i;
+   char ch;
+
+   pcharmap= charmap + 1;
+
+  for (i = 0; i <= 255; i++)
+    pcharmap[i] = UNDEF_CH;
+
+  for (i = 0; i < 64; i++) {
+    ch = s64table[i];
+    if (pcharmap[ch] == UNDEF_CH)
+      pcharmap[ch] = i;
+  }
+}
+
+int b64decode(char *s, char *dest)
+{\r
+  int k,k2,i;\r
+\r
+  i=0;\r
+  while (*s!='\0') {\r
+    /* byte #1 */\r
+    if ((*s=='=') || ((k=pcharmap[(unsigned char) (*(s++))])<0))\r
+      return -1;\r
+\r
+    /* byte #2 */\r
+    if ((*s=='=') || ((k2=pcharmap[(unsigned char) (*(s++))])<0))\r
+      return -1;\r
+    else\r
+      dest[i++] = (k<<2) + (k2>>4);\r
+\r
+    /* byte #3 */\r
+    if (*s=='=')\r
+      s++;\r
+    else\r
+      if ((k=pcharmap[(unsigned char) (*(s++))])<0)\r
+       return -1;\r
+      else\r
+       dest[i++] = (k2<<4) + (k>>2);\r
+\r
+    /* byte #4 */\r
+    if (*s=='=')\r
+      s++;\r
+    else\r
+      if ((k2=pcharmap[(unsigned char) (*(s++))])<0)\r
+       -1;\r
+      else\r
+       dest[i++] = (k<<6) + (k2);\r
+  }\r
+\r
+  return i;\r
+}
diff --git a/2.0/c/keyconvert/keyconvert b/2.0/c/keyconvert/keyconvert
new file mode 100755 (executable)
index 0000000..3bdff8f
Binary files /dev/null and b/2.0/c/keyconvert/keyconvert differ
diff --git a/2.0/c/keyconvert/keyconvert.c b/2.0/c/keyconvert/keyconvert.c
new file mode 100644 (file)
index 0000000..b2fdfd1
--- /dev/null
@@ -0,0 +1,126 @@
+#include <stdlib.h>
+#include <openssl/bn.h>
+#include <openssl/rsa.h>
+#include <openssl/dsa.h>
+
+#ifndef TRUE
+#define TRUE 1
+#define FALSE (!TRUE)
+#endif
+
+void write_rsa(FILE *fout, char *estr, int elen, char *nstr, int nlen)
+{
+    RSA *rsa;
+    BIGNUM *r1, *r2;
+
+    rsa = RSA_new();
+    rsa->e = BN_new();
+    rsa->n = BN_new();
+
+    r1 = BN_bin2bn(estr, elen, rsa->e);
+    r2 = BN_bin2bn(nstr, nlen, rsa->n);
+
+    PEM_write_RSA_PUBKEY(fout, rsa);
+
+    // free rsa ?
+}
+
+void write_dsa(FILE *fout, char *pstr, int plen, char *qstr, int qlen, char *gstr, int glen, char *pkstr, int pklen)
+{
+    DSA *dsa;
+
+    dsa = DSA_new();
+    dsa->p = BN_new();
+    dsa->q = BN_new();
+    dsa->g = BN_new();
+    dsa->pub_key = BN_new();
+
+    BN_bin2bn(pstr, plen, dsa->p);
+    BN_bin2bn(qstr, qlen, dsa->q);
+    BN_bin2bn(gstr, glen, dsa->g);
+    BN_bin2bn(pkstr, pklen, dsa->pub_key);
+
+    PEM_write_DSA_PUBKEY(fout, dsa);
+
+    // free dsa ?
+}
+
+int get_str(char **src, int *len, char *dest)
+{
+   int *iptr = (int*) (*src);
+   int thislen = ntohl(*iptr);
+
+   // eat 4 bytes
+   (*len) -= 4;
+   (*src) = (*src) + 4;
+
+//   fprintf(stdout, "thislen = %d\n", thislen);
+
+   if (thislen > *len) {
+       fprintf(stdout, "thislen(%d) > *len(%d)\n", thislen, *len);
+       return -1;
+   }
+
+   memcpy(dest, *src, thislen);
+
+   (*len) = (*len) - thislen;
+   (*src) = (*src) + thislen;
+
+   // null terminate it
+   *(dest + thislen) = '\0';
+
+   return thislen;
+}
+
+int openssh_binary_to_openssl(char *s, int len, FILE *fout)
+{
+    char keytype[1024], estr[1024], nstr[1024], pstr[1024], qstr[1024], gstr[1024], pkstr[1024];
+    int elen, nlen, plen, qlen, glen, pklen;
+    int result;
+
+    result = get_str(&s, &len, keytype);
+    if (result <= 0) {
+        return FALSE;
+    }
+
+    fprintf(stdout, "keytype = %s\n", keytype);
+
+    if (strcmp(keytype, "ssh-rsa") == 0) {
+        elen = get_str(&s, &len, estr);
+//        fprintf(stdout, "elen = %d\n", elen);
+        if (elen <= 0) {
+            return FALSE;
+        }
+        nlen = get_str(&s, &len, nstr);
+//        fprintf(stdout, "nlen = %d\n", nlen);
+        if (nlen <= 0) {
+            return FALSE;
+        }
+        write_rsa(fout, estr, elen, nstr, nlen);
+    } else if (strcmp(keytype, "ssh-dss") == 0) {
+        plen = get_str(&s, &len, pstr);
+//        fprintf(stdout, "plen = %d\n", plen);
+        if (plen <= 0) {
+            return FALSE;
+        }
+        qlen = get_str(&s, &len, qstr);
+//        fprintf(stdout, "qlen = %d\n", qlen);
+        if (qlen <= 0) {
+            return FALSE;
+        }
+        glen = get_str(&s, &len, gstr);
+//        fprintf(stdout, "glen = %d\n", glen);
+        if (glen <= 0) {
+            return FALSE;
+        }
+        pklen = get_str(&s, &len, pkstr);
+//        fprintf(stdout, "pklen = %d\n", pklen);
+        if (pklen <= 0) {
+            return FALSE;
+        }
+        write_dsa(fout, pstr, plen, qstr, qlen, gstr, glen, pkstr, pklen);
+    } else {
+        return FALSE;
+    }
+}
+
diff --git a/2.0/c/keyconvert/keyconvert.py b/2.0/c/keyconvert/keyconvert.py
new file mode 100644 (file)
index 0000000..3a55249
--- /dev/null
@@ -0,0 +1,194 @@
+# SSH to SSL Key Converter
+# Description: Convert SSH public keys to OpenSSL public keys
+# Author: Scott Baker
+# Project: Raven, http://raven.cs.arizona.edu
+
+import base64
+import os
+import socket
+import sys
+import tempfile
+
+import asn1
+
+def dec2hex(d):
+        hv = hex(d).replace('0x', '')
+        if (len(hv) == 1) or (len(hv) == 3):\r
+            hv = '0'+hv
+        return hv
+
+def to_hex(s):
+    lst = []\r
+    for ch in s:\r
+        hv = hex(ord(ch)).replace('0x', '')\r
+        if len(hv) == 1:\r
+            hv = '0'+hv\r
+        lst.append(hv)\r
+\r
+    return reduce(lambda x,y:x+y, lst)\r
+
+def get_str(src):
+    len = (ord(src[3]) << 24) + (ord(src[2]) <<16) + (ord(src[1]) << 8) + ord(src[0])
+    len = socket.ntohl(len)
+
+    src = src[4:]
+    dest = src[:len]
+    src = src[len:]
+
+    return (src, dest)
+
+# convert a string in DER format to PEM format
+
+def pem_format(x):
+       x = base64.b64encode(x)
+       result = "-----BEGIN PUBLIC KEY-----\n"
+       while (x != ""):
+          result = result + x[:64] + "\n"
+          x = x[64:]
+       result = result + "-----END PUBLIC KEY-----\n"
+       return result
+
+# an all-python solution, using ASN.1 python routines
+
+def ssh_to_ssl(key_str):
+   tmp = base64.b64decode(key_str)
+   (tmp, kind) = get_str(tmp)
+
+   if (kind == "ssh-rsa"):
+       (tmp, e) = get_str(tmp)
+       (tmp, n) = get_str(tmp)
+
+       der = asn1.rsa_pubkey(n,e).encode()
+       ssl_key_str = pem_format(der)
+
+       f = open("foo.der","w")
+       f.write(der)
+       f.close()
+   else:
+       (tmp, p) = get_str(tmp)
+       (tmp, q) = get_str(tmp)
+       (tmp, g) = get_str(tmp)
+       (tmp, pk) = get_str(tmp)
+
+       der = asn1.dsa_pubkey(p,q,g,pk).encode()
+       ssl_key_str = pem_format(der)
+
+       f = open("foo.der","w")
+       f.write(der)
+       f.close()
+
+   return ssl_key_str
+
+# a hybrid python/OpenSSL solution, letting openSSL do some of the work
+# for us.
+
+def ssh_to_ssl_old(key_str):
+   (conf_fd, conf_fn) = tempfile.mkstemp(prefix="keyconv", suffix="conf")
+   (der_fd, der_fn) = tempfile.mkstemp(prefix="keyconv", suffix="der")
+   (pem_fd, pem_fn) = tempfile.mkstemp(prefix="keyconv", suffix="pem")
+
+   os.close(conf_fd)
+   os.close(der_fd)
+   os.close(pem_fd)
+
+   try:
+       tmp = base64.b64decode(key_str)
+       (tmp, kind) = get_str(tmp)
+
+       if (kind == "ssh-rsa"):
+           (tmp, e) = get_str(tmp)
+           (tmp, n) = get_str(tmp)
+
+           f = file(conf_fn, "w")
+           f.write("asn1=SEQUENCE:pubkeyinfo\n\n")
+           f.write("[pubkeyinfo]\n")
+           f.write("algorithm=SEQUENCE:rsa_alg\n")
+           f.write("pubkey=BITWRAP,SEQUENCE:rsapubkey\n\n")
+           f.write("[rsa_alg]\n")
+           f.write("algorithm=OID:rsaEncryption\n")\r
+           f.write("parameter=NULL\n\n")\r
+           f.write("[rsapubkey]\n")\r
+           f.write("n=INTEGER:0x" + to_hex(n) + "\n")\r
+           f.write("e=INTEGER:0x" + to_hex(e) + "\n")\r
+           f.close()\r
+\r
+           os.system("openssl asn1parse -genconf " + conf_fn + " -out " + der_fn)
+           os.system("openssl rsa -pubin -inform der -in " + der_fn + " -out " + pem_fn)
+
+           f = open(pem_fn,"r")
+           ssl_key_str = f.read()
+           f.close()
+       else:
+           (tmp, p) = get_str(tmp)
+           (tmp, q) = get_str(tmp)
+           (tmp, g) = get_str(tmp)
+           (tmp, pk) = get_str(tmp)
+
+           f = file(conf_fn, "w")
+           f.write("asn1=SEQUENCE:pubkeyinfo\n\n")
+           f.write("[pubkeyinfo]\n")
+           f.write("algorithm=SEQUENCE:dsa_alg\n")
+
+           # 02 means integer
+           # next byte is length.
+           #   if hi bit is unset then it's a short length (less than 128)
+           #   if hi bit is set then it's a long length
+           #            first byte is 0x80 + number of length bytes
+           #            remaining n bytes are length bytes
+
+           if len(pk)>=256:
+              f.write("pubkey=FORMAT:HEX,BITSTRING:" + "0282" + dec2hex(len(pk)) + to_hex(pk) + "\n\n")
+           elif len(pk)>=128:
+              f.write("pubkey=FORMAT:HEX,BITSTRING:" + "0281" + dec2hex(len(pk)) + to_hex(pk) + "\n\n")
+           else:
+              f.write("pubkey=FORMAT:HEX,BITSTRING:" + "02" + dec2hex(len(pk)) + to_hex(pk) + "\n\n")
+
+           f.write("[dsa_alg]\n")
+           f.write("algorithm=OID:dsaEncryption\n")\r
+           f.write("params=SEQUENCE:dssparam\n")\r
+           f.write("[dssparam]\n")\r
+           f.write("p=INTEGER:0x" + to_hex(p) + "\n")\r
+           f.write("q=INTEGER:0x" + to_hex(q) + "\n")\r
+           f.write("g=INTEGER:0x" + to_hex(g) + "\n")\r
+           f.close()\r
+\r
+           os.system("openssl asn1parse -genconf " + conf_fn + " -out " + der_fn)
+           os.system("openssl dsa -pubin -inform der -in " + der_fn + " -out " + pem_fn)
+
+           f = open(pem_fn,"r")
+           ssl_key_str = f.read()
+           f.close()
+   finally:
+       if os.path.exists(conf_fn):
+           os.remove(conf_fn)
+       if os.path.exists(der_fn):
+           os.remove(der_fn)
+       if os.path.exists(pem_fn):
+           os.remove(pem_fn)
+       pass
+
+   return ssl_key_str
+
+def main():
+   if (len(sys.argv) != 3):
+       print >> sys.stderr,  "syntax: keyconvert <infile> <outfile>"
+       sys.exit(1)
+
+   f = open(sys.argv[1])
+   line = f.read()
+   f.close()
+
+   parts = line.split(" ")
+   ssh_key_str = parts[1]
+
+   ssl_key_str = ssh_to_ssl(ssh_key_str)
+
+   f = open(sys.argv[2], "w")
+   f.write(ssl_key_str)
+   f.close()
+
+if __name__ == "__main__":
+   main()
+
+
+
diff --git a/2.0/c/keyconvert/keyconvertext.c b/2.0/c/keyconvert/keyconvertext.c
new file mode 100644 (file)
index 0000000..d2c9e13
--- /dev/null
@@ -0,0 +1,34 @@
+#include <python2.3/Python.h>
+
+#include "keyconvert.h"
+
+static PyObject *keyconvert_opensshtoopenssl(PyObject *self, PyObject *args)
+{
+    const char *fn;
+    const char *s;
+    int len;
+    FILE *fout;
+
+    PyArg_ParseTuple(args, "ss#", &fn, &s, &len);
+
+    fout = fopen(fn, "wt");
+    if (fout == NULL) {
+        return Py_BuildValue("i", 0);
+    } else {
+        fprintf(stdout, "len = %d\n", len);
+        openssh_binary_to_openssl(s, len, fout);
+        fclose(fout);
+    }
+
+    return Py_BuildValue("i", 1);
+}
+
+static PyMethodDef KeyConvertMethods[] = {
+    {"opensshtoopenssl", keyconvert_opensshtoopenssl, METH_VARARGS, "convert an openssh key to an openssl key"},
+    {NULL, NULL, 0, NULL}};
+
+PyMODINIT_FUNC initkeyconvert(void)
+{
+    (void) Py_InitModule("keyconvert", KeyConvertMethods);
+}
+
diff --git a/2.0/c/keyconvert/keyconvertmain.c b/2.0/c/keyconvert/keyconvertmain.c
new file mode 100644 (file)
index 0000000..d59dba8
--- /dev/null
@@ -0,0 +1,65 @@
+#include <stdio.h>
+#include "keyconvert.h"
+#include "b64decode.h"
+
+int main(int argc, char **argv)
+{
+    FILE *fin, *fout;
+    char inbytes[16384], *inptr;
+    char decodedKey[16384];
+    int len;
+
+    b64decodeinit();
+
+    if (argc != 3) {
+        fprintf(stderr, "syntax: keyconvert <infile> <outfile>\n");
+        exit(1);
+    }
+
+    fin = fopen(argv[1], "rt");
+    if (fin == NULL) {
+        fprintf(stderr, "failed to open %s\n", argv[1]);
+        exit(1);
+    }
+
+    memset(inbytes, 0, sizeof(inbytes));
+    len = fread(inbytes, 1, sizeof(inbytes), fin);
+    fclose(fin);
+
+ //   fprintf(stdout, "read %d bytes from openssh file\n", len);
+
+    inptr = inbytes;
+
+    // skip leading space
+    while (isspace(*inptr)) inptr++;
+
+    // skip the ssh-rsa or ssh-dsa part
+    while (*inptr && !isspace(*inptr)) inptr++;
+
+    // skip spaces between ssh-rsa/ssh-dsa and key
+    while (isspace(*inptr)) inptr++;
+
+    // if there is any part after the key, terminate it
+    if (strchr(inptr, ' ') != NULL) {
+        *strchr(inptr, ' ') = '\0';
+    }
+
+    // at this point, inptr contains the b64 encoded openssh key
+
+    len = b64decode(inptr, decodedKey);
+
+//    fprintf(stdout, "decoded openssh file length is %d\n", len);
+
+    fout = fopen(argv[2], "wt");
+    if (fout == NULL) {
+        fprintf(stderr, "failed to open output file %s\n", argv[2]);
+        exit(1);
+    }
+
+    openssh_binary_to_openssl(decodedKey, len, fout);
+
+    fclose(fout);
+
+    fprintf(stdout, "completed\n");
+    return 0;
+}
diff --git a/2.0/c/keyconvert/setup.py b/2.0/c/keyconvert/setup.py
new file mode 100644 (file)
index 0000000..6c538b2
--- /dev/null
@@ -0,0 +1,16 @@
+"""
+   This file can be used to build keyconvert as a python extension
+
+   use "python ./setup.py build"
+"""
+
+from distutils.core import setup, Extension
+
+module1 = Extension('keyconvert',
+                    libraries = ['ssl'], 
+                    sources = ['keyconvert.c', 'keyconvertext.c'])
+
+setup (name = 'keyconvert',
+              version = '1.0',
+              description = 'key converter',
+              ext_modules = [module1])
diff --git a/2.0/c/keyconvert/test.sh b/2.0/c/keyconvert/test.sh
new file mode 100755 (executable)
index 0000000..34fc7c2
--- /dev/null
@@ -0,0 +1,33 @@
+# this scripts tests the key conversion routines
+# it converts the _pub files in test/ from openssh to openssl
+# it then verifies signatures with openssl (see keytest.sh)
+
+rm -rf testout
+mkdir testout
+
+# rsa1 keys
+# these are in a different format
+#./keyconvert test/openssh_rsa1_512.pub testout/openssl_rsa1_512.pem
+#./keyconvert test/openssh_rsa1_1024.pub testout/openssl_rsa1_1024.pem
+#./keyconvert test/openssh_rsa1_2048.pub testout/openssl_rsa1_2048.pem
+
+# rsa2 keys
+./keyconvert test/openssh_rsa_512.pub testout/openssl_rsa_512.pem
+./keyconvert test/openssh_rsa_1024.pub testout/openssl_rsa_1024.pem
+./keyconvert test/openssh_rsa_2048.pub testout/openssl_rsa_2048.pem
+
+# dsa keys
+./keyconvert test/openssh_dsa_512.pub testout/openssl_dsa_512.pem
+./keyconvert test/openssh_dsa_1024.pub testout/openssl_dsa_1024.pem
+./keyconvert test/openssh_dsa_2048.pub testout/openssl_dsa_2048.pem
+
+# make a test file to encrypt
+echo "this is a test to see if the key conversion routines work" > test.txt
+
+# test the keys
+./testkey.sh -sha1 rsa_512
+./testkey.sh -sha1 rsa_1024
+./testkey.sh -sha1 rsa_2048
+./testkey.sh -dss1 dsa_512
+./testkey.sh -dss1 dsa_1024
+./testkey.sh -dss1 dsa_2048
diff --git a/2.0/c/keyconvert/test/openssh_dsa_1024 b/2.0/c/keyconvert/test/openssh_dsa_1024
new file mode 100644 (file)
index 0000000..f6c3f7d
--- /dev/null
@@ -0,0 +1,12 @@
+-----BEGIN DSA PRIVATE KEY-----
+MIIBvQIBAAKBgQDx32kPfS+uiVq6pqgEGORLZx0EfSXvlluD/nKtLQoBxDY7JntP
+oVyI29KPVSnsjqEAVI7r9pEJ/aszrc4jLj5dbjqehLF5qnkrr/XAcTv4MsxKuyDy
+6R0AhU91YrkChO8JedxbUdf6lI3DLREaRIvLhHew05k34W0dGdEV/U/hvQIVANT3
+PYXSBKIShJovHfC4YQ65kOy3AoGBANs/BTSWWUEs3jppa65VZV/8WbV7Q3uV9PVu
+Ljf6E9DKFI5PPbJOMPbX7XF3zrCRtiTVl1dTc/xH7LYXvHTVU469mRpdNDwCMF5r
+y1bWbVVKhIrcrlVnEF3+up2jD7Xu+tfIn/YmJyrHhvKV842HLv+LAbUJbMQ/9POt
+5w9RufrNAoGBAJYsrPd4VhUQwTzWW/LQmIevjT/X5T2putWXttsZ1KzMP2qi9rf8
+GATnPJahYq1DXgNSPcqIHF5FUgVEITJ3R/CTCFiKF/+N5yBzEXmbo+HGG8W1hKnp
+QdzVKZq0esGwEKfkZ0lUPJCh5IYyRL8ceh8KRjEFSKuSEPZqwrngklw0AhUAg8tD
+T7VLBFkDCC7bhsKqFkJ4AAo=
+-----END DSA PRIVATE KEY-----
diff --git a/2.0/c/keyconvert/test/openssh_dsa_1024.pub b/2.0/c/keyconvert/test/openssh_dsa_1024.pub
new file mode 100644 (file)
index 0000000..d81b006
--- /dev/null
@@ -0,0 +1 @@
+ssh-dss AAAAB3NzaC1kc3MAAACBAPHfaQ99L66JWrqmqAQY5EtnHQR9Je+WW4P+cq0tCgHENjsme0+hXIjb0o9VKeyOoQBUjuv2kQn9qzOtziMuPl1uOp6EsXmqeSuv9cBxO/gyzEq7IPLpHQCFT3ViuQKE7wl53FtR1/qUjcMtERpEi8uEd7DTmTfhbR0Z0RX9T+G9AAAAFQDU9z2F0gSiEoSaLx3wuGEOuZDstwAAAIEA2z8FNJZZQSzeOmlrrlVlX/xZtXtDe5X09W4uN/oT0MoUjk89sk4w9tftcXfOsJG2JNWXV1Nz/Efsthe8dNVTjr2ZGl00PAIwXmvLVtZtVUqEityuVWcQXf66naMPte7618if9iYnKseG8pXzjYcu/4sBtQlsxD/0863nD1G5+s0AAACBAJYsrPd4VhUQwTzWW/LQmIevjT/X5T2putWXttsZ1KzMP2qi9rf8GATnPJahYq1DXgNSPcqIHF5FUgVEITJ3R/CTCFiKF/+N5yBzEXmbo+HGG8W1hKnpQdzVKZq0esGwEKfkZ0lUPJCh5IYyRL8ceh8KRjEFSKuSEPZqwrngklw0 smbaker@test64
diff --git a/2.0/c/keyconvert/test/openssh_dsa_2048 b/2.0/c/keyconvert/test/openssh_dsa_2048
new file mode 100644 (file)
index 0000000..b43eb65
--- /dev/null
@@ -0,0 +1,20 @@
+-----BEGIN DSA PRIVATE KEY-----
+MIIDPgIBAAKCAQEAhvJpPI7AbHEyXauGmXyCGsVCkTXD4i9b/eobbwG1Hhm8FvtM
+wq5oopWItMH0HMcKfBGmHlp46u5KJcYmrSsHSDX+6n9+Mw/Pn2Sldg26OTkyfsaV
+qelapH0Q3ILt8fTrHosy9aosBiZbu4wPdjiBs441ekhGpZfsdaa3g657VGSG1YqH
+S/eMw7fs068Vsp5ickYCapI+XICFnf2lQesC4gfElDRGOG3/6n0Pkhsw0TwXRgka
+GgXfxHR4CPIlH7fV1/QIYXLXRU8ftkrwakIltSrl50pQOXDuCOGR49ng2JaxFdWv
+sjUundZsmnWjGFFE2ORrTBFHagmwOsQXY4vOXwIVAJtUPdFxKVNC2t89reLuOGao
+FFxJAoIBAQCAZYog0D72F0TIAIMIahnDDNjN2T3Sb3Zqhd27oExdUpbNDbM8F+qY
+HpqJRtQRc59sSsroif+K0yEaeReOapEb6Cf1N4yGDppr1ClMBGHKk/Wsjf/ASqa8
+/mibtSF4P5I6e0w8FWrTrhu2vJ9W2ONRqVAUxgBMsEKXFXvkYtf31LKsQFUEcmtO
+uXalXiKAdr+APQya6lDiUxGELjuNzwsGxjdo15wa6NcKLfHUv3XYU6WxL2USGFBW
+5I1aHu/Uc7YGhl2I9fSulzotEc4PV40nlC54NVx65pQjeViJ4ZSSlrSm58xxfrdF
+TnWvEJjSu6CAFYfWEzx5RtbjuWMk6yAdAoIBAFx7TsT+G3sryKRs4DRWSSlU8PAO
+2I326UJps4CiiAS6x6XGnB9kLX3E/xfdmM9mrhQBNn0OPo5iCK2me1W2sXQ6QWD/
+dRhKwIcrHVexwu5iMtoMtMAeDI5P7/ahVSIxDAKkABD4hDJB3UcTDYXaz1/bNqW6
+FXYK2C9CrfhYF3NX28MU+eJhIFRpEaVU42bQ5OeDaJiz2tQeSrT5LqbV58RhARew
+9tK1FOCBTBsJ+bBr4Q5f9bFNpSqqn513H/cc6qkuRCluxeGTAtNt5qdHYH+rvxey
+FpBzy8MmXkHxsQWxZ1DAkaUgPaxXevNQRk/iNsk1W3zWqJ72KI5lNFgJ9yECFA/o
+gWjBm06JTkYWBOgkYRRVRzr7
+-----END DSA PRIVATE KEY-----
diff --git a/2.0/c/keyconvert/test/openssh_dsa_2048.pub b/2.0/c/keyconvert/test/openssh_dsa_2048.pub
new file mode 100644 (file)
index 0000000..69d00b6
--- /dev/null
@@ -0,0 +1 @@
+ssh-dss AAAAB3NzaC1kc3MAAAEBAIbyaTyOwGxxMl2rhpl8ghrFQpE1w+IvW/3qG28BtR4ZvBb7TMKuaKKViLTB9BzHCnwRph5aeOruSiXGJq0rB0g1/up/fjMPz59kpXYNujk5Mn7GlanpWqR9ENyC7fH06x6LMvWqLAYmW7uMD3Y4gbOONXpIRqWX7HWmt4Oue1RkhtWKh0v3jMO37NOvFbKeYnJGAmqSPlyAhZ39pUHrAuIHxJQ0Rjht/+p9D5IbMNE8F0YJGhoF38R0eAjyJR+31df0CGFy10VPH7ZK8GpCJbUq5edKUDlw7gjhkePZ4NiWsRXVr7I1Lp3WbJp1oxhRRNjka0wRR2oJsDrEF2OLzl8AAAAVAJtUPdFxKVNC2t89reLuOGaoFFxJAAABAQCAZYog0D72F0TIAIMIahnDDNjN2T3Sb3Zqhd27oExdUpbNDbM8F+qYHpqJRtQRc59sSsroif+K0yEaeReOapEb6Cf1N4yGDppr1ClMBGHKk/Wsjf/ASqa8/mibtSF4P5I6e0w8FWrTrhu2vJ9W2ONRqVAUxgBMsEKXFXvkYtf31LKsQFUEcmtOuXalXiKAdr+APQya6lDiUxGELjuNzwsGxjdo15wa6NcKLfHUv3XYU6WxL2USGFBW5I1aHu/Uc7YGhl2I9fSulzotEc4PV40nlC54NVx65pQjeViJ4ZSSlrSm58xxfrdFTnWvEJjSu6CAFYfWEzx5RtbjuWMk6yAdAAABAFx7TsT+G3sryKRs4DRWSSlU8PAO2I326UJps4CiiAS6x6XGnB9kLX3E/xfdmM9mrhQBNn0OPo5iCK2me1W2sXQ6QWD/dRhKwIcrHVexwu5iMtoMtMAeDI5P7/ahVSIxDAKkABD4hDJB3UcTDYXaz1/bNqW6FXYK2C9CrfhYF3NX28MU+eJhIFRpEaVU42bQ5OeDaJiz2tQeSrT5LqbV58RhARew9tK1FOCBTBsJ+bBr4Q5f9bFNpSqqn513H/cc6qkuRCluxeGTAtNt5qdHYH+rvxeyFpBzy8MmXkHxsQWxZ1DAkaUgPaxXevNQRk/iNsk1W3zWqJ72KI5lNFgJ9yE= smbaker@test64
diff --git a/2.0/c/keyconvert/test/openssh_dsa_512 b/2.0/c/keyconvert/test/openssh_dsa_512
new file mode 100644 (file)
index 0000000..003f01c
--- /dev/null
@@ -0,0 +1,8 @@
+-----BEGIN DSA PRIVATE KEY-----
+MIH4AgEAAkEAm3PK+DSgbavp8uFzwHkLBQkAQ+zYH7oQQfVf9qfj9McPwPSRjyE2
+euX37kG9V+8fMYGkrXiAnTF338/7l/BitQIVAPhdznYDxCFE+K7Fkmric3uRLhKl
+AkASi9+yBXkSh/PBIB2VTwUNJ2Je2rMT/KArLw86dQuMdV2QPnCI4jwvFeWJW8q1
+CSKyBcwoxaSwPN6MAYNRLmPtAkA/5M4TgOWQjoUDc1DwwAFzl8kXc8Jywyz3Ck1a
+uCgs+unOttuDT+ZYicDRSnq7G3paTGm5U9h3Pf4BOzqKymxmAhUAsvh3vpJX52p7
+WTaXKaBm7ysblAE=
+-----END DSA PRIVATE KEY-----
diff --git a/2.0/c/keyconvert/test/openssh_dsa_512.pub b/2.0/c/keyconvert/test/openssh_dsa_512.pub
new file mode 100644 (file)
index 0000000..a4a4f6e
--- /dev/null
@@ -0,0 +1 @@
+ssh-dss AAAAB3NzaC1kc3MAAABBAJtzyvg0oG2r6fLhc8B5CwUJAEPs2B+6EEH1X/an4/THD8D0kY8hNnrl9+5BvVfvHzGBpK14gJ0xd9/P+5fwYrUAAAAVAPhdznYDxCFE+K7Fkmric3uRLhKlAAAAQBKL37IFeRKH88EgHZVPBQ0nYl7asxP8oCsvDzp1C4x1XZA+cIjiPC8V5YlbyrUJIrIFzCjFpLA83owBg1EuY+0AAABAP+TOE4DlkI6FA3NQ8MABc5fJF3PCcsMs9wpNWrgoLPrpzrbbg0/mWInA0Up6uxt6WkxpuVPYdz3+ATs6ispsZg== smbaker@test64
diff --git a/2.0/c/keyconvert/test/openssh_rsa1_1024 b/2.0/c/keyconvert/test/openssh_rsa1_1024
new file mode 100644 (file)
index 0000000..1d814be
Binary files /dev/null and b/2.0/c/keyconvert/test/openssh_rsa1_1024 differ
diff --git a/2.0/c/keyconvert/test/openssh_rsa1_1024.pub b/2.0/c/keyconvert/test/openssh_rsa1_1024.pub
new file mode 100644 (file)
index 0000000..8e8d308
--- /dev/null
@@ -0,0 +1 @@
+1024 35 129881281989970257849297143265405883841808716551531717161470388680233069834806491515662719447667414192316994820475038514678885956467447964923197868990351993958234384078203216494595575140725420329195654521080877033819243506183873392482029450927674981321293693168525102276485740189208563187461931348496284073193 smbaker@test64
diff --git a/2.0/c/keyconvert/test/openssh_rsa1_2048 b/2.0/c/keyconvert/test/openssh_rsa1_2048
new file mode 100644 (file)
index 0000000..adf13a2
Binary files /dev/null and b/2.0/c/keyconvert/test/openssh_rsa1_2048 differ
diff --git a/2.0/c/keyconvert/test/openssh_rsa1_2048.pub b/2.0/c/keyconvert/test/openssh_rsa1_2048.pub
new file mode 100644 (file)
index 0000000..8e44071
--- /dev/null
@@ -0,0 +1 @@
+2048 35 24962157904933386430289996182561670350750587808098241441684009673343331428018121642773893758528257864455887921889391600744909650863357446121763274135964860311094796038726741333109129308021024853945167223976961404644818452025130516204197410684388539496264836113893019917274320123849831069149349406430045852390329296737321686898170507200472856028425719837216148581236896907337787170590524504382167005872101057744617682247988500610477193140983913123507527384148704894663287519370503887384332696230450497547440681808464617977849888981033678132856675421465284453029930637905017868780839285125352782073857421780734978493573 smbaker@test64
diff --git a/2.0/c/keyconvert/test/openssh_rsa1_512 b/2.0/c/keyconvert/test/openssh_rsa1_512
new file mode 100644 (file)
index 0000000..4a353cb
Binary files /dev/null and b/2.0/c/keyconvert/test/openssh_rsa1_512 differ
diff --git a/2.0/c/keyconvert/test/openssh_rsa1_512.pub b/2.0/c/keyconvert/test/openssh_rsa1_512.pub
new file mode 100644 (file)
index 0000000..5bc93a4
--- /dev/null
@@ -0,0 +1 @@
+512 35 13061984420212984636582394800944353832030760610842910680821680254617574712157058435404440827653567296052614504017646755849229554697341079808835532254398769 smbaker@test64
diff --git a/2.0/c/keyconvert/test/openssh_rsa_1024 b/2.0/c/keyconvert/test/openssh_rsa_1024
new file mode 100644 (file)
index 0000000..0ec5529
--- /dev/null
@@ -0,0 +1,15 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIICWwIBAAKBgQDcH11wYBhzzPX3cqz2Wc+tVks0RMoWBCW+aWgvW0I8/Qqf03xo
+a2ocNu8eFeRNTmcnp44SH/AnXmWXxFGigC76R4b//VZZ0L5bITI605JoctdLDndq
+cvZdV23neYv/xr6d8umtmsMn79EunFPoamv2ByjY1Ro4HqqrlpaA+ZoZWwIBIwKB
+gDiaWdsRZV+bGq1YAJceaJpJY8ucqP5Y1oFrj9GpwJNXArtiRI/hG0kVcK/3ADEi
+yhGC22O/Ed482EuY4cqzP0cxwdUxMF/QTSd9DWXPbmzSjRaMZcANUtCVizLWn88K
+IVIg2vRhZqpivyxTgPVCCLhUPirLAQld8qVQ3M3RZe5zAkEA+YlG16DO8QTAEIEu
+NhFQpcrTVrjj2JqbImg6TeiBedJ1qFyfwHEvT3eTb2pjdNq1pE5kdW85fLIznPvJ
+4vuAHwJBAOHTCkn5a5k4OmNEDuiaxe+SdVzdf0oZs32vdbAZkgkVPjyO5bTfKSBV
+tegs559vVxs+BthuExgsZtuVXcvZT0UCQQCj+x/syMKBIGD05yz+9W+C5F7+eX/I
+2qB1sjTxXkZ0oD6wd2GqWQHVIrFX2DK6gRhHZrcLV7gQHVUeBIv7j1QxAkEArjUW
+kNZaUaBnjmezusCKEJWNvKreiZ7MSwOyjymrK5QLcIt+AI7lNjN9sxtTmD/yvT56
+TzBX33K1v1X35mXPbwJAX/NeuLrH8m/EVPrskD3nFlEg69zaB5x4EjU6GtvRW7Gz
+Qo61Lj/KAbbKS7J0GFORm7gAuNWVAwiFxjbdBfnhAw==
+-----END RSA PRIVATE KEY-----
diff --git a/2.0/c/keyconvert/test/openssh_rsa_1024.pub b/2.0/c/keyconvert/test/openssh_rsa_1024.pub
new file mode 100644 (file)
index 0000000..a1b8587
--- /dev/null
@@ -0,0 +1 @@
+ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAIEA3B9dcGAYc8z193Ks9lnPrVZLNETKFgQlvmloL1tCPP0Kn9N8aGtqHDbvHhXkTU5nJ6eOEh/wJ15ll8RRooAu+keG//1WWdC+WyEyOtOSaHLXSw53anL2XVdt53mL/8a+nfLprZrDJ+/RLpxT6Gpr9gco2NUaOB6qq5aWgPmaGVs= smbaker@test64
diff --git a/2.0/c/keyconvert/test/openssh_rsa_2048 b/2.0/c/keyconvert/test/openssh_rsa_2048
new file mode 100644 (file)
index 0000000..4b32b5c
--- /dev/null
@@ -0,0 +1,27 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIEogIBAAKCAQEAzKF8Ty+W800JzUEi74sw91ghB9ypEd00pFRluUJI0+6RC9EW
+TBfH1PT3N7RsICuO4L3M8UGJUAnNfqXT92wbwZ2ECHB/CyKqyuBigVOZii4tJXj4
+LIeszk5qDkVfgxFr8BaKiMn8dt0z7VLS4bEDVSrJil3B8pWDMeyv8weky0vziuFL
+1j2W5daJg72lh0CxSQWtsKD6/ZsZB/DqqdfSS3K28yRJk6Z8DfWpo1XfG6ZTR8u6
+C1h/Ebi35jA1JxrAYp2r42P8xJDrXJkOlo92aZa/Dk5lc961OCiycIuZ8zahIXDr
+muomuuQrP0nUoX+rmCFnxFgLgCia29DU0E1pvwIBIwKCAQEAuxdNFTLTJ5bkY+PI
+K3fyQTqh201nYMo+wiFHD8eTCui/IL8qVDL/2KV0UC/t1EUU6rwpFxdY+LiBXdlx
+Vz5FQ04vkq//IB+yGJKjNGmw811rGvJB/NPRMabHXYFBYeQK6iM81NXuI4hp/Y2N
+myV/Y89ZLgyUEP25xz7MwPELsozy10Jd07XNPvkwviaW10knAHAQY/RwwATCyrWk
+uhcMYyvrEpvK+jw93D9iSVxFtOrVn2JKnd0mXZTumye3DHUyR6uy80+dnrE+GKiR
+QlCIA51i1WBNA1/IerTpsUdURA+JM1L+i6s+XvT5mr5V31Mau7MQmayRySS8ImSQ
+XBVeiwKBgQDrWPUOITu/6btSdl9V+dgK2YEidrVcOfZA7K3JqssHuCk0pDcP/k0m
+eQ9I/t692YSMxqmcewzzeJ8p65ec67l4pdwdQJwxqfEyaUSmdzMhr9FXU1R+pIcI
+u9yypkG444kHFC7iu2Oh4+aCG265FF+LWh6aC4lVn+KjvLCEU/GIYwKBgQDelnun
+FXL+fzqpvWQakfCjxwn5TJhDcZ+jDYx004OVBtF5MpLTk6dx7AENJDo1BEDs2s6b
+86Gpor6pAOUoBcEYvl3C6Ki2tQ3dCFwJPtQ/9dFDoZiSk6bpNhYgMGPc5Tyb/R9C
+dsM4nyG4IprtoN07ALbzkLn2bEXJWYJSl6SB9QKBgBrlmFli4kHRkcBICuVBIAE9
+bdgNkRHavQ679pq0bvmRY8uAe1JI8t/TUjQ6YplasBAWtExl1ZgrCuA4LpWXSGWP
+TFsdU63niUeXAIgNn3GQb7I1aL4ELLCKf59jdTmzmqG5Ke4GyY7YN5nXP9qjPh6N
+9N5nt+yHTRoG75oYONxjAoGBAKu16lxSYAYnokhth7y5uaLqAGE7Fl/p8C1TmDzd
+rqYp1Ms1pHdUpb5IWJUb8mNprm2S2eYFFk+pboJfxrh5d7QAkXkZ4Tx9CrHTP69c
+Wpe9oW6v3BlNVN/Ko1qo/JR2U1PDRAASeVeQs5ys+yxXhheS1kbdXEHBPSZMXThm
+WlWfAoGAGZSqAK/6vz0vyUcPlxeQLKjibYO3AmQQ5BxxvzA+Da59f8IrvAa9ujAR
+ISpIIo4l+DeEDumPVHWjz2W7ho3tPZ3IyXFUUtnh+Rcor9rxw6/gXzaoTlodjvve
+0woZJu0OoYFjQMPm1jlR6ekwm2Ep97I05IaFMDPDhZJUw2sIPRM=
+-----END RSA PRIVATE KEY-----
diff --git a/2.0/c/keyconvert/test/openssh_rsa_2048.pub b/2.0/c/keyconvert/test/openssh_rsa_2048.pub
new file mode 100644 (file)
index 0000000..47c6f4c
--- /dev/null
@@ -0,0 +1 @@
+ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAzKF8Ty+W800JzUEi74sw91ghB9ypEd00pFRluUJI0+6RC9EWTBfH1PT3N7RsICuO4L3M8UGJUAnNfqXT92wbwZ2ECHB/CyKqyuBigVOZii4tJXj4LIeszk5qDkVfgxFr8BaKiMn8dt0z7VLS4bEDVSrJil3B8pWDMeyv8weky0vziuFL1j2W5daJg72lh0CxSQWtsKD6/ZsZB/DqqdfSS3K28yRJk6Z8DfWpo1XfG6ZTR8u6C1h/Ebi35jA1JxrAYp2r42P8xJDrXJkOlo92aZa/Dk5lc961OCiycIuZ8zahIXDrmuomuuQrP0nUoX+rmCFnxFgLgCia29DU0E1pvw== smbaker@test64
diff --git a/2.0/c/keyconvert/test/openssh_rsa_512 b/2.0/c/keyconvert/test/openssh_rsa_512
new file mode 100644 (file)
index 0000000..bd980ff
--- /dev/null
@@ -0,0 +1,9 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIBOAIBAAJBAMRoeFn+NZYWZxbCMk1+kVCFHQrI9mpASrc0uDX/ZF45ymcrSjCM
+E+IeTq82wpoTcCY93vjSma6L6eO1PRePqvkCASMCQQC5L0znIuIRKxC9r8kHPNIn
+WO9/MoHvJqzYn2vbI/+MCPFrDFELJF4lV6CrVYi105n2KydKPN13NvdKzdbg0JoL
+AiEA9y1JKDVsxd38kcZLsmamBqsVT0nHj4kAF50pniD+EokCIQDLa0Gs/tHx7Aqe
+I69gLMNKETjaYE5dUcXjRMiURjB48QIgW8796lz8hAH+uc1PUORMS56hg9mTQ/EO
+qa9nOrvMFYMCIG5tbMugRhWdZNmBFg+jRXFZzmfrIzn5MOkWtgdZTYN7AiA9ckb9
+BnkGtXbl/dn7ZQ7ITS8/5dlBzM+9e16LXujjAg==
+-----END RSA PRIVATE KEY-----
diff --git a/2.0/c/keyconvert/test/openssh_rsa_512.pub b/2.0/c/keyconvert/test/openssh_rsa_512.pub
new file mode 100644 (file)
index 0000000..62e9dbf
--- /dev/null
@@ -0,0 +1 @@
+ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAEEAxGh4Wf41lhZnFsIyTX6RUIUdCsj2akBKtzS4Nf9kXjnKZytKMIwT4h5OrzbCmhNwJj3e+NKZrovp47U9F4+q+Q== smbaker@test64
diff --git a/2.0/c/keyconvert/testkey.sh b/2.0/c/keyconvert/testkey.sh
new file mode 100755 (executable)
index 0000000..f8bd69b
--- /dev/null
@@ -0,0 +1,6 @@
+# do not execute this script directly; it is run by test.sh
+
+rm -rf signature.bin
+openssl dgst $1 -sign test/openssh_$2 test.txt > signature.bin
+openssl dgst $1 -signature signature.bin -verify testout/openssl_$2.pem test.txt
+rm -rf signature.bin
diff --git a/2.0/c/keyconvert/testpy.sh b/2.0/c/keyconvert/testpy.sh
new file mode 100755 (executable)
index 0000000..8469536
--- /dev/null
@@ -0,0 +1,33 @@
+# this scripts tests the key conversion routines
+# it converts the _pub files in test/ from openssh to openssl
+# it then verifies signatures with openssl (see keytest.sh)
+
+rm -rf testout
+mkdir testout
+
+# rsa1 keys
+# these are in a different format
+#./keyconvert test/openssh_rsa1_512.pub testout/openssl_rsa1_512.pem
+#./keyconvert test/openssh_rsa1_1024.pub testout/openssl_rsa1_1024.pem
+#./keyconvert test/openssh_rsa1_2048.pub testout/openssl_rsa1_2048.pem
+
+# rsa2 keys
+python ./keyconvert.py test/openssh_rsa_512.pub testout/openssl_rsa_512.pem
+python ./keyconvert.py test/openssh_rsa_1024.pub testout/openssl_rsa_1024.pem
+python ./keyconvert.py test/openssh_rsa_2048.pub testout/openssl_rsa_2048.pem
+
+# dsa keys
+python ./keyconvert.py test/openssh_dsa_512.pub testout/openssl_dsa_512.pem
+python ./keyconvert.py test/openssh_dsa_1024.pub testout/openssl_dsa_1024.pem
+python ./keyconvert.py test/openssh_dsa_2048.pub testout/openssl_dsa_2048.pem
+
+# make a test file to encrypt
+echo "this is a test to see if the key conversion routines work" > test.txt
+
+# test the keys
+./testkey.sh -sha1 rsa_512
+./testkey.sh -sha1 rsa_1024
+./testkey.sh -sha1 rsa_2048
+./testkey.sh -dss1 dsa_512
+./testkey.sh -dss1 dsa_1024
+./testkey.sh -dss1 dsa_2048
diff --git a/2.0/docs/NR05-charts_7-12-07_7-30-07.tgz b/2.0/docs/NR05-charts_7-12-07_7-30-07.tgz
new file mode 100644 (file)
index 0000000..077bf1f
Binary files /dev/null and b/2.0/docs/NR05-charts_7-12-07_7-30-07.tgz differ
diff --git a/2.0/docs/Nr05_Journal.txt b/2.0/docs/Nr05_Journal.txt
new file mode 100644 (file)
index 0000000..1d2245f
--- /dev/null
@@ -0,0 +1,94 @@
+April 9th, 2007
+       NR05's data diskspace ( 8gb used, 20 available)
+       Added cronjob to check diskspace
+
+April 24th, 2007
+       Tar'd and Bzipped initial syslog/strace folders (6 hours)
+       Receiving approximately 3GB per day
+       Strace files are cumulative (redundant), taking up lots of space
+               This was done to prevent the possibility of losing log data
+
+April 25th, 2007
+       Added a script that sort/uniq the strace files 
+               (data preserved through timestamps)
+
+April 5th, 2007
+       NR05's logging diskspace expanded to 250GB
+
+
+May 10th, 2007
+       Duy noticed NR05 was overflowing with scp calls.  
+               System prevents ssh into the system with a 
+               "too many files are open in system" error
+               Problems occur for very long SCPs as well as
+               nodes that were unstable and slow.
+       Note: Although Strace data is now uniq so that redundant data doesn't 
+               appear on the system, the entire cumulative file is still 
+               being sent
+
+May 11th, 2007
+       NR05 rebooted
+
+May 13th, 2007
+       Logs are now sent at a random minute mark per node each hour instead of 
+               being sent at xx:00, causing NR05 to thrash because of all the SCP calls 
+               coming in at once
+
+May 14th, 2007
+       NR05 is still thrashing because of large number of SCP calls 
+               (400 scps running, most older than an hour)
+
+May 17th, 2007
+       NR05 completely locks out ssh with 
+               "ssh_exchange_identification: Connection closed by remote host"
+
+May 22nd, 2007
+       Changed strace collection method to the same method we do the tcpdump 
+               (rotate logs, then send them in.  New data becomes unique)
+       Split Strace and Strac2 folders 
+               (Strac2 folder hold the new data that is uniq, while the 
+               strace folder collects any leftover data before the change)
+
+
+
+June 13th, 2007
+       NR05 rebooted, locked up in a bit over an hour
+       Issued killall on scp processes
+
+       
+June 28th, 2007
+       NR05 rebooted, added 256MB of Ram, and turned off X11
+
+July 2nd, 2007
+       Log files are now placed into subdirectories based on timestamp.  This 
+               was done because it became incredibly inconvenient to work with 
+               several hundred thousand files in a single directory, so they 
+               are now divided in such a way that roughly 1000 log files are 
+               stored in a single subdirectory.
+
+
+July 12th
+       Noticed that NR05's disk space hit 100% capacity.  The old strace 
+               function appears to still be active, and we are now receiving 
+               redundant syslog files due to the new directory structure 
+               alongside scp failures.
+       When an scp fails, all files in the scp stick around to be send the 
+               next time storklog is activated.  Since there are more files, 
+               there is a higher chance this scp will fail.  At the same time, 
+               when an scp fails, the file is renamed back to its original file 
+               name.  When the file is sent the next time, it receives a new 
+               timestamp and is sent in.  This means two files with the same 
+               data are stored under two different filenames.
+       
+July 14th
+       Space is relieved by bzipping the strace files.
+
+July 19th
+       Syslog files are now sent one at a time, and are removed from the 
+               nest if the file succeeds in transfering.
+
+July 26th 2007
+       Script is run to place all the syslog files into single files 
+               based on nodename.  This allows us to have a directory with 
+               a few hundred large files that are all sortted/uniqued, so 
+               all the redundant data is eliminated
\ No newline at end of file
diff --git a/2.0/docs/storkdoc.txt b/2.0/docs/storkdoc.txt
new file mode 100644 (file)
index 0000000..91a96b4
--- /dev/null
@@ -0,0 +1,132 @@
+****Stork****\r
+**Installing Stork**\r
+- Prerequisites (root access, only works on Planetlab nodes)\r
+- Obtain InitScript\r
+- Run InitScript\r
+\r
+***Using Stork***\r
+*Installing a Package using stork\r
+Command: stork PACKAGENAME\r
+Example: stork gnuchess\r
+\r
+*Uninstalling package\r
+Command: stork --remove PACKAGENAME\r
+Example: stork --remove gnuchess\r
+\r
+\r
+*** Creating a Tarball Package ***\r
+       Creating a tarball package can be a great way to distribute your own applications.  With Stork, you can easily distribute your software to every node that needs it.  Stork also allows you to execute scripts before and after you install or uninstall, making tarballs even more powerful.\r
+\r
+       Including scripts in your tarball is very simple.  Just package '.preinstall', '.postinstall', '.preremove', and/or '.postremove' scripts along with your own files.  Stork will automatically execute the script when the user decides to install or uninstall your package.  The scripts will run from the same directory the tarball is unpacked (typically '/root/' or what ever is defined to be the home directory).\r
+\r
+       (Include example, tar and gzip a simple application with a simple script?)\r
+\r
+\r
+****Storkutil****\r
+       Stork's Enduser Utilities will help you manage your nodes more easily and efficiently.  It can help you organize your nodes, as well as perform installations and upgrades across all your nodes in a few simple steps.\r
+\r
+       To start using Stork's Enduser Utilities, so first need to create an identity for yourself.  You can do this using the 'genpair' function.  This will create a private key and a public key, which will identify you and the software you wish to distribute.  The privatekey is used to sign the files that stork uses to install your software, so be sure to keep it in safe.  The public key is distributed to all your nodes (and all others that wish to use your software).  To create your keys, just run 'storkutil.py genpair USERNAME', using any username you desire.  If this is your first time using stork, it is best to set this key as your default.  If you've already created keys and would like to use those, you can use the 'storkutil.py setdefault USERNAME' command.\r
+\r
+       storkutil.py genpair foo\r
+       y\r
+\r
+Be sure that the privatekey and publickey are in your current directory while using storkutil.  The publickey can be distributed to all your nodes through the upload website. (Link to upload instructions)\r
+\r
+\r
+***Configuration File***\r
+       You will need to change the stork configuration file to match the identity you created in storkutil.  Simple open up the file '/usr/local/stork/etc/stork.conf' and simple change the 'username = ' line to match the username you chose for your keys\r
+\r
+       username = foo\r
+\r
+       You can distribute this configuration file to all your nodes through the upload website. (Link to upload instructions)\r
+\r
+\r
+***Trusted Packages File***\r
+       The Trusted Packages File (TPFILE) defines which files you will allow your nodes to download and install.  This helps your nodes stay safe and secure, as files will be verified through a set of hash codes.  Even if two files share the same name, your nodes will only recieve the one that matches the hash obtained when the Trusted Packages File was created (preventing your nodes from downloading maliciously modified packages in the repository).  You are also allowed to trust other users, allowing your nodes to accept packages from those users exclusively.  This will let your nodes download and install applications created by other users.\r
+\r
+       To add a package to your TPFile, use the command 'storkutil.py addfile FILE [FILE]...', where FILE is the location of the package you would like to trust. If the TPFILE does not exist, storkutil will create one for you.\r
+\r
+       example (one package)\r
+       example (multiple packages)\r
+\r
+Storkutil will look at the file, create a hash, and write it to your TPFile.  If you upload the package to the repository and run stork to install the package, your node will select your specific file and install it.       If you want to view the contents of your TPFILE, just use the view command in storkutil.\r
+\r
+       storkutil.py view tpfile\r
+       \r
+You can remove a file from your TPFile, just use the 'removefile' command.\r
+       \r
+       removefile example\r
+       view\r
+\r
+\r
+To trust users, you can use the adduser command:  \r
+\r
+       storkutil adduser USER USER.pubkey (allow|deny|any) AFFECTEDPACKAGES\r
+\r
+       USER is the name of the user you want to trust, followed by the public key that user has made available.  AFFECTEDPACKAGES can be a pattern that defines the packages you want to accept.  If the TPFILE does not exist, storkutil will create one for you.\r
+\r
+       example: storkutil.py adduser USER1 USER1.publickey allow user-4-2.tar.gz\r
+       example: storkutil.py adduser USER2 USER2.publickey deny java\*\r
+       example: storkutil.py adduser PlanetLab PlanetLab.publickey allow \*\r
+\r
+       The first example shows how to accept a single package from the user USER1.  The second example will deny all files from USER2 that have the pattern java*.  The third example shows how to accept all packages from the user PlanetLab (be sure to shell escape your use of *).  You can use the view to see the contents of your TPFILE.\r
+\r
+       view\r
+\r
+       You can remove users using the remove user command.\r
+\r
+When you are done, you can upload the file to your nodes through the upload website (link to upload instructions)\r
+\r
+\r
+\r
+****Pacman****\r
+       Stork's package Manager (pacman) can help you manage your packages across all your nodes.  Rather than installing or uninstalling packages on each of your nodes individually, you can assign your nodes to groups and instruct stork to install or remove packages on those groups.  Pacman uses two files; groups and packages.  Using StorkUtil, you can create these two files and upload them.  Stork will then distribute these files to your nodes and perform the tasks you assigned.\r
+\r
+***Pacman Groups***\r
+       Your pacman groups file allows you organize your nodes into separate groups.  You are allowed to include a node into a group or exclude a node from a group.  You can also include, exclude, or intersect groups with each other.  To define our groups, we can use:\r
+\r
+       storkutil pacgroups (include|exclude|intersect|remove) GROUP NAME [NAME...]\r
+\r
+Let's start by adding a node to a group. If a pacman group file for your username does not exist, then storkutil will create a new one.\r
+\r
+       storkutil pacgroups include myGroup planetlab.foo.edu\r
+\r
+Storkutil will automatically sign the file using your default private key\r
+file, which you created when you generated your first key pairs (link).  If you want to use a username that is not your default, you can use the --username option to work on a different file.\r
+\r
+We can continue adding more data into our group definitions.  If you want to view the contents of the group file, you can use the “view” command in StorkUtil.\r
+\r
+       storkutil pacgroups include __  (multiple nodes)\r
+        storkutil pacgroups exclude __\r
+       storkutil view groups\r
+\r
+As well as remove entries\r
+\r
+       storkutil pacgroups remove __\r
+       storkutil view groups\r
+\r
+When you are done, you can upload your file to the Stork repository.  (LINK to upload instructions).\r
+\r
+\r
+\r
+***Pacman Packages***\r
+       The pacman packages file allows you to manage which packages to install on which nodes.  With the pacman packages file, you can tell a node or group (as defined by your pacman groups file (LINK)) to install or uninstall a package.  To create and modify our packages file, we will use:\r
+\r
+       storkutil pacpackages (node|group) NAME (install|remove|upgrade) PACKAGE [PACKAGE]\r
+\r
+We can start by assigning a node to install a package.  Be sure your filename follows the pattern <name>.packages.pacman, where the name is the one your configured in your stork.conf file (possible link?).  This will aid your nodes in finding the correct group file to use.  If the file you specified does not exist, then storkutil will create a new one.\r
+\r
+       storkutil pacpackages node planetlab.foo.edu install gnuchess\r
+\r
+We can also assign groups to install or remove packages.  You can also list a\r
+\r
+       storkutil pacpackages group MyGroup install lynx man gnuchess\r
+\r
+Storkutil will automatically sign the file using your default private key file, which you created when you generated your first key pairs (link).  If you want to work using a different set of keys and files, you can use the --username option.\r
+\r
+You can view the contents of your package file using the view command in Storkutil. (view to be coded)\r
+\r
+       storkutil view packages\r
+\r
+When you are done, you can upload your file to the Stork repository.  (LINK).\r
+\r
diff --git a/2.0/owl/README b/2.0/owl/README
new file mode 100644 (file)
index 0000000..03ff325
--- /dev/null
@@ -0,0 +1 @@
+This is where stork/arizonatransfer owl files go, until we have a better place
\ No newline at end of file
diff --git a/2.0/owl/conf.d/arizonatransfer.conf b/2.0/owl/conf.d/arizonatransfer.conf
new file mode 100644 (file)
index 0000000..10da2bb
--- /dev/null
@@ -0,0 +1,42 @@
+[Module]
+name=zz_arizonatransfer
+version = 1.1
+heading = Arizonatransfer
+fields = azsucc_arizona_http,azfail_arizona_http,azerr_arizona_http,azsucc_arizona_nestproxy,azfail_arizona_nestproxy,azerr_arizona_nestproxy,azsucc_arizona_coblitz,azfail_arizona_coblitz,azerr_arizona_coblitz,azsucc_arizona_coral,azfail_arizona_coral,azerr_arizona_coral
+
+[azsucc_arizona_http]
+heading = http_s
+
+[azfail_arizona_http]
+heading = http_f
+
+[azerr_arizona_http]
+heading = http_e
+
+[azsucc_arizona_nestproxy]
+heading = nest_s
+
+[azfail_arizona_nestproxy]
+heading = nest_f
+
+[azerr_arizona_nestproxy]
+heading = nest_e
+
+[azsucc_arizona_coblitz]
+heading = coblitz_s
+
+[azfail_arizona_coblitz]
+heading = coblitz_f
+
+[azerr_arizona_coblitz]
+heading = coblitz_e
+
+[azsucc_arizona_coral]
+heading = coral_s
+
+[azfail_arizona_coral]
+heading = coral_f
+
+[azerr_arizona_coral]
+heading = coral_e
+
diff --git a/2.0/owl/conf.d/stork.conf b/2.0/owl/conf.d/stork.conf
new file mode 100644 (file)
index 0000000..58748cb
--- /dev/null
@@ -0,0 +1,17 @@
+[Module]
+name=stork
+version = 0.6
+heading = Stork
+fields = version,lastpackage,stork_upgrade_avg,stork_upgrade_cnt
+
+[version]
+heading = Version
+
+[lastpackage]
+heading = Last
+
+[stork_upgrade_avg]
+heading = Avg Upgrade Time
+
+[stork_upgrade_cnt]
+heading = Upgrade Count
diff --git a/2.0/owl/scripts.d/arizonatransfer b/2.0/owl/scripts.d/arizonatransfer
new file mode 100755 (executable)
index 0000000..2c88765
--- /dev/null
@@ -0,0 +1,9 @@
+#!/usr/bin/python
+
+import ravenlib.stats
+
+ravenlib.stats.print_owl("zz_arizonatransfer",
+                         ["azsucc_arizona_http", "azfail_arizona_http", "azerr_arizona_http",
+                         "azsucc_arizona_nestproxy", "azfail_arizona_nestproxy", "azerr_arizona_nestproxy",
+                         "azsucc_arizona_coblitz", "azfail_arizona_coblitz", "azerr_arizona_coblitz",
+                         "azsucc_arizona_coral", "azfail_arizona_coral", "azerr_arizona_coral"])
diff --git a/2.0/owl/scripts.d/stork b/2.0/owl/scripts.d/stork
new file mode 100755 (executable)
index 0000000..d5984cf
--- /dev/null
@@ -0,0 +1,21 @@
+#!/bin/bash
+
+echo '[stork]'
+package=stork-client
+result=`rpm -q $package`
+if [ "$result" == "package $package is not installed" ]; then
+    version="NA"
+else
+    version=$result
+fi
+echo "version=$version"
+
+last="NA"
+
+if [ -e /usr/local/stork/var/package.log ]; then
+    last=`tail -1 /usr/local/stork/var/package.log`
+fi
+
+echo "lastpackage=$last"
+
+python -c "import ravenlib.stats; ravenlib.stats.print_owl(None,[], ['stork_upgrade'],['stork_upgrade'])"
\ No newline at end of file
diff --git a/2.0/plush/gen-update.sh b/2.0/plush/gen-update.sh
new file mode 100755 (executable)
index 0000000..2b1d793
--- /dev/null
@@ -0,0 +1,140 @@
+#!/bin/sh
+
+# <Purpose>
+# Generate a PLuSH XML experiment file that will cause PLuSH to download
+# the latest metadata file from the stork repository.  To do this, this script
+# will also create a directory.xml file (needed by PLuSH to connect to PlanetLab
+# nodes) and will download and compress the metadata file from the repository.
+#
+# Slice hostnames should be entered as arguments.
+
+# get the username
+USERNAME=$1
+
+# get directory output
+DIRECTORY=$2
+
+# get experiment file
+EXPERIMENT=$3
+
+# metadata file
+METADATA="/tmp/metadata"
+
+# metadata url
+METADATA_URL="https://stork-repository.cs.arizona.edu/packageinfo/metafile"
+
+if [[ $USERNAME == "-h" || $USERNAME == "--help" || $USERNAME == "" || $DIRECTORY == "" || $EXPERIMENT == "" ]]; then
+     echo "Usage: <username> </path/to/metadata/file> </path/to/directory.xml> </path/to/plush/update/file.xml> [HOST]..."
+     echo "PlanetLab hostnames HOST are in the format"
+     echo "     SLICE@HOSTNAME:PORTNUM"
+     echo "and should be passed in as arguments"
+     exit 1
+fi
+
+# check write permissions
+touch $DIRECTORY 2>/dev/null || (( echo "Insufficient write permissions" && exit 1 ))
+
+# remove the file
+rm -f $DIRECTORY 2>/dev/null || (( echo "Insufficient write permissions" && exit 1 ))
+
+# test metadata write permissions
+touch $METADATA 2>/dev/null || (( echo "Insufficient write permissions" && exit 1 ))
+
+# remove old metadata
+rm -f $METADATA 2>/dev/null || (( echo "Insufficient write permissions" && exit 1 ))
+
+# get metadata
+wget -c $METADATA_URL -O $METADATA || (( echo "Failed to download metadata" && exit 1 ))
+
+# compress metadata
+tar cf $METADATA.tar $METADATA || (( echo "Failed to compress metadata" && exit 1 ))
+
+# create PlanetLab directory listing
+cat > $DIRECTORY <<DIR_END1
+<?xml version=1.0 encoding=UTF-8?>
+<plush>
+    <resource_manager type=planetlab>
+         <user>$USERNAME</user>
+         <allsites>allsites.xml</allsites>
+DIR_END1
+
+# read remaining arguments (hostnames)
+shift 3
+
+# count hosts
+HOSTCOUNT=0
+
+# slice names
+SLICES=
+
+for host in $@; do 
+   # get hostname
+   hostname=$(echo $host | sed 's/\([a-zA-Z0-9_-.]*@[a-zA-Z0-9_-.]*:\).*/\1/' | sed 's/://g')
+
+   # get portnum
+   portnum=$(echo $host | sed 's/.*:\([0-9]*\)/\1/')
+
+   # save slice
+   SLICES[$HOSTCOUNT]=$hostname
+
+   echo "         <port_map slice=\"$hostname\" port=\"$portnum\"/>" >> $DIRECTORY
+   HOSTCOUNT=$((HOSTCOUNT + 1))
+done
+
+# finish writing directory file
+cat >> $DIRECTORY <<END_DIR2
+    </resource_manager>
+    <resource_manager type="ssh">
+    </resource_manager>
+</plush>
+END_DIR2
+
+# create the experiment file
+test -f $EXPERIMENT && rm -f $EXPERIMENT
+
+cat > $EXPERIMENT <<END1
+<?xml version="1.0" encoding="utf-8"?>
+<plush>
+   <project name="metadata">
+       <software name="get-metadata" type="none">
+         <package name="package1" type="tar">
+           <path>$METADATA.tar</path>
+         </package>
+       </software>
+       <component name="mynodes">
+            <rspec>
+              <num_hosts>$HOSTCOUNT</num_hosts>
+            </rspec>
+       <software name="get-metadata" />
+          <resources>
+END1
+
+# copy in resources
+for slice_index in $(seq 0 $((HOSTCOUNT-1))); do
+   echo "            <resource type=\"planetlab\" group=\"${SLICES[$slice_index]}\"/>" >> $EXPERIMENT
+done
+
+# copy in remainder of file
+cat >> $EXPERIMENT <<END2
+         </resources>
+     </component>
+     <experiment name="download-metadata">
+        <execution>
+           <component_block name="cb1">
+              <component name="mynodes" />
+                <process_block name="p2">
+                   <process name="echo">
+                      <path>/bin/echo</path>
+                      <cmdline>
+                         <arg>"Run success"</arg>
+                      </cmdline>
+                      <cwd/>
+                   </process>
+                </process_block>
+            </component_block>
+        </execution>
+     </experiment>
+  </project>
+</plush>
+END2
+
diff --git a/2.0/plush/pacmand.plush b/2.0/plush/pacmand.plush
new file mode 100755 (executable)
index 0000000..a24479d
--- /dev/null
@@ -0,0 +1,332 @@
+#! /usr/bin/env python
+
+# John H. Hartman
+# Parts copied from storkupdated
+#
+# pacmand -- pacman daemon
+# Runs pacman periodically
+#
+#           [option, long option,                     variable,                      action,       data,     default,                       metavar,                       description]
+"""arizonaconfig
+    options=[
+            ["-C",   "--configfile",  "configfile",  "store",       "string", "/usr/local/stork/etc/stork.conf", "FILE",      "use a different config file (/usr/local/stork/etc/stork.conf is the default)"],
+             ["",    "--pacman",                      "pacman",                      "store",      "string", "/usr/local/stork/bin/pacman", None,                          "command to run"],
+             ["",    "--pacmandsync",                 "pacmandsync",                 "store_true", None,     False,                         None,                          "run synchronously (don't detach)"],
+             ["",    "--pollmetadatafile",          "pollfile",                    "store",       "string", "/usr/local/stork/var/packageinfo/stork-repository.cs.arizona.edu/packageinfo/metafile",        "pollfile",                         "poll the filesystem for a new metadata file to indicate a pacman update."],
+             ["",    "--heartbeat",    "heartbeat",    "store_false",   None,    False,    None,   "invoke pacman every 30 seconds regardless of whether or not the metadata file has changed"],
+            ["",    "--timer",                       "pactimer",                    "store",      "int",    300,                           "pactimer",                    "Set time between pacman calls"],
+             ["", "--pacmanverbose", "pacmanverbose", "store_false", None, False, None, "Make pacman verbose"]
+       ]
+
+     #include the options from pacman
+    includes=["$MAIN/pacman"]
+"""
+
+import sys,os,signal,time
+#should be in the same directory as the other scripts when used...
+#sys.path += ["../python/refactor"]
+sys.path += ["/usr/local/stork/bin"]
+import arizonaconfig, arizonareport, arizonacomm
+import arizonageneral
+import storkpseprdaemon
+import threading
+import hashlib
+
+
+pollfilename = "/usr/local/stork/var/packageinfo/stork-repository.cs.arizona.edu/packageinfo/metafile"
+verbose = 0
+glo_cmd="echo command missing"
+
+# poll the FS for a new metafile every few seconds,
+# and invoke pacman if there has been a change
+class FilePoller(threading.Thread):
+   """
+   <Purpose>
+      Initialize the thread to begin polling the FS for a new metadata file
+   """
+   def __init__(self, metadata_filename, verboseness):
+      threading.Thread.__init__(self)
+      self.metadata_filename = metadata_filename
+      self.timeout = time.time() + 5     # poll every 5 seconds
+      self.file_hash = ""        # file hash
+      self.verboseness = verboseness
+      if verboseness != 0:
+         print "[pacmand.plush]: Starting filepoller; will look at " + metadata_filename
+      self.start()
+
+   """
+   <Purpose>
+      Get the SHA1 hash of the metadata file
+   """
+   def get_hash(self, filename ):
+      sha1_hasher = hashlib.sha1()
+
+      metadata_file = open( filename, "r" )
+      for file_line in metadata_file.readlines(): 
+         sha1_hasher.update( file_line )
+
+      metadata_file.close()
+      # calculate the hash and return
+      return sha1_hasher.hexdigest()
+
+   """
+   <Purpose>
+      Poll the FS for the file matching self.metadata_filename
+      If the file exists AND has a different timestamp than
+      the currently-recognized file, then invoke pacman on it.
+   """
+   def run(self):
+      while True:
+          # are we expired?
+          if self.timeout < time.time():
+             # new timeout...
+             self.timeout = time.time() + 5
+         
+             if self.verboseness != 0:
+                print "[pacmand.plush] polling for " + self.metadata_filename
+
+             # does the file exist?  Bail if not...
+             if os.path.exists( self.metadata_filename ) == False:
+                if self.verboseness != 0:
+                   print "[pacmand.plush] file " + self.metadata_filename + " does not exist!"
+                continue
+
+             # check the hash
+             sha1_hash = self.get_hash( self.metadata_filename )
+
+             # hashes different?
+             if self.file_hash != sha1_hash:
+
+                if self.verboseness != 0:
+                    print "[pacmand.plush] file changed; invoking pacman"
+            
+                # signal an update
+                pacman_signal_event()
+                       
+                pacman_update()
+
+                pacman_clear_event()
+
+                # pacman will have changed the file, so re-get the hash
+                self.file_hash = self.get_hash( self.metadata_filename )
+                
+             # end
+          else:
+            # sleep some to save CPU
+            time.sleep(1)
+         # end
+      # end
+   # end
+# end
+
+
+def check_initscript_running():
+    """
+    <Purpose>
+       Return True if the stork initscript is running, false otherwise.
+    """
+    if not os.path.exists("/var/run/stork_initscript.pid"):
+        return False
+
+    try:
+        file = open("/var/run/stork_initscript.pid")
+    except:
+        arizonareport.send_syslog(arizonareport.INFO, "failed to open the stork_initscript pid file")
+        return False
+
+    try:
+        initscript_pid = file.readline().strip()
+    except:
+        file.close()
+        arizonareport.send_syslog(arizonareport.INFO, "failed to get the pid from the stork_initscript pid file")
+        return False
+
+    file.close()
+
+    # "ps -p <pid>" should return 0 if the process exists, or nonzero if it
+    # does not exist
+
+    try:
+        result = os.system("ps -p " + initscript_pid + " > /dev/null")
+    except:
+        arizonareport.send_syslog(arizonareport.INFO, "exception while running ps to check stork_initscript pid")
+        return False
+
+    if result == 0:
+        return True
+    else:
+        return False
+
+def wait_if_initscript_running():
+    """
+    <Purpose>
+       Wait for the stork initscript to finish running.
+    """
+    sent = False
+
+    while check_initscript_running():
+        if not sent:
+            arizonareport.send_syslog(arizonareport.INFO, "stork initscript is running. delaying in 30-second increments")
+            sent = True
+        time.sleep(30)
+
+    if sent:
+        arizonareport.send_syslog(arizonareport.INFO, "stork initscript is no longer running")
+
+def handler_sighup(signum, frame):
+    """
+    <Purpose>
+       Intercepts the "hangup" signal, but doesn't do anything.
+       Simply causes the sleep to return.
+    """
+    pass
+
+def pacman_signal_event():
+   global pacman_update_event
+
+   pacman_update_event.set()
+
+def pacman_clear_event():
+    global pacman_update_event
+    pacman_update_event.clear()
+
+def pacman_update():
+    global glo_cmd, verbose
+
+    if verbose:
+        arizonareport.send_syslog(arizonareport.INFO, "[pacmand] Executing: " + glo_cmd)
+    if sync:
+        print "[pacmand] executing: " + glo_cmd
+
+    rc = os.system(glo_cmd)
+
+    if rc == 0:
+        if verbose:
+            arizonareport.send_syslog(arizonareport.INFO, "[pacmand] command returned with status " + str(rc))
+    else:
+        arizonareport.send_syslog(arizonareport.ERROR, "[pacmand] Error executing '%s'" % glo_cmd)
+
+def Main():
+    global glo_cmd
+    global sync
+    global verbose
+    global pacman_update_event
+    global filepoller
+    global pollfilename
+
+    args = arizonaconfig.init_options("pacmand.plush",version="2.0", configfile_optvar="configfile")
+
+    pacman = arizonaconfig.get_option("pacman")
+    verbose = arizonaconfig.get_option("pacmanverbose")
+    sync = arizonaconfig.get_option("pacmandsync")
+    timer = arizonaconfig.get_option("pactimer")
+
+    if verbose == True:
+       verbose = 1
+       print "[pacmand.plush] Will not be verbose"
+    else:
+       verbose = 0
+       print "[pacmand.plush] Will be verbose"
+
+    verbose = 1
+    pollfilename = arizonaconfig.get_option("pollfile")
+    heartbeat = arizonaconfig.get_option("heartbeat")
+
+    arizonareport.send_syslog( arizonareport.INFO, "[pacmand.plush] Will monitor \"" + pollfilename + "\" for changes")
+
+    if heartbeat:
+       arizonareport.send_syslog( arizonareport.INFO, "[pacmand.plush] Heartbeat mode activated; will invoke pacman at regular intervals")
+       print "heartbeat"
+
+    if verbose != 0:
+       arizonareport.send_syslog(arizonareport.INFO, "[pacmand.plush] before create event")
+       print "[pacmand.plush] before create event"
+
+    # create an event used to signal pacman updates
+    pacman_update_event = threading.Event()
+    pacman_update_event.set()
+
+    glo_cmd = "%s" % (pacman)
+    if verbose != 0:
+       print "[pacmand.plush] pacman command is " + glo_cmd
+
+    # set the hangup signal handler
+    signal.signal(signal.SIGHUP, handler_sighup)
+
+    if verbose != 0:
+        print "[pacmand.plush] set SIGHUP handler"
+
+    if sync:
+        arizonareport.send_syslog(arizonareport.INFO, "[pacmand.plush] Starting")
+        if verbose != 0:
+           print "[pacmand.plush] Starting"
+    else:
+        # run as a daemon
+        arizonageneral.make_daemon("pacmand.plush")
+        if verbose != 0:
+           print "[pacmand.plush] daemonized"
+
+    last_time = 0
+
+    # update no more often than once every 30 seconds (if we have a heartbeat)
+    minimum_time_since_last = 30
+
+    if verbose != 0:
+       arizonareport.send_syslog(arizonareport.INFO, "[pacmand.plush] before enter loop")
+       print "[pacmand.plush] About to enter main loop"
+
+    # if we're supposed to poll for metadata via a file, then start doing so
+    if pollfilename != "":
+        filepoller_verbosity = 0
+        if verbose != 0:
+            filepoller_verbosity = 1
+            print "[pacmand.plush] forking thread to monitor " + pollfilename
+        filepoller = FilePoller(pollfilename, filepoller_verbosity)
+    else:
+        filepoller = None
+        print "[pacmand.plush] will not poll files"
+
+    while True:
+
+        # if we have a heartbeat, then invoke pacman every $minimum_time_since_last seconds
+        if heartbeat == True:
+            # check and see if we just ran. If we did, then delay a bit
+            time_since_last = time.time() - last_time
+        
+            if time_since_last < minimum_time_since_last:
+               delay = minimum_time_since_last - time_since_last
+               if verbose != 0:
+                   arizonareport.send_syslog(arizonareport.INFO, "[pacmand.plush] updates too frequent; delaying " + str(delay))
+                   print "[pacmand.plush] updates too frequent; delaying " + str(delay)
+               time.sleep(delay)
+
+            # block if an initscript is running
+            wait_if_initscript_running()
+
+            time_since_last = time.time() - last_time
+
+            print "[pacmand.plush] time since last run " + str(int(time_since_last)) + " seconds"
+            arizonareport.send_syslog(arizonareport.INFO, "[pacmand] time since last run " + str(int(time_since_last)) + " seconds")
+
+            last_time = time.time()
+
+            # clear the update event, so that it can be signalled again
+            pacman_update_event.clear()
+
+            # invoke pacman
+            pacman_update()
+        # end heartbeat
+        else:
+           time.sleep(minimum_time_since_last)
+
+        # sleep and wait for another interval if there is no file
+        if pollfilename == "":
+            if verbose != 0:
+               print "[pacmand.plush] sleeping for " + str(timer) + " seconds"
+               arizonareport.send_syslog(arizonareport.INFO, "[pacmand.plush] sleeping for " + str(timer) + " seconds")
+            time.sleep(timer)
+
+
+
+if __name__ == "__main__":
+    Main()
diff --git a/2.0/plush/start-storkplushd b/2.0/plush/start-storkplushd
new file mode 100755 (executable)
index 0000000..05dc903
--- /dev/null
@@ -0,0 +1,38 @@
+#!/usr/bin/python
+
+import os
+import sys
+
+def usage():
+   print "Usage: " + sys.argv[0] + " <planetlab username> <nest slice>"
+   sys.exit(1)
+
+
+if len(sys.argv) != 3:
+   usage()
+
+node_csv = ""
+nest_slice = sys.argv[2]
+planetlab_user = sys.argv[1]
+
+try:
+   directory_file = open("directory.xml", "r")
+   line_csv = ""
+   for line in directory_file.readlines():
+      if line.find("<node hostname=") != -1:
+         host = line.split("\"")[1].split("@")[1].split(":")[0]
+         port = line.split("\"")[1].split("@")[1].split(":")[1]
+         node_csv = node_csv + nest_slice + "@" + host + ":" + port + ","
+
+   # strip the last ','
+   node_csv = node_csv.rstrip(',')
+   directory_file.close()
+
+except:
+   print "Exception reading " + os.getcwd() + "/directory.xml occured.  Make sure directory.xml is in your CWD and is readable."
+   sys.exit(1)
+
+
+os.system("rm -rf /tmp/plush")
+
+os.system("/usr/local/stork/bin/storkplushd --push-interval=10 --check-interval=5 --plush-port=4000 --sync --nest-list=" + node_csv + " --planetlab-user=" + planetlab_user + " --metafile-path=/repository/packageinfo/metafile --plush-cwd=/usr/local/bin/plush --plush-command=/usr/local/bin/plush/plush --remote-path=/usr/local/stork/var/proxy/quake2.cs.arizona.edu_packageinfo_metafile --client-slices=arizona_demo --nest-metafile-url=http://localhost:6648/quake2.cs.arizona.edu/packageinfo/metafile --metafile-url=http://quake2.cs.arizona.edu/packageinfo/metafile --client-metafile-path=/usr/local/stork/var/packageinfo/quake2.cs.arizona.edu/packageinfo/metafile")
diff --git a/2.0/plush/start-storkplushd.sh b/2.0/plush/start-storkplushd.sh
new file mode 100755 (executable)
index 0000000..0f6954e
--- /dev/null
@@ -0,0 +1,5 @@
+#!/bin/sh
+
+rm -rf /tmp/plush 
+
+./storkplushd --push-interval=10 --check-interval=5 --plush-port=4000 --sync --nest-list=arizona_nest@planetlab1.arizona-gigapop.net:10003 --planetlab-user=jnelson@email.arizona.edu --metafile-path=/repository/packageinfo/metafile --plush-cwd=/home/jnelson/bin/plush --plush-command=/home/jnelson/bin/plush/plush --remote-path=/usr/local/stork/var/packageinfo/stork-repository.cs.arizona.edu/packageinfo/metafile
diff --git a/2.0/plush/storkplushd b/2.0/plush/storkplushd
new file mode 100755 (executable)
index 0000000..3e05b15
--- /dev/null
@@ -0,0 +1,616 @@
+#! /usr/bin/env python
+
+# Jude Nelson
+# Parts copied from pacmand
+#
+# Synchronizes repository metafile
+#
+#           [option, long option,                     variable,                      action,       data,     default,                       metavar,                       description]
+"""arizonaconfig
+    options=[
+
+            ["-C",   "--configfile",  "configfile",  "store",       "string", "/usr/local/stork/etc/stork.conf", "FILE",      "use a different config file (/usr/local/stork/etc/stork.conf is the default)"],
+             ["",    "--push-interval",    "push_interval",    "store",   "int",    10,    None,   "Interval (in seconds) between each metafile push."],
+             ["",    "--check-interval",   "check_interval",   "store",   "int",    5,     None,   "Interval (in seconds) between checking PLuSH process status."],
+             ["",    "--plush-port",      "plush_port",        "store",    "int",   4000,  None,   "Port on which to open PLuSH."],
+            ["", "--sync", "do_sync", "store_true", None, False, None, "do not daemonize"],
+            ["", "--nest-list", "nest_list", "store", "string", "arizona_nest@planetlab1.arizona-gigapop.net", "nest_list", "Comma-separated list of nest slices to which to send metadata, each in the form of slice-name@planetlab-host"],
+            ["", "--planetlab-user", "planetlab_user", "store", "string", "jnelson@email.arizona.edu", "planetlab_user", "PlanetLab user accont for PLuSH to use to access the nests (NOTE: you need to set this up separately)"],
+            ["", "--metafile-path", "metafile_path", "store", "string", "metafile", "metafile_path", "Path to the metafile to distribute to each Stork nest"],
+            ["", "--plush-cwd", "plush_cwd", "store", "string", "/usr/local/bin/plush", "plush_cwd", "PLuSH installation directory"],
+            ["", "--plush-command", "plush_command", "store", "string", "/usr/bin/plush", "plush_command", "The command that executes PLuSH"],
+            ["", "--remote-path", "remote_path", "store", "string", None, "remote_path", "Path on each nest to store the metafile"],
+            ["", "--client-slices", "client_slices", "store", "string", None, "client_slices", "CSV list of client slices that will talk to the nest slice"],
+            ["", "--nodes-per-thread", "nodes_per_thread", "store", "int", 50, "nodes_per_thread", "Number of nodes to assign to one data-pushing thread"],
+            ["", "--metafile-url", "metafile_url", "store", "string", "http://quake2.cs.arizona.edu/packageinfo/metafile", "metafile_url", "URL to metafile as seen by remote hosts"],
+            ["", "--nest-metafile-url", "nest_metafile_url", "store", "string", "http://localhost:6648/quake2.cs.arizona.edu/packageinfo/metafile", "nest_metafile_url", "URL to metafile on nest as seen by each client"],
+            ["", "--client-metafile-path", "client_metafile_path", "store", "string", "/usr/local/stork/var/packageinfo/quake2.cs.arizona.edu/packageinfo/metafile", "client_metafile_path", "Path to the metafile on the client slice"]
+            ]
+     includes=[]
+"""
+
+import sys,os,signal,time
+#should be in the same directory as the other scripts when used...
+#sys.path += ["../python/refactor"]
+sys.path += ["/usr/local/stork/bin"]
+import arizonaconfig, arizonareport, arizonacomm
+import arizonageneral
+import threading
+import thread
+import xmlrpclib
+
+# default values
+glo_push_interval = 10
+check_interval = 5
+plush_port = 4000
+plush_xmlrpc_port = 4001 # == plush_port + 1, as determined by the PLuSH source code
+
+# names of files PLuSH expects to be in the same working directory as the executable
+allsite_name = "allsites.xml"
+experiment_name = "get-update.xml"
+directory_name = "directory.xml"
+helper_scripts_name = "helper-scripts"
+metafile_name = "metafile.tar"
+
+# change this as needed...
+planetlab_user = "jnelson@email.arizona.edu"
+
+# hash table of nest status
+glo_nest_connection_status = {}
+
+# global debug flag
+_debug = True
+
+# debug macro
+def debug(msg):
+   if _debug == True:
+      print "DEBUG: " + msg
+
+
+
+# verify a nest connection by searching the plush logfile for a successful connection.
+# hostname is the planetlab slice@hostname:portnum string
+# logfile path should refer to plush_logfile.txt (wherever it is).
+# returns the last line number in the logfile where the verification is found; returns -1 if not found.
+def verify_connection( hostname, logfile_path ):
+   logfile = open( logfile_path, "r" )
+   linecount = 0
+   ret = -1
+   for line in logfile.readlines():
+      # look for "Connect to $hostname"
+      if line.find( "Connected to " + hostname ) != -1:
+         ret = linecount
+
+      linecount = linecount + 1
+   #for
+
+   return ret
+      
+      
+
+# get the connection status of a nest.
+# returns 0 if the nest is not connected.
+# returns nonnegative if the nest is connected.
+def get_connection_status( nest ):
+   global glo_nest_connection_status;
+
+   if glo_nest_connection_status.keys().count(nest) == 0:
+      glo_nest_connection_status[nest] = 0
+      return 0
+
+   return glo_nest_connection_status[nest]
+
+
+# set the connection status of a nest
+# status is 0 to indicate no connection
+# status is nonnegative to indicate connection
+# (status is usually the line number in the plush log file
+# where plush indicates it has connected to the nest)
+def set_connection_status( nest, status ):
+   global glo_nest_connection_status
+
+   glo_nest_connection_status[nest] = status
+
+
+# invalidate all connections, forcing all nests to reconnect
+def invalidate_all_connections():
+   global glo_nest_connection_status
+
+   glo_nest_connection_status = {}
+
+
+
+# have plush connect to a nest, given a plush xmlrpc.Server instance, the nest name, and
+# the path to the plush logfile.  nest has the format of slice_name@node_name:port_num
+# Return true if the nest is successfully connected; false if not
+def plush_connect( plush_server, nest, attempt_count, logfile_path, timeout, plush_info ):
+   client_list = plush_info['client_list']
+
+   if get_connection_status( nest ) != 0:
+      # we're already connected
+      return True
+
+   while attempt_count > 0:
+      print "[storkplushd] attempting to connect to " + nest
+      plush_server.plush.connectHost( nest )
+      time.sleep( timeout )
+
+      result = verify_connection( nest, logfile_path )
+
+      # result is the line number in the logfile where the nest was indicated to have connected last.
+      # Higher result values mean later connections.  Since we store connection status as the line number
+      # in the logfile where the node was last connected, a change in the line number indicates a successful
+      # connection.
+      if result > get_connection_status( nest ):
+         # connection successful!
+         set_connection_status( nest, result )
+         print "[storkplushd]: " + nest + " connection registered"
+
+         # start up storksyncd on the remote nest, such that it monitors the file we'll be pushing to it
+         os.system("scp /usr/local/stork/bin/storksyncd " + nest.split(":")[0] + ":~/")
+         plush_server.plush.runCommandVec("python ~/storksyncd --poll-metafile=" + plush_info['remote_path'] + " --poll-timeout=" + str(2*glo_push_interval) + " --metafile-url=" + plush_info['metafile_url'] + " --sync &", nest)
+         
+         # get hostname of this nest
+         nest_hostname = nest.split("@")[1].split(":")[0]
+          
+         # start up storksyncd on each nest client slice
+         for client in client_list:
+            print "[storkplushd]: Starting storksyncd on " + client + "@" + nest_hostname
+            os.system("scp /usr/local/stork/bin/storksyncd " + client + "@" + nest_hostname + ":~/")
+            os.system("ssh " + client + "@" + nest_hostname + " python /home/" + client + "/storksyncd --poll-metafile=" + plush_info['client_metafile_path'] + " --poll-timeout=" + str(4*glo_push_interval) + " --metafile-url=" + plush_info['nest_metafile_url'])
+            
+            
+         print "[storkplushd]: started storksyncd on " + nest.split(":")[0]
+         return True
+      
+      attempt_count = attempt_count - 1
+      if attempt_count > 0:
+         print "[storkplushd]: no luck connecting to " + nest + ", retrying..."
+
+   print "[storkplushd]: giving up on " + nest
+   return False
+
+
+
+# start the PLuSH controller
+def start_plush( plush_dir, plush_command, plush_portnum, nest_list, logfile_path ):
+   invalidate_all_connections() 
+   
+   # start the process
+   debug("plush command: " + plush_dir + "/" + "plush -P " + str(plush_port) )
+   
+   current_dir = os.getcwd()
+   # os.chdir( plush_dir )
+   # os.system( "plush -P " + str(plush_port) + " &")
+   # os.chdir( current_dir )
+   #plush_thread = PLuSH_thread( "cd " + plush_dir + " && ./plush -P " + str(plush_port) + " && cd -")
+   plush_thread = PLuSH_thread( plush_dir + "/plush -P " + str(plush_port) )
+
+   print "[storkplushd]: PLuSH started; giving it some time to discover nest slices..."
+
+   # give plush some time to start up
+   time.sleep(20)
+
+   # open a connection to PLuSH
+   plush_server = xmlrpclib.Server("http://localhost:" + str(plush_portnum) + "/")
+   debug("connecting to XMLRPC PLuSH server at http://localhost:" + str(plush_portnum) + "/")
+   debug("Test connection: " + plush_server.plush.test() )
+   
+   print "[storkplushd]: Initialized PLuSH"
+
+
+
+
+
+
+# is PLuSH running?
+def is_plush_running():
+
+   cmd = os.popen("ps aux")
+   proc_list = cmd.readlines()
+   running = False
+
+   cmd.close()
+
+   for proc in proc_list:
+      plush_proc = proc.find("plush -P")
+      if plush_proc >= 0:
+         running = True
+         break
+
+   return running
+# end
+
+
+
+
+
+# simple method to write a file, given a string (used to create PLuSH XML files)
+def make_file( filename, data_str ):
+   try:
+      file = open( filename, "w" )
+      file.writelines( data_str )
+      file.close()
+      return True
+   except:
+      print "[storkplushd]: could not create file " + filename
+      return False
+
+
+
+
+# thread that forks and executes PLuSH itself
+# (for some reason, invoking "plush -P 4000 &" from os.system() or the shell
+# causes PLuSH to die a few seconds later)
+class PLuSH_thread(threading.Thread):
+
+   # just give the thread the PLuSH command to start
+   def __init__(self, plush_command):
+      threading.Thread.__init__(self)
+      self.plush_command = plush_command
+      
+      if is_plush_running() == False:
+         self.start()
+   #end
+
+   # on running, execute the command and sit idly
+   def run(self):
+      os.system( self.plush_command )
+      while True:
+         time.sleep(10)
+         if is_plush_running() == False:
+            invalidate_all_connections() 
+            break   # die if PLuSH dies
+      #end
+   #end
+#end
+
+
+# generate a function call with a variable number of arguments
+def gen_call( method_name, arg_list ):
+   
+   arg_str = ''
+   for arg in arg_list:
+      arg_str = arg_str + "," + arg
+
+   arg_str = arg_str[1:]
+
+   return method_name + "(" + arg_str + ")"
+
+# push data to a nest, given an xmlrpc.Server instance initialized to talk to plush, a nest name,
+# a list of ASCII strings to put into the remote file, and a path to the remote file.
+# return true on success, false on failure
+def push_data( plush_server, nests, lines, file_path_remote):
+
+   # can't do anything if plush isn't running
+   if is_plush_running() == False:
+      return False
+
+   debug("push_data: pushing data to " + nests + ":" + file_path_remote)
+
+   tmp_buff_file = "/tmp/.b"
+
+   # try to clear out the file (if it exists)
+   try:
+      cmd1 = gen_call( "plush_server.plush.runCommandVec", ["test -f " + file_path_remote + " && sudo rm -rf " + file_path_remote] + nests.split(',') )
+      cmd2 = gen_call( "plush_server.plush.runCommandVec", ["test -f " + tmp_buff_file + " && sudo rm -rf " + tmp_buff_file] + nests.split(',') )
+      exec( cmd1 )
+      exec( cmd2 )
+
+   except:
+      print "[storkplushd]: could not send file to " + nests
+      return False
+
+   # echo the lines to the file remotely
+   line_count = 0
+   for line in lines:
+      line = line.rstrip("\n")
+      try:
+        cmd = gen_call( "plush_server.plush.runCommandVec", ["sudo echo " + line + " >> " + tmp_buff_file] + nests.split(',') )
+        exec( cmd )
+         line_count = line_count + 1
+      except:
+         print "[storkplushd]: error in transmitting file data to " + file_path_remote + " on nests " + nests
+         return False
+
+   try:
+      cmd = gen_call( "plush_server.plush.runCommandVec", ["sudo mv " + tmp_buff_file + " " + file_path_remote] + nests.split(',') )
+      exec( cmd )
+   except:
+      print "[storkplushd]: error in updating file " + file_path_remote + " on nest " + nests
+      return False
+
+   print "[storkplushd]: sent " + str(line_count) + " lines to " + nests
+   return True
+
+
+
+
+# Manage node connections--try to connect to every nest
+class ConnectionManager(threading.Thread):
+
+   # start up
+   def __init__(self, nest_list, plush_info, verboseness):
+      threading.Thread.__init__(self)
+      self.verboseness = verboseness
+      self.plush_info = plush_info
+      self.plush_server = xmlrpclib.Server( plush_info['plush_url'] )
+      self.nests = nest_list
+      self.nests_csv = ''
+      for nest in nests:
+         self.nests_csv = self.nests_csv + ',' + nest
+
+      self.nests_csv = self.nests_csv[1:]
+      
+      self.start()
+      
+   # continuously try to talk to nests
+   def run(self):
+      while True:
+         for nest in self.nests:
+            if get_connection_status( nest ) == 0:
+               try:
+                  plush_connect( self.plush_server, nest, 1, self.plush_info['plush_logfile_path'], 20, self.plush_info)
+                  # time.sleep(3)  # give a slight delay so we don't run out of socket file descriptors for large numbers of nests
+               except:
+                  print "[storkplushd] got exception when connecting to " + nest + ", so I'll come back to it later"
+                  self.plush_server = xmlrpclib.Server( self.plush_info['plush_url'] )
+                  pass
+
+
+
+# Continuously push out metadata to each connected nest
+class DataPusher(threading.Thread):
+
+   # start up
+   def __init__(self, timeout, nests, plush_info, verboseness):
+      threading.Thread.__init__(self)
+      self.verboseness = verboseness
+      self.plush_info = plush_info
+      self.plush_server = xmlrpclib.Server( plush_info['plush_url'] )
+      self.timeout_delta = timeout
+      self.nests = nests
+      self.timeout = time.time() + self.timeout_delta
+      self.start()
+
+   # continuously attempt to push metadata to each connected node when it times out
+   def run(self):
+      while True:
+         # read the metadata
+         data = []
+         try:
+            metadata_file = open(self.plush_info['metafile_path'], "r")
+            data = metadata_file.readlines()
+            metadata_file.close()
+         except:
+            print "[storkplushd] could not read from " + self.plush_info['metafile_path']
+            continue
+            pass
+
+         if time.time() > self.timeout:
+            self.timeout = time.time() + self.timeout_delta
+           push_data( self.plush_server, nests, data, self.plush_info['remote_path'] )
+
+#         for nest in self.nests:
+#            if get_connection_status( nest ) == 0:
+#               continue  # don't worry about non-connected nests--that's not our job
+#
+#            if time.time() > self.timeouts[nest]:
+#               # we've timed out--send this nest the metadata
+#               self.timeouts[nest] = self.timeout_delta + time.time()
+#               push_data( self.plush_server, nest, data, self.plush_info['remote_path'] )
+
+
+
+# check the PLuSH process every so often and re-spawn it as needed
+class PLuSH_Poller(threading.Thread):
+   """
+   <Purpose>
+      Initialize the thread to begin monitoring the PLuSH process
+   """
+   def __init__(self, timeout, plush_info, verboseness):
+      threading.Thread.__init__(self)
+      self.timeout = time.time() + timeout    # poll every few seconds
+      self.timeout_delta = timeout
+      self.plush_info = plush_info
+      self.verboseness = verboseness
+
+      print "[storkplushd]: will check PLuSH process every " + str(timeout) + " seconds."
+      self.start()
+
+   """
+   <Purpose>
+      Check to see if PLuSH is still running every so often.
+   """
+   def run(self):
+      while True:
+          # are we expired?
+          if self.timeout < time.time() :
+             # new timeout...
+             self.timeout = time.time() + self.timeout_delta
+             
+             # if it's not running, then spawn it
+             if is_plush_running() == False:
+                start_plush( self.plush_info['plush_dir'], self.plush_info['plush_command'], self.plush_info['plush_portnum'], self.plush_info['nest_list'], self.plush_info['plush_logfile_path'] )  
+
+          else:
+            # sleep some to save CPU
+            time.sleep( self.timeout_delta )
+         # end
+      # end
+   # end
+# end
+
+def handler_sighup(signum, frame):
+    """
+    <Purpose>
+       Intercepts the "hangup" signal, but doesn't do anything.
+       Simply causes the sleep to return.
+    """
+    pass
+
+
+def Main():
+    global sync
+    global verbose
+    global pacman_update_event
+    global plush_command
+    global plush_port
+    global glo_push_interval
+    global check_interval
+
+    args = arizonaconfig.init_options("storkplushd",version="2.0", configfile_optvar="configfile")
+
+    
+    loc_push_interval = arizonaconfig.get_option("push_interval")
+    glo_push_interval = loc_push_interval
+    loc_check_interval = arizonaconfig.get_option("check_interval")
+    loc_experiment_path = arizonaconfig.get_option("experiment_path")
+    loc_nest_directory_path = arizonaconfig.get_option("nest_directory_path")
+    loc_plush_port = arizonaconfig.get_option("plush_port")
+    
+    loc_scripts_path = arizonaconfig.get_option("helper_scripts_path")
+    loc_metafile_path = arizonaconfig.get_option("metafile_path")
+    loc_plush_cwd = arizonaconfig.get_option("plush_cwd")
+    loc_plush_command = arizonaconfig.get_option("plush_command")
+    loc_nodes_per_thread = arizonaconfig.get_option("nodes_per_thread")
+    loc_client_slices = arizonaconfig.get_option("client_slices")
+    loc_nest_metafile_url = arizonaconfig.get_option("nest_metafile_url")
+    loc_metafile_url = arizonaconfig.get_option("metafile_url")
+    loc_client_metafile_path = arizonaconfig.get_option("client_metafile_path")
+
+    loc_remote_path = arizonaconfig.get_option("remote_path")
+
+    do_sync = arizonaconfig.get_option("do_sync")
+    verbose = arizonaconfig.get_option("verbose")
+    nest_list = arizonaconfig.get_option("nest_list")
+    loc_planetlab_user = arizonaconfig.get_option("planetlab_user")
+
+    if loc_push_interval == None:
+       loc_push_interval = push_interval
+
+    if loc_check_interval == None:
+       loc_check_interval = check_interval
+
+    if loc_plush_port == None:
+       loc_plush_port = plush_port
+
+    if loc_planetlab_user == None:
+       loc_planetlab_user = planetlab_user
+
+    if loc_remote_path == None:
+       loc_remote_path = "/tmp/metafile." + str(os.getpid())
+
+    loc_plush_url = "http://localhost:" + str(loc_plush_port + 1) + "/"
+
+    # calculate a list of nests
+    nest_array_tmp = nest_list.split(",")
+    nest_array = []
+    for nest in nest_array_tmp:
+       nest = nest.strip()
+       nest_array.append( nest )
+
+    # calculate list of slices
+    client_array_tmp = loc_client_slices.split(",")
+    client_array = []
+    for client in client_array_tmp:
+       client = client.strip()
+       client_array.append( client )
+
+    # we haven't connected to anyone yet, so zero out our connection list
+    for nest in nest_array:
+       glo_nest_connection_status[nest] = 0
+
+    # accumulate PLuSH info into a dictionary
+    plush_info = {
+         'metafile_path':loc_metafile_path,
+         'experiment_path':loc_experiment_path,
+         'plush_url':loc_plush_url,
+         'plush_dir':loc_plush_cwd,
+         'plush_portnum':loc_plush_port + 1,
+         'plush_command':loc_plush_command,
+         'nest_list':nest_array,
+         'plush_logfile_path':"plush-logfile.txt",
+         'remote_path':loc_remote_path,
+         'client_list':client_array,
+         'nest_metafile_url':loc_nest_metafile_url,
+         'metafile_url':loc_metafile_url,
+         'client_metafile_path':loc_client_metafile_path
+    }
+
+    # set the hangup signal handler
+    signal.signal(signal.SIGHUP, handler_sighup)
+
+    if do_sync == False:
+       # run as a daemon
+       arizonageneral.make_daemon("storkplushd")
+
+   
+    # start PLuSH running!
+    start_plush( plush_info['plush_dir'], plush_info['plush_command'], plush_info['plush_portnum'], plush_info['nest_list'], plush_info['plush_logfile_path'] )
+
+   
+    # start monitoring plush
+    plush_mon = PLuSH_Poller( loc_check_interval, plush_info, 1 )
+
+    # start managing connections
+    plush_connect = ConnectionManager( nest_array, plush_info, 1 )
+
+    num_partitions = int(len(nest_array) / loc_nodes_per_thread) + 1
+    nest_partitions = []
+    for i in range(0, num_partitions):
+       nest_partitions.append([])
+
+    curr_partition = 0
+    for nest in nest_array:
+       nest_partitions[curr_partition].append(nest)
+       curr_partition = (curr_partition + 1) % num_partitions
+
+    for partition in nest_partitions:
+       pusher = DataPusher( loc_push_interval, partition, plush_info, 1 )
+    
+    print "[storkplushd]: Started " + str(num_partitions) + " threads to push data"
+
+"""
+    # start pushing metadata
+    # Partition the nest array into lists with loc_nodes_per_thread threads per
+    # connection manager, and supply two DataPusher instances for each partition.
+    push_nest_count = 0
+    connect_nest_count = 0
+    push_nest_partition = []
+    connect_nest_partition = []
+    push_thread_count = 0
+    connect_thread_count = 0
+    for nest in nest_array:
+       if connect_nest_count < loc_nodes_per_thread:
+          connect_nest_partition.append(nest)
+          connect_nest_count = connect_nest_count + 1
+
+       if push_nest_count < 0.5 * loc_nodes_per_thread:
+          push_nest_partition.append(nest)
+          push_nest_count = push_nest_count + 1
+       
+       if push_nest_count >= 0.5 * loc_nodes_per_thread:
+          plush_data_pusher = DataPusher( loc_push_interval, push_nest_partition, plush_info, 1 )
+          push_nest_count = 0
+          push_nest_partition = []
+          push_thread_count = push_thread_count + 1
+       
+       if connect_nest_count >= loc_nodes_per_thread:
+          plush_connection_manager = ConnectionManager( connect_nest_partition, plush_info, 1 )
+          connect_nest_count = 0
+          connect_nest_partition = []
+
+    plush_data_pusher = DataPusher( loc_push_interval, push_nest_partition, plush_info, 1 )
+    plush_connection_manager = ConnectionManager( connect_nest_partition, plush_info, 1 )
+
+    push_thread_count = push_thread_count + 1
+    connect_thread_count = connect_thread_count + 1
+
+    print "[storkplushd]: started " + str(connect_thread_count) + " thread(s) for connection management; " + str(push_thread_count) + " for pushing data."
+"""
+    # wait to die
+
+
+if __name__ == "__main__":
+    Main()
diff --git a/2.0/plush/storksyncd b/2.0/plush/storksyncd
new file mode 100755 (executable)
index 0000000..1c8a84c
--- /dev/null
@@ -0,0 +1,312 @@
+#! /usr/bin/env python
+
+# Jude Nelson
+# Parts copied from pacmand
+#
+# Synchronizes repository metafile
+#
+#           [option, long option,                     variable,                      action,       data,     default,                       metavar,                       description]
+"""arizonaconfig
+    options=[
+
+            ["-C",   "--configfile",  "configfile",  "store",       "string", "/usr/local/stork/etc/stork.conf", "FILE",      "use a different config file (/usr/local/stork/etc/stork.conf is the default)"],
+             ["",    "--poll-metafile",          "pollfile",                    "store",       "string", "/usr/local/stork/var/packageinfo/stork-repository.cs.arizona.edu/packageinfo/metafile",        "pollfile",                         "location of metafile on disk"],
+             ["",    "--poll-timeout",    "timeout",    "store",   "int",    10,    None,   "Timeout (in seconds) for the system to begin polling for the metadata"],
+             ["",    "--metafile-url",  "metafile_url", "store", "string", "http://quake2.cs.arizona.edu/packageinfo/metafile", "metafile_url", "hostname and path to of the repository metafile"],
+            ["", "--sync", "do_sync", "store_true", None, False, None, "do not daemonize"],
+            ["", "--nestproxy-url", "nest_proxy_url", "store", "string", "http://localhost:6648/quake2.cs.arizona.edu/packageinfo/metafile", "nest_proxy_url", "URL to the metafile on the nest proxy"],
+            ["", "--download-protocols", "download_protocols", "store", "string", "nestproxy,urllib2,arizonatransfer", "download_protocols", "List and order of download protocols to use to fetch the file.  Options are \"arizonatransfer\", \"urllib2\", and \"nestproxy\""]
+            ]
+     includes=[]
+"""
+
+import sys,os,signal,time
+#should be in the same directory as the other scripts when used...
+#sys.path += ["../python/refactor"]
+sys.path += ["/usr/local/stork/bin"]
+import arizonaconfig, arizonareport, arizonacomm
+import arizonatransfer
+import arizonageneral
+import threading
+import hashlib
+import urllib2
+
+# default values
+glo_timeout = 10
+glo_metafile_url = "https://stork-repository.cs.arizona.edu/packageinfo/"
+glo_pollfile = "/tmp/storkfiles/metafile"
+glo_nestproxy_url = "http://localhost:6480"
+glo_download_order = ["nestproxy", "urllib2" "arizonatransfer"]
+
+# get the metadata from the stork repository using the arizonatransfer
+# (depricated, doesn't always work (?))
+def get_metadata_arizonatransfer(host, dest_str, hash):
+   
+   # yoinked from CVSROOT/tools/misc/aztransfer.py
+   
+   arizonageneral.makedirs_existok("tarpackinfo")
+   arizonaconfig.set_option("tarpackinfopath", "./tarpackinfo")
+
+   hashlist = arizonaconfig.get_option("hash")
+
+   hashfuncs = []
+   if arizonaconfig.get_option("hashfuncs"):
+      for hashname in arizonaconfig.get_option("hashfuncs"):
+         if hashname == "default":
+            hashfuncs.append(arizonatransfer.default_hashfunc)
+         elif hashname == "package":
+            hashfuncs.append(storkpackage.get_package_metadata_hash)
+         else:
+            print "unknown hashfunc ", hashname
+            sys.exit(1)
+
+   filelist = []
+   dict = {'filename': os.path.basename(dest_str)}
+   if hash:
+      dict['hash'] = hash
+
+   if hashfuncs:
+      dict['hashfuncs'] = hashfuncs
+
+   filelist.append( dict )
+
+   destdir = os.path.dirname( dest_str )
+
+   arizonageneral.makedirs_existok(destdir)
+
+   # print "host = ", host
+   # print "filelist = ", filelist
+   # print "destdir = ", destdir
+
+   if filelist[0]['filename'] == "sync":
+      arizonageneral.makedirs_existok("sync")
+      (result, grabbed_list, all_list) = arizonatransfer.sync_remote_dir(host, "sync", hashfuncs=hashfuncs)
+   else:
+      (result, grabbed_list) = arizonatransfer.getfiles1(host, filelist, destdir, None, False)
+
+   # print "result = ", result
+   # print "grabbed_list = ", grabbed_list
+   return result
+
+
+# get metadata via urllib2
+def get_metadata_urllib2( host, dest_str ):
+   
+   try: 
+      url_opener = urllib2.build_opener()
+      metafile_page = url_opener.open( host )
+      metafile_data = metafile_page.read()
+
+      # save it...
+      destdir = os.path.dirname( dest_str )
+      arizonageneral.makedirs_existok( destdir )
+
+      fout = open( dest_str, "wt" )
+      fout.write( metafile_data )
+      fout.close()
+
+      return True
+   except:
+      print "Could not get metafile from " + host
+      pass
+
+   return False
+
+# get metadata via stork_nest_proxy HTTP request
+def get_metadata_nestproxy( proxy_host, dest_str, repository_host="https://stork-repository.cs.arizona.edu/packageinfo" ):
+
+   try:
+      metafile_response = urllib2.urlopen( proxy_host + "?max_age=100" )
+      
+      dest_dir = os.path.dirname( dest_str )
+      arizonageneral.makedirs_existok( dest_dir )
+
+      fout = open( dest_str, "wt" )
+      fout.write( metafile_response.read() )
+      fout.close()
+
+      return True
+
+   except:
+      print "Could not get metafile from nestproxy " + proxy_host
+      pass
+
+   return False
+
+
+# poll the FS for a new metafile every few seconds to see if the atime has changed,
+# and redownload it if it is too old
+class FilePoller(threading.Thread):
+   """
+   <Purpose>
+      Initialize the thread to begin polling the FS for a new metadata file
+   """
+   def __init__(self, metadata_filename, metafile_url, nestproxy_url, download_protocol_list, timeout, verboseness):
+      threading.Thread.__init__(self)
+      self.metadata_filename = metadata_filename
+      self.nestproxy_url = nestproxy_url
+      self.download_protocol_list = download_protocol_list
+      self.timeout = time.time() + timeout    # poll every few seconds
+      self.timeout_delta = timeout
+      self.verboseness = verboseness
+      self.metafile_url = metafile_url
+
+      print "[storksyncd] will poll " + metadata_filename + " every " + str(timeout) + " seconds, and download from " + metafile_url
+      self.start()
+
+   """
+   <Purpose>
+      Poll the FS for the file matching self.metadata_filename
+      If the file exists AND has a different timestamp than
+      the currently-recognized file, then invoke pacman on it.
+   """
+   def run(self):
+      while True:
+          # are we expired?
+          if self.timeout < time.time() :
+             # new timeout...
+             self.timeout = time.time() + self.timeout_delta
+         
+             # does the file exist?  Prepare get it if not
+             atime = 0
+             if os.path.exists( self.metadata_filename ) == False :
+                atime = -1;
+
+             else:
+                if self.verboseness != 0:
+                   print "[storksyncd] polling for " + self.metadata_filename
+
+                # get atime
+                atime = os.stat(self.metadata_filename).st_mtime
+
+             # is the file too old?
+&