(List (= scope= flags=0 words=[] bindings=[('DIR', {[ComSub (Com {[LIT_CHARS dirname]} {[DQ [VarSub 0]]})]})]) (= scope= flags=0 words=[] bindings=[('INSTALLER', {[DQ [VarSub DIR]] [LIT_CHARS /keystone_install.sh]})]) (If (Com {[LIT_OTHER "["]} {[LIT_OTHER "!"]} {[LIT_CHARS -f]} {[DQ [VarSub INSTALLER]]} {[LIT_OTHER "]"]}) (List (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Can't find scripts."]]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), > ) (Com {[LIT_CHARS exit]} {[LIT_CHARS 1]}) ) ) (= scope= flags=0 words=[] bindings=[('PRODNAME', {[DQ [LIT_CHARS "Google Chrome"]]})]) (= scope= flags=0 words=[] bindings=[('APPNAME', {[DQ [VarSub PRODNAME][LIT_CHARS .app]]})]) (= scope= flags=0 words=[] bindings=[('FWKNAME', {[DQ [VarSub PRODNAME][LIT_CHARS " Framework.framework"]]})]) (= scope= flags=0 words=[] bindings=[('KSADMIN_VERSION_LIE', {[DQ [LIT_CHARS 1.0.7.1306]]})]) (= scope= flags=0 words=[] bindings=[('TEMPDIR', {[ComSub (Com {[LIT_CHARS mktemp]} {[LIT_CHARS -d]} {[LIT_CHARS -t]} {[ComSub (Com {[LIT_CHARS basename]} {[VarSub 0]})]})]})]) (= scope= flags=0 words=[] bindings=[('PATH', {[VarSub PATH] [LIT_OTHER ":"] [DQ [VarSub TEMPDIR]]})]) (FunctionDef cleanup_tempdir [] (List (Com {[LIT_CHARS chmod]} {[LIT_CHARS u] [LIT_OTHER "+"] [LIT_CHARS w]} {[DQ [VarSub TEMPDIR]]}) (Com {[LIT_CHARS rm]} {[LIT_CHARS -rf]} {[DQ [VarSub TEMPDIR]]}) ) ) (FunctionDef fail_installer [] (List (Com {[LIT_CHARS echo]} {[VarSub 1]}) (Com {[DQ [VarSub INSTALLER]]} {[DQ [VarSub TEMPDIR]]} < (DescriptorRedirectNode target={[LIT_CHARS /dev/null]} &"> 1), > ) (= scope= flags=0 words=[] bindings=[('RETURN', {[VarSub ?]})]) (If (Com {[LIT_OTHER "["]} {[VarSub RETURN]} {[LIT_CHARS -eq]} {[LIT_CHARS 0]} {[LIT_OTHER "]"]}) (List (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Did not fail (which is a failure)"]]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), > ) (Com {[LIT_CHARS cleanup_tempdir]}) (Com {[LIT_CHARS exit]} {[LIT_CHARS 1]}) ) (ElseTrue) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Returns "][VarSub RETURN]]}) ) ) ) (FunctionDef pass_installer [] (List (Com {[LIT_CHARS echo]} {[VarSub 1]}) (Com {[DQ [VarSub INSTALLER]]} {[DQ [VarSub TEMPDIR]]} < (DescriptorRedirectNode target={[LIT_CHARS /dev/null]} &"> 1), > ) (= scope= flags=0 words=[] bindings=[('RETURN', {[VarSub ?]})]) (If (Com {[LIT_OTHER "["]} {[VarSub RETURN]} {[LIT_CHARS -ne]} {[LIT_CHARS 0]} {[LIT_OTHER "]"]}) (List (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "FAILED; returned "][VarSub RETURN][LIT_CHARS " but should have worked"]]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), > ) (Com {[LIT_CHARS cleanup_tempdir]}) (Com {[LIT_CHARS exit]} {[LIT_CHARS 1]}) ) (ElseTrue) (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS worked]]}) ) ) ) (FunctionDef make_old_dest [] (List (= scope= flags=0 words=[] bindings=[('DEST', {[DQ [VarSub TEMPDIR]] [LIT_CHARS /Dest.app]})]) (Com {[LIT_CHARS rm]} {[LIT_CHARS -rf]} {[DQ [VarSub DEST]]}) (Com {[LIT_CHARS mkdir]} {[LIT_CHARS -p]} {[DQ [VarSub DEST]] [LIT_CHARS /Contents]}) (Com {[LIT_CHARS defaults]} {[LIT_CHARS write]} {[DQ [VarSub DEST][LIT_CHARS /Contents/Info]]} {[LIT_CHARS KSVersion]} {[LIT_CHARS 0]}) (Com {[LIT_CHARS cat]} < (FilenameRedirectNode filename={[DQ [VarSub TEMPDIR]] [LIT_CHARS /ksadmin]} "> 1), (HereDocRedirectNode here_end='EOF' do_expansion=True body_word={[DQ [LIT_CHARS "#!/bin/sh\n"][LIT_CHARS "if [ "][RIGHT_D_QUOTE "\""][\ LIT_ESCAPED_CHAR "\\$"][LIT_CHARS "{1}"][RIGHT_D_QUOTE "\""][LIT_CHARS " = "][RIGHT_D_QUOTE "\""][LIT_CHARS --ksadmin-version][RIGHT_D_QUOTE "\""][LIT_CHARS " ] ; then\n"][LIT_CHARS " echo "][RIGHT_D_QUOTE "\""][VarSub KSADMIN_VERSION_LIE][RIGHT_D_QUOTE "\""][LIT_CHARS "\n"][LIT_CHARS " exit 0\n"][LIT_CHARS "fi\n"][LIT_CHARS "if [ -z "][RIGHT_D_QUOTE "\""][\ LIT_ESCAPED_CHAR "\\$"][LIT_CHARS "{FAKE_SYSTEM_TICKET}"][RIGHT_D_QUOTE "\""][LIT_CHARS " ] && [ "][RIGHT_D_QUOTE "\""][\ LIT_ESCAPED_CHAR "\\$"][LIT_CHARS "{1}"][RIGHT_D_QUOTE "\""][LIT_CHARS " = "][RIGHT_D_QUOTE "\""][LIT_CHARS -S][RIGHT_D_QUOTE "\""][LIT_CHARS " ] ; then\n"][LIT_CHARS " echo no system tix! >& 2\n"][LIT_CHARS " exit 1\n"][LIT_CHARS "fi\n"][LIT_CHARS "echo "][RIGHT_D_QUOTE "\""][LIT_CHARS " xc="][RIGHT_D_QUOTE "\""][LIT_CHARS "\n"][LIT_CHARS "exit 0\n"]]} 0), > ) (Com {[LIT_CHARS chmod]} {[LIT_CHARS u] [LIT_OTHER "+"] [LIT_CHARS x]} {[DQ [VarSub TEMPDIR]] [LIT_CHARS /ksadmin]}) ) ) (FunctionDef make_new_dest [] (List (= scope= flags=0 words=[] bindings=[('DEST', {[DQ [VarSub TEMPDIR]] [LIT_CHARS /Dest.app]})]) (Com {[LIT_CHARS rm]} {[LIT_CHARS -rf]} {[DQ [VarSub DEST]]}) (Com {[LIT_CHARS defaults]} {[LIT_CHARS write]} {[DQ [VarSub DEST][LIT_CHARS /Contents/Info]]} {[LIT_CHARS CFBundleShortVersionString]} {[LIT_CHARS 0]}) (Com {[LIT_CHARS defaults]} {[LIT_CHARS write]} {[DQ [VarSub DEST][LIT_CHARS /Contents/Info]]} {[LIT_CHARS KSVersion]} {[LIT_CHARS 0]}) (Com {[LIT_CHARS cat]} < (FilenameRedirectNode filename={[DQ [VarSub TEMPDIR]] [LIT_CHARS /ksadmin]} "> 1), (HereDocRedirectNode here_end='EOF' do_expansion=True body_word={[DQ [LIT_CHARS "#!/bin/sh\n"][LIT_CHARS "if [ "][RIGHT_D_QUOTE "\""][\ LIT_ESCAPED_CHAR "\\$"][LIT_CHARS "{1}"][RIGHT_D_QUOTE "\""][LIT_CHARS " = "][RIGHT_D_QUOTE "\""][LIT_CHARS --ksadmin-version][RIGHT_D_QUOTE "\""][LIT_CHARS " ] ; then\n"][LIT_CHARS " echo "][RIGHT_D_QUOTE "\""][VarSub KSADMIN_VERSION_LIE][RIGHT_D_QUOTE "\""][LIT_CHARS "\n"][LIT_CHARS " exit 0\n"][LIT_CHARS "fi\n"][LIT_CHARS "if [ -z "][RIGHT_D_QUOTE "\""][\ LIT_ESCAPED_CHAR "\\$"][LIT_CHARS "{FAKE_SYSTEM_TICKET}"][RIGHT_D_QUOTE "\""][LIT_CHARS " ] && [ "][RIGHT_D_QUOTE "\""][\ LIT_ESCAPED_CHAR "\\$"][LIT_CHARS "{1}"][RIGHT_D_QUOTE "\""][LIT_CHARS " = "][RIGHT_D_QUOTE "\""][LIT_CHARS -S][RIGHT_D_QUOTE "\""][LIT_CHARS " ] ; then\n"][LIT_CHARS " echo no system tix! >& 2\n"][LIT_CHARS " exit 1\n"][LIT_CHARS "fi\n"][LIT_CHARS "echo "][RIGHT_D_QUOTE "\""][LIT_CHARS " xc="][RIGHT_D_QUOTE "\""][LIT_CHARS "\n"][LIT_CHARS "exit 0\n"]]} 0), > ) (Com {[LIT_CHARS chmod]} {[LIT_CHARS u] [LIT_OTHER "+"] [LIT_CHARS x]} {[DQ [VarSub TEMPDIR]] [LIT_CHARS /ksadmin]}) ) ) (FunctionDef make_src [] (List (Com {[LIT_CHARS chmod]} {[LIT_CHARS ugo] [LIT_OTHER "+"] [LIT_CHARS w]} {[DQ [VarSub TEMPDIR]]}) (Com {[LIT_CHARS rm]} {[LIT_CHARS -rf]} {[DQ [VarSub TEMPDIR][LIT_CHARS /][VarSub APPNAME]]}) (= scope= flags=0 words=[] bindings=[('RSRCDIR', {[DQ [VarSub TEMPDIR][LIT_CHARS /][VarSub APPNAME][LIT_CHARS /Contents/Versions/1/][VarSub FWKNAME][LIT_CHARS /Resources]]})]) (Com {[LIT_CHARS mkdir]} {[LIT_CHARS -p]} {[DQ [VarSub RSRCDIR]]}) (Com {[LIT_CHARS defaults]} {[LIT_CHARS write]} {[DQ [VarSub TEMPDIR][LIT_CHARS /][VarSub APPNAME][LIT_CHARS /Contents/Info]]} {[LIT_CHARS CFBundleShortVersionString]} {[DQ [LIT_CHARS 1]]}) (Com {[LIT_CHARS defaults]} {[LIT_CHARS write]} {[DQ [VarSub TEMPDIR][LIT_CHARS /][VarSub APPNAME][LIT_CHARS /Contents/Info]]} {[LIT_CHARS KSProductID]} {[DQ [LIT_CHARS com.google.Chrome]]}) (Com {[LIT_CHARS defaults]} {[LIT_CHARS write]} {[DQ [VarSub TEMPDIR][LIT_CHARS /][VarSub APPNAME][LIT_CHARS /Contents/Info]]} {[LIT_CHARS KSVersion]} {[DQ [LIT_CHARS 2]]}) ) ) (FunctionDef make_basic_src_and_dest [] (List (Com {[LIT_CHARS make_src]}) (Com {[LIT_CHARS make_new_dest]}) ) ) (Com {[LIT_CHARS fail_installer]} {[DQ [LIT_CHARS "No source anything"]]}) (Com {[LIT_CHARS mkdir]} {[DQ [VarSub TEMPDIR]] [LIT_CHARS /] [DQ [VarSub APPNAME]]}) (Com {[LIT_CHARS fail_installer]} {[DQ [LIT_CHARS "No source bundle"]]}) (Com {[LIT_CHARS make_basic_src_and_dest]}) (Com {[LIT_CHARS chmod]} {[LIT_CHARS ugo-w]} {[DQ [VarSub TEMPDIR]]}) (Com {[LIT_CHARS fail_installer]} {[DQ [LIT_CHARS "Writable dest directory"]]}) (Com {[LIT_CHARS make_basic_src_and_dest]}) (Com {[LIT_CHARS fail_installer]} {[DQ [LIT_CHARS "Was no KSUpdateURL in dest after copy"]]}) (Com {[LIT_CHARS make_basic_src_and_dest]}) (Com {[LIT_CHARS defaults]} {[LIT_CHARS write]} {[DQ [VarSub TEMPDIR][LIT_CHARS /][VarSub APPNAME][LIT_CHARS /Contents/Info]]} {[LIT_CHARS KSUpdateURL]} {[DQ [LIT_CHARS "http://foobar"]]}) (= scope= flags=1 words=[] bindings=[('FAKE_SYSTEM_TICKET', {[LIT_CHARS 1]})]) (Com {[LIT_CHARS fail_installer]} {[DQ [LIT_CHARS "User and system ticket both present"]]}) (= scope= flags=1 words=[{[LIT_CHARS -n]}, {[LIT_CHARS FAKE_SYSTEM_TICKET]}] bindings=[]) (Com {[LIT_CHARS make_src]}) (Com {[LIT_CHARS make_old_dest]}) (Com {[LIT_CHARS defaults]} {[LIT_CHARS write]} {[DQ [VarSub TEMPDIR][LIT_CHARS /][VarSub APPNAME][LIT_CHARS /Contents/Info]]} {[LIT_CHARS KSUpdateURL]} {[DQ [LIT_CHARS "http://foobar"]]}) (Com {[LIT_CHARS pass_installer]} {[DQ [LIT_CHARS "Old-style update"]]}) (Com {[LIT_CHARS make_basic_src_and_dest]}) (Com {[LIT_CHARS defaults]} {[LIT_CHARS write]} {[DQ [VarSub TEMPDIR][LIT_CHARS /][VarSub APPNAME][LIT_CHARS /Contents/Info]]} {[LIT_CHARS KSUpdateURL]} {[DQ [LIT_CHARS "http://foobar"]]}) (Com {[LIT_CHARS pass_installer]} {[DQ [LIT_CHARS ALL]]}) (Com {[LIT_CHARS cleanup_tempdir]}) )