Add the XMLRPC interface for admin to reset user
authorNeutron Soutmun <neo.neutron@gmail.com>
Tue, 27 Jan 2009 06:34:30 +0000 (13:34 +0700)
committerNeutron Soutmun <neo.neutron@gmail.com>
Tue, 27 Jan 2009 06:34:30 +0000 (13:34 +0700)
2008-01-27  Neutron Soutmun <neo.neutron@gmail.com>

* src/rh-task-memset.c, src/rh-xmlrpc-server.c: Add the XMLRPC interface for
  admin to reset user and other termination cuase support by parsing cause id.
* weblogin/rahu_xmlrpc.class.php, weblogin/logout.php:
  Implement the new XMLRPC interface changes.

ChangeLog
src/rh-task-memset.c
src/rh-xmlrpc-server.c
weblogin/logout.php
weblogin/rahu_xmlrpc.class.php

index 93d7cc4..797df54 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2008-01-27  Neutron Soutmun <neo.neutron@gmail.com>
+
+       * src/rh-task-memset.c, src/rh-xmlrpc-server.c: Add the XMLRPC interface for
+         admin to reset user and other termination cuase support by parsing cause id.
+       * weblogin/rahu_xmlrpc.class.php, weblogin/logout.php:
+         Implement the new XMLRPC interface changes.
+
 2009-01-07  Suriya Soutmun <darksolar@gmail.com>
 
        * configure.ac, Makefile.am: Add weblogin to EXTRA_DIST to distribute the 
index e63836a..69590eb 100644 (file)
@@ -133,12 +133,18 @@ static int stopsess  (struct rahunas_map *map, struct task_req *req)
     case RH_RADIUS_TERM_IDLE_TIMEOUT :
       strcpy(cause, "idle timeout");
       break;
+    case RH_RADIUS_TERM_SESSION_TIMEOUT :
+      strcpy(cause, "session timeout");
+      break;
     case RH_RADIUS_TERM_USER_REQUEST :
       strcpy(cause, "user request");
       break;
     case RH_RADIUS_TERM_NAS_REBOOT :
       strcpy(cause, "nas reboot");
       break;
+    case RH_RADIUS_TERM_ADMIN_RESET :
+      strcpy(cause, "admin reset");
+      break;
   }
   if (!members[id].username)
     members[id].username = termstring;
index 171be74..ea6e1a2 100644 (file)
@@ -123,6 +123,8 @@ int do_stopsession(GNetXmlRpcServer *server,
   struct task_req req;
   gchar *ip = NULL;
   gchar *mac_address = NULL;
+  gchar *cause = NULL;
+  int cause_id = 0;
   uint32_t   id;
   int res = 0;
   unsigned char ethernet[ETH_ALEN] = {0,0,0,0,0,0};
@@ -142,6 +144,7 @@ int do_stopsession(GNetXmlRpcServer *server,
 
   ip          = rh_string_get_sep(param, "|", 1);
   mac_address = rh_string_get_sep(param, "|", 2);
+  cause       = rh_string_get_sep(param, "|", 3);
 
   if (ip == NULL)
     goto out;
@@ -162,7 +165,18 @@ int do_stopsession(GNetXmlRpcServer *server,
   if (members[id].flags) {
     if (memcmp(&ethernet, &members[id].mac_address, ETH_ALEN) == 0) {
       req.id = id;
-      req.req_opt = RH_RADIUS_TERM_USER_REQUEST;
+      
+      if (cause == NULL) {
+        req.req_opt = RH_RADIUS_TERM_USER_REQUEST;
+      } else {
+        cause_id = atoi(cause);
+        if (cause_id >= RH_RADIUS_TERM_USER_REQUEST && 
+            cause_id <= RH_RADIUS_TERM_HOST_REQUEST) {
+          req.req_opt = cause_id;
+        } else {
+          req.req_opt = RH_RADIUS_TERM_USER_REQUEST;
+        }
+      }
 
       res = rh_task_stopsess(map, &req);
       if (res == 0) {
@@ -186,6 +200,7 @@ out:
 cleanup:
   g_free(ip);
   g_free(mac_address);
+  g_free(cause);
   return 0;
 }
 
index 7effd0c..7e41b5c 100644 (file)
@@ -47,7 +47,8 @@ if (is_array($retinfo)) {
 
 if (!empty($_POST['do_logout'])) {
   if ($isinfo) {
-    $result = $xmlrpc->do_stopsession($ip, returnMacAddress());
+    $result = $xmlrpc->do_stopsession($ip, returnMacAddress(), 
+                                      RADIUS_TERM_USER_REQUEST);
     if ($result === true) {
       $valid = false;
       $message = get_message('OK_USER_LOGOUT');
index 6d57ad3..36caf3b 100644 (file)
@@ -1,4 +1,5 @@
 <?php
+require_once 'rahu_radius.class.php';
 require_once 'XML/RPC2/Client.php';
 require_once 'XML/RPC2/Value.php';
 
@@ -27,9 +28,9 @@ class rahu_xmlrpc_client {
     return $result;
   }
 
-  function do_stopsession($ip, $mac) {
+  function do_stopsession($ip, $mac, $cause = RADIUS_TERM_USER_REQUEST) {
     $client = $this->getClient(); 
-    $params = sprintf("%s|%s", $ip, $mac);
+    $params = sprintf("%s|%s|%s", $ip, $mac, $cause);
     $result = $client->stopsession($params);
     if (strstr($result, "was removed"))
       return true;