Commit Graph

74 Commits

Author SHA1 Message Date
Frank Kühndel
529402f597 shell/shell.c: Fix illegal string copy
This is an illegal use of strcpy() because one is not allowed to
use this function with overlapping source and destination buffers;
whereas memmove() is explicitly designed to handle such cases.

The copiler warning was:

../../../cpukit/libmisc/shell/shell.c:626:13: warning:
'strcpy' accessing between 1 and 2147483645 bytes at offsets
0 and [1, 2147483647] may overlap up to 2147483644 bytes at
offset [1, 2147483644] [-Wrestrict]
2020-10-15 19:14:48 +02:00
Frank Kühndel
2361b2c8cb shell/shell.c: Fix an implicit type cast
With some compiler warnings enabled, the implicit cast may trigger
a compiler warning. The explicit cast avoids this.
2020-10-15 19:12:15 +02:00
Frank Kühndel
ffc928b9a2 Fixing bug in line editing of the shell with CTRL-U.
This patch fixes a tiny bug in the command line editing of the RTEMS shell.
Typing CTRL-U in the shell should remove all characters left of the cursor.
After pressing CTRL-U, the current implementation does wrongly place the cursor
at the end of the line instead at its beginning.

To reproduce the bug, start the shell and type 'abc123' (no <RETURN>):

> ~/src/rtems $ qemu-system-arm -net none -nographic -M realview-pbx-a9 \
  -m 256M -kernel build/arm/realview_pbx_a9_qemu/testsuites/libtests/dl10.exe
> *** BEGIN OF TEST libdl (RTL) 10 ***
> *** TEST VERSION: 6.0.0.d9bdf166644f612dd628fe4951c12c6f8e94ba5f
> *** TEST STATE: USER_INPUT
> *** TEST BUILD: RTEMS_DEBUG RTEMS_NETWORKING RTEMS_POSIX_API RTEMS_SMP
> *** TEST TOOLS: 10.2.1 20200904 \
  (RTEMS 6, RSB 31f936a7b74d60bda609a9960c6e1a705ba54974, Newlib a0d7982)
> RTL (libdl) commands: dl, rtl
>
> RTEMS Shell on /dev/foobar. Use 'help' to list commands.
> SHLL [/] # abc123

Then move the cursor onto the '1' by hitting three times the <ARROW-LEFT> key.
Next type <CTRL>-U:

> SHLL [/] # 123

Note that the cursor is at the end of the line (after '3') instead of correctly
at the beginning (on the '1'), now.

Continuing typing 'echo ' incorrectly results in the output:

> SHLL [/] # 123echo 123

The patch changes this behavior so that the cursor in the second last step will
be on the '1' and typing 'echo ' will then correctly reflected as:

> SHLL [/] # echo 123

Close #4097.
2020-09-28 14:16:06 +02:00
Chris Johns
20b1bdba72 shell: Only clear std handles when the shell task exits
Clearing the std file handles when the main loop exited crashes
telnetd as it reuses its session threads.
2020-08-08 18:12:26 +10:00
Sebastian Huber
1af8e45bb7 rtems: Add rtems_get_copyright_notice()
Update #3973.
2020-05-06 07:47:34 +02:00
Sebastian Huber
4b9b6ddb9f Use rtems_get_version_string()
Update #3970.
2020-05-06 07:39:09 +02:00
Chris Johns
d007cc2cee libmisc/shell: Fix the handling of joel scripts in telnet
- Fix the passing of std[in/out] to child threads
- Fix deleting of managed memory in the key destructor
- Only set the key in the main loop thread
- Only allocate a shell env outside of the main loop
- Fix memory leak if the task start fails
- Remove error level from shell env, it cannot be returned this way. Add
  exit_code but the API is broken so it cannot be returned.

