]> andersk Git - openssh.git/blob - openbsd-compat/bsd-cygwin_util.c
KNF
[openssh.git] / openbsd-compat / bsd-cygwin_util.c
1 /*
2  *
3  * cygwin_util.c
4  *
5  * Author: Corinna Vinschen <vinschen@cygnus.com>
6  *
7  * Copyright (c) 2000 Corinna Vinschen <vinschen@cygnus.com>, Duisburg, Germany
8  *                    All rights reserved
9  *
10  * Created: Sat Sep 02 12:17:00 2000 cv
11  *
12  * This file contains functions for forcing opened file descriptors to
13  * binary mode on Windows systems.
14  */
15
16 #include "includes.h"
17
18 RCSID("$Id$");
19
20 #ifdef HAVE_CYGWIN
21
22 #include <fcntl.h>
23 #include <io.h>
24 #include <stdlib.h>
25 #include <sys/vfs.h>
26 #include <windows.h>
27 #define is_winnt       (GetVersion() < 0x80000000)
28
29 int binary_open(const char *filename, int flags, mode_t mode)
30 {
31         return open(filename, flags | O_BINARY, mode);
32 }
33
34 int binary_pipe(int fd[2])
35 {
36         int ret = pipe(fd);
37
38         if (!ret) {
39                 setmode (fd[0], O_BINARY);
40                 setmode (fd[1], O_BINARY);
41         }
42         return ret;
43 }
44
45 int check_nt_auth(int pwd_authenticated, uid_t uid)
46 {
47         /*
48         * The only authentication which is able to change the user
49         * context on NT systems is the password authentication. So
50         * we deny all requsts for changing the user context if another
51         * authentication method is used.
52         * This may change in future when a special openssh
53         * subauthentication package is available.
54         */
55         if (is_winnt && !pwd_authenticated && geteuid() != uid)
56                 return 0;
57         
58         return 1;
59 }
60
61 int check_ntsec(const char *filename)
62 {
63         char *cygwin;
64         int allow_ntea = 0;
65         int allow_ntsec = 0;
66         struct statfs fsstat;
67
68         /* Windows 95/98/ME don't support file system security at all. */
69         if (!is_winnt)
70                 return 0;
71
72         /* Evaluate current CYGWIN settings. */
73         if ((cygwin = getenv("CYGWIN")) != NULL) {
74                 if (strstr(cygwin, "ntea") && !strstr(cygwin, "nontea"))
75                         allow_ntea = 1;
76                 if (strstr(cygwin, "ntsec") && !strstr(cygwin, "nontsec"))
77                         allow_ntsec = 1;
78         }
79
80         /*
81          * `ntea' is an emulation of POSIX attributes. It doesn't support
82          * real file level security as ntsec on NTFS file systems does
83          * but it supports FAT filesystems. `ntea' is minimum requirement
84          * for security checks.
85          */
86         if (allow_ntea)
87                 return 1;
88
89         /*
90          * Retrieve file system flags. In Cygwin, file system flags are
91          * copied to f_type which has no meaning in Win32 itself.
92          */
93         if (statfs(filename, &fsstat))
94                 return 1;
95
96         /*
97          * Only file systems supporting ACLs are able to set permissions.
98          * `ntsec' is the setting in Cygwin which switches using of NTFS
99          * ACLs to support POSIX permissions on files.
100          */
101         if (fsstat.f_type & FS_PERSISTENT_ACLS)
102                 return allow_ntsec;
103
104         return 0;
105 }
106
107 #endif /* HAVE_CYGWIN */
This page took 0.185036 seconds and 5 git commands to generate.