1
/* Automatically generated from Squeak on #(19 March 2005 10:09:03 am) */
9
/* Default EXPORT macro that does nothing (see comment in sq.h): */
10
#define EXPORT(returnType) returnType
12
/* Do not include the entire sq.h file but just those parts needed. */
13
/* The virtual machine proxy definition */
14
#include "sqVirtualMachine.h"
15
/* Configuration options */
17
/* Platform specific definitions */
18
#include "sqPlatformSpecific.h"
22
#define null 0 /* using 'null' because nil is predefined in Think C */
23
#ifdef SQUEAK_BUILTIN_PLUGIN
25
// was #undef EXPORT(returnType) but screws NorCroft cc
26
#define EXPORT(returnType) static returnType
28
#include "SecurityPlugin.h"
30
/* memory access macros */
31
#define byteAt(i) (*((unsigned char *) (i)))
32
#define byteAtput(i, val) (*((unsigned char *) (i)) = val)
33
#define longAt(i) (*((int *) (i)))
34
#define longAtput(i, val) (*((int *) (i)) = val)
39
/*** Function Prototypes ***/
41
EXPORT(const char*) getModuleName(void);
43
static int halt(void);
45
EXPORT(int) initialiseModule(void);
47
static int msg(char *s);
49
EXPORT(int) primitiveCanWriteImage(void);
50
EXPORT(int) primitiveDisableImageWrite(void);
51
EXPORT(int) primitiveGetSecureUserDirectory(void);
52
EXPORT(int) primitiveGetUntrustedUserDirectory(void);
53
EXPORT(int) secCanListenOnPort(int socket, int port);
54
EXPORT(int) secCanConnectToPort(int addr, int port);
55
EXPORT(int) secCanCreateSocketOfType(int netType, int socketType);
56
EXPORT(int) secCanCreatePathOfSize(char * dirName, int dirNameSize);
57
EXPORT(int) secCanDeleteFileOfSize(char * fileName, int fileNameSize);
58
EXPORT(int) secCanDeletePathOfSize(char * dirName, int dirNameSize);
59
EXPORT(int) secCanGetFileTypeOfSize(char * fileName, int fileNameSize);
60
EXPORT(int) secCanListPathOfSize(char * pathName, int pathNameSize);
61
EXPORT(int) secCanOpenAsyncFileOfSizeWritable(char * fileName, int fileNameSize, int writeFlag);
62
EXPORT(int) secCanOpenFileOfSizeWritable(char * fileName, int fileNameSize, int writeFlag);
63
EXPORT(int) secCanRenameFileOfSize(char * fileName, int fileNameSize);
64
EXPORT(int) secCanRenameImage(void);
65
EXPORT(int) secCanSetFileTypeOfSize(char * fileName, int fileNameSize);
66
EXPORT(int) secCanWriteImage(void);
67
EXPORT(int) secDisableFileAccess(void);
68
EXPORT(int) secDisableSocketAccess(void);
69
EXPORT(int) secHasFileAccess(void);
70
EXPORT(int) secHasSocketAccess(void);
71
EXPORT(int) setInterpreter(struct VirtualMachine* anInterpreter);
75
#ifdef SQUEAK_BUILTIN_PLUGIN
78
struct VirtualMachine* interpreterProxy;
79
static const char *moduleName =
80
#ifdef SQUEAK_BUILTIN_PLUGIN
81
"SecurityPlugin 19 March 2005 (i)"
83
"SecurityPlugin 19 March 2005 (e)"
89
/* Note: This is hardcoded so it can be run from Squeak.
90
The module name is used for validating a module *after*
91
it is loaded to check if it does really contain the module
92
we're thinking it contains. This is important! */
94
EXPORT(const char*) getModuleName(void) {
98
static int halt(void) {
102
EXPORT(int) initialiseModule(void) {
103
return ioInitSecurity();
106
static int msg(char *s) {
107
fprintf(stderr, "\n%s: %s", moduleName, s);
110
EXPORT(int) primitiveCanWriteImage(void) {
111
interpreterProxy->pop(1);
112
interpreterProxy->pushBool(ioCanWriteImage());
115
EXPORT(int) primitiveDisableImageWrite(void) {
116
ioDisableImageWrite();
117
if (!(interpreterProxy->failed())) {
118
interpreterProxy->pop(1);
123
/* Primitive. Return the secure directory for the current user. */
125
EXPORT(int) primitiveGetSecureUserDirectory(void) {
132
dirName = ioGetSecureUserDirectory();
133
if ((dirName == null) || (interpreterProxy->failed())) {
134
return interpreterProxy->primitiveFail();
136
dirLen = strlen(dirName);
137
dirOop = interpreterProxy->instantiateClassindexableSize(interpreterProxy->classString(), dirLen);
138
if (interpreterProxy->failed()) {
141
dirPtr = interpreterProxy->firstIndexableField(dirOop);
142
for (i = 0; i <= (dirLen - 1); i += 1) {
143
dirPtr[i] = (dirName[i]);
145
interpreterProxy->pop(1);
146
interpreterProxy->push(dirOop);
150
/* Primitive. Return the untrusted user directory name. */
152
EXPORT(int) primitiveGetUntrustedUserDirectory(void) {
159
dirName = ioGetUntrustedUserDirectory();
160
if ((dirName == null) || (interpreterProxy->failed())) {
161
return interpreterProxy->primitiveFail();
163
dirLen = strlen(dirName);
164
dirOop = interpreterProxy->instantiateClassindexableSize(interpreterProxy->classString(), dirLen);
165
if (interpreterProxy->failed()) {
168
dirPtr = interpreterProxy->firstIndexableField(dirOop);
169
for (i = 0; i <= (dirLen - 1); i += 1) {
170
dirPtr[i] = (dirName[i]);
172
interpreterProxy->pop(1);
173
interpreterProxy->push(dirOop);
176
EXPORT(int) secCanListenOnPort(int socket, int port) {
177
return ioCanListenOnPort(socket, port);
180
EXPORT(int) secCanConnectToPort(int addr, int port) {
181
return ioCanConnectToPort(addr, port);
184
EXPORT(int) secCanCreateSocketOfType(int netType, int socketType) {
185
return ioCanCreateSocketOfType(netType, socketType);
188
EXPORT(int) secCanCreatePathOfSize(char * dirName, int dirNameSize) {
189
return ioCanCreatePathOfSize(dirName, dirNameSize);
192
EXPORT(int) secCanDeleteFileOfSize(char * fileName, int fileNameSize) {
193
return ioCanDeleteFileOfSize(fileName, fileNameSize);
196
EXPORT(int) secCanDeletePathOfSize(char * dirName, int dirNameSize) {
197
return ioCanDeletePathOfSize(dirName, dirNameSize);
200
EXPORT(int) secCanGetFileTypeOfSize(char * fileName, int fileNameSize) {
201
return ioCanGetFileTypeOfSize(fileName, fileNameSize);
204
EXPORT(int) secCanListPathOfSize(char * pathName, int pathNameSize) {
205
return ioCanListPathOfSize(pathName, pathNameSize);
208
EXPORT(int) secCanOpenAsyncFileOfSizeWritable(char * fileName, int fileNameSize, int writeFlag) {
209
return ioCanOpenAsyncFileOfSizeWritable(fileName, fileNameSize, writeFlag);
212
EXPORT(int) secCanOpenFileOfSizeWritable(char * fileName, int fileNameSize, int writeFlag) {
213
return ioCanOpenFileOfSizeWritable(fileName, fileNameSize, writeFlag);
216
EXPORT(int) secCanRenameFileOfSize(char * fileName, int fileNameSize) {
217
return ioCanRenameFileOfSize(fileName, fileNameSize);
220
EXPORT(int) secCanRenameImage(void) {
221
return ioCanRenameImage();
224
EXPORT(int) secCanSetFileTypeOfSize(char * fileName, int fileNameSize) {
225
return ioCanSetFileTypeOfSize(fileName, fileNameSize);
228
EXPORT(int) secCanWriteImage(void) {
229
return ioCanWriteImage();
232
EXPORT(int) secDisableFileAccess(void) {
233
return ioDisableFileAccess();
236
EXPORT(int) secDisableSocketAccess(void) {
237
return ioDisableSocketAccess();
240
EXPORT(int) secHasFileAccess(void) {
241
return ioHasFileAccess();
244
EXPORT(int) secHasSocketAccess(void) {
245
return ioHasSocketAccess();
249
/* Note: This is coded so that is can be run from Squeak. */
251
EXPORT(int) setInterpreter(struct VirtualMachine* anInterpreter) {
254
interpreterProxy = anInterpreter;
255
ok = interpreterProxy->majorVersion() == VM_PROXY_MAJOR;
259
ok = interpreterProxy->minorVersion() >= VM_PROXY_MINOR;
264
#ifdef SQUEAK_BUILTIN_PLUGIN
267
void* SecurityPlugin_exports[][3] = {
268
{"SecurityPlugin", "secCanSetFileTypeOfSize", (void*)secCanSetFileTypeOfSize},
269
{"SecurityPlugin", "secCanCreateSocketOfType", (void*)secCanCreateSocketOfType},
270
{"SecurityPlugin", "secHasSocketAccess", (void*)secHasSocketAccess},
271
{"SecurityPlugin", "secCanWriteImage", (void*)secCanWriteImage},
272
{"SecurityPlugin", "secCanGetFileTypeOfSize", (void*)secCanGetFileTypeOfSize},
273
{"SecurityPlugin", "initialiseModule", (void*)initialiseModule},
274
{"SecurityPlugin", "secCanListPathOfSize", (void*)secCanListPathOfSize},
275
{"SecurityPlugin", "getModuleName", (void*)getModuleName},
276
{"SecurityPlugin", "secCanRenameFileOfSize", (void*)secCanRenameFileOfSize},
277
{"SecurityPlugin", "setInterpreter", (void*)setInterpreter},
278
{"SecurityPlugin", "secCanListenOnPort", (void*)secCanListenOnPort},
279
{"SecurityPlugin", "secCanRenameImage", (void*)secCanRenameImage},
280
{"SecurityPlugin", "secHasFileAccess", (void*)secHasFileAccess},
281
{"SecurityPlugin", "secCanConnectToPort", (void*)secCanConnectToPort},
282
{"SecurityPlugin", "primitiveDisableImageWrite", (void*)primitiveDisableImageWrite},
283
{"SecurityPlugin", "secCanCreatePathOfSize", (void*)secCanCreatePathOfSize},
284
{"SecurityPlugin", "secDisableFileAccess", (void*)secDisableFileAccess},
285
{"SecurityPlugin", "secDisableSocketAccess", (void*)secDisableSocketAccess},
286
{"SecurityPlugin", "secCanOpenFileOfSizeWritable", (void*)secCanOpenFileOfSizeWritable},
287
{"SecurityPlugin", "primitiveCanWriteImage", (void*)primitiveCanWriteImage},
288
{"SecurityPlugin", "primitiveGetUntrustedUserDirectory", (void*)primitiveGetUntrustedUserDirectory},
289
{"SecurityPlugin", "primitiveGetSecureUserDirectory", (void*)primitiveGetSecureUserDirectory},
290
{"SecurityPlugin", "secCanDeletePathOfSize", (void*)secCanDeletePathOfSize},
291
{"SecurityPlugin", "secCanDeleteFileOfSize", (void*)secCanDeleteFileOfSize},
292
{"SecurityPlugin", "secCanOpenAsyncFileOfSizeWritable", (void*)secCanOpenAsyncFileOfSizeWritable},
297
#endif /* ifdef SQ_BUILTIN_PLUGIN */