summaryrefslogtreecommitdiff
path: root/connection.c
diff options
context:
space:
mode:
authorAndrew Tridgell <tridge@samba.org>1998-05-13 09:38:54 +0000
committerAndrew Tridgell <tridge@samba.org>1998-05-13 09:38:54 +0000
commit31593dd6106cfef78fc88cbe9c831a51f00a4aa6 (patch)
treee40c378e089542410c7a1eddda71c6587df3f5a9 /connection.c
parent91eee5946ad6d033303abfe184085c87a283da29 (diff)
downloadrsync-31593dd6106cfef78fc88cbe9c831a51f00a4aa6.tar.gz
improved max connections code. Now use fcntl instead of flock.
also started on authentication code (I'm doing a challenge response system initially)
Diffstat (limited to 'connection.c')
-rw-r--r--connection.c81
1 files changed, 2 insertions, 79 deletions
diff --git a/connection.c b/connection.c
index fc7c6667..1025c8fc 100644
--- a/connection.c
+++ b/connection.c
@@ -19,59 +19,6 @@
/* support the max connections option */
#include "rsync.h"
-int yield_connection(char *fname, int max_connections)
-{
- int fd, i;
- pid_t mypid=getpid(), pid=0;
-
- if (max_connections <= 0)
- return 1;
-
- fd = open(fname,O_RDWR);
- if (fd == -1) {
- rprintf(FERROR,"Couldn't open lock file %s (%s)\n",fname,strerror(errno));
- return 0;
- }
-
- if (!lock_file(fd)) {
- rprintf(FERROR,"failed to lock %s\n", fname);
- close(fd);
- return 0;
- }
-
- /* find the right spot */
- for (i=0;i<max_connections;i++) {
- if (read(fd, &pid, sizeof(pid)) != sizeof(pid)) {
- unlock_file(fd);
- close(fd);
- return 0;
- }
- if (pid == mypid) break;
- }
-
- if (i == max_connections) {
- rprintf(FERROR,"Entry not found in lock file %s\n",fname);
- unlock_file(fd);
- close(fd);
- return 0;
- }
-
- pid = 0;
-
- /* remove our mark */
- if (lseek(fd,i*sizeof(pid),SEEK_SET) != i*sizeof(pid) ||
- write(fd, &pid,sizeof(pid)) != sizeof(pid)) {
- rprintf(FERROR,"Couldn't update lock file %s (%s)\n",fname,strerror(errno));
- unlock_file(fd);
- close(fd);
- return 0;
- }
-
- unlock_file(fd);
- close(fd);
- return 1;
-}
-
/****************************************************************************
simple routine to do connection counting
@@ -79,7 +26,6 @@ simple routine to do connection counting
int claim_connection(char *fname,int max_connections)
{
int fd, i;
- pid_t pid;
if (max_connections <= 0)
return 1;
@@ -90,34 +36,11 @@ int claim_connection(char *fname,int max_connections)
return 0;
}
- if (!lock_file(fd)) {
- rprintf(FERROR,"failed to lock %s\n", fname);
- close(fd);
- return 0;
- }
-
/* find a free spot */
for (i=0;i<max_connections;i++) {
- if (read(fd,&pid,sizeof(pid)) != sizeof(pid)) break;
- if (pid == 0 || !process_exists(pid)) break;
+ if (lock_range(fd, i*4, 4)) return 1;
}
- if (i == max_connections) {
- unlock_file(fd);
- close(fd);
- return 0;
- }
-
- pid = getpid();
-
- if (lseek(fd,i*sizeof(pid),SEEK_SET) != i*sizeof(pid) ||
- write(fd, &pid,sizeof(pid)) != sizeof(pid)) {
- unlock_file(fd);
- close(fd);
- return 0;
- }
-
- unlock_file(fd);
close(fd);
- return 1;
+ return 0;
}