Closes #3859
2020-04-15 08:30:30 +10:00
Sebastian Huber
cc060f0b35 shell: Avoid rtems_error()
Do not use the rtems_error() function since this function pulls in
exit() and abort().  The abort() function pulls in raise() which pulls
in the whole POSIX signals support.  This change saves about 16KiB of
text/rodata on ARM Thumb-2 systems.
2019-05-14 11:11:51 +02:00
Sebastian Huber
3fe215502a Remove superfluous <rtems/system.h> includes 2019-03-14 13:13:27 +01:00
Sebastian Huber
f004b2b8dc Use rtems_task_exit()
Update #3530.
Update #3533.
2018-10-02 10:22:15 +02:00
Sebastian Huber
2cec5acdf2 shell: Fix rtems_shell_init_env()
Do not discard a user provided task name in rtems_shell_init_env().
2018-03-12 11:24:44 +01:00
Chris Johns
2465c0130b libmisc/shell: Make some internal shell functions public.
- Add 'rtems_shell_init_environment()' so a user can create the
  shell environment without needing to run a shell.
- Move 'rtems_shell_lookup_topic', 'rtems_shell_can_see_cmd',
  and 'rtems_shell_execute_cmd' from the internal interface to
  the public interface.

Closes #3096.
2017-08-14 14:50:55 +10:00
Sebastian Huber
a2097c56ad shell: Avoid __DATE__ and adjust welcome message
The use of __DATE__ prevents reproducible builds.
2014-12-05 13:09:11 +01:00
Sebastian Huber
ffd5285844 shell: Inherit UID and GID if no login check
Use the UID and GID of the executing user for the real and effective UID
and GID of the shell task in case no login check is present.  This
prevents privilege escalation via shell scripts.
2014-11-20 10:30:25 +01:00
Sebastian Huber
5c141d6a25 shell: Add and use rtems_shell_execute_cmd() 2014-11-20 10:30:25 +01:00
Sebastian Huber
7840b66f74 shell: Add initial commands and aliases only once
Make tables read-only.
2014-11-20 10:30:25 +01:00
Sebastian Huber
bac3d6df35 shell: Rename HALT to SHUTDOWN command
Use a normal command for shutdown via exit().
2014-11-20 10:30:24 +01:00
Sebastian Huber
fa028bb2ef shell: Do chroot() after successful login 2014-11-20 10:30:24 +01:00
Sebastian Huber
373ccbb938 shell: Use exiting once initialization
Avoid TOCTOU issues.  Avoid pull in of global buffers.
2014-11-20 10:30:24 +01:00
Joel Sherrill
06ac8b7122 shell.c: Add cast to match printf() expectations for width specifier 2014-09-04 09:08:05 -05:00
Chris Johns
bb581906a6 shell: Add rtems_shell_dup_current_env to get a default env.
Remove rtems_current_shell_env as this is dangerous because
the env can be NULL if used outside of a valid shell with the
POSIX key to an env set up.

Clean up the usage of rtems_current_shell_env.
2014-06-04 22:32:55 +10:00
Sebastian Huber
5f0ab5cfb5 shell: Make rtems_global_shell_env public
Provide rtems_global_shell_env as a public read-only variable for
backward compatibility.
2014-05-28 17:39:27 +02:00
Chris Johns
c49985691f Change all references of rtems.com to rtems.org. 2014-03-21 08:10:47 +11:00
Christian Mauderer
6cd4a5ca2e cpukit/shell: Replace task variables with posix keys.
Use posix keys for current shell environment instead of task variables. With
this patch the shell needs one posix-key and one posix-key-value-pair
configured.

Update documentation for the shell.

Adapt samples/fileio:
- Add necessary objects.
- Add login function and custom device name for better testing of the shell.
2014-03-20 09:10:26 +01:00
Ric Claus
22e983771f Support additional shell keystrokes.
Emacs style keystrokes Ctrl-B, F, G, P, N, T and U are now supported as they
are in bash.  Also, commands invoked from the history are moved up in the
history buffer when they are executed.  Thus, the most recently executed
command is always just one up-arrow (or Ctrl-P) keystroke away.
2012-12-01 09:03:54 +01:00
Joel Sherrill
9b4422a251 Remove All CVS Id Strings Possible Using a Script
Script does what is expected and tries to do it as
smartly as possible.

