|
![](https://seccdn.libravatar.org/avatar/bf9d9bfe3c87f46d7d59b198abb01f8753e7a2d0620608c643b7018fa6c18023?s=16&d=retro) |
702687f |
diff --git a/locks.c b/locks.c
|
|
![](https://seccdn.libravatar.org/avatar/bf9d9bfe3c87f46d7d59b198abb01f8753e7a2d0620608c643b7018fa6c18023?s=16&d=retro) |
702687f |
index 649ed4a..aa8898c 100644
|
|
![](https://seccdn.libravatar.org/avatar/bf9d9bfe3c87f46d7d59b198abb01f8753e7a2d0620608c643b7018fa6c18023?s=16&d=retro) |
702687f |
--- a/locks.c
|
|
![](https://seccdn.libravatar.org/avatar/bf9d9bfe3c87f46d7d59b198abb01f8753e7a2d0620608c643b7018fa6c18023?s=16&d=retro) |
702687f |
+++ b/locks.c
|
|
![](https://seccdn.libravatar.org/avatar/bf9d9bfe3c87f46d7d59b198abb01f8753e7a2d0620608c643b7018fa6c18023?s=16&d=retro) |
702687f |
@@ -41,6 +41,10 @@
|
|
![](https://seccdn.libravatar.org/avatar/bf9d9bfe3c87f46d7d59b198abb01f8753e7a2d0620608c643b7018fa6c18023?s=16&d=retro) |
702687f |
|
|
![](https://seccdn.libravatar.org/avatar/bf9d9bfe3c87f46d7d59b198abb01f8753e7a2d0620608c643b7018fa6c18023?s=16&d=retro) |
702687f |
#define LCK_NODEV -1
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
67aff5c |
#define LCK_OPNFAIL -2
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
67aff5c |
+#endif
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
67aff5c |
+
|
|
![](https://seccdn.libravatar.org/avatar/bf9d9bfe3c87f46d7d59b198abb01f8753e7a2d0620608c643b7018fa6c18023?s=16&d=retro) |
702687f |
+#ifdef HAVE_LOCKDEV
|
|
![](https://seccdn.libravatar.org/avatar/bf9d9bfe3c87f46d7d59b198abb01f8753e7a2d0620608c643b7018fa6c18023?s=16&d=retro) |
702687f |
+#include <lockdev.h>
|
|
![](https://seccdn.libravatar.org/avatar/bf9d9bfe3c87f46d7d59b198abb01f8753e7a2d0620608c643b7018fa6c18023?s=16&d=retro) |
702687f |
#endif
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
67aff5c |
|
|
![](https://seccdn.libravatar.org/avatar/bf9d9bfe3c87f46d7d59b198abb01f8753e7a2d0620608c643b7018fa6c18023?s=16&d=retro) |
702687f |
char lock[MAXLINE+1]; /* name of the lockfile */
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
6f3650e |
@@ -58,6 +62,7 @@ static int we_have_lock = FALSE;
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
67aff5c |
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
67aff5c |
int do_makelock _P0( void )
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
67aff5c |
{
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
67aff5c |
+#ifndef HAVE_LOCKDEV
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
67aff5c |
int fd, pid;
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
67aff5c |
char *temp, buf[MAXLINE+1];
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
67aff5c |
#ifndef HAVE_MKSTEMP
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
6f3650e |
@@ -148,8 +153,26 @@ again:
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
67aff5c |
return(FAIL);
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
67aff5c |
}
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
67aff5c |
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
67aff5c |
- lprintf(L_NOISE, "lock made");
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
67aff5c |
(void) unlink(temp);
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
67aff5c |
+#else
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
67aff5c |
+ pid_t device_owner;
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
67aff5c |
+
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
6f3650e |
+ device_owner = dev_lock(lock);
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
67aff5c |
+ if (device_owner < 0)
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
67aff5c |
+ {
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
6f3650e |
+ lprintf(L_ERROR, "lock not made: dev_lock(%s) failed", lock);
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
67aff5c |
+ return FAIL;
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
67aff5c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
67aff5c |
+
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
67aff5c |
+ if (device_owner > 0)
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
67aff5c |
+ {
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
67aff5c |
+ lprintf(L_MESG, "lock not made: lock file exists (pid=%d)", device_owner);
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
67aff5c |
+ return FAIL;
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
67aff5c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
67aff5c |
+
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
67aff5c |
+#endif
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
67aff5c |
+
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
67aff5c |
+ lprintf(L_NOISE, "lock made");
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
67aff5c |
we_have_lock = TRUE;
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
67aff5c |
return(SUCCESS);
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
67aff5c |
}
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
6f3650e |
@@ -180,8 +203,8 @@ int makelock _P1( (device),
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
67aff5c |
*/
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
67aff5c |
int steal_lock _P2((device, pid), char * device, int pid )
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
67aff5c |
{
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
67aff5c |
- int retcode, is_pid, fd;
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
67aff5c |
-
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
67aff5c |
+ int retcode = SUCCESS;
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
67aff5c |
+
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
67aff5c |
lprintf(L_NOISE, "steal_lock(%s) called", device);
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
67aff5c |
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
6f3650e |
if ( get_lock_name( lock, device ) == NULL )
|
|
![](https://seccdn.libravatar.org/avatar/bf9d9bfe3c87f46d7d59b198abb01f8753e7a2d0620608c643b7018fa6c18023?s=16&d=retro) |
702687f |
@@ -190,6 +213,9 @@ int steal_lock _P2((device, pid), char * device, int pid )
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
6f3650e |
return FAIL;
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
6f3650e |
}
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
6f3650e |
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
67aff5c |
+#ifndef HAVE_LOCKDEV
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
67aff5c |
+ int is_pid, fd;
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
6f3650e |
+
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
6f3650e |
is_pid = readlock(lock);
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
6f3650e |
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
6f3650e |
if ( is_pid != pid )
|
|
![](https://seccdn.libravatar.org/avatar/bf9d9bfe3c87f46d7d59b198abb01f8753e7a2d0620608c643b7018fa6c18023?s=16&d=retro) |
702687f |
@@ -208,6 +234,13 @@ int steal_lock _P2((device, pid), char * device, int pid )
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
67aff5c |
}
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
67aff5c |
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
67aff5c |
retcode = lock_write_pid( fd );
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
67aff5c |
+#else
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
6f3650e |
+ if (dev_relock(lock, pid) < 0)
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
67aff5c |
+ {
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
67aff5c |
+ lprintf( L_ERROR, "can't steal lock: dev_relock(%s, %d) failed", device, pid);
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
67aff5c |
+ retcode = FAIL;
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
67aff5c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
67aff5c |
+#endif
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
67aff5c |
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
67aff5c |
if ( retcode == SUCCESS ) we_have_lock = TRUE;
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
67aff5c |
return retcode;
|
|
![](https://seccdn.libravatar.org/avatar/bf9d9bfe3c87f46d7d59b198abb01f8753e7a2d0620608c643b7018fa6c18023?s=16&d=retro) |
702687f |
@@ -237,7 +270,6 @@ int makelock_file _P1( (file), char * file )
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
67aff5c |
int checklock _P1( (device), char * device)
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
67aff5c |
{
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
67aff5c |
int pid;
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
6f3650e |
- struct stat st;
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
67aff5c |
char name[MAXLINE+1];
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
67aff5c |
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
6f3650e |
if ( get_lock_name( name, device ) == NULL )
|
|
![](https://seccdn.libravatar.org/avatar/bf9d9bfe3c87f46d7d59b198abb01f8753e7a2d0620608c643b7018fa6c18023?s=16&d=retro) |
702687f |
@@ -246,6 +278,9 @@ int checklock _P1( (device), char * device)
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
6f3650e |
return NO_LOCK;
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
6f3650e |
}
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
6f3650e |
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
6f3650e |
+#ifndef HAVE_LOCKDEV
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
6f3650e |
+ struct stat st;
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
6f3650e |
+
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
6f3650e |
if ((stat(name, &st) == FAIL) && errno == ENOENT)
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
6f3650e |
{
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
6f3650e |
lprintf(L_NOISE, "checklock: stat failed, no file");
|
|
![](https://seccdn.libravatar.org/avatar/bf9d9bfe3c87f46d7d59b198abb01f8753e7a2d0620608c643b7018fa6c18023?s=16&d=retro) |
702687f |
@@ -270,12 +305,27 @@ int checklock _P1( (device), char * device)
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
67aff5c |
(void) unlink(name);
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
67aff5c |
return NO_LOCK;
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
67aff5c |
}
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
67aff5c |
-
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
67aff5c |
+#else
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
6f3650e |
+ pid = dev_testlock(name);
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
67aff5c |
+
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
67aff5c |
+ if (pid < 0)
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
67aff5c |
+ {
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
6f3650e |
+ lprintf(L_ERROR, "checklock: can't check lockfile, dev_testlock(%s) failed", name);
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
67aff5c |
+ return NO_LOCK;
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
67aff5c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
67aff5c |
+
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
67aff5c |
+ if (pid == 0)
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
67aff5c |
+ {
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
67aff5c |
+ lprintf(L_MESG, "checklock: device not locked");
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
67aff5c |
+ return NO_LOCK;
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
67aff5c |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
67aff5c |
+#endif
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
67aff5c |
lprintf(L_NOISE, "lockfile found, pid=%d", pid );
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
67aff5c |
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
67aff5c |
return pid;
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
6f3650e |
}
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
6f3650e |
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
6f3650e |
+#ifndef HAVE_LOCKDEV
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
6f3650e |
/*
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
6f3650e |
* readlock() - read contents of lockfile
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
6f3650e |
*
|
|
![](https://seccdn.libravatar.org/avatar/bf9d9bfe3c87f46d7d59b198abb01f8753e7a2d0620608c643b7018fa6c18023?s=16&d=retro) |
702687f |
@@ -342,6 +392,8 @@ static int lock_write_pid _P1((fd), int fd)
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
6f3650e |
close(fd);
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
6f3650e |
return SUCCESS;
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
6f3650e |
}
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
6f3650e |
+
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
6f3650e |
+#endif
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
6f3650e |
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
6f3650e |
/*
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
6f3650e |
* rmlocks() - remove lockfile
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
6f3650e |
@@ -352,8 +404,13 @@ void rmlocks _P0(void)
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
67aff5c |
if ( we_have_lock )
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
67aff5c |
{
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
67aff5c |
lprintf( L_NOISE, "removing lock file" );
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
67aff5c |
+#ifndef HAVE_LOCKDEV
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
67aff5c |
if ( unlink(lock) == -1 )
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
67aff5c |
lprintf( L_ERROR, "error removing lock file (huh?!)" );
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
67aff5c |
+#else
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
6f3650e |
+ if (dev_unlock(lock, getpid()) < 0)
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
6f3650e |
+ lprintf(L_ERROR, "error removing lock file, dev_unlock(%s) failed", lock);
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
67aff5c |
+#endif
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
67aff5c |
}
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
67aff5c |
/* mark lock file as 'not set' */
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
67aff5c |
we_have_lock = FALSE;
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
6f3650e |
@@ -364,7 +421,21 @@ void rmlocks _P0(void)
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
6f3650e |
* determine full path + name of the lock file for a given device
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
6f3650e |
*/
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
67aff5c |
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
6f3650e |
-#ifdef SVR4
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
67aff5c |
+#ifdef HAVE_LOCKDEV
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
6f3650e |
+/*
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
6f3650e |
+ * lockdev API provides us with the way to lock device directly, thus lock name
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
6f3650e |
+ * and device name are the same
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
6f3650e |
+ */
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
6f3650e |
+static char *get_lock_name _P2( (lock, device), char *lock, char *device )
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
6f3650e |
+{
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
6f3650e |
+ lprintf(L_NOISE, "get_lock_name(%s) called", device);
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
6f3650e |
+
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
6f3650e |
+ snprintf(lock, MAXLINE, "%s", device);
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
6f3650e |
+
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
6f3650e |
+ return lock;
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
6f3650e |
+}
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
67aff5c |
+
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
6f3650e |
+#elif SVR4
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
6f3650e |
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
6f3650e |
/*
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
6f3650e |
* get_lock_name() - create SVR4 lock file name (Bodo Bauer)
|
|
![](https://seccdn.libravatar.org/avatar/bf9d9bfe3c87f46d7d59b198abb01f8753e7a2d0620608c643b7018fa6c18023?s=16&d=retro) |
702687f |
diff --git a/mgetty.h b/mgetty.h
|
|
![](https://seccdn.libravatar.org/avatar/bf9d9bfe3c87f46d7d59b198abb01f8753e7a2d0620608c643b7018fa6c18023?s=16&d=retro) |
702687f |
index 64053fd..c6ddd58 100644
|
|
![](https://seccdn.libravatar.org/avatar/bf9d9bfe3c87f46d7d59b198abb01f8753e7a2d0620608c643b7018fa6c18023?s=16&d=retro) |
702687f |
--- a/mgetty.h
|
|
![](https://seccdn.libravatar.org/avatar/bf9d9bfe3c87f46d7d59b198abb01f8753e7a2d0620608c643b7018fa6c18023?s=16&d=retro) |
702687f |
+++ b/mgetty.h
|
|
![](https://seccdn.libravatar.org/avatar/bf9d9bfe3c87f46d7d59b198abb01f8753e7a2d0620608c643b7018fa6c18023?s=16&d=retro) |
702687f |
@@ -277,6 +277,9 @@ int makelock_file _PROTO(( char * lockname ));
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
67aff5c |
int checklock _PROTO((char * device));
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
67aff5c |
void rmlocks _PROTO ((void));
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
67aff5c |
int steal_lock _PROTO((char * device, int pid ));
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
67aff5c |
+#ifdef HAVE_LOCKDEV
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
67aff5c |
+extern char lockdev_device[MAXLINE + 1];
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
67aff5c |
+#endif
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
67aff5c |
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
67aff5c |
/* fax stuff */
|
|
![](https://seccdn.libravatar.org/avatar/cdebda9eb99e4b7eb3c551422d263b98f6e8155ba92e84b0f59ff39e1ebcdfba?s=16&d=retro) |
67aff5c |
void faxrec _PROTO(( char * spool_dir, unsigned int switchbd,
|