Package: didiwiki
Version: 0.5-6
Severity: wishlist
*** Please type your report below this line ***
didiwiki listens on any ip address (0.0.0.0). It would be useful an option
to bind it only to loopback or to a specific ip address.
The patch attached adds this option:
- "-l": only to localhost
- "-l ": only to specific ip
- no option (default): to any ip
Carlo
-- System Information:
Debian Release: 5.0.2
APT prefers stable
APT policy: (500, 'stable')
Architecture: i386 (i686)
Kernel: Linux 2.6.26-2-686 (SMP w/2 CPU cores)
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/bash
Versions of packages didiwiki depends on:
ii adduser 3.110 add and remove users and groups
ii libc6 2.7-18 GNU C Library: Shared libraries
didiwiki recommends no packages.
didiwiki suggests no packages.
-- no debconf information
--- didi.c.orig 2009-07-13 09:11:42.0 +0200
+++ didi.c 2009-07-13 14:57:39.0 +0200
@@ -12,6 +12,7 @@
main(int argc, char **argv)
{
HttpRequest *req = NULL;
+ char *address = "0.0.0.0";
int port = 8000;
int c;
char *didiwiki_home = NULL;
@@ -22,16 +23,17 @@
{
static struct option long_options[] =
{
- {"debug", no_argument, 0, 'd'},
- {"port", required_argument, 0, 'p'},
- {"home", required_argument, 0, 'h'},
+ {"debug", no_argument,0, 'd'},
+ {"listen", optional_argument, 0, 'l'},
+ {"port", required_argument, 0, 'p'},
+ {"home", required_argument, 0, 'h'},
{0, 0, 0, 0}
};
/* getopt_long stores the option index here */
int option_index = 0;
- c = getopt_long (argc, argv, "dp:h:", long_options, &option_index);
+ c = getopt_long (argc, argv, "dl::p:h:", long_options, &option_index);
/* detect the end of the options */
if (c == -1)
@@ -46,6 +48,17 @@
debug = 1;
break;
+case 'l':
+ if (optarg == NULL)
+ address = "127.0.0.1";
+ else
+ {
+ unsigned int n1,n2,n3,n4;
+ if (sscanf(optarg,"%u.%u.%u.%u", &n1, &n2, &n3, &n4) == 4 && n1 <= 255 && n2 <= 255 && n3 <= 255 && n4 <= 255)
+ address = optarg;
+ }
+ break;
+
case 'p':
port = atoi(optarg);
break;
@@ -66,7 +79,7 @@
req = http_request_new(); /* reads request from stdin */
}
else {
-req = http_server(port);/* forks here */
+req = http_server(address,port);/* forks here */
}
wiki_handle_http_request(req);
--- http.h.orig 2009-07-13 09:11:36.0 +0200
+++ http.h 2009-07-13 14:26:59.0 +0200
@@ -6,7 +6,7 @@
typedef struct HttpRequestParam HttpRequestParam;
HttpRequest*
-http_server(int iPort);
+http_server(char *address, int iPort);
HttpRequest*
http_request_new(void);
--- http.c.orig 2009-07-13 09:11:27.0 +0200
+++ http.c 2009-07-13 14:28:03.0 +0200
@@ -443,7 +443,7 @@
** Implement an HTTP server daemon.
*/
HttpRequest*
-http_server(int iPort)
+http_server(char *address, int iPort)
{
intlistener; /* The server socket */
intconnection;/* A socket for each connection */
@@ -457,7 +457,7 @@
memset(&inaddr, 0, sizeof(inaddr));
inaddr.sin_family = AF_INET;
- inaddr.sin_addr.s_addr = INADDR_ANY;
+ inaddr.sin_addr.s_addr = inet_addr(address);
inaddr.sin_port = htons(iPort);
listener = socket(AF_INET, SOCK_STREAM, 0);