+ remove occurrences of two blank comment lines
  next to each other after Id string line removed.
+ remove entire comment blocks which only exited to
  contain CVS Ids
+ If the processing left a blank line at the top of
  a file, it was removed.
2012-05-11 08:44:13 -05:00
Ralf Corsepius
94547d1d8b 2011-12-04 Ralf Corsépius <ralf.corsepius@rtems.org>
* libmisc/shell/print-ls.c: Include "internal.h".
	* libmisc/shell/pwcache.c: Make user_from_uid static.
	* libmisc/shell/shell.c: Make rtems_shell_init_env,
	rtems_shell_env_free, rtems_shell_line_editor,
	rtems_shell_init_issue, rtems_shell_task static.
	* libmisc/shell/shell_cmdset.c: Make rtems_shell_add_topic static.
	* libmisc/shell/shell_makeargs.c: Include <rtems/shell.h>.
	* libmisc/shell/write_file.c: Include <rtems/shell.h>.
2011-12-04 11:57:51 +00:00
Joel Sherrill
bab5c5fac0 2010-03-12 Joel Sherrill <joel.sherrill@oarcorp.com>
* ftpd/ftpd.c, httpd/asp.c, httpd/ejparse.c, httpd/emfdb.c,
	httpd/misc.c, httpd/um.c, httpd/webs.c, httpd/websuemf.c,
	libfs/src/dosfs/msdos_dir.c, libfs/src/dosfs/msdos_format.c,
	libfs/src/dosfs/msdos_misc.c, libfs/src/nfsclient/src/nfs.c,
	libmisc/capture/capture-cli.c, libmisc/monitor/mon-network.c,
	libmisc/shell/hexdump-odsyntax.c, libmisc/shell/main_ifconfig.c,
	libmisc/shell/shell.c, libmisc/shell/shell_makeargs.c,
	libmisc/uuid/parse.c, libnetworking/libc/gethostbydns.c,
	libnetworking/libc/gethostbyht.c, libnetworking/libc/gethostnamadr.c,
	libnetworking/libc/getnetnamadr.c, libnetworking/libc/inet_addr.c,
	libnetworking/libc/inet_network.c, libnetworking/libc/res_debug.c,
	libnetworking/libc/res_init.c, libnetworking/libc/res_query.c,
	libnetworking/rtems/rtems_mii_ioctl.c,
	score/src/objectgetnameasstring.c: Readdress use of ctype methods per
	recommendation from D.J. Delorie on the newlib mailing list. We
	should pass an unsigned char into these methods.
2010-03-12 16:26:16 +00:00
Joel Sherrill
8c161f958f 2010-01-20 Joel Sherrill <joel.sherrill@oarcorp.com>
Coverity Id 3
	* libmisc/shell/shell.c: Remove dead code path and fix warning.
2010-01-20 15:20:29 +00:00
Thomas Doerfler
8bca4fcaa4 Added format string to fprintf(). 2009-11-30 13:24:59 +00:00
Joel Sherrill
13c37ad39a 2009-11-23 Joel Sherrill <joel.sherrill@oarcorp.com>
* libmisc/shell/shell.c: Always duplicate the environment passed to us
	because we will delete it when the shell exits. If we do not
	duplicate it, we could end up freeing memory which was not allocated
	from the heap or double freeing it.
2009-11-23 21:56:50 +00:00
Joel Sherrill
6aa8b5132d 2009-05-03 Joel Sherrill <joel.sherrill@oarcorp.com>
* libmisc/shell/shell.c, libmisc/stackchk/check.c: Eliminate warnings.
2009-05-03 23:57:19 +00:00
Thomas Doerfler
cbd1e8799f adapt copyright statements 2009-04-14 08:50:03 +00:00
Joel Sherrill
8a775c27fc 2009-03-27 Sebastian Huber <sebastian.huber@embedded-brains.de>
* Makefile.am, preinstall.am, libmisc/Makefile.am,
	libmisc/shell/shell.c, libmisc/shell/shell.h, telnetd/check_passwd.c,
	telnetd/telnetd.c, telnetd/telnetd.h:
	Generalized login check.
	* libmisc/shell/login.h, libmisc/shell/login_check.c,
	libmisc/shell/login_prompt.c: New files.
	* libmisc/stackchk/check.c: Changed format for blown stack message.
	* libcsupport/src/libio_sockets.c: Removed superfluous cast.
	* libnetworking/rtems/ftpfs.h: Documentation.
