From 5353ae32a6d8a02b79697608c18e47ae667d1ff1 Mon Sep 17 00:00:00 2001 From: Paul Chote Date: Sat, 22 Jan 2011 21:56:18 +1300 Subject: [PATCH] Authenticate windows commands. Untested. --- OpenRA.Launcher.Mac/Controller.m | 4 +- .../Release/OpenRA.app/Contents/MacOS/OpenRA | Bin 81688 -> 81688 bytes OpenRA.Utility/Command.cs | 15 +++++++ OpenRA.Utility/Program.cs | 9 +++-- OpenRA.Utility/Util.cs | 37 ++++++++++++++++++ 5 files changed, 60 insertions(+), 5 deletions(-) diff --git a/OpenRA.Launcher.Mac/Controller.m b/OpenRA.Launcher.Mac/Controller.m index a46d7bda12..babe4260ac 100644 --- a/OpenRA.Launcher.Mac/Controller.m +++ b/OpenRA.Launcher.Mac/Controller.m @@ -58,14 +58,14 @@ - (void)extractZip:(NSArray *)args { // Todo: check if we can write to the requested dir, escalate priviledges if required. - NSArray *a = [NSArray arrayWithObjects:@"--extract-zip", [args objectAtIndex:2], [args objectAtIndex:3], nil]; + NSArray *a = [NSArray arrayWithObjects:@"--extract-zip-inner", [args objectAtIndex:2], [args objectAtIndex:3], nil]; [self runUtilityWithArgs:a]; } - (void)installRAPackages:(NSArray *)args { // Todo: check if we can write to the requested dir, escalate priviledges if required. - NSArray *a = [NSArray arrayWithObjects:@"--install-ra-packages", [args objectAtIndex:2], nil]; + NSArray *a = [NSArray arrayWithObjects:@"--install-ra-packages-inner", [args objectAtIndex:2], nil]; [self runUtilityWithArgs:a]; } diff --git a/OpenRA.Launcher.Mac/build/Release/OpenRA.app/Contents/MacOS/OpenRA b/OpenRA.Launcher.Mac/build/Release/OpenRA.app/Contents/MacOS/OpenRA index a54d3179317826bb6ee68aa223387866d3763587..ce9e955b5982fb1a3d5e11a8d4b628a1385c2f75 100755 GIT binary patch delta 113 zcmV-%0FM8d{sfr*1hDWI5Yv=n2A!@z-%do?liaX|g|ZkJJ_6>Ivl>=vAsN;C4qY-) zFB=UzSbEA-J3<8j002+`0004(&k+GHv&?s}O9JJUvwp))BM|4Yss6G+30CPlfo5Qu TlaRCA=GI99mFBm!Facx^#5^#f delta 113 zcmbR7k7dR`mJJ`o1%At);g>8A@7%GK(>2g`Z|o)s2|K3lDVwFjvJ@rrJSJ8A{5&b8 zR$GgC+UwVxtPBhc0YJ<+{k$Nf{^m2~8@xek>kj)V3(Qp5ms`afo+&7vZ)2Ze`e*Z< RXV*NLrgU%LV!)Wf2LK@(); - argCallbacks.Add("--extract-zip", Command.ExtractZip); - argCallbacks.Add("--install-ra-packages", Command.InstallRAPackages); - argCallbacks.Add("--install-cnc-packages", Command.InstallCncPackages); + argCallbacks.Add("--extract-zip-inner", Command.ExtractZip); + argCallbacks.Add("--install-ra-packages-inner", Command.InstallRAPackages); + argCallbacks.Add("--install-cnc-packages-inner", Command.InstallCncPackages); argCallbacks.Add("--display-filepicker", Command.DisplayFilepicker); argCallbacks.Add("--settings-value", Command.Settings); + argCallbacks.Add("--install-ra-packages", Command.AuthenticateAndInstallRAPackages); + argCallbacks.Add("--install-cnc-packages", Command.AuthenticateAndInstallCncPackages); + argCallbacks.Add("--extract-zip", Command.AuthenticateAndExtractZip); if (args.Length == 0) { PrintUsage(); return; } diff --git a/OpenRA.Utility/Util.cs b/OpenRA.Utility/Util.cs index be35dd3231..d5885b035e 100644 --- a/OpenRA.Utility/Util.cs +++ b/OpenRA.Utility/Util.cs @@ -13,6 +13,9 @@ using System.IO; using ICSharpCode.SharpZipLib.Zip; using OpenRA.FileFormats; using System.Collections.Generic; +using System.ComponentModel; +using System.Diagnostics; +using System.IO.Pipes; namespace OpenRA.Utility { @@ -61,5 +64,39 @@ namespace OpenRA.Utility } z.Close(); } + + public static string GetPipeName() + { + return "OpenRA.Utility" + Guid.NewGuid().ToString(); + } + + public static void CallWithAdmin(string command) + { + string pipename = Util.GetPipeName(); + var p = new Process(); + p.StartInfo.FileName = "OpenRA.Utility.exe"; + p.StartInfo.Arguments = command + " --pipe=" + pipename; + p.StartInfo.Verb = "runas"; + + try + { + p.Start(); + } + catch (Win32Exception e) + { + if (e.NativeErrorCode == 1223) //ERROR_CANCELLED + return; + throw e; + } + + var pipe = new NamedPipeClientStream(".", pipename, PipeDirection.In); + pipe.Connect(); + + using (var reader = new StreamReader(pipe)) + { + while (!p.HasExited) + Console.Write(reader.ReadLine()); + } + } } }