summaryrefslogtreecommitdiff
path: root/net/batchftp/patches/patch-aa
blob: 9972a38ecdf9367898e00636b1871d1f197eb4ef (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
$NetBSD: patch-aa,v 1.4 2006/12/18 22:46:53 rillig Exp $

--- batchftp.c.orig	1990-10-23 21:12:42.000000000 +0100
+++ batchftp.c	2006-12-18 23:44:29.000000000 +0100
@@ -5,10 +5,16 @@
   requests, and execute all other ftp commands.  A user has the option to run
   the program in either the background or the foreground. */
 
+#include <limits.h>
+
 #define         _DIR_PATH       200                     /* directory path name length -- can be set to MAXPATHNAMELEN */
 #define         _NULL           0
 #define         _HOSTLEN        MAXHOSTNAMELEN + 80     /* local hostname + domain + network */
+#if defined(NAME_MAX)
+#define         _PATHLEN        _DIR_PATH + NAME_MAX    /* file path length -- directory + filename */
+#else
 #define         _PATHLEN        _DIR_PATH + MAXNAMLEN   /* file path length -- directory + filename */
+#endif
 
 #define         _TRUE            1
 #define         _FALSE           0
@@ -47,7 +53,8 @@
 #include <sys/file.h>
 #include <sys/types.h>
 #include <sys/stat.h>
-#include <sys/dir.h>
+#include <dirent.h>
+#include <string.h>
 
 #include <sys/socket.h>
 #include <netdb.h>
@@ -60,16 +67,18 @@
 
 #include <pwd.h>
 #include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+static void init_sh_script(char *, char *, char *);
+static void init_fscript (char *, char *, char *, FILE **);
+static void start_session (FILE **, char *, char *, char *, char *);
 
 typedef char    boolean;
 
 /* All string functions used in Batchftp are user-defined */
 
-char *strcpy ();
-int  strlen ();
-int   strncmp ();
 char  *substr ();
-char  *strcat ();
 int   strpos ();
 
 int     process_entry ();
@@ -95,12 +104,17 @@ int 	 h_errno;                          
    an error such as "multiply defined variable during compilation or linking,
    delete the above declaration. */
 
+int
 main (argc, argv)
 int     argc;
 char    *argv[];
 {
 	char    msgfile[_PATHLEN];                      /* file containing output for all ftp transfer sessions */
+#if defined(NAME_MAX)
+	char    ftp_script[NAME_MAX + 1];              /* file containing ftp commands */
+#else
 	char    ftp_script[MAXNAMLEN + 1];              /* file containing ftp commands */
+#endif
 	char    user_name[_LOGIN_LENGTH + 1];           /* user's login name */
 	char    pass_word[_PASS_LENGTH + 1];            /* password used for ftp login */
 	char    local_dir[_DIR_PATH];                   /* local directory for ftp session */
@@ -108,8 +122,13 @@ char    *argv[];
 	char    remote_dir[_DIR_PATH];                  /* remote directory for ftp session */
 	char    input_file[_PATHLEN];                   /* user supplied file containing ftp commands and/or shorthand notation */
 	char    remote_host[_HOSTLEN];                  /* remote hostname */
+#if defined(NAME_MAX)
+	char    f_stdout[NAME_MAX + 1];               /* file containing output for a single transfer session */
+	char    sh_name[NAME_MAX + 1];                 /* name of exec'd sh script -- 1 line ftp command */
+#else
 	char    f_stdout[MAXNAMLEN  + 1];               /* file containing output for a single transfer session */
 	char    sh_name[MAXNAMLEN + 1];                 /* name of exec'd sh script -- 1 line ftp command */
+#endif
 	char     linebuf[_LBUF];                        /* one line of user's input file */
 
 	boolean  start_flag = _FALSE;                   /* indicates whether ftp attempt should begin */
@@ -129,7 +148,7 @@ char    *argv[];
 
 
 	parent_pid = (int) getpid();                    /* sprintf does not always support type "long" */
-	getwd(home_dir);
+	getcwd(home_dir,sizeof(home_dir));
 	sprintf(msgfile, "%s/msg%d",home_dir, parent_pid);      /*construct full pathname for ftp output file */
 
 	/* Parse command line switches and assign other arguments */
@@ -242,7 +261,7 @@ char    *remote_host;
 	/* extern int h_errno is global flag defined in <netdb.h> */
 
 	strcpy(temp_host, remote_host);
-	if (inet_addr(remote_host) != -1)               /* check for valid Internet address */
+	if (inet_addr(remote_host) != INADDR_NONE)               /* check for valid Internet address */
 		return(remote_host);
 
 	do {
@@ -307,6 +326,7 @@ char    *local_host;
     the responsibility of the user to enter the proper login
     information in the input file (free-form mode). */
 
+static void
 init_fscript (remote_host, user_name, pass_word, fptr)
 char    *remote_host;
 char    *user_name;
@@ -353,6 +373,7 @@ char    *s;
 /* Init_sh_script creates the one line (not including interpreter) Bourne
    shell script to be exec'd during the ftp session. */
 
+static void
 init_sh_script(f_stdout, ftp_script, sh_name)
 char    *f_stdout;
 char    *ftp_script;
@@ -716,6 +737,7 @@ int     *address_flag;
    ftp command are killed simultaneously.  Otherwise, the child is not
    signalled, and it will terminate naturally. */
 
+static void
 start_ftp (mptr, f_stdout, sh_name, alarm_flag, ftp_script)
 FILE	**mptr;
 char    *f_stdout;
@@ -729,7 +751,7 @@ char	*ftp_script;
 	FILE            *fs_ptr;                /* pointer to f_stdout */
 	FILE            *msg_ptr;               /* pointer to ftp output file */
 	int		monitor_flag;		/* return value of monitor_ftp () */
-	union wait      status;                 /* wait for child to terminate */
+	int             status;                 /* wait for child to terminate */
 	char            *sh_args[3];            /* arguments for execv */
 
 	*alarm_flag = _FALSE;                   /* alarm has not been called */
@@ -755,7 +777,7 @@ char	*ftp_script;
 	sh_args[1] = sh_name;
 	sh_args[2] = 0;
 
-	if ((int) signal(SIGALRM, alarm_handler) == -1) {
+	if (signal(SIGALRM, alarm_handler) == (void *)-1) {
 		fprintf(*mptr, "\nSYSTEM ERROR -- Unable to establish timer");
 		return;
 		}
@@ -944,6 +966,7 @@ unsigned        sleep_time;
    reset. Start_session will not terminate until check_ftp() returns a value
    other than -1 */
 
+static void
 start_session (mptr, f_stdout, sh_name, ftp_script, msgfile)
 FILE    **mptr;
 char    *f_stdout;
@@ -958,6 +981,7 @@ char	*msgfile;
 	int		monitor_flag;			/* return value of monitor_ftp () */
 	int		check_flag;			/* return value of check_ftp () */
 
+	check_flag = 0;		/* XXX: gcc */
 	do {
 		msg_ptr = *mptr;
 		sleep_time = connect_delay(sleep_time);
@@ -986,69 +1010,6 @@ char	*msgfile;
 }
 /*------------------------------------------------------- */
 
-int  strlen (s)
-
-register char  *s;
-{
-     register int   n = 0;
-
-     while (*s++)
-	  ++n;
-
-     return (n);
-}
-/* -------------------------------------------------- */
-
-int  strncmp (s1, s2, n)
-
-register char  *s1, *s2;
-register int   n;
-{
-	  if (n < 1)
-	       return (_INVARG);
-
-     {
-	  register int   char_count = -1;
-
-	  while ((++char_count < n) && (*s1) && (*s2)) {
-	       if (*s1 > *s2)
-		    return (_GREATER);
-
-	       if (*s1++ < *s2++)
-		    return (_LESS);
-	}
-
-	if (char_count == n)
-	    return (_EQUAL);
-
-
-    if (*s1 > *s2)
-	return (_GREATER);
-
-    if (*s1 < *s2)
-	return (_LESS);
-
-     }
-
-     return (_EQUAL);
-}
-
-/*--------------------------------------------------- */
-
-char  *strcpy (s1, s2)
-
-register char  *s1, *s2;
-{
-
-     register char  *ptr;
-
-     ptr = s1;
-     while (*ptr++ = *s2++)
-	  ;
-
-     return (s1);
-}
-/*---------------------------------------------------------- */
 char   *substr (s1, s2)
 
 register char  *s1, *s2;
@@ -1068,20 +1029,6 @@ register char  *s1, *s2;
 }
 /* -------------------------------------------------- */
 
-char  *strcat (s1, s2)
-
-register char   *s1, *s2;
-{
-     register char  *p;
-
-     p = s1;
-     while (*p++)
-	  ;
-
-     --p;
-     strcpy (p, s2);
-     return (s1);
-}
 /*--------------------------------------------------------- */
 
 int   strpos (s, c)