added a socket test
[ga4php.git] / authserver / authd / authd.php
index 520a39f..912e12b 100644 (file)
@@ -10,6 +10,8 @@ require_once("../lib/lib.php");
 //exit(0);
 // first we want to fork into the background like all good daemons should
 //$pid = pcntl_fork();
+
+// uncomment this bit and comment the fork above to stop it going into the background
 $pid = 0;
 
 if($pid == -1) {
@@ -19,6 +21,14 @@ if($pid == -1) {
        echo "i am a parent, i leave\n";
        exit(0);
 } else {
+       // here is where i need to swithc to TCP network protocol stuff
+       // i must bind 127.0.0.1 though.
+       // what i want to happen is this:
+       // 1) server receives connection
+       // 2) server forks off process to process connection
+       // 3) main server continues.
+       // a forked process thingy should be fully self contained and capable of dealing
+       // with "problems", i.e. the parent doesnt want to have to clean up children
        global $MSG_QUEUE_KEY_ID_SERVER, $MSG_QUEUE_KEY_ID_CLIENT;
        
        $cl_queue = msg_get_queue($MSG_QUEUE_KEY_ID_CLIENT, 0666 | 'IPC_CREAT');
@@ -44,6 +54,7 @@ if($pid == -1) {
                                        $clients[$i]["ip"] = $row["rad_ip"];
                                        $clients[$i]["secret"] = $row["rad_secret"];
                                        $clients[$i]["desc"] = $row["rad_desc"];
+                                       $i++;
                                }
                                msg_send($cl_queue, MSG_GET_RADIUS_CLIENTS, $clients);
                                break;
@@ -62,11 +73,31 @@ if($pid == -1) {
                                $clientsecret = $msg["clientsecret"];
                                $clientip = $msg["clientip"];
                                $clientdesc = $msg["clientdescription"];
-                               $sql = "insert into radclients values (NULL, '$client', '$clientip', '$clientsecret', '$clientdesc')";
                                $dbo = getDatabase();
+                               
+                               // check for existing clients with same name
+                               $sql = "select * from radclients where rad_name='$client'";
+                               echo "doing select, $sql\n";
                                $res = $dbo->query($sql);
-                               updateRadius();
-                               msg_send($cl_queue, MSG_ADD_RADIUS_CLIENT, true);
+                               if($res->fetchColumn() > 0) {
+                                       msg_send($cl_queue, MSG_ADD_RADIUS_CLIENT, "name");
+                                               
+                               } else {
+                                       // check for existing clients with same ip
+                                       $sql = "select * from radclients where rad_ip='$clientip'";
+                                       $res = $dbo->query($sql);
+                                       echo "doing select, $sql\n";
+                                       if($res->fetchColumn() > 0) {
+                                               msg_send($cl_queue, MSG_ADD_RADIUS_CLIENT, "ip");
+                                                               
+                                       } else {
+                                               $sql = "insert into radclients values (NULL, '$client', '$clientip', '$clientsecret', '$clientdesc')";
+                                               $res = $dbo->query($sql);
+                                               updateRadius();
+                                               msg_send($cl_queue, MSG_ADD_RADIUS_CLIENT, true);
+                                               break;
+                                       }
+                               }
                                break;
                        case MSG_DELETE_USER_TOKEN:
                                $username = $msg["username"];
@@ -189,9 +220,10 @@ if($pid == -1) {
                                        $myga->setUser($username, $tokentype, "", $hexkey);
                                        
                                        $url = $myga->createUrl($username);
+                                       echo "Url was: $url\n";
                                        if(!file_exists("$BASE_DIR/authserver/authd/otks")) mkdir("$BASE_DIR/authserver/authd/otks");
                                        $otk = generateRandomString();
-                                       system("qrencode -o $BASE_DIR/authserver/authd/otks/$otk.png $url");
+                                       system("qrencode -o $BASE_DIR/authserver/authd/otks/$otk.png '$url'");
                                        
                                        $sql = "update users set users_otk='$otk' where users_username='$username'";
                                        $dbo = getDatabase();
@@ -359,7 +391,7 @@ if($pid == -1) {
                                break;
                        case MSG_GET_USERS:
                                // TODO this needs to be better
-                               $sql = "select * from users";
+                               $sql = "select * from users order by users_username";
                                
                                $dbo = getDatabase();
                                $res = $dbo->query($sql);