Monday, November 08, 2010 at 12:06 AM.
system.verbs.builtins.userland.portForward
on portForward (sourcePort=nil, destinationPort=nil, sourceAddr="any", adminPassword="", flSaveAdminPassword=false) { // by Eric Soroos <<Changes <<4/11/02; 6:25:37 PM by JES <<New optional parameters: adminPassword -- the password to use for the sudo command; flSaveAdminPassword -- if true, the password is stored as a binary object in user.prefs.portForwardingAdminPassword. <<5/8/01; 5:54:54 PM by ES <<Port forward from secure ports to ones that don't require root access. <<sudo sysctl -w net.inet.ip.forwarding=1 <<turns on ip forwarding <<sudo ipfw add 102 fwd 127.0.0.1,2525 tcp from any to any 25 in <<adds a rule at priority 102 (of 65k) to forward port 25 (mail) to port 2525 on the local machine interface. <<Only applies to the incoming packet filter. <<Wed, May 9, 2001 at 10:58:55 AM by ES <<updated with source addr, dropping privs, and some extra quoted quotes <<Sat, Jun 2, 2001 at 2:23:44 PM by YNH <<Get source and destination port from user.inetd.config.http. if not system.environment.isCarbon { scriptError ("Can't start port forwarding because it is not supported on this platform.")}; local (resultString = ""); if sourcePort == nil { //PBS 06/02/01: get from user.inetd.config.http.apparentPort sourcePort = user.inetd.config.http.apparentPort}; if destinationPort == nil { //PBS 06/02/01: get from user.inetd.config.http.port destinationPort = user.inetd.config.http.port}; if adminPassword == "" { Frontier.bringToFront (); if not dialog.getPassword ("Admin password (for port forwarding)?", @adminPassword) { return (false)}}; resultString = sys.unixShellCommand ("echo \"" +adminPassword + "\" | sudo -S /usr/sbin/sysctl -w net.inet.ip.forwarding=1"); if resultString == "" { Frontier.bringToFront (); dialog.alert ("Port forwarding failed."); return (false)}; resultString = resultString + sys.unixShellCommand ("sudo /sbin/ipfw add 102 fwd 127.0.0.1," + destinationPort + " tcp from any to " + sourceAddr + " " + sourcePort + " in"); resultString = resultString + sys.unixShellCommand ("sudo -K"); // drop our privs Wed, May 9, 2001 at 10:58:11 AM by ES <<dialog.alert (resultString) if flSaveAdminPassword { user.prefs.portForwardingAdminPassword = binary (adminPassword)}; return (true)}; bundle { //test code portForward ()}
This listing is for code that runs in the OPML Editor environment. I created these listings because I wanted the search engines to index it, so that when I want to look up something in my codebase I don't have to use the much slower search functionality in my object database. Dave Winer.