2009-03-27 13:45:31 +00:00
Thomas Doerfler
06f8e558b7 * libmisc/shell/shell.c, libmisc/shell/shell.h: Changed type for
boolean values from 'int' to 'bool'.  Added option 'login' to enable or
	disable a login prompt.  Changed intialization of global shell
	environment to static initialization.  Changed stack size type to
	'size_t' conforming to classic API.

	* libmisc/shell/shellconfig.h: Fixed some typos.
2009-02-27 11:03:57 +00:00
Chris Johns
731186395a 2009-01-23 Chris Johns <chrisj@rtems.org>
* libmisc/shell/shell.c: Fix command line parsing of valid
	characters.
2009-01-23 00:12:31 +00:00
Joel Sherrill
e41eaa881a 2008-12-18 Sebastian Huber <sebastian.huber@embedded-brains.de>
* libmisc/serdbg/termios_printk.c, libmisc/serdbg/termios_printk.h:
	Fixed incompatible return value.

	* libmisc/cpuuse/cpuusagereport.c: Changed output format.

	* libmisc/Makefile.am, libmisc/monitor/mon-editor.c: New file.

	* libmisc/capture/capture-cli.c, libmisc/monitor/mon-command.c,
	libmisc/monitor/mon-monitor.c, libmisc/monitor/mon-object.c,
	libmisc/monitor/mon-prmisc.c, libmisc/monitor/mon-symbols.c,
	libmisc/monitor/monitor.h, libmisc/shell/cat_file.c,
	libmisc/shell/cmds.c, libmisc/shell/internal.h,
	libmisc/shell/main_help.c, libmisc/shell/shell.c,
	libmisc/shell/shell.h, libmisc/shell/shell_cmdset.c,
	libmisc/shell/shell_getchar.c, libmisc/shell/str2int.c: Various global
	data is now read only.  Added 'const' qualifier to many pointer
	parameters.  It is no longer possible to remove monitor commands.
	Moved monitor line editor into a separate file to avoid unnecessary
	dependencies.
2008-12-18 15:25:27 +00:00
Joel Sherrill
1fae7b43d7 2008-10-15 Joel Sherrill <joel.sherrill@oarcorp.com>
PR 1331/networking
	* libmisc/shell/shell.c, telnetd/check_passwd.c, telnetd/telnetd.c,
	telnetd/telnetd.h: Improve comments and explanation of options to
	rtems_telnetd_initialize. Add extra newline to login sequence from
	shell.
2008-10-15 17:37:16 +00:00
Joel Sherrill
ff9059586c 2008-09-03 Cindy Cicalese <cicalese@mitre.org>
* libmisc/shell/shell.c: FALSE accidentally changed to true in switch
	to bool type.
2008-09-03 18:57:51 +00:00
Ralf Corsepius
11672356e7 Convert to using "bool". 2008-09-01 11:28:56 +00:00
Joel Sherrill
f3db4ac83a 2008-08-27 Joel Sherrill <joel.sherrill@OARcorp.com>
* libmisc/Makefile.am, libmisc/shell/shell.c, libmisc/shell/shell.h:
	Split out rtems_shell_get_prompt() so it can be overridden by the
	user.
	* libmisc/shell/shell_getprompt.c: New file.
