import HEAD into svn+ssh://svn.samba.org/home/svn/samba/trunk
[metze/old/v3-2-winbind-ndr.git] / source / smbwrapper / smbsh.c
1 /* 
2    Unix SMB/CIFS implementation.
3    SMB wrapper functions - frontend
4    Copyright (C) Andrew Tridgell 1998
5    
6    This program is free software; you can redistribute it and/or modify
7    it under the terms of the GNU General Public License as published by
8    the Free Software Foundation; either version 2 of the License, or
9    (at your option) any later version.
10    
11    This program is distributed in the hope that it will be useful,
12    but WITHOUT ANY WARRANTY; without even the implied warranty of
13    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14    GNU General Public License for more details.
15    
16    You should have received a copy of the GNU General Public License
17    along with this program; if not, write to the Free Software
18    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
19 */
20
21 #include "includes.h"
22
23 static void smbsh_usage(void)
24 {
25         printf("smbsh [options]\n\n");
26         printf(" -W workgroup\n");
27         printf(" -U username\n");
28         printf(" -P prefix\n");
29         printf(" -R resolve order\n");
30         printf(" -d debug level\n");
31         printf(" -l logfile\n");
32         printf(" -L libdir\n");
33         exit(0);
34 }
35
36 int main(int argc, char *argv[])
37 {
38         char *p, *u;
39         const char *libd = dyn_LIBDIR;
40         pstring line, wd;
41         int opt;
42         extern char *optarg;
43         extern int optind;
44
45         dbf = x_stdout;
46         smbw_setup_shared();
47
48         while ((opt = getopt(argc, argv, "W:U:R:d:P:l:hL:")) != EOF) {
49                 switch (opt) {
50                 case 'L':
51                         libd = optarg;
52                         break;
53                 case 'W':
54                         smbw_setshared("WORKGROUP", optarg);
55                         break;
56                 case 'l':
57                         smbw_setshared("LOGFILE", optarg);
58                         break;
59                 case 'P':
60                         smbw_setshared("PREFIX", optarg);
61                         break;
62                 case 'd':
63                         smbw_setshared("DEBUG", optarg);
64                         break;
65                 case 'U':
66                         p = strchr_m(optarg,'%');
67                         if (p) {
68                                 *p=0;
69                                 smbw_setshared("PASSWORD",p+1);
70                         }
71                         smbw_setshared("USER", optarg);
72                         break;
73                 case 'R':
74                         smbw_setshared("RESOLVE_ORDER",optarg);
75                         break;
76
77                 case 'h':
78                 default:
79                         smbsh_usage();
80                 }
81         }
82
83
84         if (!smbw_getshared("USER")) {
85                 printf("Username: ");
86                 u = fgets_slash(line, sizeof(line)-1, x_stdin);
87                 smbw_setshared("USER", u);
88         }
89
90         if (!smbw_getshared("PASSWORD")) {
91                 p = getpass("Password: ");
92                 smbw_setshared("PASSWORD", p);
93         }
94
95         setenv("PS1", "smbsh$ ", 1);
96
97         sys_getwd(wd);
98
99         slprintf(line,sizeof(line)-1,"PWD_%d", (int)getpid());
100
101         smbw_setshared(line, wd);
102
103         slprintf(line,sizeof(line)-1,"%s/smbwrapper.so", libd);
104         setenv("LD_PRELOAD", line, 1);
105
106         slprintf(line,sizeof(line)-1,"%s/smbwrapper.32.so", libd);
107
108         if (file_exist(line, NULL)) {
109                 slprintf(line,sizeof(line)-1,"%s/smbwrapper.32.so:DEFAULT", libd);
110                 setenv("_RLD_LIST", line, 1);
111                 slprintf(line,sizeof(line)-1,"%s/smbwrapper.so:DEFAULT", libd);
112                 setenv("_RLDN32_LIST", line, 1);
113         } else {
114                 slprintf(line,sizeof(line)-1,"%s/smbwrapper.so:DEFAULT", libd);
115                 setenv("_RLD_LIST", line, 1);
116         }
117
118         {
119         char *shellpath = getenv("SHELL");
120                 if(shellpath)
121                         execl(shellpath,"smbsh",NULL);
122                 else
123                         execl("/bin/sh","smbsh",NULL);
124         }
125         printf("launch failed!\n");
126         return 1;
127 }