From charlesreid1

No edit summary
 
(2 intermediate revisions by the same user not shown)
Line 1: Line 1:
Documentation: https://github.com/wolfcw/libfaketime/blob/master/README.OSX
=Mac OS X=


Unfortunately, the <code>/bin/date</code> program doesn't seem to be affected by libfaketime, probably because Apple decided it was a vulnerability in <code>/bin/date</code> and changed it to be statically linked.
==Installing Libfaketime==


However, it does work with Python:
It is really easy to install libfaketime on Mac OS X: use homebrew.
 
<pre>
$ brew install libfaketime
</pre>
 
The location of the libfaketime library is then
 
<pre>
/usr/local/lib/faketime/libfaketime.1.dylib
</pre>
 
and the location of the binary program <code>faketime</code>, which provides a convenient wrapper for using libfaketime, is then
 
<pre>
/usr/local/bin/faketime
</pre>
 
==Documentation on Usage==
 
Using libfaketime on Mac OS X is different from using Libfaketime on Linux, so you need to read both the README and the README.OSX file.
 
Link to the readme: https://github.com/wolfcw/libfaketime/blob/master/README
 
Link to the OS X readme: https://github.com/wolfcw/libfaketime/blob/master/README.OSX
 
==Testing Libfaketime==
 
To test out libfaketime, I decided I would try running a couple of programs through the <code>faketime</code> wrapper.
 
===Date Doesn't Work===
 
The examples in the readme files all use the system's <code>/bin/date</code> program. Unfortunately, this did not work for me on Mac OS X 10.11.5, and I think the reason is, it requires the <code>/bin/date</code> program to be ''dynamically linked'' to system libraries that request the date, which allows you to swap out the system library for the custom libfaketime library. However, with the latest operating system release, Apple must have changed <code>/bin/date</code> to be statically linked, probably because they saw this as a potential vulnerability, or maybe because they want to make life difficult and annoying for programmers by constantly changing everything with every new operating system release.
 
===Python Works===
 
You can use libfaketime to fool Python into thinking it is in the past. I ran the python binary through the faketime wrapper, and then used the datetime library to print out the current date and time. Check it out:


<pre>
<pre>
Line 15: Line 51:
>>>
>>>
</pre>
</pre>
===C Works===
This also works when running a simple, compiled C program that prints the current date and time. Here is the simple program:
<source lang="C">
#include <stdio.h>
#include <time.h>
/*
* This program prints the current date and the current time.
*/
int main(void) {
    // get the current time, C time type
    time_t t = time(NULL);
    // chunk it up into a struct
    struct tm tm = *localtime(&t);
    // print each chunk
    printf("The current date is: %0.04d-%0.02d-%0.02d\n", tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday);
    printf("The current time is: %0.02d:%0.02d:%0.02d\n", tm.tm_hour, tm.tm_min, tm.tm_sec);
    return 0;
}
</source>
and the output:
<pre>
$ gcc what_time_is_it.c -o whattime
$ faketime '2008-12-25 08:00:00' ./whattime
The current date is: 2008-12-25
The current time is: 08:00:00
</pre>
Note that this was run on July 9, 2016. Ziiiiing!
[[Category:Programming]]

Latest revision as of 03:25, 10 July 2016

Mac OS X

Installing Libfaketime

It is really easy to install libfaketime on Mac OS X: use homebrew.

$ brew install libfaketime

The location of the libfaketime library is then

/usr/local/lib/faketime/libfaketime.1.dylib

and the location of the binary program faketime, which provides a convenient wrapper for using libfaketime, is then

/usr/local/bin/faketime

Documentation on Usage

Using libfaketime on Mac OS X is different from using Libfaketime on Linux, so you need to read both the README and the README.OSX file.

Link to the readme: https://github.com/wolfcw/libfaketime/blob/master/README

Link to the OS X readme: https://github.com/wolfcw/libfaketime/blob/master/README.OSX

Testing Libfaketime

To test out libfaketime, I decided I would try running a couple of programs through the faketime wrapper.

Date Doesn't Work

The examples in the readme files all use the system's /bin/date program. Unfortunately, this did not work for me on Mac OS X 10.11.5, and I think the reason is, it requires the /bin/date program to be dynamically linked to system libraries that request the date, which allows you to swap out the system library for the custom libfaketime library. However, with the latest operating system release, Apple must have changed /bin/date to be statically linked, probably because they saw this as a potential vulnerability, or maybe because they want to make life difficult and annoying for programmers by constantly changing everything with every new operating system release.

Python Works

You can use libfaketime to fool Python into thinking it is in the past. I ran the python binary through the faketime wrapper, and then used the datetime library to print out the current date and time. Check it out:

$ faketime '2008-12-25 08:00:00' python
Python 2.7.10 (v2.7.10:15c95b7d81dc, May 23 2015, 09:33:12)
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import datetime
>>> print datetime.datetime.now()
2008-12-25 08:00:12.829915
>>>

C Works

This also works when running a simple, compiled C program that prints the current date and time. Here is the simple program:

#include <stdio.h>
#include <time.h>

/*
 * This program prints the current date and the current time.
 */

int main(void) {

    // get the current time, C time type
    time_t t = time(NULL);

    // chunk it up into a struct
    struct tm tm = *localtime(&t);

    // print each chunk
    printf("The current date is: %0.04d-%0.02d-%0.02d\n", tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday);
    printf("The current time is: %0.02d:%0.02d:%0.02d\n", tm.tm_hour, tm.tm_min, tm.tm_sec);

    return 0;
}

and the output:

$ gcc what_time_is_it.c -o whattime
$ faketime '2008-12-25 08:00:00' ./whattime
The current date is: 2008-12-25
The current time is: 08:00:00

Note that this was run on July 9, 2016. Ziiiiing!