2008-08-27 12:48:41 +00:00
Chris Johns
3899a5379f 2008-07-29 Chris Johns <chrisj@rtems.org>
* libblock/Makefile.am: Removed src/show_bdbuf.c.

	* libblock/src/show_bdbuf.c: Removed.

	* libblock/include/rtems/bdbuf.h, cpukit/libblock/src/bdbuf.c:
	Rewritten the bdbuf code. Remove pre-emption disable, score
	access, fixed many bugs and increased performance.

	* libblock/include/rtems/blkdev.h: Added
	RTEMS_BLKDEV_CAPABILITIES block device request. Cleaned up
	comments. Added block and user fields to the sg buffer
	request. Move to rtems_* namespace.

	* libblock/include/rtems/diskdevs.h,
	cpukit/libblock/src/diskdevs.c: Move to rtems_* namespace. Add a
	capabilities field for drivers. Change rtems_disk_lookup to
	rtems_disk_obtain to match the release call. You do not lookup and
	release a disk, you obtain and release a disk.

	* libblock/include/rtems/ide_part_table.h,
	libblock/include/rtems/ramdisk.h, libblock/src/ide_part_table.c:
	Move to rtems_* namespace.

	* libblock/include/rtems/nvdisk.h: Formatting change.

	* libblock/src/blkdev.c: Move to rtems_* namespace. Change
	rtems_disk_lookup to rtems_disk_obtain

	* libblock/src/flashdisk.c: Move to rtems_* namespace. Use the new
	support for the block number in the scatter/grather request
	struct. This allows non-continuous buffer requests for those
	drivers that can support increasing performance.

	* libblock/src/nvdisk.c: Move to rtems_* namespace. Removed
	warnings. Added better error checking. Fixed some comments.

	* libblock/src/ramdisk.c: Move to rtems_* namespace. Added some
	trace functions to help debugging upper layers. Use the new
	support for the block number in the scatter/grather request
	struct. This allows non-continuous buffer requests for those
	drivers that can support increasing performance.

	* libfs/src/dosfs/fat.c, libfs/src/dosfs/fat.h: Use new chains
	API. Removed temporary hack and changed
	set_errno_and_return_minus_one to
	rtems_set_errno_and_return_minus_one. Move fat_buf_access from
	header and stopped it being inlined. Updated to libblock changes.

	* libfs/src/dosfs/fat_fat_operations.c,
	libfs/src/dosfs/fat_file.c, libfs/src/dosfs/msdos_create.c,
	libfs/src/dosfs/msdos_dir.c, libfs/src/dosfs/msdos_eval.c,
	libfs/src/dosfs/msdos_file.c, libfs/src/dosfs/msdos_format.c,
	libfs/src/dosfs/msdos_free.c, libfs/src/dosfs/msdos_initsupp.c,
	libfs/src/dosfs/msdos_misc.c, libfs/src/dosfs/msdos_mknod.c: Use
	new chains API. Removed temporary hack and changed
	set_errno_and_return_minus_one to
	rtems_set_errno_and_return_minus_one. Updated to libblock changes.

	* libmisc/Makefile.am: Add new ls and rm command files.

	* libmisc/shell/cmp-ls.c, libmisc/shell/extern-ls.h,
	libmisc/shell/filemode.c, libmisc/shell/print-ls.c,
	libmisc/shell/pwcache.c, libmisc/shell/utils-ls.c,
	libmisc/shell/vis.c, shell/vis.h: New.

	* libmisc/shell/extern-cp.h, libmisc/shell/main_cp.c,
	libmisc/shell/utils-cp.c: Fixed the usage call bug.

	* libmisc/shell/main_blksync.c: Updated to the new block IO ioctl
	command.

	* libmisc/shell/main_ls.c, libmisc/shell/main_rm.c: Updated to BSD
	commands with more features.

	* score/src/coremutex.c: Fix the strick order mutex code.

	* libmisc/shell/shell.c: Change shell tasks mode to be timeslice
	and no ASR.

	* sapi/include/confdefs.h: Change ata_driver_task_priority to
	rtems_ata_driver_task_priority. Add the new BD buf cache
	parameters with defaults.

	* score/src/interr.c: Do not return if the CPU halt call returns.
