diff -urN nano-1.3.1.orig/src/files.c nano-1.3.1/src/files.c
--- nano-1.3.1.orig/src/files.c	2004-01-08 10:10:01.000000000 -0600
+++ nano-1.3.1/src/files.c	2004-02-14 19:39:34.000000000 -0600
@@ -1682,7 +1682,7 @@
 
     answer = mallocstrcpy(answer, path);
 
-    if (exiting && ISSET(TEMP_OPT)) {
+    if (exiting && ISSET(TEMP_OPT) || ISSET(RESTRICTED)) {
 	if (filename[0] != '\0') {
 	    i = write_file(answer, 0, 0, 0);
 	    display_main_list();
@@ -1804,7 +1804,7 @@
 		i = do_yesno(0, _("File exists, OVERWRITE ?"));
 		if (i == 0 || i == -1)
 		    continue;
-	    } else if (filename[0] != '\0'
+	    } else if (filename[0] != '\0' && !ISSET(RESTRICTED)
 #ifndef NANO_SMALL
 		&& (!ISSET(MARK_ISSET) || exiting)
 #endif
@@ -1818,7 +1818,7 @@
 #ifndef NANO_SMALL
 	/* Here's where we allow the selected text to be written to
 	 * a separate file. */
-	if (ISSET(MARK_ISSET) && !exiting) {
+	if (ISSET(MARK_ISSET) && !exiting && !ISSET(RESTRICTED)) {
 	    filestruct *fileagebak = fileage;
 	    filestruct *filebotbak = filebot;
 	    int oldmod = ISSET(MODIFIED);
diff -urN nano-1.3.1.orig/src/global.c nano-1.3.1/src/global.c
--- nano-1.3.1.orig/src/global.c	2004-01-08 10:10:01.000000000 -0600
+++ nano-1.3.1/src/global.c	2004-02-14 19:19:26.000000000 -0600
@@ -39,7 +39,7 @@
 int search_last_line;		/* Is this the last search line? */
 int search_offscreen;		/* Search lines not displayed */
 
-int flags = 0;			/* Our new flag containing many options */
+unsigned long flags = 0;		/* Our new flag containing many options */
 WINDOW *edit;			/* The file portion of the editor */
 WINDOW *topwin;			/* Top line of screen */
 WINDOW *bottomwin;		/* Bottom buffer */
@@ -461,6 +461,7 @@
 
     /* this is so we can view multiple files */
     /* Translators: try to keep this string under 10 characters long */
+    if (!ISSET(RESTRICTED))
     sc_init_one(&main_list, NANO_INSERTFILE_KEY, _("Read File"),
 		IFHELP(nano_insert_msg, NANO_NO_KEY), NANO_INSERTFILE_FKEY,
 		NANO_NO_KEY,
@@ -785,6 +786,7 @@
 
 #ifndef DISABLE_BROWSER
     /* Translators: try to keep this string under 16 characters long */
+    if (!ISSET(RESTRICTED))
     sc_init_one(&writefile_list, NANO_TOFILES_KEY, _("To Files"),
 		IFHELP(nano_tofiles_msg, NANO_NO_KEY), NANO_NO_KEY,
 		NANO_NO_KEY, NOVIEW, 0);
@@ -792,22 +794,26 @@
 
 #ifndef NANO_SMALL
     /* Translators: try to keep this string under 16 characters long */
+    if (!ISSET(RESTRICTED))
     sc_init_one(&writefile_list, NANO_NO_KEY, _("DOS Format"),
 		IFHELP(nano_dos_msg, TOGGLE_DOS_KEY), NANO_NO_KEY,
 		NANO_NO_KEY, NOVIEW, 0);
 
     /* Translators: try to keep this string under 16 characters long */
+    if (!ISSET(RESTRICTED))
     sc_init_one(&writefile_list, NANO_NO_KEY, _("Mac Format"),
 		IFHELP(nano_mac_msg, TOGGLE_MAC_KEY), NANO_NO_KEY,
 		NANO_NO_KEY, NOVIEW, 0);
 #endif
 
     /* Translators: try to keep this string under 16 characters long */
+    if (!ISSET(RESTRICTED))
     sc_init_one(&writefile_list, NANO_NO_KEY, _("Append"),
 		IFHELP(nano_append_msg, NANO_APPEND_KEY), NANO_NO_KEY,
 		NANO_NO_KEY, NOVIEW, 0);
 
     /* Translators: try to keep this string under 16 characters long */
+    if (!ISSET(RESTRICTED))
     sc_init_one(&writefile_list, NANO_NO_KEY, _("Prepend"),
 		IFHELP(nano_prepend_msg, NANO_PREPEND_KEY), NANO_NO_KEY,
 		NANO_NO_KEY, NOVIEW, 0);
@@ -834,6 +840,7 @@
 		NANO_NO_KEY, VIEW, 0);
 
 #ifndef DISABLE_BROWSER
+    if (!ISSET(RESTRICTED))
     sc_init_one(&insertfile_list, NANO_TOFILES_KEY, _("To Files"),
 		IFHELP(nano_tofiles_msg, NANO_NO_KEY), NANO_NO_KEY,
 		NANO_NO_KEY, NOVIEW, 0);
@@ -841,12 +848,14 @@
 
 #ifndef NANO_SMALL
     /* Translators: try to keep this string under 22 characters long */
+    if (!ISSET(RESTRICTED))
     sc_init_one(&insertfile_list, NANO_EXTCMD_KEY, _("Execute Command"),
 		IFHELP(nano_execute_msg, NANO_NO_KEY), NANO_NO_KEY,
 		NANO_NO_KEY, NOVIEW, 0);
 
 #ifdef ENABLE_MULTIBUFFER
     /* Translators: try to keep this string under 22 characters long */
+    if (!ISSET(RESTRICTED))
     sc_init_one(&insertfile_list, NANO_NO_KEY, _("New Buffer"),
 		IFHELP(nano_multibuffer_msg, TOGGLE_MULTIBUFFER_KEY), NANO_NO_KEY,
 		NANO_NO_KEY, NOVIEW, 0);
diff -urN nano-1.3.1.orig/src/nano.c nano-1.3.1/src/nano.c
--- nano-1.3.1.orig/src/nano.c	2004-01-08 10:10:01.000000000 -0600
+++ nano-1.3.1/src/nano.c	2004-02-14 19:29:55.000000000 -0600
@@ -151,6 +151,9 @@
     char *ret;
     int i = -1;
 
+    /* No emergency files in restricted mode! */
+    if (ISSET(RESTRICTED)) return;
+
     /* If we can't save, we have REAL bad problems, but we might as well
        TRY. */
     if (die_filename[0] == '\0')
@@ -657,6 +660,7 @@
 #ifdef ENABLE_COLOR
     print1opt(_("-Y [str]"), _("--syntax [str]"), _("Syntax definition to use"));
 #endif
+    print1opt(_("-Z"), _("--restricted"), _("Restricted mode"));
     print1opt("-c", "--const", _("Constantly show cursor position"));
 #ifndef NANO_SMALL
     print1opt("-d", "--rebinddelete", _("Fix Backspace/Delete confusion problem"));
@@ -3118,6 +3122,7 @@
 	{"smooth", 0, 0, 'S'},
 	{"autoindent", 0, 0, 'i'},
 	{"cut", 0, 0, 'k'},
+	{"restricted", 0, 0, 'Z'},
 #endif
 	{0, 0, 0, 0}
     };
@@ -3137,11 +3142,11 @@
 #endif
 
 #ifdef HAVE_GETOPT_LONG
-    while ((optchr = getopt_long(argc, argv, "h?BDFHIMNQ:RST:VY:abcdefgijklmo:pr:s:tvwxz",
+    while ((optchr = getopt_long(argc, argv, "h?BDFHIMNQ:RST:VY:Zabcdefgijklmo:pr:s:tvwxz",
 				 long_options, NULL)) != -1) {
 #else
     while ((optchr =
-	    getopt(argc, argv, "h?BDFHIMNQ:RST:VY:abcdefgijklmo:pr:s:tvwxz")) != -1) {
+	    getopt(argc, argv, "h?BDFHIMNQ:RST:VY:Zabcdefgijklmo:pr:s:tvwxz")) != -1) {
 #endif
 
 	switch (optchr) {
@@ -3226,6 +3231,10 @@
 	    syntaxstr = mallocstrcpy(syntaxstr, optarg);
 	    break;
 #endif
+	case 'Z':
+	    SET(RESTRICTED);
+	    SET(NO_RCFILE);
+	    break;
 	case 'c':
 	    SET(CONSTUPDATE);
 	    break;
@@ -3302,6 +3311,12 @@
 	}
     }
 
+    /* If filename starts with 'r' we use restricted mode. */
+    if (argv[0][0] == 'r') {
+	SET(RESTRICTED);
+	SET(NO_RCFILE);
+    }
+
 /* We've read through the command line options.  Now back up the flags
    and values that are set, and read the rcfile(s).  If the values
    haven't changed afterward, restore the backed-up values. */
diff -urN nano-1.3.1.orig/src/nano.h nano-1.3.1/src/nano.h
--- nano-1.3.1.orig/src/nano.h	2004-01-08 10:10:01.000000000 -0600
+++ nano-1.3.1/src/nano.h	2004-02-14 19:03:05.000000000 -0600
@@ -289,6 +289,7 @@
 #define HISTORY_CHANGED		(1<<28)
 #define HISTORYLOG		(1<<29)
 #define JUSTIFY_MODE		(1<<30)
+#define RESTRICTED		(1<<31)
 
 /* Control key sequences, changing these would be very very bad. */
 #define NANO_CONTROL_SPACE 0
diff -urN nano-1.3.1.orig/src/proto.h nano-1.3.1/src/proto.h
--- nano-1.3.1.orig/src/proto.h	2004-01-08 10:10:01.000000000 -0600
+++ nano-1.3.1/src/proto.h	2004-02-14 19:40:09.000000000 -0600
@@ -40,7 +40,7 @@
 #endif
 extern long totsize;
 extern int temp_opt;
-extern int flags;
+extern unsigned long flags;
 extern int tabsize;
 extern int search_last_line;
 extern int search_offscreen;
diff -urN nano-1.3.1.orig/doc/man/nano.1 nano-1.3.1/doc/man/nano.1
--- nano-1.3.1.orig/doc/man/nano.1	2004-01-08 10:10:01.000000000 -0600
+++ nano-1.3.1/doc/man/nano.1	2004-02-14 19:45:38.000000000 -0600
@@ -88,6 +88,11 @@
 .I .nanorc
 to use, if available.
 .TP
+.B \-Z (\-\-restricted)
+Don't allow suspending, read the
+.I .nanorc
+file, or read/write of any file not specified on the command line.
+.TP
 .B \-c (\-\-const)
 Constantly show the cursor position.
 .TP
diff -urN nano-1.3.1.orig/doc/texinfo/nano.texi nano-1.3.1/doc/texinfo/nano.texi
--- nano-1.3.1.orig/doc/texinfo/nano.texi	2004-01-08 10:10:01.000000000 -0600
+++ nano-1.3.1/doc/texinfo/nano.texi	2004-02-14 19:49:50.000000000 -0600
@@ -153,6 +153,10 @@
 Specify a specific syntax highlighting from the .nanorc to use, if
 available.
 
+@item -Z, --restricted
+Don't allow suspending, read the .nanorc file, or read/write of any file
+not specified on the command line.
+
 @item -c, --const
 Constantly display the cursor position and line number on the statusbar.
 
