/*
 * LD_PRELOAD library to convince apps running on x86_64 architectures
 * that they are really on i386.
 *
 * Why?
 * I had a chroot used for building x86 binaries, after moving to a new
 * x86_64 machine I still wanted to run the chroot builder as i386.
 * Whenever I installed a package with yum in the chroot it would detect
 * that the system was x86_64 and install those packages. There was no way
 * to force yum to be i386-only.
 *
 * Build with
 *   gcc -Wall -fPIC -shared -o i386.so i386.c
 * Use with
 *   LD_PRELOAD=`pwd`/i386.so <command>
 *
 * Have fun.
 *
 * -- Ted Percival <ted@midg3t.net>, 2008-07-08
 */

/* XXX: This will stomp on apps compiled *without* _GNU_SOURCE */
#define _GNU_SOURCE
#include <string.h>
#include <sys/syscall.h>
#include <sys/utsname.h>
#include <unistd.h>

int uname(struct utsname *u) {

    if (syscall(SYS_uname, u) == -1) {
	perror("syscall");
	return -1;
    }

    strncpy(u->machine, "i386", sizeof(u->machine));

    return 0;
}

/*
 *   Copyright 2008 Quest Software, Inc.
 *
 *   Redistribution and use in source and binary forms, with or without
 *   modification, are permitted provided that the following conditions
 *   are met:
 *
 *   a. Redistributions of source code must retain the above copyright
 *      notice, this list of conditions and the following disclaimer.
 *   b. Redistributions in binary form must reproduce the above copyright
 *      notice, this list of conditions and the following disclaimer
 *      in the documentation and/or other materials provided with the
 *      distribution.
 *   c. Neither the name of Quest Software, Inc. nor the names of its
 *      contributors may be used to endorse or promote products derived
 *      from this software without specific prior written permission.
 *
 *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT
 *   NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
 *   FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
 *   SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY
 *   DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 *   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
 *   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 *   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
 *   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 *   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
 *   THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */
