Mercurial > hg > xemacs-beta
annotate src/filemode.c @ 5887:6eca500211f4
Prototype for X509_check_host() has changed, detect this in configure.ac
ChangeLog addition:
2015-04-09 Aidan Kehoe <kehoea@parhasard.net>
* configure.ac:
If X509_check_host() is available, check the number of arguments
it takes. Don't use it if it takes any number of arguments other
than five. Also don't use it if <openssl/x509v3.h> does not
declare it, since if that is so there is no portable way to tell
how many arguments it should take, and so we would end up smashing
the stack.
* configure: Regenerate.
src/ChangeLog addition:
2015-04-09 Aidan Kehoe <kehoea@parhasard.net>
* tls.c:
#include <openssl/x509v3.h> for its prototype for
X509_check_host().
* tls.c (tls_open):
Pass the new fifth argument to X509_check_host().
author | Aidan Kehoe <kehoea@parhasard.net> |
---|---|
date | Thu, 09 Apr 2015 14:27:02 +0100 |
parents | 308d34e9f07d |
children |
rev | line source |
---|---|
0 | 1 /* filemode.c -- make a string describing file modes |
2 Copyright (C) 1985, 1990, 1993 Free Software Foundation, Inc. | |
3 | |
4 This file is part of XEmacs. | |
5 | |
5402
308d34e9f07d
Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents:
2286
diff
changeset
|
6 XEmacs is free software: you can redistribute it and/or modify it |
0 | 7 under the terms of the GNU General Public License as published by the |
5402
308d34e9f07d
Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents:
2286
diff
changeset
|
8 Free Software Foundation, either version 3 of the License, or (at your |
308d34e9f07d
Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents:
2286
diff
changeset
|
9 option) any later version. |
0 | 10 |
11 XEmacs is distributed in the hope that it will be useful, but WITHOUT | |
12 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
13 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
14 for more details. | |
15 | |
16 You should have received a copy of the GNU General Public License | |
5402
308d34e9f07d
Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents:
2286
diff
changeset
|
17 along with XEmacs. If not, see <http://www.gnu.org/licenses/>. */ |
0 | 18 |
19 /* Synched up with: FSF 19.30. */ | |
20 | |
21 #include <config.h> | |
22 #include "lisp.h" | |
23 | |
24 #include "sysfile.h" | |
25 | |
26 static void mode_string (unsigned short mode, char *str); | |
27 static char ftypelet (mode_t bits); | |
28 static void rwx (unsigned short bits, char *chars); | |
29 static void setst (unsigned short bits, char *chars); | |
30 | |
1467 | 31 /* declared in "sysfile.h" |
32 | |
33 filemodestring - fill in string STR with an ls-style ASCII | |
0 | 34 representation of the st_mode field of file stats block STATP. |
35 10 characters are stored in STR; no terminating null is added. | |
36 The characters stored in STR are: | |
37 | |
38 0 File type. 'd' for directory, 'c' for character | |
39 special, 'b' for block special, 'm' for multiplex, | |
40 'l' for symbolic link, 's' for socket, 'p' for fifo, | |
41 '-' for regular, '?' for any other file type | |
42 | |
43 1 'r' if the owner may read, '-' otherwise. | |
44 | |
45 2 'w' if the owner may write, '-' otherwise. | |
46 | |
47 3 'x' if the owner may execute, 's' if the file is | |
48 set-user-id, '-' otherwise. | |
49 'S' if the file is set-user-id, but the execute | |
50 bit isn't set. | |
51 | |
52 4 'r' if group members may read, '-' otherwise. | |
53 | |
54 5 'w' if group members may write, '-' otherwise. | |
55 | |
56 6 'x' if group members may execute, 's' if the file is | |
57 set-group-id, '-' otherwise. | |
58 'S' if it is set-group-id but not executable. | |
59 | |
60 7 'r' if any user may read, '-' otherwise. | |
61 | |
62 8 'w' if any user may write, '-' otherwise. | |
63 | |
64 9 'x' if any user may execute, 't' if the file is "sticky" | |
65 (will be retained in swap space after execution), '-' | |
66 otherwise. | |
67 'T' if the file is sticky but not executable. */ | |
68 | |
69 void | |
70 filemodestring (struct stat *statp, char *str) | |
71 { | |
72 mode_string (statp->st_mode, str); | |
73 } | |
74 | |
75 /* Like filemodestring, but only the relevant part of the `struct stat' | |
76 is given as an argument. */ | |
77 | |
78 static void | |
79 mode_string (unsigned short mode, char *str) | |
80 { | |
81 str[0] = ftypelet (mode); | |
404 | 82 rwx ((unsigned short) ((mode & 0700) << 0), &str[1]); |
83 rwx ((unsigned short) ((mode & 0070) << 3), &str[4]); | |
84 rwx ((unsigned short) ((mode & 0007) << 6), &str[7]); | |
0 | 85 setst (mode, str); |
86 } | |
87 | |
88 /* Return a character indicating the type of file described by | |
89 file mode BITS: | |
90 'd' for directories | |
91 'b' for block special files | |
92 'c' for character special files | |
93 'm' for multiplexor files | |
94 'l' for symbolic links | |
95 's' for sockets | |
96 'p' for fifos | |
97 '-' for regular files | |
98 '?' for any other file type. */ | |
99 | |
100 static char | |
101 ftypelet (mode_t bits) | |
102 { | |
103 #ifdef S_ISBLK | |
104 if (S_ISBLK (bits)) | |
105 return 'b'; | |
106 #endif | |
107 if (S_ISCHR (bits)) | |
108 return 'c'; | |
109 if (S_ISDIR (bits)) | |
110 return 'd'; | |
111 if (S_ISREG (bits)) | |
112 return '-'; | |
113 #ifdef S_ISFIFO | |
114 if (S_ISFIFO (bits)) | |
115 return 'p'; | |
116 #endif | |
117 #ifdef S_ISLNK | |
118 if (S_ISLNK (bits)) | |
119 return 'l'; | |
120 #endif | |
121 #ifdef S_ISSOCK | |
122 if (S_ISSOCK (bits)) | |
123 return 's'; | |
124 #endif | |
125 #ifdef S_ISMPC | |
126 if (S_ISMPC (bits)) | |
127 return 'm'; | |
128 #endif | |
129 #ifdef S_ISNWK | |
130 if (S_ISNWK (bits)) | |
131 return 'n'; | |
132 #endif | |
133 return '?'; | |
134 } | |
135 | |
136 /* Look at read, write, and execute bits in BITS and set | |
137 flags in CHARS accordingly. */ | |
138 | |
139 static void | |
140 rwx (unsigned short bits, char *chars) | |
141 { | |
142 chars[0] = (bits & S_IRUSR) ? 'r' : '-'; | |
143 chars[1] = (bits & S_IWUSR) ? 'w' : '-'; | |
144 chars[2] = (bits & S_IXUSR) ? 'x' : '-'; | |
145 } | |
146 | |
147 /* Set the 's' and 't' flags in file attributes string CHARS, | |
148 according to the file mode BITS. */ | |
149 | |
150 static void | |
2286 | 151 setst ( |
152 #if defined(S_ISUID) || defined(S_ISGID) || defined(S_ISVTX) | |
153 unsigned short bits, char *chars | |
154 #else | |
155 unsigned short UNUSED (bits), char *UNUSED (chars) | |
156 #endif | |
157 ) | |
0 | 158 { |
159 #ifdef S_ISUID | |
160 if (bits & S_ISUID) | |
161 { | |
162 if (chars[3] != 'x') | |
163 /* Set-uid, but not executable by owner. */ | |
164 chars[3] = 'S'; | |
165 else | |
166 chars[3] = 's'; | |
167 } | |
168 #endif | |
169 #ifdef S_ISGID | |
170 if (bits & S_ISGID) | |
171 { | |
172 if (chars[6] != 'x') | |
173 /* Set-gid, but not executable by group. */ | |
174 chars[6] = 'S'; | |
175 else | |
176 chars[6] = 's'; | |
177 } | |
178 #endif | |
179 #ifdef S_ISVTX | |
180 if (bits & S_ISVTX) | |
181 { | |
182 if (chars[9] != 'x') | |
183 /* Sticky, but not executable by others. */ | |
184 chars[9] = 'T'; | |
185 else | |
186 chars[9] = 't'; | |
187 } | |
188 #endif | |
189 } |