<div dir="ltr"><span style="font-size:12.8000001907349px">Hey everyone,</span><br style="font-size:12.8000001907349px"><br style="font-size:12.8000001907349px"><span style="font-size:12.8000001907349px">Currently I&#39;m at a fork in the road for the Revitalizing Pallet GSoC</span><br style="font-size:12.8000001907349px"><span style="font-size:12.8000001907349px">project, and was hoping to crowd source some ideas about how to deal</span><br style="font-size:12.8000001907349px"><span style="font-size:12.8000001907349px">with the Apple authorization framework used to get super user privileges</span><br style="font-size:12.8000001907349px"><span style="font-size:12.8000001907349px">to allow &#39;port&#39; to execute correctly under the hood. This task is the</span><br style="font-size:12.8000001907349px"><span style="font-size:12.8000001907349px">last major one on my GSoC queue. There are three possible roads to go</span><br style="font-size:12.8000001907349px"><span style="font-size:12.8000001907349px">down here; I don&#39;t know which one is the &quot;best&quot; or &quot;correct&quot; one, hence</span><br style="font-size:12.8000001907349px"><span style="font-size:12.8000001907349px">the crowd sourcing here.</span><br style="font-size:12.8000001907349px"><br style="font-size:12.8000001907349px"><span style="font-size:12.8000001907349px">0. Do nothing; leave the current code in place, but continue to ignore</span><br style="font-size:12.8000001907349px"><span style="font-size:12.8000001907349px">it; require the user to run it with superuser privileges;</span><br style="font-size:12.8000001907349px"><br style="font-size:12.8000001907349px"><span style="font-size:12.8000001907349px">1. Update the authorization framework pallet currently uses, and use it,</span><br style="font-size:12.8000001907349px"><span style="font-size:12.8000001907349px">requesting authorization only when needed;</span><br style="font-size:12.8000001907349px"><br style="font-size:12.8000001907349px"><span style="font-size:12.8000001907349px">2. Remove all authorization frameworks from it, and require the user to</span><br style="font-size:12.8000001907349px"><span style="font-size:12.8000001907349px">run it with superuser privileges.</span><br style="font-size:12.8000001907349px"><br style="font-size:12.8000001907349px"><span style="font-size:12.8000001907349px">I&#39;ve made a pros/cons list of each choice below, that I can think of.</span><div><br style="font-size:12.8000001907349px"><span style="font-size:12.8000001907349px">Thanks for your thoughts and opinions,</span><br style="font-size:12.8000001907349px"><span style="font-size:12.8000001907349px">-Kyle</span><br style="font-size:12.8000001907349px"><br style="font-size:12.8000001907349px"><span style="font-size:12.8000001907349px">** Option 0: Do nothing; leave the current code in place, but continue</span><br style="font-size:12.8000001907349px"><span style="font-size:12.8000001907349px">to ignore it; require the user to run it with superuser privileges;</span><br style="font-size:12.8000001907349px"><br style="font-size:12.8000001907349px"><span style="font-size:12.8000001907349px">Pros:</span><br style="font-size:12.8000001907349px"><span style="font-size:12.8000001907349px">--------</span><br style="font-size:12.8000001907349px"><span style="font-size:12.8000001907349px">1. Easiest to implement; requires no changes to the current code,</span><br style="font-size:12.8000001907349px"><span style="font-size:12.8000001907349px">allowing me to add more features to Pallet, and remove more bugs.</span><br style="font-size:12.8000001907349px"><br style="font-size:12.8000001907349px"><span style="font-size:12.8000001907349px">Cons:</span><br style="font-size:12.8000001907349px"><span style="font-size:12.8000001907349px">--------</span><br style="font-size:12.8000001907349px"><span style="font-size:12.8000001907349px">1. Still requires a certificate. Using a modern authorization framework</span><br style="font-size:12.8000001907349px"><span style="font-size:12.8000001907349px">requires the use of a self-signed certificate, which highly complicates</span><br style="font-size:12.8000001907349px"><span style="font-size:12.8000001907349px">the project build process, making writing a Portfile much harder.</span><br style="font-size:12.8000001907349px"><br style="font-size:12.8000001907349px"><span style="font-size:12.8000001907349px">2. Still requires running Pallet with superuser privileges.</span><br style="font-size:12.8000001907349px"><br style="font-size:12.8000001907349px"><span style="font-size:12.8000001907349px">3. Insecure. The entire application will be running as a superuser, so</span><br style="font-size:12.8000001907349px"><span style="font-size:12.8000001907349px">any vulnerabilities that are exploitable will allow a hacker to run as</span><br style="font-size:12.8000001907349px"><span style="font-size:12.8000001907349px">root.</span><br style="font-size:12.8000001907349px"><br style="font-size:12.8000001907349px"><span style="font-size:12.8000001907349px">** Option 1. Update the authorization framework pallet currently uses,</span><br style="font-size:12.8000001907349px"><span style="font-size:12.8000001907349px">and use it, requesting authorization only when needed:</span><br style="font-size:12.8000001907349px"><br style="font-size:12.8000001907349px"><span style="font-size:12.8000001907349px">Pros:</span><br style="font-size:12.8000001907349px"><span style="font-size:12.8000001907349px">--------</span><br style="font-size:12.8000001907349px"><span style="font-size:12.8000001907349px">1. Most secure. Uses code-signing to verify nothing has been tampered</span><br style="font-size:12.8000001907349px"><span style="font-size:12.8000001907349px">with, and runs the base executable with only user-privileges.</span><br style="font-size:12.8000001907349px"><br style="font-size:12.8000001907349px"><span style="font-size:12.8000001907349px">2. Apple approved: This is the &quot;Apple-approved&quot; way of getting superuser</span><br style="font-size:12.8000001907349px"><span style="font-size:12.8000001907349px">privileges when needed.</span><br style="font-size:12.8000001907349px"><br style="font-size:12.8000001907349px"><span style="font-size:12.8000001907349px">Cons:</span><br style="font-size:12.8000001907349px"><span style="font-size:12.8000001907349px">---------</span><br style="font-size:12.8000001907349px"><span style="font-size:12.8000001907349px">1. Hardest to implement. As in, it would most likely take up the rest of</span><br style="font-size:12.8000001907349px"><span style="font-size:12.8000001907349px">the time I have left to work on this project, and even then it might not</span><br style="font-size:12.8000001907349px"><span style="font-size:12.8000001907349px">be 100% implemented.</span><br style="font-size:12.8000001907349px"><br style="font-size:12.8000001907349px"><span style="font-size:12.8000001907349px">2. Hardest to support. Apple has a new authorization framework on almost</span><br style="font-size:12.8000001907349px"><span style="font-size:12.8000001907349px">every version of OS X, meaning that I&#39;d either have to support all of</span><br style="font-size:12.8000001907349px"><span style="font-size:12.8000001907349px">them (which is an obscene amount of work), or pick one that will</span><br style="font-size:12.8000001907349px"><span style="font-size:12.8000001907349px">eventually be deprecated in one or two OS X lifecycles, and won&#39;t work</span><br style="font-size:12.8000001907349px"><span style="font-size:12.8000001907349px">on any previous version of OS X.</span><br style="font-size:12.8000001907349px"><br style="font-size:12.8000001907349px"><span style="font-size:12.8000001907349px">** Option 2. Remove all authorization frameworks from Pallet, and</span><br style="font-size:12.8000001907349px"><span style="font-size:12.8000001907349px">require the user to run it with superuser privileges:</span><br style="font-size:12.8000001907349px"><br style="font-size:12.8000001907349px"><span style="font-size:12.8000001907349px">Pros:</span><br style="font-size:12.8000001907349px"><span style="font-size:12.8000001907349px">--------</span><br style="font-size:12.8000001907349px"><span style="font-size:12.8000001907349px">1. Pretty easy to implement. I could implement this solution in a day or</span><br style="font-size:12.8000001907349px"><span style="font-size:12.8000001907349px">two, allowing me to add more features to Pallet, and remove more bugs.</span><br style="font-size:12.8000001907349px"><br style="font-size:12.8000001907349px"><span style="font-size:12.8000001907349px">2. Doesn&#39;t require a certificate. Using a modern authorization framework</span><br style="font-size:12.8000001907349px"><span style="font-size:12.8000001907349px">requires the use of a self-signed certificate, which highly complicates</span><br style="font-size:12.8000001907349px"><span style="font-size:12.8000001907349px">the project build process, making writing a portfile much harder.</span><br style="font-size:12.8000001907349px"><br style="font-size:12.8000001907349px"><span style="font-size:12.8000001907349px">3. Easiest to support. Running an application with &quot;sudo&quot; will really</span><br style="font-size:12.8000001907349px"><span style="font-size:12.8000001907349px">never be deprecated, and will work on every OS X version.</span><br style="font-size:12.8000001907349px"><br style="font-size:12.8000001907349px"><span style="font-size:12.8000001907349px">4. Smallest code-base.</span><br style="font-size:12.8000001907349px"><br style="font-size:12.8000001907349px"><span style="font-size:12.8000001907349px">Cons:</span><br style="font-size:12.8000001907349px"><span style="font-size:12.8000001907349px">---------</span><br style="font-size:12.8000001907349px"><span style="font-size:12.8000001907349px">1. Insecure. The entire application will be running as a superuser, so</span><br style="font-size:12.8000001907349px"><span style="font-size:12.8000001907349px">any vulnerabilities that are exploitable will allow a hacker to run as</span><br style="font-size:12.8000001907349px"><span style="font-size:12.8000001907349px">root.</span><br></div></div>