Index: busybox-1.4.2/shell/ash.c =================================================================== --- busybox-1.4.2.orig/shell/ash.c 2007-06-04 13:21:32.248074216 +0200 +++ busybox-1.4.2/shell/ash.c 2007-06-04 13:21:34.000807760 +0200 @@ -12237,9 +12237,18 @@ const char *p; char **aptr; int flag = argv[0][0] == 'r'? VREADONLY : VEXPORT; + int mask = ~0; int notp; - notp = nextopt("p") - 'p'; + while ((notp = nextopt("np"))) { + if (notp == 'n') { + mask = ~flag; + } else { /* p */ + break; + } + } + + notp -= 'p'; if (notp && ((name = *(aptr = argptr)))) { do { if ((p = strchr(name, '=')) != NULL) { @@ -12247,10 +12256,11 @@ } else { if ((vp = *findvar(hashvar(name), name))) { vp->flags |= flag; + vp->flags &= mask; continue; } } - setvar(name, p, flag); + setvar(name, p, flag & mask); } while ((name = *++aptr) != NULL); } else { showvars(argv[0], flag, 0);