#include #include #include #include /* compile as: * * > gcc -fPIC -G -c uname.c * > ld -G -o uname.so uname.o * > LD_PRELOAD=uname.so # or wherever you put it * > RELEASE=5.8 * > export LD_PRELOAD RELEASE * > uname */ int uname(struct utsname *name) { static int (*uname_real)(); register int rc; register char *p; if (uname_real==NULL) uname_real = (int (*) ()) dlsym(RTLD_NEXT, "uname"); if ((rc = uname_real(name)) != -1) { if ((p=getenv("SYSNAME"))!=NULL) { strncpy(name->sysname,p,SYS_NMLN-1); name->sysname[SYS_NMLN-1]='\0'; } if ((p=getenv("NODENAME"))!=NULL) { strncpy(name->nodename,p,SYS_NMLN-1); name->nodename[SYS_NMLN-1]='\0'; } if ((p=getenv("RELEASE"))!=NULL) { strncpy(name->release,p,SYS_NMLN-1); name->release[SYS_NMLN-1]='\0'; } if ((p=getenv("VERSION"))!=NULL) { strncpy(name->version,p,SYS_NMLN-1); name->version[SYS_NMLN-1]='\0'; } if ((p=getenv("MACHINE"))!=NULL) { strncpy(name->machine,p,SYS_NMLN-1); name->machine[SYS_NMLN-1]='\0'; } } return rc; }