]> git.ipfire.org Git - thirdparty/openssl.git/blob - apps/apps.c
Import of old SSLeay release: SSLeay 0.8.1b
[thirdparty/openssl.git] / apps / apps.c
1 /* apps/apps.c */
2 /* Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com)
3 * All rights reserved.
4 *
5 * This package is an SSL implementation written
6 * by Eric Young (eay@cryptsoft.com).
7 * The implementation was written so as to conform with Netscapes SSL.
8 *
9 * This library is free for commercial and non-commercial use as long as
10 * the following conditions are aheared to. The following conditions
11 * apply to all code found in this distribution, be it the RC4, RSA,
12 * lhash, DES, etc., code; not just the SSL code. The SSL documentation
13 * included with this distribution is covered by the same copyright terms
14 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
15 *
16 * Copyright remains Eric Young's, and as such any Copyright notices in
17 * the code are not to be removed.
18 * If this package is used in a product, Eric Young should be given attribution
19 * as the author of the parts of the library used.
20 * This can be in the form of a textual message at program startup or
21 * in documentation (online or textual) provided with the package.
22 *
23 * Redistribution and use in source and binary forms, with or without
24 * modification, are permitted provided that the following conditions
25 * are met:
26 * 1. Redistributions of source code must retain the copyright
27 * notice, this list of conditions and the following disclaimer.
28 * 2. Redistributions in binary form must reproduce the above copyright
29 * notice, this list of conditions and the following disclaimer in the
30 * documentation and/or other materials provided with the distribution.
31 * 3. All advertising materials mentioning features or use of this software
32 * must display the following acknowledgement:
33 * "This product includes cryptographic software written by
34 * Eric Young (eay@cryptsoft.com)"
35 * The word 'cryptographic' can be left out if the rouines from the library
36 * being used are not cryptographic related :-).
37 * 4. If you include any Windows specific code (or a derivative thereof) from
38 * the apps directory (application code) you must include an acknowledgement:
39 * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
40 *
41 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
42 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
43 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
44 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
45 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
46 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
47 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
48 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
49 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
50 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
51 * SUCH DAMAGE.
52 *
53 * The licence and distribution terms for any publically available version or
54 * derivative of this code cannot be changed. i.e. this code cannot simply be
55 * copied and put under another distribution licence
56 * [including the GNU Public Licence.]
57 */
58
59 #include <stdio.h>
60 #include <stdlib.h>
61 #include <string.h>
62 #include <sys/types.h>
63 #include <sys/stat.h>
64 #define NON_MAIN
65 #include "apps.h"
66 #undef NON_MAIN
67
68 #ifdef WIN16
69 #define APPS_WIN16
70 #ifdef FLAT_BUILD
71 #include "bss_file.c"
72 #else
73 #include "../crypto/bio/bss_file.c"
74 #endif
75 #endif
76
77 #ifndef NOPROTO
78 int app_init(long mesgwin);
79 #else
80 int app_init();
81 #endif
82
83 #ifdef undef /* never finished - probably never will be :-) */
84 int args_from_file(file,argc,argv)
85 char *file;
86 int *argc;
87 char **argv[];
88 {
89 FILE *fp;
90 int num,i;
91 unsigned int len;
92 static char *buf=NULL;
93 static char **arg=NULL;
94 char *p;
95 struct stat stbuf;
96
97 if (stat(file,&stbuf) < 0) return(0);
98
99 fp=fopen(file,"r");
100 if (fp == NULL)
101 return(0);
102
103 *argc=0;
104 *argv=NULL;
105
106 len=(unsigned int)stbuf.st_size;
107 if (buf != NULL) Free(buf);
108 buf=(char *)Malloc(len+1);
109 if (buf == NULL) return(0);
110
111 len=fread(buf,1,len,fp);
112 if (len <= 1) return(0);
113 buf[len]='\0';
114
115 i=0;
116 for (p=buf; *p; p++)
117 if (*p == '\n') i++;
118 if (arg != NULL) Free(arg);
119 arg=(char **)Malloc(sizeof(char *)*(i*2));
120
121 *argv=arg;
122 num=0;
123 p=buf;
124 for (;;)
125 {
126 if (!*p) break;
127 if (*p == '#') /* comment line */
128 {
129 while (*p && (*p != '\n')) p++;
130 continue;
131 }
132 /* else we have a line */
133 *(arg++)=p;
134 num++;
135 while (*p && ((*p != ' ') && (*p != '\t') && (*p != '\n')))
136 p++;
137 if (!*p) break;
138 if (*p == '\n')
139 {
140 *(p++)='\0';
141 continue;
142 }
143 /* else it is a tab or space */
144 p++;
145 while (*p && ((*p == ' ') || (*p == '\t') || (*p == '\n')))
146 p++;
147 if (!*p) break;
148 if (*p == '\n')
149 {
150 p++;
151 continue;
152 }
153 *(arg++)=p++;
154 num++;
155 while (*p && (*p != '\n')) p++;
156 if (!*p) break;
157 /* else *p == '\n' */
158 *(p++)='\0';
159 }
160 *argc=num;
161 return(1);
162 }
163 #endif
164
165 int str2fmt(s)
166 char *s;
167 {
168 if ((*s == 'D') || (*s == 'd'))
169 return(FORMAT_ASN1);
170 else if ((*s == 'T') || (*s == 't'))
171 return(FORMAT_TEXT);
172 else if ((*s == 'P') || (*s == 'p'))
173 return(FORMAT_PEM);
174 else if ((*s == 'N') || (*s == 'n'))
175 return(FORMAT_NETSCAPE);
176 else
177 return(FORMAT_UNDEF);
178 }
179
180 #if defined(MSDOS) || defined(WIN32) || defined(WIN16)
181 void program_name(in,out,size)
182 char *in;
183 char *out;
184 int size;
185 {
186 int i,n;
187 char *p=NULL;
188
189 n=strlen(in);
190 /* find the last '/', '\' or ':' */
191 for (i=n-1; i>0; i--)
192 {
193 if ((in[i] == '/') || (in[i] == '\\') || (in[i] == ':'))
194 {
195 p= &(in[i+1]);
196 break;
197 }
198 }
199 if (p == NULL)
200 p=in;
201 n=strlen(p);
202 /* strip off trailing .exe if present. */
203 if ((n > 4) && (p[n-4] == '.') &&
204 ((p[n-3] == 'e') || (p[n-3] == 'E')) &&
205 ((p[n-2] == 'x') || (p[n-2] == 'X')) &&
206 ((p[n-1] == 'e') || (p[n-1] == 'E')))
207 n-=4;
208 if (n > size-1)
209 n=size-1;
210
211 for (i=0; i<n; i++)
212 {
213 if ((p[i] >= 'A') && (p[i] <= 'Z'))
214 out[i]=p[i]-'A'+'a';
215 else
216 out[i]=p[i];
217 }
218 out[n]='\0';
219 }
220 #else
221 void program_name(in,out,size)
222 char *in;
223 char *out;
224 int size;
225 {
226 char *p;
227
228 p=strrchr(in,'/');
229 if (p != NULL)
230 p++;
231 else
232 p=in;
233 strncpy(out,p,size-1);
234 out[size-1]='\0';
235 }
236 #endif
237
238 #ifdef WIN32
239 int WIN32_rename(from,to)
240 char *from;
241 char *to;
242 {
243 int ret;
244
245 ret=MoveFileEx(from,to,MOVEFILE_REPLACE_EXISTING|MOVEFILE_COPY_ALLOWED);
246 return(ret?0:-1);
247 }
248 #endif
249
250 int chopup_args(arg,buf,argc,argv)
251 ARGS *arg;
252 char *buf;
253 int *argc;
254 char **argv[];
255 {
256 int num,len,i;
257 char *p;
258
259 *argc=0;
260 *argv=NULL;
261
262 len=strlen(buf);
263 i=0;
264 if (arg->count == 0)
265 {
266 arg->count=20;
267 arg->data=(char **)Malloc(sizeof(char *)*arg->count);
268 }
269 for (i=0; i<arg->count; i++)
270 arg->data[i]=NULL;
271
272 num=0;
273 p=buf;
274 for (;;)
275 {
276 /* first scan over white space */
277 if (!*p) break;
278 while (*p && ((*p == ' ') || (*p == '\t') || (*p == '\n')))
279 p++;
280 if (!*p) break;
281
282 /* The start of something good :-) */
283 if (num >= arg->count)
284 {
285 arg->count+=20;
286 arg->data=(char **)Realloc(arg->data,
287 sizeof(char *)*arg->count);
288 if (argc == 0) return(0);
289 }
290 arg->data[num++]=p;
291
292 /* now look for the end of this */
293 if ((*p == '\'') || (*p == '\"')) /* scan for closing quote */
294 {
295 i= *(p++);
296 arg->data[num-1]++; /* jump over quote */
297 while (*p && (*p != i))
298 p++;
299 *p='\0';
300 }
301 else
302 {
303 while (*p && ((*p != ' ') &&
304 (*p != '\t') && (*p != '\n')))
305 p++;
306
307 if (*p == '\0')
308 p--;
309 else
310 *p='\0';
311 }
312 p++;
313 }
314 *argc=num;
315 *argv=arg->data;
316 return(1);
317 }
318
319 #ifndef APP_INIT
320 int app_init(mesgwin)
321 long mesgwin;
322 {
323 return(1);
324 }
325 #endif