2008-07-29 02:21:15 +00:00
Joel Sherrill
798ff5a8ea 2008-07-16 Joel Sherrill <joel.sherrill@oarcorp.com>
* libmisc/shell/shell.c, libmisc/shell/shell.h: New argument sequence
	for rtems_shell_init(). This makes it possible to run the shell
	forever or invoke it from a program as a subroutine, have a user
	enter commands, and wait for it to exit.
2008-07-16 17:17:29 +00:00
Thomas Doerfler
8084ce80fb Restore terminal settings on exit. 2008-07-10 06:04:19 +00:00
Joel Sherrill
7c4cdeb9ea 2008-05-27 Joel Sherrill <joel.sherrill@oarcorp.com>
* libmisc/shell/shell.c: Minor change so dropping connection during
	login prompt results in connection still being available.
2008-05-27 16:43:24 +00:00
Chris Johns
55c64fc9cd 2008-04-12 Chris Johns <chrisj@rtems.org>
* libmisc/shell/shell.c, libmisc/shell/shell.h,
	libmisc/shell/shell_script.c: Add support to echo the commands to
	stdout. This is useful with the -v script option to show commands
	as the run. Also added support to chdir to the directory the task
	invoking the script is in.
	* libmisc/shell/extern-cp.h, libmisc/shell/main_cp.c,
	libmisc/shell/utils-cp.c: Update tro the latest FreeBSD version.
	* libcsupport/Makefile.am, libcsupport/src/fchown.c: Add fchown
	support.
2008-04-11 22:57:54 +00:00
Chris Johns
8c422e2346 2008-04-08 Chris Johns <chrisj@rtems.org>
* libmisc/shell/shell.c: Copy the cmd line to a buffer to split
	into argv parts. Was using the command line history buffer so the
	history was being corrupted.
2008-04-08 04:53:26 +00:00
Chris Johns
ea90df234a 2008-04-03 Chris Johns <chrisj@rtems.org>
* libfs/src/nfsclient/src/librtemsNfs.h,
	libfs/src/nfsclient/src/nfs.c: Remove CEXP references. CEXP is
	external to RTEMS and even if in the cpukit it should not cross
	reference in this way.
	* libmisc/shell/shell_getchar.c: New. Taken from the monitor.
	* libmisc/Makefile.am: Add shell_getchar.c and clean up a little
	in the shell area.
	* libmisc/shell/shell.c, libmisc/shell/shell.h: Add line editting
	support.
2008-04-03 03:13:24 +00:00
Joel Sherrill
85659eeeb6 2008-03-07 Joel Sherrill <joel.sherrill@oarcorp.com>
* libmisc/shell/main_cp.c, libmisc/shell/main_netstats.c,
	libmisc/shell/shell_script.c: Add memset() of getopt_data to
	ensure it is zeroed out each time we use getopt_r().
	* libmisc/shell/shell.c: Do not echo commands if input is not a tty.
	This makes the scripts behave more like UNIX scripts.
2008-03-07 20:09:36 +00:00
Joel Sherrill
a3ddb08bec 2008-03-04 Joel Sherrill <joel.sherrill@oarcorp.com>
* libmisc/Makefile.am, libmisc/shell/main_cp.c,
	libmisc/shell/main_cpuuse.c, libmisc/shell/main_date.c,
	libmisc/shell/main_mallocinfo.c, libmisc/shell/main_netstats.c,
	libmisc/shell/main_perioduse.c, libmisc/shell/main_stackuse.c,
	libmisc/shell/main_wkspaceinfo.c, libmisc/shell/print_heapinfo.c,
	libmisc/shell/shell.c, libmisc/shell/shell.h,
	libmisc/shell/shell_makeargs.c, libmisc/shell/shellconfig.c,
	libmisc/shell/shellconfig.h, libmisc/shell/write_file.c: Add initial
	capability to automatically execute a script from the filesystem. Add
	echo command from NetBSD and sleep command.
	* libmisc/shell/main_echo.c, libmisc/shell/main_sleep.c,
	libmisc/shell/shell_script.c: New files.
2008-03-05 02:49:35 +00:00