shell bypass 403
/* ========================================================================
* Copyright 1988-2006 University of Washington
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
*
* ========================================================================
*/
/*
* Program: Mac environment routines
*
* Author: Mark Crispin
* Networks and Distributed Computing
* Computing & Communications
* University of Washington
* Administration Building, AG-44
* Seattle, WA 98195
* Internet: MRC@CAC.Washington.EDU
*
* Date: 26 January 1992
* Last Edited: 30 August 2006
*/
static char *myHomeDir = NIL; /* home directory name */
static char *myLocalHost = NIL; /* local host name */
static char *myNewsrc = NIL; /* newsrc file name */
#include "pmatch.c" /* include wildcard pattern matcher */
/* Environment manipulate parameters
* Accepts: function code
* function-dependent value
* Returns: function-dependent return value
*/
void *env_parameters (long function,void *value)
{
void *ret = NIL;
char tmp[MAILTMPLEN];
switch ((int) function) {
case SET_HOMEDIR:
if (myHomeDir) fs_give ((void **) &myHomeDir);
myHomeDir = cpystr ((char *) value);
case GET_HOMEDIR:
/* set home directory if not defined */
if (!myHomeDir) myHomeDir = cpystr ("");
ret = (void *) myHomeDir;
break;
case SET_LOCALHOST:
myLocalHost = cpystr ((char *) value);
case GET_LOCALHOST:
ret = (void *) myLocalHost ? myLocalHost : "random-mac";
break;
case SET_NEWSRC:
if (myNewsrc) fs_give ((void **) &myNewsrc);
myNewsrc = cpystr ((char *) value);
case GET_NEWSRC:
if (!myNewsrc) { /* set news file name if not defined */
sprintf (tmp,"%s:News State",myhomedir ());
myNewsrc = cpystr (tmp);
}
ret = (void *) myNewsrc;
break;
}
return ret;
}
/* Write current time
* Accepts: destination string
* format of date and time
*
* This depends upon the ReadLocation() call in System 7 and the
* user properly setting his location/timezone in the Map control
* panel.
* Nothing is done about the gmtFlags.dlsDelta byte yet, since I
* don't know how it's supposed to work.
*/
static void do_date (char *date,char *fmt)
{
long tz,tzm;
time_t ti = time (0);
struct tm *t = localtime (&ti);
MachineLocation loc;
ReadLocation (&loc); /* get location/timezone poop */
/* get sign-extended time zone */
tz = (loc.gmtFlags.gmtDelta & 0x00ffffff) |
((loc.gmtFlags.gmtDelta & 0x00800000) ? 0xff000000 : 0);
tz /= 60; /* get timezone in minutes */
tzm = tz % 60; /* get minutes from the hour */
/* output time */
strftime (date,MAILTMPLEN,fmt,t);
/* now output time zone */
sprintf (date += strlen (date),"%+03ld%02ld",tz/60,tzm >= 0 ? tzm : -tzm);
}
/* Write current time in RFC 822 format
* Accepts: destination string
*/
void rfc822_date (char *date)
{
do_date (date,"%a, %d %b %Y %H:%M:%S ");
}
/* Write current time in internal format
* Accepts: destination string
*/
void internal_date (char *date)
{
do_date (date,"%2d-%b-%Y %H:%M:%S ");
}
/* Return my local host name
* Returns: my local host name
*/
char *mylocalhost (void)
{
return (char *) mail_parameters (NIL,GET_LOCALHOST,NIL);
}
/* Return my home directory name
* Returns: my home directory name
*/
char *myhomedir ()
{
return (char *) mail_parameters (NIL,GET_HOMEDIR,NIL);
}
/* Determine default prototype stream to user
* Accepts: type (NIL for create, T for append)
* Returns: default prototype stream
*/
MAILSTREAM *default_proto (long type)
{
extern MAILSTREAM dummyproto;
return &dummyproto; /* return default driver's prototype */
}
/* Block until event satisfied
* Called as: while (wait_condition && wait ());
* Returns T if OK, NIL if user wants to abort
*
* Allows user to run a desk accessory, select a different window, or go
* to another application while waiting for the event to finish. COMMAND/.
* will abort the wait.
* Assumes the Apple menu has the apple character as its first character,
* and that the main program has disabled all other menus.
*/
long wait ()
{
EventRecord event;
WindowPtr window;
MenuInfo **m;
long r;
Str255 tmp;
/* wait for an event */
WaitNextEvent (everyEvent,&event,(long) 6,NIL);
switch (event.what) { /* got one -- what is it? */
case mouseDown: /* mouse clicked */
switch (FindWindow (event.where,&window)) {
case inMenuBar: /* menu bar item? */
/* yes, interesting event? */
if (r = MenuSelect (event.where)) {
/* round-about test for Apple menu */
if ((*(m = GetMHandle (HiWord (r))))->menuData[1] == appleMark) {
/* get desk accessory name */
GetItem (m,LoWord (r),tmp);
OpenDeskAcc (tmp); /* fire it up */
SetPort (window); /* put us back at our window */
}
else SysBeep (60); /* the fool forgot to disable it! */
}
HiliteMenu (0); /* unhighlight it */
break;
case inContent: /* some window was selected */
if (window != FrontWindow ()) SelectWindow (window);
break;
default: /* ignore all others */
break;
}
break;
case keyDown: /* key hit - if COMMAND/. then punt */
if ((event.modifiers & cmdKey) && (event.message & charCodeMask) == '.')
return NIL;
break;
default: /* ignore all others */
break;
}
return T; /* try wait test again */
}
/* Return random number
*/
long random ()
{
return (long) rand () << 16 + rand ();
}
/* Emulator for BSD syslog() routine
* Accepts: priority
* message
* parameters
*/
void syslog (int priority,const char *message,...)
{
}
/* Emulator for BSD openlog() routine
* Accepts: identity
* options
* facility
*/
void openlog (const char *ident,int logopt,int facility)
{
}