-- Leo's gemini proxy

-- Connecting to git.thebackupbox.net:1965...

-- Connected

-- Sending request

-- Meta line: 20 text/gemini

repo: urcd
action: commit
revision:
path_from:
revision_from: 203b9ea0c24a886ea70806b66bab9dbded432f97:
path_to:
revision_to:

git.thebackupbox.net

urcd

git://git.thebackupbox.net/urcd

commit 203b9ea0c24a886ea70806b66bab9dbded432f97
Author: root <root@localhost.(none)>
Date:   Mon Jul 7 04:13:38 2014 +0000

    [urc-udp*.c] env/BROADCAST enables UDP broadcast messages for URC :-)

diff --git a/README b/README

index 81785fb190c85248074c572a73269a2763557a57..

index ..3bcb491ad8a053566f173655b4d9c65a5be463ba 100644

--- a/README
+++ b/README
@@ -368,6 +368,10 @@ POLICY and ISUPPORT:
     packets. setting a 0 value will disable this feature, however it is not
     recommended.

+  BROADCAST:
+    integer default is 0. setting this value to 1 enables UDP broadcasts in
+    urc-udpsend and urc-udprecv.
+
 logging URC services:
   mkdir -p /path/to/urcd-service/log/
   ln -s run.log /path/to/urcd-service/log/run
diff --git a/src/urc-udprecv.c b/src/urc-udprecv.c

index f67ec9da4764d06cf6608e689b1e030d70674f28..

index ..829e0bc827eb558c6085eb879058a2173eb27137 100644

--- a/src/urc-udprecv.c
+++ b/src/urc-udprecv.c
@@ -33,11 +33,24 @@ main(int argc, char **argv)
  bzero(&udp,sizeof(udp));
  udp.sin_family = AF_INET;

+ unsigned char buffer[1024] = {0};
+
+ int BROADCAST;
+ int n = open("env/BROADCAST",0);
+ if (n>0)
+ {
+   if (read(n,buffer,1024)>0) BROADCAST = atoi(buffer);
+   else BROADCAST = 0;
+ } else BROADCAST = 0;
+ close(n);
+
  if (
     (argc<4)
  || (!(udp.sin_port=htons(atoi(argv[2]))))
  || (!inet_pton(AF_INET,argv[1],&udp.sin_addr))
  || ((udpfd=socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP))<0)
+ || (setsockopt(udpfd,SOL_SOCKET,SO_REUSEADDR,(int[]){1},sizeof(int)))
+ || ((BROADCAST) && (setsockopt(udpfd,SOL_SOCKET,SO_BROADCAST,(int[]){1},sizeof(int))))
  || (bind(udpfd,(struct sockaddr *)&udp,sizeof(udp))<0)
     )
  {
@@ -45,9 +58,6 @@ main(int argc, char **argv)
   exit(64);
  }

- unsigned char buffer[1024] = {0};
-
- int n;
  float LIMIT;
  n = open("env/LIMIT",0);
  if (n>0)
diff --git a/src/urc-udpsend.c b/src/urc-udpsend.c

index d2a6b2328a39cef8d060cfc41d3f36b80e4180ee..

index ..4a17a203cb5f04fdbf97cac6ddce60402b265e34 100644

--- a/src/urc-udpsend.c
+++ b/src/urc-udpsend.c
@@ -34,11 +34,24 @@ main(int argc, char **argv)
  bzero(&udp,sizeof(udp));
  udp.sin_family = AF_INET;

+ unsigned char buffer[1024] = {0};
+
+ int BROADCAST;
+ int n = open("env/BROADCAST",0);
+ if (n>0)
+ {
+   if (read(n,buffer,1024)>0) BROADCAST = atoi(buffer);
+   else BROADCAST = 0;
+ } else BROADCAST = 0;
+ close(n);
+
  if (
     (argc<4)
  || (!(udp.sin_port=htons(atoi(argv[2]))))
  || (!inet_pton(AF_INET,argv[1],&udp.sin_addr))
  || ((udpfd=socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP))<0)
+ || (setsockopt(udpfd,SOL_SOCKET,SO_REUSEADDR,(int[]){1},sizeof(int)))
+ || ((BROADCAST) && (setsockopt(udpfd,SOL_SOCKET,SO_BROADCAST,(int[]){1},sizeof(int))))
  || (connect(udpfd,(struct sockaddr *)&udp,sizeof(udp))<0)
     )
  {
@@ -50,19 +63,9 @@ main(int argc, char **argv)
  if (devurandomfd<0) exit(255);
  unsigned char byte[1];

- char buffer[1024] = {0};
  char user[UNIX_PATH_MAX] = {0};
  if (itoa(user,getpid(),UNIX_PATH_MAX)<0) exit(1);

- float LIMIT;
- int n = open("env/LIMIT",0);
- if (n>0)
- {
-   if (read(n,buffer,1024)>0) LIMIT = atof(buffer);
-   else LIMIT = 1.0;
- } else LIMIT = 1.0;
- close(n);
-
  if (chdir(argv[3])) exit(64);
  struct passwd *urcd = getpwnam("urcd");
  if ((!urcd) || ((chroot(argv[3])) || (setgid(urcd->pw_gid)) || (setuid(urcd->pw_uid)))) exit(64);

-----END OF PAGE-----

-- Response ended

-- Page fetched on Sun Jun 2 18:42:52 2024