* fhandler.h (class fhandler_socket): Declare new methods fchown,
fchmod and facl. * fhandler_socket.cc (fhandler_socket::fstat): Handle AF_LOCAL sockets. (fhandler_socket::fchmod): New method. (fhandler_socket::fchown): New method. (fhandler_socket::facl): New method.
This commit is contained in:
parent
2d7606a594
commit
c2d0b9d89a
@ -1,3 +1,13 @@
|
|||||||
|
2005-02-19 Corinna Vinschen <corinna@vinschen.de>
|
||||||
|
|
||||||
|
* fhandler.h (class fhandler_socket): Declare new methods fchown,
|
||||||
|
fchmod and facl.
|
||||||
|
* fhandler_socket.cc (fhandler_socket::fstat): Handle AF_LOCAL
|
||||||
|
sockets.
|
||||||
|
(fhandler_socket::fchmod): New method.
|
||||||
|
(fhandler_socket::fchown): New method.
|
||||||
|
(fhandler_socket::facl): New method.
|
||||||
|
|
||||||
2005-02-19 Corinna Vinschen <corinna@vinschen.de>
|
2005-02-19 Corinna Vinschen <corinna@vinschen.de>
|
||||||
|
|
||||||
* localtime.cc: Temporary implementation of setting __tzrule's offset
|
* localtime.cc: Temporary implementation of setting __tzrule's offset
|
||||||
|
@ -433,6 +433,9 @@ class fhandler_socket: public fhandler_base
|
|||||||
void signal_secret_event ();
|
void signal_secret_event ();
|
||||||
void close_secret_event ();
|
void close_secret_event ();
|
||||||
int __stdcall fstat (struct __stat64 *buf) __attribute__ ((regparm (2)));
|
int __stdcall fstat (struct __stat64 *buf) __attribute__ ((regparm (2)));
|
||||||
|
int __stdcall fchmod (mode_t mode) __attribute__ ((regparm (1)));
|
||||||
|
int __stdcall fchown (__uid32_t uid, __gid32_t gid) __attribute__ ((regparm (2)));
|
||||||
|
int __stdcall facl (int, int, __acl32 *) __attribute__ ((regparm (3)));
|
||||||
bool is_slow () {return 1;}
|
bool is_slow () {return 1;}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -34,6 +34,7 @@
|
|||||||
#include "select.h"
|
#include "select.h"
|
||||||
#include "wininfo.h"
|
#include "wininfo.h"
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
#include <sys/acl.h>
|
||||||
|
|
||||||
extern bool fdsock (cygheap_fdmanip& fd, const device *, SOCKET soc);
|
extern bool fdsock (cygheap_fdmanip& fd, const device *, SOCKET soc);
|
||||||
extern "C" {
|
extern "C" {
|
||||||
@ -386,16 +387,67 @@ fhandler_socket::dup (fhandler_base *child)
|
|||||||
int __stdcall
|
int __stdcall
|
||||||
fhandler_socket::fstat (struct __stat64 *buf)
|
fhandler_socket::fstat (struct __stat64 *buf)
|
||||||
{
|
{
|
||||||
int res = fhandler_base::fstat (buf);
|
int res;
|
||||||
if (!res)
|
if (get_device () == FH_UNIX)
|
||||||
{
|
{
|
||||||
buf->st_dev = 0;
|
res = fhandler_base::fstat_fs (buf);
|
||||||
buf->st_ino = (__ino64_t) ((DWORD) get_handle ());
|
if (!res)
|
||||||
buf->st_mode = S_IFSOCK | S_IRWXU | S_IRWXG | S_IRWXO;
|
{
|
||||||
|
buf->st_mode = (buf->st_mode & ~S_IFMT) | S_IFSOCK;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
res = fhandler_base::fstat (buf);
|
||||||
|
if (!res)
|
||||||
|
{
|
||||||
|
buf->st_dev = 0;
|
||||||
|
buf->st_ino = (__ino64_t) ((DWORD) get_handle ());
|
||||||
|
buf->st_mode = S_IFSOCK | S_IRWXU | S_IRWXG | S_IRWXO;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
fhandler_socket::fchmod (mode_t mode)
|
||||||
|
{
|
||||||
|
if (get_device () == FH_UNIX)
|
||||||
|
{
|
||||||
|
fhandler_disk_file fh;
|
||||||
|
fh.set_name (pc);
|
||||||
|
fh.get_device () = FH_FS;
|
||||||
|
int ret = fh.fchmod (mode);
|
||||||
|
SetFileAttributes (pc, GetFileAttributes (pc) | FILE_ATTRIBUTE_SYSTEM);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
fhandler_socket::fchown (__uid32_t uid, __gid32_t gid)
|
||||||
|
{
|
||||||
|
if (get_device () == FH_UNIX)
|
||||||
|
{
|
||||||
|
fhandler_disk_file fh;
|
||||||
|
fh.set_name (pc);
|
||||||
|
return fh.fchown (uid, gid);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
fhandler_socket::facl (int cmd, int nentries, __aclent32_t *aclbufp)
|
||||||
|
{
|
||||||
|
if (get_device () == FH_UNIX)
|
||||||
|
{
|
||||||
|
fhandler_disk_file fh;
|
||||||
|
fh.set_name (pc);
|
||||||
|
return fh.facl (cmd, nentries, aclbufp);
|
||||||
|
}
|
||||||
|
return fhandler_base::facl (cmd, nentries, aclbufp);
|
||||||
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
fhandler_socket::bind (const struct sockaddr *name, int namelen)
|
fhandler_socket::bind (const struct sockaddr *name, int namelen)
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user