You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by ji...@apache.org on 2009/05/05 20:03:10 UTC

svn commit: r771947 - in /httpd/mod_ftp/trunk/modules/ftp: ftp_limitlogin.c ftp_protocol.h

Author: jim
Date: Tue May  5 18:03:10 2009
New Revision: 771947

URL: http://svn.apache.org/viewvc?rev=771947&view=rev
Log:
Map each limit to a per-server scope, by simply tagging it with
the server's hostname...

Modified:
    httpd/mod_ftp/trunk/modules/ftp/ftp_limitlogin.c
    httpd/mod_ftp/trunk/modules/ftp/ftp_protocol.h

Modified: httpd/mod_ftp/trunk/modules/ftp/ftp_limitlogin.c
URL: http://svn.apache.org/viewvc/httpd/mod_ftp/trunk/modules/ftp/ftp_limitlogin.c?rev=771947&r1=771946&r2=771947&view=diff
==============================================================================
--- httpd/mod_ftp/trunk/modules/ftp/ftp_limitlogin.c (original)
+++ httpd/mod_ftp/trunk/modules/ftp/ftp_limitlogin.c Tue May  5 18:03:10 2009
@@ -161,6 +161,10 @@
     int uval = 0;
     int ival = 0;
     int sval = 0;
+    char *tkey;
+    char *sname = (r->server->server_hostname
+                   ? r->server->server_hostname
+                   : "unknown");
     ftp_server_config *fsc =
     ftp_get_module_config(r->server->module_config);
 
@@ -180,8 +184,9 @@
      * First we check the user settings.
      * This is a safe cast, this is a lookup key.
      */
-    ukey.dptr = (char *) user;
-    ukey.dsize = strlen(user);
+    tkey = apr_psprintf(r->pool, "%s-%s", sname, user);
+    ukey.dptr = (char *) tkey;
+    ukey.dsize = strlen(tkey);
     rv = apr_dbm_fetch(dbf, ukey, &val);        /* error for non-existant? */
     if (val.dptr != NULL && val.dsize > 0) {
         apr_cpystrn(temp, val.dptr, MYMIN(sizeof(temp), val.dsize + 1));
@@ -195,8 +200,9 @@
      * Now we check the IP settings.
      * This is a safe cast, this is a lookup key.
      */
-    ikey.dptr = (char *) c->remote_ip;
-    ikey.dsize = strlen(c->remote_ip);
+    tkey = apr_psprintf(r->pool, "%s-%s", sname, c->remote_ip);
+    ikey.dptr = (char *) tkey;
+    ikey.dsize = strlen(tkey);
     rv = apr_dbm_fetch(dbf, ikey, &val);        /* error for non-existant? */
     if (val.dptr != NULL && val.dsize > 0) {
         apr_cpystrn(temp, val.dptr, MYMIN(sizeof(temp), val.dsize + 1));
@@ -210,8 +216,10 @@
      * OK, so we're not up against the per user or IP limit,
      * we need to check the perserver limit then
      */
-    skey.dptr = FTP_SERVER_LIMIT_KEY;
-    skey.dsize = strlen(FTP_SERVER_LIMIT_KEY);
+
+    tkey = apr_psprintf(r->pool, "%s-%s", sname, FTP_SERVER_LIMIT_KEY);
+    skey.dptr = (char *) tkey;
+    skey.dsize = strlen(tkey);
     rv = apr_dbm_fetch(dbf, skey, &val);        /* error for non-existant? */
     if (val.dptr != NULL && val.dsize > 0) {
         apr_cpystrn(temp, val.dptr, MYMIN(sizeof(temp), val.dsize + 1));
@@ -267,6 +275,10 @@
     int uval = 0;
     int ival = 0;
     int sval = 0;
+    char *tkey;
+    char *sname = (fc->orig_server->server_hostname
+                   ? fc->orig_server->server_hostname
+                   : "unknown");
     ftp_server_config *fsc =
     ftp_get_module_config(fc->orig_server->module_config);
 
@@ -286,24 +298,27 @@
     /*
      * This is a safe cast, it's a lookup key
      */
-    ukey.dptr = (char *) fc->user;
-    ukey.dsize = strlen(fc->user);
+    tkey = apr_psprintf(c->pool, "%s-%s", sname, fc->user);
+    ukey.dptr = (char *) tkey;
+    ukey.dsize = strlen(tkey);
     rv = apr_dbm_fetch(dbf, ukey, &val);        /* error for non-existant? */
     if (val.dptr != NULL && val.dsize > 0) {
         apr_cpystrn(temp, val.dptr, MYMIN(sizeof(temp), val.dsize + 1));
         uval = atoi(temp);
     }
 
-    ikey.dptr = (char *) c->remote_ip;
-    ikey.dsize = strlen(c->remote_ip);
+    tkey = apr_psprintf(c->pool, "%s-%s", sname, c->remote_ip);
+    ikey.dptr = (char *) tkey;
+    ikey.dsize = strlen(tkey);
     rv = apr_dbm_fetch(dbf, ikey, &val);        /* error for non-existant? */
     if (val.dptr != NULL && val.dsize > 0) {
         apr_cpystrn(temp, val.dptr, MYMIN(sizeof(temp), val.dsize + 1));
         ival = atoi(temp);
     }
 
-    skey.dptr = FTP_SERVER_LIMIT_KEY;
-    skey.dsize = strlen(FTP_SERVER_LIMIT_KEY);
+    tkey = apr_psprintf(c->pool, "%s-%s", sname, FTP_SERVER_LIMIT_KEY);
+    skey.dptr = tkey;
+    skey.dsize = strlen(tkey);
     rv = apr_dbm_fetch(dbf, skey, &val);        /* error for non-existant? */
     if (val.dptr != NULL && val.dsize > 0) {
         apr_cpystrn(temp, val.dptr, MYMIN(sizeof(temp), val.dsize + 1));

Modified: httpd/mod_ftp/trunk/modules/ftp/ftp_protocol.h
URL: http://svn.apache.org/viewvc/httpd/mod_ftp/trunk/modules/ftp/ftp_protocol.h?rev=771947&r1=771946&r2=771947&view=diff
==============================================================================
--- httpd/mod_ftp/trunk/modules/ftp/ftp_protocol.h (original)
+++ httpd/mod_ftp/trunk/modules/ftp/ftp_protocol.h Tue May  5 18:03:10 2009
@@ -6,7 +6,7 @@
  * another gmake (or a make ftp_protocol.h)
  *
  * Generated from ../.. on 
- * Tue Jun 17 18:29:23 2008
+ * Tue May  5 14:35:16 2009
  */