]> code.citadel.org Git - citadel.git/blobdiff - ctdlphp/sessionproxy.php
* added api.html
[citadel.git] / ctdlphp / sessionproxy.php
index 09e35503a683429702b43b0c6386ff668b1a8220..986eb2a5219a84a702f9daff22b6214fc162afe9 100755 (executable)
@@ -58,30 +58,33 @@ if ($sockname == "/tmp/") {
 system("/bin/rm -f " . $sockname);
 
 $sock = socket_create(AF_UNIX, SOCK_STREAM, 0);
-if ($sock < 0) {
+if (!$sock) {
        echo "socket_create() failed: ", socket_strerror($sock), "\n";
        system("/bin/rm -f " . $sockname);
        exit(2);
 }
 
 $ret = socket_bind($sock, $sockname);
-if ($ret < 0) {
+if (!$ret) {
        echo "socket_bind() failed: ", socket_strerror($ret), "\n";
        system("/bin/rm -f " . $sockname);
        exit(3);
 }
 
 $ret = socket_listen($sock, 5);
-if ($ret < 0) {
+if (!$ret) {
        echo "socket_listen() failed: ", socket_strerror($ret), "\n";
        system("/bin/rm -f " . $sockname);
        exit(4);
 }
 
+// Set the permissions so someone else doesn't jump into our connection.
+chmod($sockname, 0600);
+
 // We need to get a connection to the Citadel server going now.
 
 $ctdlsock = fsockopen("uncensored.citadel.org", 504, $errno, $errstr, 30);
-// $ctdlsock = fsockopen("/appl/citadel/citadel.socket", 0, $errno, $errstr, 30);
+//$ctdlsock = fsockopen("/appl/citadel/citadel.socket", 0, $errno, $errstr, 30);
 if (!$ctdlsock) {
        socket_close ($sock);
        system("/bin/rm -f " . $sockname);
@@ -103,6 +106,22 @@ if (substr($buf, 0, 1) != "2") {
 }
 
 do {
+       // Wait for connections, but time out after 15 minutes.
+       // socket_select() is completely b0rken in PHP 4.1, which is why
+       // this program requires PHP 4.3 or newer.
+       //
+       if (socket_select($readsock = array($sock),
+                       $writesock = NULL,
+                       $exceptsock = NULL,
+                       900, 0
+       ) == 0) {
+               // Timing out.
+               socket_close ($sock);
+               system("/bin/rm -f " . $sockname);
+               exit(8);
+       }
+
+       // Ok, there's a valid connection coming in.  Accept it.
        $msgsock = socket_accept($sock);
        if ($msgsock >= 0) do {
                $buf = sock_gets($msgsock);
@@ -111,14 +130,14 @@ do {
                                fclose($ctdlsock);
                                socket_close($sock);
                                system("/bin/rm -f " . $sockname);
-                               exit(8);
+                               exit(9);
                        }
                        $talkback = fgets($ctdlsock, 4096);
                        if (!$talkback) {
                                fclose($ctdlsock);
                                socket_close($sock);
                                system("/bin/rm -f " . $sockname);
-                               exit(9);
+                               exit(10);
                        }
                        socket_write($msgsock, $talkback, strlen($talkback));