зеркало из https://github.com/mozilla/gecko-dev.git
114 строки
3.6 KiB
C
114 строки
3.6 KiB
C
/*
|
|
* The contents of this file are subject to the Mozilla Public
|
|
* License Version 1.1 (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.mozilla.org/MPL/
|
|
*
|
|
* Software distributed under the License is distributed on an "AS
|
|
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
|
* implied. See the License for the specific language governing
|
|
* rights and limitations under the License.
|
|
*
|
|
* The Original Code is the Netscape security libraries.
|
|
*
|
|
* The Initial Developer of the Original Code is Netscape
|
|
* Communications Corporation. Portions created by Netscape are
|
|
* Copyright (C) 1994-2000 Netscape Communications Corporation. All
|
|
* Rights Reserved.
|
|
*
|
|
* Contributor(s):
|
|
*
|
|
* Alternatively, the contents of this file may be used under the
|
|
* terms of the GNU General Public License Version 2 or later (the
|
|
* "GPL"), in which case the provisions of the GPL are applicable
|
|
* instead of those above. If you wish to allow use of your
|
|
* version of this file only under the terms of the GPL and not to
|
|
* allow others to use your version of this file under the MPL,
|
|
* indicate your decision by deleting the provisions above and
|
|
* replace them with the notice and other provisions required by
|
|
* the GPL. If you do not delete the provisions above, a recipient
|
|
* may use your version of this file under either the MPL or the
|
|
* GPL.
|
|
*/
|
|
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
|
|
/* We really do have 'long long' on the Mac, but NSPR doesn't yet know this.
|
|
Need to define this before including NSPR to get the right defn of PRInt64. */
|
|
#if 0
|
|
#ifdef XP_MAC
|
|
#define HAVE_LONG_LONG
|
|
#endif
|
|
#endif
|
|
|
|
#include "prtime.h"
|
|
#include "prenv.h"
|
|
#include "prlong.h"
|
|
|
|
char * timebombVar = "NSM_TIMEBOMB";
|
|
#define SSM_SEC_PER_24HRS (60 * 60 * 24)
|
|
|
|
int main()
|
|
{
|
|
FILE * headerFile, * timeFile;
|
|
int daysToLive;
|
|
char * tmp = PR_GetEnv(timebombVar);
|
|
PRTime timeNow, lifeTime, expire, tmpVal, days, tmpMilli;
|
|
PRInt32 timeHi, timeLow;
|
|
|
|
daysToLive = atoi(tmp);
|
|
timeNow = PR_Now();
|
|
|
|
LL_I2L(tmpVal, SSM_SEC_PER_24HRS);
|
|
LL_I2L(days, daysToLive);
|
|
LL_MUL(tmpMilli, days, tmpVal);
|
|
LL_MUL(lifeTime, tmpMilli, PR_USEC_PER_SEC);
|
|
|
|
LL_ADD(expire, timeNow, lifeTime);
|
|
LL_SHR(tmpVal, expire, 32);
|
|
LL_L2UI(timeHi, tmpVal);
|
|
LL_L2UI(timeLow, expire);
|
|
|
|
|
|
timeFile = fopen("timestamp.h", "w");
|
|
if (!timeFile) {
|
|
printf("Can't create timestamp.h.\n");
|
|
goto loser;
|
|
}
|
|
|
|
fprintf(timeFile, "/*\n * Created automatically, do not edit!\n */\n\n");
|
|
fprintf(timeFile, "/* This build of Cartman will expire at this time. */ \n");
|
|
fprintf(timeFile, "static PRTime expirationTime = LL_INIT(0x%lx, 0x%lx);\n", timeHi,
|
|
timeLow);
|
|
|
|
fclose(timeFile);
|
|
|
|
headerFile = fopen("timebomb.h", "w");
|
|
if (!headerFile) {
|
|
printf("Can't open timebomb.h for writing!\n");
|
|
goto loser;
|
|
}
|
|
|
|
fprintf(headerFile,
|
|
"/* This file is generated automatically by createBomb.c, do not edit! */\n\n\n");
|
|
|
|
/*
|
|
* Function declarations that are used for the timebomb.
|
|
* Definitions are in timebomb.c, included in frontend.c.
|
|
*/
|
|
fprintf(headerFile,
|
|
"\n\n/* Functions used in Cartman for the timebomb. */\n");
|
|
fprintf(headerFile,
|
|
"/*\n * Set SSMTimeBombExpired to PR_TRUE if Cartman has expired. \n */\n");
|
|
fprintf(headerFile, "void SSM_CheckTimeBomb();\n\n");
|
|
fprintf(headerFile,
|
|
"/*\n * Run this function from frontend thread of control connection\n * if Cartman has expired. \n */\n");
|
|
fprintf(headerFile, "void SSM_CartmanHasExpired(SSMControlConnection * control);\n\n");
|
|
|
|
fclose(headerFile);
|
|
|
|
loser:
|
|
return 0;
|
|
}
|