]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
rlm_rediswho: fix trim functionality 191/head
authorBrian Candler <b.candler@pobox.com>
Fri, 8 Feb 2013 12:30:34 +0000 (12:30 +0000)
committerBrian Candler <b.candler@pobox.com>
Thu, 14 Feb 2013 12:24:32 +0000 (12:24 +0000)
(query result is not available after redis_finish_query has been called)

src/modules/rlm_rediswho/rlm_rediswho.c

index ac730bf4e98a4967af2e91b9fa8f495f51924614..aca9df402720109eff9088f7812851e0afaa0e85 100644 (file)
@@ -94,12 +94,14 @@ static CONF_PARSER module_config[] = {
 };
 
 /*
- *     Query the database executing a command with no result rows
+ *     Query the database executing a command.
+ *     If the result is a positive integer, return that value.
  */
 static int rediswho_command(const char *fmt, REDISSOCK *dissocket,
                            rlm_rediswho_t *data, REQUEST *request)
 {
        char query[MAX_STRING_LEN * 4];
+       int result = 0;
 
        /*
         *      Do an xlat on the provided string
@@ -125,6 +127,8 @@ static int rediswho_command(const char *fmt, REDISSOCK *dissocket,
        case REDIS_REPLY_INTEGER:
                DEBUG("rediswho_command: query response %lld\n",
                      dissocket->reply->integer);
+               if (dissocket->reply->integer > 0)
+                     result = dissocket->reply->integer;
                break;
        case REDIS_REPLY_STATUS:
        case REDIS_REPLY_STRING:
@@ -137,7 +141,7 @@ static int rediswho_command(const char *fmt, REDISSOCK *dissocket,
 
        (data->redis_inst->redis_finish_query)(dissocket);
 
-       return 0;
+       return result;
 }
 
 static int rediswho_detach(void *instance)
@@ -255,19 +259,18 @@ static int rediswho_instantiate(CONF_SECTION * conf, void ** instance)
        return 0;
 }
 
-#define REDISWHO_COMMAND(_a, _b, _c, _d) if (rediswho_command(_a, _b, _c, _d) < 0) return RLM_MODULE_FAIL
+#define REDISWHO_COMMAND(_a, _b, _c, _d) rc = rediswho_command(_a, _b, _c, _d); if (rc < 0) return RLM_MODULE_FAIL
 
 static int rediswho_accounting_start(REDISSOCK *dissocket,
                                     rlm_rediswho_t *data, REQUEST *request)
 {
+       int rc;
        REDISWHO_COMMAND(data->start_insert, dissocket, data, request);
     
        /* Only trim if necessary */
-       if (dissocket->reply->type == REDIS_REPLY_INTEGER) {
-               if (dissocket->reply->integer > data->trim_count) {
-                       rediswho_command(data->start_trim, dissocket, data, request);
-               }
-       }
+        if (rc > data->trim_count) {
+                rediswho_command(data->start_trim, dissocket, data, request);
+        }
 
        REDISWHO_COMMAND(data->start_expire, dissocket, data, request);
 
@@ -277,14 +280,13 @@ static int rediswho_accounting_start(REDISSOCK *dissocket,
 static int rediswho_accounting_alive(REDISSOCK *dissocket,
                                     rlm_rediswho_t *data, REQUEST *request)
 {
+       int rc;
        REDISWHO_COMMAND(data->alive_insert, dissocket, data, request);
 
        /* Only trim if necessary */
-       if (dissocket->reply->type == REDIS_REPLY_INTEGER) {
-               if (dissocket->reply->integer > data->trim_count) {
-                       rediswho_command(data->alive_trim, dissocket, data, request);
-               }
-       }
+        if (rc > data->trim_count) {
+                rediswho_command(data->alive_trim, dissocket, data, request);
+        }
 
        REDISWHO_COMMAND(data->alive_expire, dissocket, data, request);
 
@@ -294,15 +296,13 @@ static int rediswho_accounting_alive(REDISSOCK *dissocket,
 static int rediswho_accounting_stop(REDISSOCK *dissocket,
                                    rlm_rediswho_t *data, REQUEST *request)
 {
-
+       int rc;
        REDISWHO_COMMAND(data->stop_insert, dissocket, data, request);
 
        /* Only trim if necessary */
-       if (dissocket->reply->type == REDIS_REPLY_INTEGER) {
-               if (dissocket->reply->integer > data->trim_count) {
-                       rediswho_command(data->stop_trim, dissocket, data, request);
-               }
-       }
+        if (rc > data->trim_count) {
+                rediswho_command(data->stop_trim, dissocket, data, request);
+        }
 
        REDISWHO_COMMAND(data->stop_expire, dissocket, data, request);