chiark / gitweb /
Initial checkin.
[authbind.git] / authbind.c
1 /**/
2
3 #include <stdlib.h>
4 #include <string.h>
5 #include <stdio.h>
6 #include <unistd.h>
7
8 #define LD_PRELOAD "LD_PRELOAD"
9 #define AUTHBINDLIB "AUTHBIND_LIB"
10 #define LIBAUTHBIND "/usr/lib/authbind/libauthbind.so.0"
11
12 int main(int argc, char *const *argv) {
13   const char *expreload, *authbindlib, *preload;
14   char *newpreload;
15
16   authbindlib= getenv(AUTHBINDLIB);
17   if (!authbindlib) {
18     if (setenv(AUTHBINDLIB,LIBAUTHBIND,0)) {
19       perror("authbind: setenv " AUTHBINDLIB);
20       exit(-1);
21     }
22     authbindlib= LIBAUTHBIND;
23   }
24     
25   if ((expreload= getenv(LD_PRELOAD))) {
26     newpreload= malloc(strlen(expreload)+strlen(authbindlib)+2);
27     strcpy(newpreload,expreload);
28     strcat(newpreload,":");
29     strcat(newpreload,authbindlib);
30     preload= newpreload;
31   } else {
32     preload= authbindlib;
33   }
34   if (setenv(LD_PRELOAD,preload,1)) { perror("authbind: setenv"); exit(-1); }
35
36   execvp(argv[1],argv+1);
37   perror(argv[1]); exit(-1);
38 }