update patches
This commit is contained in:
parent
53086a5b03
commit
be2d60525a
@ -27,7 +27,7 @@ IF (VERSION_DEVEL)
|
|||||||
SET (VERSION_PATCH "${VERSION_PATCH}.${CASA_WC_REVISION})${VERSION_SUFFIX}")
|
SET (VERSION_PATCH "${VERSION_PATCH}.${CASA_WC_REVISION})${VERSION_SUFFIX}")
|
||||||
ENDIF (VERSION_DEVEL)
|
ENDIF (VERSION_DEVEL)
|
||||||
|
|
||||||
SET (MARS_NWE_VERSION "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}")
|
SET (MARS_NWE_VERSION "${VERSION_MAJOR}.${VERSION_MINOR}.pl${VERSION_PATCH}")
|
||||||
|
|
||||||
INCLUDE(${CMAKE_ROOT}/Modules/GNUInstallDirs.cmake)
|
INCLUDE(${CMAKE_ROOT}/Modules/GNUInstallDirs.cmake)
|
||||||
INCLUDE(${CMAKE_MODULE_PATH}/MarsNweInstallDirs.cmake)
|
INCLUDE(${CMAKE_MODULE_PATH}/MarsNweInstallDirs.cmake)
|
||||||
|
@ -44,7 +44,10 @@
|
|||||||
|
|
||||||
typedef unsigned char uint8;
|
typedef unsigned char uint8;
|
||||||
typedef unsigned short int uint16;
|
typedef unsigned short int uint16;
|
||||||
typedef unsigned int uint32;
|
/* amd64 not working
|
||||||
|
typedef unsigned int uint32;
|
||||||
|
*/
|
||||||
|
typedef unsigned long int uint32;
|
||||||
|
|
||||||
#define IPX_NET_SIZE 4
|
#define IPX_NET_SIZE 4
|
||||||
#define IPX_NODE_SIZE 6
|
#define IPX_NODE_SIZE 6
|
||||||
|
@ -23,7 +23,9 @@
|
|||||||
#ifndef _XOPEN_SOURCE
|
#ifndef _XOPEN_SOURCE
|
||||||
# define _XOPEN_SOURCE 1
|
# define _XOPEN_SOURCE 1
|
||||||
#endif
|
#endif
|
||||||
|
#ifndef _SVID_SOURCE
|
||||||
#define _SVID_SOURCE 1
|
#define _SVID_SOURCE 1
|
||||||
|
#endif
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
BIN
opt/nw.ini.cnv.pl.852-iso2
Normal file
BIN
opt/nw.ini.cnv.pl.852-iso2
Normal file
Binary file not shown.
BIN
opt/nw.ini.cnv.pl.852-none
Normal file
BIN
opt/nw.ini.cnv.pl.852-none
Normal file
Binary file not shown.
BIN
opt/nw.ini.cnv.pl.cp1250-iso2
Normal file
BIN
opt/nw.ini.cnv.pl.cp1250-iso2
Normal file
Binary file not shown.
BIN
opt/nw.ini.cnv.pl.mazovia-iso2
Normal file
BIN
opt/nw.ini.cnv.pl.mazovia-iso2
Normal file
Binary file not shown.
11
opt/nwserv.logrotate
Normal file
11
opt/nwserv.logrotate
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
/var/log/nw.log {
|
||||||
|
postrotate
|
||||||
|
/bin/killall -HUP nwserv
|
||||||
|
endrotate
|
||||||
|
}
|
||||||
|
|
||||||
|
/var/log/nw.routes {
|
||||||
|
postrotate
|
||||||
|
/bin/killall -HUP nwserv
|
||||||
|
endrotate
|
||||||
|
}
|
19
opt/prn
Executable file
19
opt/prn
Executable file
@ -0,0 +1,19 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
# print using lpr nad lp printer when writing
|
||||||
|
# return spool and printer status when reading
|
||||||
|
#
|
||||||
|
|
||||||
|
PRINTER=lp
|
||||||
|
|
||||||
|
case "$1" in
|
||||||
|
WRITE)
|
||||||
|
/usr/bin/lpr -P $PRINTER -
|
||||||
|
;;
|
||||||
|
READ)
|
||||||
|
CR=`echo -n -e '\r'`
|
||||||
|
/usr/sbin/lpc status $PRINTER | sed "s/$/$CR/g"
|
||||||
|
/usr/bin/lpq -l -P $PRINTER | sed "s/$/$CR/g"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
;;
|
||||||
|
esac
|
7
opt/prn-clr
Executable file
7
opt/prn-clr
Executable file
@ -0,0 +1,7 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
# clear print spool
|
||||||
|
#
|
||||||
|
|
||||||
|
PRINTER=lp
|
||||||
|
|
||||||
|
/usr/bin/lprm -P $PRINTER -
|
2
opt/uptime
Executable file
2
opt/uptime
Executable file
@ -0,0 +1,2 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
[ "$1" = READ ] && echo -e "`uptime`\r"
|
@ -11,10 +11,16 @@
|
|||||||
|
|
||||||
if (CMAKE_SYSTEM_NAME MATCHES Linux)
|
if (CMAKE_SYSTEM_NAME MATCHES Linux)
|
||||||
add_definitions(
|
add_definitions(
|
||||||
-DLINUX -D_GNU_SOURCE -Dsignal=__sysv_signal
|
-pipe -Wall -DLINUX -D_GNU_SOURCE
|
||||||
)
|
)
|
||||||
endif (CMAKE_SYSTEM_NAME MATCHES Linux)
|
endif (CMAKE_SYSTEM_NAME MATCHES Linux)
|
||||||
|
|
||||||
|
IF(UNIX)
|
||||||
|
IF(CMAKE_COMPILER_IS_GNUCC)
|
||||||
|
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall")
|
||||||
|
ENDIF(CMAKE_COMPILER_IS_GNUCC)
|
||||||
|
ENDIF(UNIX)
|
||||||
|
|
||||||
add_definitions(
|
add_definitions(
|
||||||
-D_VERS_H_=${VERSION_MAJOR}
|
-D_VERS_H_=${VERSION_MAJOR}
|
||||||
-D_VERS_L_=${VERSION_MINOR}
|
-D_VERS_L_=${VERSION_MINOR}
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
/* namspace.c 21-Apr-00 : NameSpace Services, mars_nwe */
|
/* namspace.c 07-Oct-00 : NameSpace Services, mars_nwe */
|
||||||
|
|
||||||
/* !!!!!!!!!!!! NOTE !!!!!!!!!! */
|
/* !!!!!!!!!!!! NOTE !!!!!!!!!! */
|
||||||
/* Its still dirty, but it should work fairly well */
|
/* Its still dirty, but it should work fairly well */
|
||||||
|
|
||||||
/* (C)opyright (C) 1993,1998 Martin Stover, Marburg, Germany
|
/* (C)opyright (C) 1993,2000 Martin Stover, Marburg, Germany
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -24,7 +24,7 @@
|
|||||||
*
|
*
|
||||||
* mst:21-Apr-00: fixed routine 0x57/0x18, Get Name Spaces Loaded
|
* mst:21-Apr-00: fixed routine 0x57/0x18, Get Name Spaces Loaded
|
||||||
* count_namespaces is word field, not byte.
|
* count_namespaces is word field, not byte.
|
||||||
*
|
* mst:07-Oct-00: fixed nw_search_file_dir()
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -1750,7 +1750,9 @@ int nw_search_file_dir(int namespace, int datastream,
|
|||||||
if (dest_entry > -1) {
|
if (dest_entry > -1) {
|
||||||
char *funixname;
|
char *funixname;
|
||||||
dest_dbe=dir_base[dest_entry];
|
dest_dbe=dir_base[dest_entry];
|
||||||
funixname = alloc_nwpath2unix(&(dbe->nwpath), 2);
|
//funixname = alloc_nwpath2unix(&(dbe->nwpath), 2);
|
||||||
|
/* mst:07-Oct-00 corrected */
|
||||||
|
funixname = alloc_nwpath2unix(&(dest_dbe->nwpath), 2);
|
||||||
|
|
||||||
(void) nwp_stat(&(dest_dbe->nwpath), "nw_search_file_dir");
|
(void) nwp_stat(&(dest_dbe->nwpath), "nw_search_file_dir");
|
||||||
result = build_dir_info(dest_dbe, funixname, datastream,
|
result = build_dir_info(dest_dbe, funixname, datastream,
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/* nwattrib.c 10-May-98 */
|
/* nwattrib.c 07-Oct-00 */
|
||||||
/* (C)opyright (C) 1998 Martin Stover, Marburg, Germany
|
/* (C)opyright (C) 1998,2000 Martin Stover, Marburg, Germany
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -18,6 +18,12 @@
|
|||||||
|
|
||||||
/* Attrib routines for mars_nwe */
|
/* Attrib routines for mars_nwe */
|
||||||
|
|
||||||
|
/* history since 07-Oct-00
|
||||||
|
*
|
||||||
|
* mst:07-Oct-00: unix dot files are hidden as default.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
#include "net.h"
|
#include "net.h"
|
||||||
#include <dirent.h>
|
#include <dirent.h>
|
||||||
#include "unxfile.h"
|
#include "unxfile.h"
|
||||||
@ -113,6 +119,10 @@ uint32 get_nw_attrib_dword(int volume, char *unixname, struct stat *stb)
|
|||||||
|
|
||||||
if (S_ISDIR(stb->st_mode)) attrib |= FILE_ATTR_DIR;
|
if (S_ISDIR(stb->st_mode)) attrib |= FILE_ATTR_DIR;
|
||||||
else attrib &= (~FILE_ATTR_DIR);
|
else attrib &= (~FILE_ATTR_DIR);
|
||||||
|
} else { /* mst: 07-Oct-00, mark unix dot files as hidden */
|
||||||
|
char *p = strrchr(unixname, '/');
|
||||||
|
if (p && *(p+1) == '.' && *(p+2) != 0 && *(p+2) != '.' )
|
||||||
|
attrib |= FILE_ATTR_H; /* We say hidden here */
|
||||||
}
|
}
|
||||||
|
|
||||||
if (voloptions & VOL_OPTION_READONLY){
|
if (voloptions & VOL_OPTION_READONLY){
|
||||||
|
@ -119,8 +119,7 @@ static buf32 encryptkeys =
|
|||||||
0xF4,0x47,0xDC,0xA7,0xEC,0xCF,0x50,0xC0};
|
0xF4,0x47,0xDC,0xA7,0xEC,0xCF,0x50,0xC0};
|
||||||
|
|
||||||
#include "nwcrypt.h"
|
#include "nwcrypt.h"
|
||||||
|
#include <string.h>
|
||||||
extern void memset(void* p, int c, int size);
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
shuffle1(buf32 temp, unsigned char *target)
|
shuffle1(buf32 temp, unsigned char *target)
|
||||||
|
111
src/nwfile.c
111
src/nwfile.c
@ -772,6 +772,7 @@ int nw_read_file(int fhandle, uint8 *data, int size, uint32 offset)
|
|||||||
if (fh->fh_flags & FH_IS_PIPE_COMMAND)
|
if (fh->fh_flags & FH_IS_PIPE_COMMAND)
|
||||||
open_pipe_command(fh, 0);
|
open_pipe_command(fh, 0);
|
||||||
if (fh->fd > -1) {
|
if (fh->fd > -1) {
|
||||||
|
int rw_lck; /* pcz: 07-12-00 */
|
||||||
if (fh->fh_flags & FH_IS_PIPE) { /* PIPE */
|
if (fh->fh_flags & FH_IS_PIPE) { /* PIPE */
|
||||||
int readsize=size;
|
int readsize=size;
|
||||||
#if 1
|
#if 1
|
||||||
@ -813,18 +814,36 @@ int nw_read_file(int fhandle, uint8 *data, int size, uint32 offset)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
} else if (use_mmap && fh->p_mmap) {
|
} else if (use_mmap && fh->p_mmap) {
|
||||||
/* added by: Ingmar Thiemann <ingmar@gefas.com>
|
/* pcz: 07-12-00
|
||||||
* Netware allows no read/write on locked sections
|
* there is a problem with blocking reading/writing from
|
||||||
|
* locked file region. Some DOS aplications uses phantom
|
||||||
|
* locks at very high file region (offset>0x7ffffff) to
|
||||||
|
* eliminate that. In POSSIX locks cannot be set at such
|
||||||
|
* offset so we are remaping them (offset & 0x7fffffff)
|
||||||
|
* this demages some database systems (locking region at
|
||||||
|
* 0x80000000-0x8000000f bloks reading of first 16 bytes of
|
||||||
|
* file) so we need an option to disable such feature as
|
||||||
|
* temporary solution (section 8, flags 0x100).
|
||||||
|
* I think we have to write our own 32bit lock system
|
||||||
|
* (some samba compatible system will be realy nice for
|
||||||
|
* mixed clients - who is similar to samba locks?)
|
||||||
*/
|
*/
|
||||||
/* check for lock */
|
rw_lck=(entry8_flags & 0x100);
|
||||||
struct flock flockd;
|
if (!rw_lck) {
|
||||||
flockd.l_type = F_RDLCK; /* if file is not locked exclusive
|
/* added by: Ingmar Thiemann <ingmar@gefas.com>
|
||||||
* we should allow read it. /lenz */
|
* Netware allows no read/write on locked sections
|
||||||
flockd.l_whence = SEEK_SET;
|
*/
|
||||||
flockd.l_start = offset;
|
/* check for lock */
|
||||||
flockd.l_len = size;
|
struct flock flockd;
|
||||||
fcntl(fh->fd, F_GETLK, &flockd);
|
flockd.l_type = F_RDLCK; /* if file is not locked exclusive
|
||||||
if (flockd.l_type != F_WRLCK) {
|
* we should allow read it. /lenz */
|
||||||
|
flockd.l_whence = SEEK_SET;
|
||||||
|
flockd.l_start = offset;
|
||||||
|
flockd.l_len = size;
|
||||||
|
fcntl(fh->fd, F_GETLK, &flockd);
|
||||||
|
rw_lck=(flockd.l_type != F_WRLCK);
|
||||||
|
}
|
||||||
|
if (rw_lck) {
|
||||||
while (1) {
|
while (1) {
|
||||||
if (offset < fh->size_mmap) {
|
if (offset < fh->size_mmap) {
|
||||||
if (size + offset > fh->size_mmap)
|
if (size + offset > fh->size_mmap)
|
||||||
@ -849,17 +868,21 @@ int nw_read_file(int fhandle, uint8 *data, int size, uint32 offset)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (fh->offd > -1L) {
|
if (fh->offd > -1L) {
|
||||||
/* added by: Ingmar Thiemann <ingmar@gefas.com>
|
rw_lck=(entry8_flags & 0x100); /* pcz: 07-12-00 */
|
||||||
* Netware allows no read/write on locked sections
|
if (!rw_lck) {
|
||||||
*/
|
/* added by: Ingmar Thiemann <ingmar@gefas.com>
|
||||||
/* check for lock */
|
* Netware allows no read/write on locked sections
|
||||||
struct flock flockd;
|
*/
|
||||||
flockd.l_type = F_WRLCK;
|
/* check for lock */
|
||||||
flockd.l_whence = SEEK_SET;
|
struct flock flockd;
|
||||||
flockd.l_start = offset;
|
flockd.l_type = F_WRLCK;
|
||||||
flockd.l_len = size;
|
flockd.l_whence = SEEK_SET;
|
||||||
fcntl(fh->fd, F_GETLK, &flockd);
|
flockd.l_start = offset;
|
||||||
if (flockd.l_type == F_UNLCK) {
|
flockd.l_len = size;
|
||||||
|
fcntl(fh->fd, F_GETLK, &flockd);
|
||||||
|
rw_lck=(flockd.l_type == F_UNLCK);
|
||||||
|
}
|
||||||
|
if (rw_lck) {
|
||||||
if ((size = read(fh->fd, data, size)) > -1) {
|
if ((size = read(fh->fd, data, size)) > -1) {
|
||||||
fh->offd+=(long)size;
|
fh->offd+=(long)size;
|
||||||
} else {
|
} else {
|
||||||
@ -912,19 +935,22 @@ int nw_write_file(int fhandle, uint8 *data, int size, uint32 offset)
|
|||||||
fh->offd = lseek(fh->fd, offset, SEEK_SET);
|
fh->offd = lseek(fh->fd, offset, SEEK_SET);
|
||||||
if (size) {
|
if (size) {
|
||||||
if (fh->offd > -1L) {
|
if (fh->offd > -1L) {
|
||||||
/* added by: Ingmar Thiemann <ingmar@gefas.com>
|
int rw_lck=(entry8_flags & 0x100); /* pcz: 07-12-00 */
|
||||||
* Netware allows no read/write on locked sections
|
if (!rw_lck) {
|
||||||
*/
|
/* added by: Ingmar Thiemann <ingmar@gefas.com>
|
||||||
/* check for lock */
|
* Netware allows no read/write on locked sections
|
||||||
struct flock flockd;
|
*/
|
||||||
flockd.l_type = F_WRLCK;
|
/* check for lock */
|
||||||
flockd.l_whence = SEEK_SET;
|
struct flock flockd;
|
||||||
flockd.l_start = offset;
|
flockd.l_type = F_WRLCK;
|
||||||
flockd.l_len = size;
|
flockd.l_whence = SEEK_SET;
|
||||||
fcntl(fh->fd, F_GETLK, &flockd);
|
flockd.l_start = offset;
|
||||||
if (flockd.l_type == F_UNLCK) {
|
flockd.l_len = size;
|
||||||
/*if (share_lock( fh->st_dev, fh->st_ino, fh->fd, 2, offset, size ) == 0) {*/
|
fcntl(fh->fd, F_GETLK, &flockd);
|
||||||
|
rw_lck=(flockd.l_type == F_UNLCK);
|
||||||
|
/* rw_lck=(share_lock( fh->st_dev, fh->st_ino, fh->fd, 2, offset, size ) == 0); */
|
||||||
|
}
|
||||||
|
if (rw_lck) {
|
||||||
size = write(fh->fd, data, size);
|
size = write(fh->fd, data, size);
|
||||||
fh->offd+=(long)size;
|
fh->offd+=(long)size;
|
||||||
if (!fh->modified)
|
if (!fh->modified)
|
||||||
@ -1017,6 +1043,9 @@ int nw_log_physical_record(int fhandle, uint32 offset,
|
|||||||
* the rest of the file, starting from the offset, to do this with
|
* the rest of the file, starting from the offset, to do this with
|
||||||
* linux, a size of 0 has to be passed to the fcntl function.
|
* linux, a size of 0 has to be passed to the fcntl function.
|
||||||
* ( Peter Gerhard )
|
* ( Peter Gerhard )
|
||||||
|
*
|
||||||
|
* PCZ: 30-Jul-01
|
||||||
|
* offset and size conversion moved to share_lock function
|
||||||
*/
|
*/
|
||||||
result = share_lock( fh->st_dev,
|
result = share_lock( fh->st_dev,
|
||||||
fh->st_ino,
|
fh->st_ino,
|
||||||
@ -1030,14 +1059,10 @@ int nw_log_physical_record(int fhandle, uint32 offset,
|
|||||||
: ( (fh->fh_flags & FH_IS_READONLY)
|
: ( (fh->fh_flags & FH_IS_READONLY)
|
||||||
? 3 /* no exclusiv lock */
|
? 3 /* no exclusiv lock */
|
||||||
: lock_flag ),
|
: lock_flag ),
|
||||||
|
|
||||||
offset & 0x7fffffff,
|
offset,
|
||||||
|
size,
|
||||||
(size==MAX_U32)
|
timeout );
|
||||||
? 0
|
|
||||||
: size & 0x7fffffff,
|
|
||||||
|
|
||||||
timeout);
|
|
||||||
|
|
||||||
XDPRINTF((4, 0, "nw_log_phy_rec:pid=%d uid=%d flag=%2d, result=%d, fh=%d, offset=%d, size=%d, timeout=%d",
|
XDPRINTF((4, 0, "nw_log_phy_rec:pid=%d uid=%d flag=%2d, result=%d, fh=%d, offset=%d, size=%d, timeout=%d",
|
||||||
getpid(), geteuid(), lock_flag, result, fhandle, offset, size, timeout));
|
getpid(), geteuid(), lock_flag, result, fhandle, offset, size, timeout));
|
||||||
|
@ -319,11 +319,11 @@ int share_file(int dev, int inode, int open_mode, int action)
|
|||||||
|
|
||||||
#if 0 /* mst:13-Apr-00, I think this is all NOT needed. */
|
#if 0 /* mst:13-Apr-00, I think this is all NOT needed. */
|
||||||
if (entry8_flags & 0x100) { /* dos ? mode */
|
if (entry8_flags & 0x100) { /* dos ? mode */
|
||||||
if ( (open_mode & 0x10) ? !(act_mode & 0x10) && (act_mode & 0x06) :
|
if ((open_mode & 0x10) != (act_mode & 0x10))
|
||||||
(act_mode & 0x10) && (open_mode & 0x06))
|
|
||||||
result=-1;
|
result=-1;
|
||||||
} else { /* Standard Novell mode mode, i hope */
|
} else { /* Standard Novell mode mode, i hope */
|
||||||
if ((open_mode & 0x10) != (act_mode & 0x10))
|
if ( (open_mode & 0x10) ? !(act_mode & 0x10) && (act_mode & 0x06) :
|
||||||
|
(act_mode & 0x10) && (open_mode & 0x06))
|
||||||
result = -1; /* if one file opened compatible then all files
|
result = -1; /* if one file opened compatible then all files
|
||||||
must be opened compatible */
|
must be opened compatible */
|
||||||
#if 0
|
#if 0
|
||||||
@ -501,6 +501,18 @@ int share_lock( int dev, int inode, int fd, int action,
|
|||||||
sprintf(tbuf,"dev=0x%x,inode=%d,fd=%d,action=%d,lock_flag=%d",
|
sprintf(tbuf,"dev=0x%x,inode=%d,fd=%d,action=%d,lock_flag=%d",
|
||||||
dev, inode, fd, action, lock_flag);
|
dev, inode, fd, action, lock_flag);
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
/* pcz: 30-Jul-01 different locking conversion from 32Bit space
|
||||||
|
Now it's a dirty hack only, It should be an option in nwserv.conf */
|
||||||
|
if (l_start & 0x80000000)
|
||||||
|
l_start |= 0x40000000; /* 0x20000000 - other possible value */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
l_start &= 0x7fffffff;
|
||||||
|
|
||||||
|
if (l_len==MAX_U32)
|
||||||
|
l_len = 0;
|
||||||
|
|
||||||
if (!_get_inode( dev, inode, &sd, &si )) {
|
if (!_get_inode( dev, inode, &sd, &si )) {
|
||||||
XDPRINTF((1, 0, "Could not find share for lock %s", tbuf));
|
XDPRINTF((1, 0, "Could not find share for lock %s", tbuf));
|
||||||
return -1;
|
return -1;
|
||||||
@ -511,9 +523,15 @@ int share_lock( int dev, int inode, int fd, int action,
|
|||||||
flockd.l_len = l_len;
|
flockd.l_len = l_len;
|
||||||
|
|
||||||
/* find lock */
|
/* find lock */
|
||||||
|
/* pcz: 23-Aug-2001
|
||||||
|
1) some application remove locks using offset only and len=0
|
||||||
|
2) we cannot compare offset1 < offset2 + size2 because the
|
||||||
|
sum can be signed (minus) eg. 0x7fffffff + 1 = 0x80000000
|
||||||
|
It should be offset1 - offset2 < size2 */
|
||||||
for (psl=&si->first_lock; *psl; psl=&(*psl)->next) {
|
for (psl=&si->first_lock; *psl; psl=&(*psl)->next) {
|
||||||
if ((*psl)->l_start < l_start + l_len
|
if ((*psl)->l_start - l_start < l_len
|
||||||
|| (!l_len && (*psl)->l_start <= l_start)) {
|
|| (!l_len && ( action ? (*psl)->l_start <= l_start
|
||||||
|
: (*psl)->l_start == l_start))) {
|
||||||
sl = *psl;
|
sl = *psl;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -521,7 +539,9 @@ int share_lock( int dev, int inode, int fd, int action,
|
|||||||
|
|
||||||
if (!action) {
|
if (!action) {
|
||||||
/* unlock */
|
/* unlock */
|
||||||
if (sl && sl->fd == fd && sl->l_start == l_start && sl->l_len == l_len) {
|
if (sl && sl->fd == fd && sl->l_start == l_start &&
|
||||||
|
(sl->l_len == l_len || l_len ==0)) {
|
||||||
|
flockd.l_len = sl->l_len;
|
||||||
flockd.l_type = F_UNLCK;
|
flockd.l_type = F_UNLCK;
|
||||||
fcntl( fd, F_SETLK, &flockd );
|
fcntl( fd, F_SETLK, &flockd );
|
||||||
*psl = sl->next;
|
*psl = sl->next;
|
||||||
@ -532,7 +552,7 @@ int share_lock( int dev, int inode, int fd, int action,
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
/* lock or test */
|
/* lock or test */
|
||||||
if (sl && (l_start < sl->l_start + sl->l_len || !sl->l_len)
|
if (sl && (l_start - sl->l_start < sl->l_len || !sl->l_len)
|
||||||
&& (sl->exclusive || lock_flag == 1) )
|
&& (sl->exclusive || lock_flag == 1) )
|
||||||
result = -0xfd; /* collision */
|
result = -0xfd; /* collision */
|
||||||
else {
|
else {
|
||||||
|
@ -23,7 +23,9 @@
|
|||||||
* mst:01-Jun-00: removed SIG_SEGV in get_eff_rights_by_trustees(),
|
* mst:01-Jun-00: removed SIG_SEGV in get_eff_rights_by_trustees(),
|
||||||
* when stat error
|
* when stat error
|
||||||
* mst:01-Sep-00: pcz:added real unix rights patch from Przemyslaw Czerpak
|
* mst:01-Sep-00: pcz:added real unix rights patch from Przemyslaw Czerpak
|
||||||
*
|
* mst:07-Sep-00: corrected trustee rights of subdirs.
|
||||||
|
* mst:07-Oct-00: corrected result from tru_eff_rights_exists()
|
||||||
|
* and un_nw_rights().
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -101,6 +103,9 @@ static int un_nw_rights(int voloptions, uint8 *unixname, struct stat *stb)
|
|||||||
norights |= TRUSTEE_E; /* no erase right */
|
norights |= TRUSTEE_E; /* no erase right */
|
||||||
norights |= TRUSTEE_M; /* no modify rights */
|
norights |= TRUSTEE_M; /* no modify rights */
|
||||||
}
|
}
|
||||||
|
/* mst:07-Oct-00 */
|
||||||
|
if ( (!is_dir) && !(accp & R_OK) )
|
||||||
|
norights |= TRUSTEE_F; /* no file scan rights */
|
||||||
}
|
}
|
||||||
|
|
||||||
if (voloptions & VOL_OPTION_READONLY) {
|
if (voloptions & VOL_OPTION_READONLY) {
|
||||||
@ -739,7 +744,9 @@ static int insert_ugid_trustee(IDS_TRUSTEE *ugid_trustees, int count,
|
|||||||
{
|
{
|
||||||
while (count--) {
|
while (count--) {
|
||||||
if (ugid_trustees->id==id) {
|
if (ugid_trustees->id==id) {
|
||||||
ugid_trustees->trustee|=trustee;
|
/* ugid_trustees->trustee|=trustee; wrong */
|
||||||
|
ugid_trustees->trustee = trustee; /* correct, mst:07-Sep-00 */
|
||||||
|
/* new trustees must always override the current one */
|
||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
ugid_trustees++;
|
ugid_trustees++;
|
||||||
@ -942,7 +949,13 @@ int tru_eff_rights_exists(int volume, uint8 *unixname, struct stat *stb,
|
|||||||
if ((lookfor == TRUSTEE_T) && (rights&TRUSTEE_F) ) /* mst: 13-Apr-00 */
|
if ((lookfor == TRUSTEE_T) && (rights&TRUSTEE_F) ) /* mst: 13-Apr-00 */
|
||||||
return(0);
|
return(0);
|
||||||
|
|
||||||
return(((rights & TRUSTEE_S)||((rights&lookfor)==lookfor)) ? 0 : -1);
|
/* return(((rights & TRUSTEE_S)||((rights&lookfor)==lookfor)) ? 0 : -1);*/
|
||||||
|
if (rights) {
|
||||||
|
/* mst: 07-Oct-00, -1 as result was bad, because nw_search_file_dir()
|
||||||
|
* expected the real rights.
|
||||||
|
*/
|
||||||
|
return(((rights & TRUSTEE_S)||((rights&lookfor)==lookfor)) ? 0 : rights);
|
||||||
|
} else return(1 << 31); // no rights
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user