1 /* $NetBSD: cmdtab.c,v 1.50 2008/09/30 03:41:53 lukem Exp $ */
4 * Copyright (c) 1996-2009 The NetBSD Foundation, Inc.
7 * This code is derived from software contributed to The NetBSD Foundation
10 * Redistribution and use in source and binary forms, with or without
11 * modification, are permitted provided that the following conditions
13 * 1. Redistributions of source code must retain the above copyright
14 * notice, this list of conditions and the following disclaimer.
15 * 2. Redistributions in binary form must reproduce the above copyright
16 * notice, this list of conditions and the following disclaimer in the
17 * documentation and/or other materials provided with the distribution.
19 * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
20 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
21 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
22 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
23 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29 * POSSIBILITY OF SUCH DAMAGE.
33 * Copyright (c) 1985, 1989, 1993, 1994
34 * The Regents of the University of California. All rights reserved.
36 * Redistribution and use in source and binary forms, with or without
37 * modification, are permitted provided that the following conditions
39 * 1. Redistributions of source code must retain the above copyright
40 * notice, this list of conditions and the following disclaimer.
41 * 2. Redistributions in binary form must reproduce the above copyright
42 * notice, this list of conditions and the following disclaimer in the
43 * documentation and/or other materials provided with the distribution.
44 * 3. Neither the name of the University nor the names of its contributors
45 * may be used to endorse or promote products derived from this software
46 * without specific prior written permission.
48 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
49 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
50 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
51 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
52 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
53 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
54 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
55 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
56 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
57 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
61 #include <sys/cdefs.h>
64 static char sccsid
[] = "@(#)cmdtab.c 8.4 (Berkeley) 10/9/94";
66 __RCSID("$NetBSD: cmdtab.c,v 1.50 2008/09/30 03:41:53 lukem Exp $");
74 * User FTP -- Command Tables.
77 #define HSTR static const char
80 HSTR accounthelp
[] = "send account command to remote server";
81 HSTR appendhelp
[] = "append to a file";
82 HSTR asciihelp
[] = "set ascii transfer type";
83 HSTR beephelp
[] = "beep when command completed";
84 HSTR binaryhelp
[] = "set binary transfer type";
85 HSTR casehelp
[] = "toggle mget upper/lower case id mapping";
86 HSTR cdhelp
[] = "change remote working directory";
87 HSTR cduphelp
[] = "change remote working directory to parent directory";
88 HSTR chmodhelp
[] = "change file permissions of remote file";
89 HSTR connecthelp
[] = "connect to remote ftp server";
90 HSTR crhelp
[] = "toggle carriage return stripping on ascii gets";
91 HSTR debughelp
[] = "toggle/set debugging mode";
92 HSTR deletehelp
[] = "delete remote file";
93 HSTR disconhelp
[] = "terminate ftp session";
94 HSTR domachelp
[] = "execute macro";
95 HSTR edithelp
[] = "toggle command line editing";
96 HSTR epsvhelp
[] = "toggle use of EPSV/EPRT on both IPv4 and IPV6 ftp";
97 HSTR epsv4help
[] = "toggle use of EPSV/EPRT on IPv4 ftp";
98 HSTR epsv6help
[] = "toggle use of EPSV/EPRT on IPv6 ftp";
99 HSTR feathelp
[] = "show FEATures supported by remote system";
100 HSTR formhelp
[] = "set file transfer format";
101 HSTR gatehelp
[] = "toggle gate-ftp; specify host[:port] to change proxy";
102 HSTR globhelp
[] = "toggle metacharacter expansion of local file names";
103 HSTR hashhelp
[] = "toggle printing `#' marks; specify number to set size";
104 HSTR helphelp
[] = "print local help information";
105 HSTR idlehelp
[] = "get (set) idle timer on remote side";
106 HSTR lcdhelp
[] = "change local working directory";
107 HSTR lpagehelp
[] = "view a local file through your pager";
108 HSTR lpwdhelp
[] = "print local working directory";
109 HSTR lshelp
[] = "list contents of remote path";
110 HSTR macdefhelp
[] = "define a macro";
111 HSTR mdeletehelp
[] = "delete multiple files";
112 HSTR mgethelp
[] = "get multiple files";
113 HSTR mregethelp
[] = "get multiple files restarting at end of local file";
114 HSTR fgethelp
[] = "get files using a localfile as a source of names";
115 HSTR mkdirhelp
[] = "make directory on the remote machine";
116 HSTR mlshelp
[] = "list contents of multiple remote directories";
117 HSTR mlsdhelp
[] = "list contents of remote directory in a machine "
119 HSTR mlsthelp
[] = "list remote path in a machine parsable form";
120 HSTR modehelp
[] = "set file transfer mode";
121 HSTR modtimehelp
[] = "show last modification time of remote file";
122 HSTR mputhelp
[] = "send multiple files";
123 HSTR newerhelp
[] = "get file if remote file is newer than local file ";
124 HSTR nmaphelp
[] = "set templates for default file name mapping";
125 HSTR ntranshelp
[] = "set translation table for default file name mapping";
126 HSTR optshelp
[] = "show or set options for remote commands";
127 HSTR pagehelp
[] = "view a remote file through your pager";
128 HSTR passivehelp
[] = "toggle use of passive transfer mode";
129 HSTR plshelp
[] = "list contents of remote path through your pager";
130 HSTR pmlsdhelp
[] = "list contents of remote directory in a machine "
131 "parsable form through your pager";
132 HSTR porthelp
[] = "toggle use of PORT/LPRT cmd for each data connection";
133 HSTR preservehelp
[] ="toggle preservation of modification time of "
135 HSTR progresshelp
[] ="toggle transfer progress meter";
136 HSTR prompthelp
[] = "force interactive prompting on multiple commands";
137 HSTR proxyhelp
[] = "issue command on alternate connection";
138 HSTR pwdhelp
[] = "print working directory on remote machine";
139 HSTR quithelp
[] = "terminate ftp session and exit";
140 HSTR quotehelp
[] = "send arbitrary ftp command";
141 HSTR ratehelp
[] = "set transfer rate limit (in bytes/second)";
142 HSTR receivehelp
[] = "receive file";
143 HSTR regethelp
[] = "get file restarting at end of local file";
144 HSTR remotehelp
[] = "get help from remote server";
145 HSTR renamehelp
[] = "rename file";
146 HSTR resethelp
[] = "clear queued command replies";
147 HSTR restarthelp
[]= "restart file transfer at bytecount";
148 HSTR rmdirhelp
[] = "remove directory on the remote machine";
149 HSTR rmtstatushelp
[]="show status of remote machine";
150 HSTR runiquehelp
[] = "toggle store unique for local files";
151 HSTR sendhelp
[] = "send one file";
152 HSTR sethelp
[] = "set or display options";
153 HSTR shellhelp
[] = "escape to the shell";
154 HSTR sitehelp
[] = "send site specific command to remote server\n"
155 "\t\tTry \"rhelp site\" or \"site help\" "
156 "for more information";
157 HSTR sizecmdhelp
[] = "show size of remote file";
158 HSTR statushelp
[] = "show current status";
159 HSTR structhelp
[] = "set file transfer structure";
160 HSTR suniquehelp
[] = "toggle store unique on remote machine";
161 HSTR systemhelp
[] = "show remote system type";
162 HSTR tenexhelp
[] = "set tenex file transfer type";
163 HSTR tracehelp
[] = "toggle packet tracing";
164 HSTR typehelp
[] = "set file transfer type";
165 HSTR umaskhelp
[] = "get (set) umask on remote side";
166 HSTR unsethelp
[] = "unset an option";
167 HSTR usagehelp
[] = "show command usage";
168 HSTR userhelp
[] = "send new user information";
169 HSTR verbosehelp
[] = "toggle verbose mode";
170 HSTR xferbufhelp
[] = "set socket send/receive buffer size";
181 #ifdef NO_EDITCOMPLETE
184 #else /* !NO_EDITCOMPLETE */
187 #endif /* !NO_EDITCOMPLETE */
189 struct cmd cmdtab
[] = {
190 { "!", H(shellhelp
), 0, 0, 0, CMPL0 shell
},
191 { "$", H(domachelp
), 1, 0, 0, CMPL0 domacro
},
192 { "account", H(accounthelp
), 0, 1, 1, CMPL0 account
},
193 { "append", H(appendhelp
), 1, 1, 1, CMPL(lr
) put
},
194 { "ascii", H(asciihelp
), 0, 1, 1, CMPL0 setascii
},
195 { "bell", H(beephelp
), 0, 0, 0, CMPL0 setbell
},
196 { "binary", H(binaryhelp
), 0, 1, 1, CMPL0 setbinary
},
197 { "bye", H(quithelp
), 0, 0, 0, CMPL0 quit
},
198 { "case", H(casehelp
), 0, 0, 1, CMPL0 setcase
},
199 { "cd", H(cdhelp
), 0, 1, 1, CMPL(r
) cd
},
200 { "cdup", H(cduphelp
), 0, 1, 1, CMPL0 cdup
},
201 { "chmod", H(chmodhelp
), 0, 1, 1, CMPL(nr
) do_chmod
},
202 { "close", H(disconhelp
), 0, 1, 1, CMPL0 disconnect
},
203 { "cr", H(crhelp
), 0, 0, 0, CMPL0 setcr
},
204 { "debug", H(debughelp
), 0, 0, 0, CMPL0 setdebug
},
205 { "delete", H(deletehelp
), 0, 1, 1, CMPL(r
) delete },
206 { "dir", H(lshelp
), 1, 1, 1, CMPL(rl
) ls
},
207 { "disconnect", H(disconhelp
), 0, 1, 1, CMPL0 disconnect
},
208 { "edit", H(edithelp
), 0, 0, 0, CMPL0 setedit
},
209 { "epsv", H(epsvhelp
), 0, 0, 0, CMPL0 setepsv
},
210 { "epsv4", H(epsv4help
), 0, 0, 0, CMPL0 setepsv4
},
211 { "epsv6", H(epsv6help
), 0, 0, 0, CMPL0 setepsv6
},
212 { "exit", H(quithelp
), 0, 0, 0, CMPL0 quit
},
213 { "features", H(feathelp
), 0, 1, 1, CMPL0 feat
},
214 { "fget", H(fgethelp
), 1, 1, 1, CMPL(l
) fget
},
215 { "form", H(formhelp
), 0, 1, 1, CMPL0 setform
},
216 { "ftp", H(connecthelp
), 0, 0, 1, CMPL0 setpeer
},
217 { "gate", H(gatehelp
), 0, 0, 0, CMPL0 setgate
},
218 { "get", H(receivehelp
), 1, 1, 1, CMPL(rl
) get
},
219 { "glob", H(globhelp
), 0, 0, 0, CMPL0 setglob
},
220 { "hash", H(hashhelp
), 0, 0, 0, CMPL0 sethash
},
221 { "help", H(helphelp
), 0, 0, 1, CMPL(C
) help
},
222 { "idle", H(idlehelp
), 0, 1, 1, CMPL0 idlecmd
},
223 { "image", H(binaryhelp
), 0, 1, 1, CMPL0 setbinary
},
224 { "lcd", H(lcdhelp
), 0, 0, 0, CMPL(l
) lcd
},
225 { "less", H(pagehelp
), 1, 1, 1, CMPL(r
) page
},
226 { "lpage", H(lpagehelp
), 0, 0, 0, CMPL(l
) lpage
},
227 { "lpwd", H(lpwdhelp
), 0, 0, 0, CMPL0 lpwd
},
228 { "ls", H(lshelp
), 1, 1, 1, CMPL(rl
) ls
},
229 { "macdef", H(macdefhelp
), 0, 0, 0, CMPL0 macdef
},
230 { "mdelete", H(mdeletehelp
), 1, 1, 1, CMPL(R
) mdelete
},
231 { "mdir", H(mlshelp
), 1, 1, 1, CMPL(R
) mls
},
232 { "mget", H(mgethelp
), 1, 1, 1, CMPL(R
) mget
},
233 { "mkdir", H(mkdirhelp
), 0, 1, 1, CMPL(r
) makedir
},
234 { "mls", H(mlshelp
), 1, 1, 1, CMPL(R
) mls
},
235 { "mlsd", H(mlsdhelp
), 1, 1, 1, CMPL(r
) ls
},
236 { "mlst", H(mlsthelp
), 1, 1, 1, CMPL(r
) mlst
},
237 { "mode", H(modehelp
), 0, 1, 1, CMPL0 setftmode
},
238 { "modtime", H(modtimehelp
), 0, 1, 1, CMPL(r
) modtime
},
239 { "more", H(pagehelp
), 1, 1, 1, CMPL(r
) page
},
240 { "mput", H(mputhelp
), 1, 1, 1, CMPL(L
) mput
},
241 { "mreget", H(mregethelp
), 1, 1, 1, CMPL(R
) mget
},
242 { "msend", H(mputhelp
), 1, 1, 1, CMPL(L
) mput
},
243 { "newer", H(newerhelp
), 1, 1, 1, CMPL(r
) newer
},
244 { "nlist", H(lshelp
), 1, 1, 1, CMPL(rl
) ls
},
245 { "nmap", H(nmaphelp
), 0, 0, 1, CMPL0 setnmap
},
246 { "ntrans", H(ntranshelp
), 0, 0, 1, CMPL0 setntrans
},
247 { "open", H(connecthelp
), 0, 0, 1, CMPL0 setpeer
},
248 { "page", H(pagehelp
), 1, 1, 1, CMPL(r
) page
},
249 { "passive", H(passivehelp
), 0, 0, 0, CMPL0 setpassive
},
250 { "pdir", H(plshelp
), 1, 1, 1, CMPL(r
) ls
},
251 { "pls", H(plshelp
), 1, 1, 1, CMPL(r
) ls
},
252 { "pmlsd", H(pmlsdhelp
), 1, 1, 1, CMPL(r
) ls
},
253 { "preserve", H(preservehelp
),0, 0, 0, CMPL0 setpreserve
},
254 { "progress", H(progresshelp
),0, 0, 0, CMPL0 setprogress
},
255 { "prompt", H(prompthelp
), 0, 0, 0, CMPL0 setprompt
},
256 { "proxy", H(proxyhelp
), 0, 0, 1, CMPL(c
) doproxy
},
257 { "put", H(sendhelp
), 1, 1, 1, CMPL(lr
) put
},
258 { "pwd", H(pwdhelp
), 0, 1, 1, CMPL0 pwd
},
259 { "quit", H(quithelp
), 0, 0, 0, CMPL0 quit
},
260 { "quote", H(quotehelp
), 1, 1, 1, CMPL0 quote
},
261 { "rate", H(ratehelp
), 0, 0, 0, CMPL0 setrate
},
262 { "rcvbuf", H(xferbufhelp
), 0, 0, 0, CMPL0 setxferbuf
},
263 { "recv", H(receivehelp
), 1, 1, 1, CMPL(rl
) get
},
264 { "reget", H(regethelp
), 1, 1, 1, CMPL(rl
) reget
},
265 { "remopts", H(optshelp
), 0, 1, 1, CMPL0 opts
},
266 { "rename", H(renamehelp
), 0, 1, 1, CMPL(rr
) renamefile
},
267 { "reset", H(resethelp
), 0, 1, 1, CMPL0 reset
},
268 { "restart", H(restarthelp
), 1, 1, 1, CMPL0 restart
},
269 { "rhelp", H(remotehelp
), 0, 1, 1, CMPL0 rmthelp
},
270 { "rmdir", H(rmdirhelp
), 0, 1, 1, CMPL(r
) removedir
},
271 { "rstatus", H(rmtstatushelp
),0, 1, 1, CMPL(r
) rmtstatus
},
272 { "runique", H(runiquehelp
), 0, 0, 1, CMPL0 setrunique
},
273 { "send", H(sendhelp
), 1, 1, 1, CMPL(lr
) put
},
274 { "sendport", H(porthelp
), 0, 0, 0, CMPL0 setport
},
275 { "set", H(sethelp
), 0, 0, 0, CMPL(o
) setoption
},
276 { "site", H(sitehelp
), 0, 1, 1, CMPL0 site
},
277 { "size", H(sizecmdhelp
), 1, 1, 1, CMPL(r
) sizecmd
},
278 { "sndbuf", H(xferbufhelp
), 0, 0, 0, CMPL0 setxferbuf
},
279 { "status", H(statushelp
), 0, 0, 1, CMPL0 status
},
280 { "struct", H(structhelp
), 0, 1, 1, CMPL0 setstruct
},
281 { "sunique", H(suniquehelp
), 0, 0, 1, CMPL0 setsunique
},
282 { "system", H(systemhelp
), 0, 1, 1, CMPL0 syst
},
283 { "tenex", H(tenexhelp
), 0, 1, 1, CMPL0 settenex
},
284 { "throttle", H(ratehelp
), 0, 0, 0, CMPL0 setrate
},
285 { "trace", H(tracehelp
), 0, 0, 0, CMPL0 settrace
},
286 { "type", H(typehelp
), 0, 1, 1, CMPL0 settype
},
287 { "umask", H(umaskhelp
), 0, 1, 1, CMPL0 do_umask
},
288 { "unset", H(unsethelp
), 0, 0, 0, CMPL(o
) unsetoption
},
289 { "usage", H(usagehelp
), 0, 0, 1, CMPL(C
) help
},
290 { "user", H(userhelp
), 0, 1, 1, CMPL0 user
},
291 { "verbose", H(verbosehelp
), 0, 0, 0, CMPL0 setverbose
},
292 { "xferbuf", H(xferbufhelp
), 0, 0, 0, CMPL0 setxferbuf
},
293 { "?", H(helphelp
), 0, 0, 1, CMPL(C
) help
},
294 { NULL
, NULL
, 0, 0, 0, CMPL0 NULL
},
297 struct option optiontab
[] = {
298 { "anonpass", NULL
},
299 { "ftp_proxy", NULL
},
300 { "http_proxy", NULL
},
301 { "no_proxy", NULL
},