zsh-workers
 help / color / mirror / code / Atom feed
* 8-bit patch for zle_tricky.c
@ 1996-05-18 11:51 Zefram
  1996-05-19 22:34 ` Zoltan Hidvegi
  1996-05-20  1:01 ` Zoltan Hidvegi
  0 siblings, 2 replies; 14+ messages in thread
From: Zefram @ 1996-05-18 11:51 UTC (permalink / raw)
  To: Z Shell workers mailing list

-----BEGIN PGP SIGNED MESSAGE-----

Here's my attempt at making zle_tricky.c 8-bit clean.  The patch
is from 2.6-beta18-test1.  Zoltan's start at the task, metafying
and unmetafying the line around completion, is pretty much what I
had in mind anyway, so I've worked from that.  The changes needed
to make the completion listing unmetafy everything are impressively
easy.

The bulk of the patch is actually comment reformatting throughout the
file, to match the style used elsewhere.  I rewrote several of the
comments and added more.  The patches to utils.c add a niceztrlen(),
and fix a couple of minor bugs.

Although nicefputs() is no longer used, and nicestrlen() won't be
quite soon, I think it would be unwise to try renaming nicezputs()
and niceztrlen() to them.  It would cause confusion.  I think it
would also be reasonable to leave them in, even when they're not
used, as nicefputs() is very convenient for producing debugging
output.

There are several bits of zsh remaining to be made 8-bit clean.
In particular there are a lot of outputs that need to be unmetafied,
including the prompt code.  I'll fix these in another patch.

There is also a very serious problem in tokenisation: the metafied
line is tokenised as if it were literal text.  For example:

% echo foo^@bar
foo  bar

Note the double space.  What happens is that foo^@bar is encoded as
"foo\203 bar", and the tokeniser splits this into "foo\203" and
"bar".  The former of these strings is illegal as a metafied string, but
if it happens to be terminated by two NULs then it unmetafies to "foo ".
I think the lexer will need significant changes to support metafication.
It's probably best to make the hgetc/hungetc history interface binary,
but leave ingetc/inungetc metafied.  I'll leave it to others that know
that area of the code better.

 -zefram

begin 644 completion_8bit_patch.gz
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
EL&@9&[>!GG4UC`R97P]!SC`26TO@J)H_;ADY_Q\4]\LESD@!````
`
end

-----BEGIN PGP SIGNATURE-----
Version: 2.6.2

iQCVAwUBMZ2mUXD/+HJTpU/hAQGj3wP/Q7EFyKl0D7eEdh75Gvn3n/TmZbLrIR3z
RfEINi6R5k0FjtzmJukljfjTdYL9FTzz8hcksBl02A2n5S3d1HP6hcxCW+kjPVvB
1tdLaU6T/yg9URqP2NIpfqHgcwVKDQgS61UyOnSp/bKZwtOU/vFRcqy8gIwr4/k6
8DB2sZZjrI0=
=61Bf
-----END PGP SIGNATURE-----



^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: 8-bit patch for zle_tricky.c
  1996-05-18 11:51 8-bit patch for zle_tricky.c Zefram
@ 1996-05-19 22:34 ` Zoltan Hidvegi
  1996-05-20 15:58   ` Zefram
  1996-05-20  1:01 ` Zoltan Hidvegi
  1 sibling, 1 reply; 14+ messages in thread
From: Zoltan Hidvegi @ 1996-05-19 22:34 UTC (permalink / raw)
  To: Zefram; +Cc: zsh-workers

[-- Attachment #1: Type: application/pgp, Size: 12274 bytes --]

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: 8-bit patch for zle_tricky.c
  1996-05-18 11:51 8-bit patch for zle_tricky.c Zefram
  1996-05-19 22:34 ` Zoltan Hidvegi
@ 1996-05-20  1:01 ` Zoltan Hidvegi
  1 sibling, 0 replies; 14+ messages in thread
From: Zoltan Hidvegi @ 1996-05-20  1:01 UTC (permalink / raw)
  To: Zefram

[-- Attachment #1: Type: application/pgp, Size: 2918 bytes --]

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: 8-bit patch for zle_tricky.c
  1996-05-19 22:34 ` Zoltan Hidvegi
@ 1996-05-20 15:58   ` Zefram
  1996-05-20 17:21     ` Zoltan Hidvegi
  0 siblings, 1 reply; 14+ messages in thread
From: Zefram @ 1996-05-20 15:58 UTC (permalink / raw)
  To: Zoltan Hidvegi; +Cc: A.Main, zsh-workers

>Well I do not think that this bug is serious.  The biggest advantage of
>metafication is that does not requite significant changes in the lexer.  I
>see that in your patch you added IBLANK, INBLANK and ISPECIAL types to the
>null character.  I still think that null only needs IMETA.  Adding IBLANK
>just complicates thinkg in the lexer and I do not think it is necessary.

The bug has effect regardless of whether NUL is treated as a blank or
not.  I added the IBLANK etc. bits on the grounds that NUL ought to be
treated as a blank, just as it's in $IFS.  But the shell is indeed
perfectly usable either way, so I won't contest this issue.

>You may ask then why I added it to IFS.  The main reason for that was that
>nulls cannot be passed in arguments to external commands.  But
>iblank/inblank used only on the shell input which does not have this
>limitation.

Adding it to $IFS has no effect in this matter, because zsh does not do
field splitting on normal words.  (It should, at least if SH_WORD_SPLIT
is set.)

-zefram



^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: 8-bit patch for zle_tricky.c
  1996-05-20 17:21     ` Zoltan Hidvegi
@ 1996-05-20 17:03       ` Bart Schaefer
  1996-05-20 18:36         ` Zoltan Hidvegi
  1996-05-20 17:54       ` Zefram
  1 sibling, 1 reply; 14+ messages in thread
From: Bart Schaefer @ 1996-05-20 17:03 UTC (permalink / raw)
  To: Zefram, Zoltan Hidvegi, zsh-workers

On May 20,  7:21pm, Zoltan Hidvegi wrote:
} Subject: Re: 8-bit patch for zle_tricky.c
}
} > Adding it to $IFS has no effect in this matter, because zsh does not do
} > field splitting on normal words.  (It should, at least if SH_WORD_SPLIT
} > is set.)
} 
} I do not think so.  Neither bash nor ksh93 does this.  Look:
} 
} % ksh
} $ count () { echo $# ; }
} $ IFS=/
} $ count as/df/gh
} 1
} 
} SH_WORD_SPLIT only changes the result of substitutions.

zsh% /bin/sh
$ IFS=/
$ echo/bar
bar
$ exit/1
zsh% echo $?
1
zsh%

-- 
Bart Schaefer                             Brass Lantern Enterprises
http://www.well.com/user/barts            http://www.nbn.com/people/lantern

New male in /home/schaefer:
>N  2 Justin William Schaefer  Sat May 11 03:43  53/4040  "Happy Birthday"



^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: 8-bit patch for zle_tricky.c
  1996-05-20 15:58   ` Zefram
@ 1996-05-20 17:21     ` Zoltan Hidvegi
  1996-05-20 17:03       ` Bart Schaefer
  1996-05-20 17:54       ` Zefram
  0 siblings, 2 replies; 14+ messages in thread
From: Zoltan Hidvegi @ 1996-05-20 17:21 UTC (permalink / raw)
  To: Zefram; +Cc: Zsh workers list

> >Well I do not think that this bug is serious.  The biggest advantage of
> >metafication is that does not requite significant changes in the lexer.  I
> >see that in your patch you added IBLANK, INBLANK and ISPECIAL types to the
> >null character.  I still think that null only needs IMETA.  Adding IBLANK
> >just complicates things in the lexer and I do not think it is necessary.
> 
> The bug has effect regardless of whether NUL is treated as a blank or
> not.  I added the IBLANK etc. bits on the grounds that NUL ought to be

I meant that for the lexer it is simpler to treat null as non-blank.  The bug
was there but my latest patch fixed it I hope.

> >You may ask then why I added it to IFS.  The main reason for that was that
> >nulls cannot be passed in arguments to external commands.  But
> >iblank/inblank used only on the shell input which does not have this
> >limitation.
> 
> Adding it to $IFS has no effect in this matter, because zsh does not do
> field splitting on normal words.  (It should, at least if SH_WORD_SPLIT
> is set.)

I do not think so.  Neither bash nor ksh93 does this.  Look:

% ksh
$ count () { echo $# ; }
$ IFS=/
$ count as/df/gh
1

SH_WORD_SPLIT only changes the result of substitutions.

Zoltan



^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: 8-bit patch for zle_tricky.c
  1996-05-20 17:21     ` Zoltan Hidvegi
  1996-05-20 17:03       ` Bart Schaefer
@ 1996-05-20 17:54       ` Zefram
  1996-05-20 22:25         ` Hrvoje Niksic
  1 sibling, 1 reply; 14+ messages in thread
From: Zefram @ 1996-05-20 17:54 UTC (permalink / raw)
  To: Zoltan Hidvegi; +Cc: A.Main, zsh-workers

>I do not think so.  Neither bash nor ksh93 does this.  Look:
>
>% ksh
>$ count () { echo $# ; }
>$ IFS=/
>$ count as/df/gh
>1
>
>SH_WORD_SPLIT only changes the result of substitutions.

Hmm.  ksh doesn't field split there, but sh does.  I think we should
eventually have an option to emulate this, but it's not essential.

-zefram



^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: 8-bit patch for zle_tricky.c
  1996-05-20 17:03       ` Bart Schaefer
@ 1996-05-20 18:36         ` Zoltan Hidvegi
  1996-05-20 21:09           ` Zefram
  0 siblings, 1 reply; 14+ messages in thread
From: Zoltan Hidvegi @ 1996-05-20 18:36 UTC (permalink / raw)
  To: schaefer; +Cc: A.Main, zsh-workers

> } > Adding it to $IFS has no effect in this matter, because zsh does not do
> } > field splitting on normal words.  (It should, at least if SH_WORD_SPLIT
> } > is set.)
> } 
> } I do not think so.  Neither bash nor ksh93 does this.  Look:
> } 
> } % ksh
> } $ count () { echo $# ; }
> } $ IFS=/
> } $ count as/df/gh
> } 1
> } 
> } SH_WORD_SPLIT only changes the result of substitutions.
> 
> zsh% /bin/sh
> $ IFS=/
> $ echo/bar
> bar
> $ exit/1
> zsh% echo $?
> 1
> zsh%

Yes, the original Bourne Shell used IFS in the lexer to separate words but
I think that this does not conform the POSIX Shell and Utilities standard.
Also it may be a security hole if IFS is exported.  That's why bash and
ksh does not use IFS here, and zsh should not use it either.

Zoltan



^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: 8-bit patch for zle_tricky.c
  1996-05-20 18:36         ` Zoltan Hidvegi
@ 1996-05-20 21:09           ` Zefram
  1996-05-20 22:43             ` Hrvoje Niksic
  0 siblings, 1 reply; 14+ messages in thread
From: Zefram @ 1996-05-20 21:09 UTC (permalink / raw)
  To: Zoltan Hidvegi; +Cc: schaefer, A.Main, zsh-workers

>Yes, the original Bourne Shell used IFS in the lexer to separate words but
>I think that this does not conform the POSIX Shell and Utilities standard.

It's been a while since I read the standard, and I don't have access to
a copy any more, but I'm pretty sure it's required.  I needed to check
this particular matter for some reason.  Can someone with a POSIX shell
or the standard check this?

>Also it may be a security hole if IFS is exported.  That's why bash and
>ksh does not use IFS here, and zsh should not use it either.

It is a security hole, but (a) setuid shell scripts are insecure anyway
on most systems, and (b) there's a way to avoid it:

#!/bin/sh
IFS=' 	
'
echo Note that IFS is now safe.

The above, as a shell script, is secure if setuid on, for example,
Solaris.  Anyone writing setuid scripts should know this technique.

Another solution would be to remove sensitive parameters such as IFS
and LD_* on initialisation if the PRIVILEGED option is set (euid !=
ruid).  Note that a script can already totally clear the exported
environment by doing `typeset +x -m \*`.

-zefram



^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: 8-bit patch for zle_tricky.c
  1996-05-20 17:54       ` Zefram
@ 1996-05-20 22:25         ` Hrvoje Niksic
  0 siblings, 0 replies; 14+ messages in thread
From: Hrvoje Niksic @ 1996-05-20 22:25 UTC (permalink / raw)
  To: Zefram; +Cc: hzoli, A.Main, zsh-workers

In your mail, you said:
> >I do not think so.  Neither bash nor ksh93 does this.  Look:
> >
> >% ksh
> >$ count () { echo $# ; }
> >$ IFS=/
> >$ count as/df/gh
> >1
> >
> >SH_WORD_SPLIT only changes the result of substitutions.
> 
> Hmm.  ksh doesn't field split there, but sh does.  I think we should
> eventually have an option to emulate this, but it's not essential.

I think that bash intentionally avoids word-splitting in these cases, to
close the infamous IFS-security hole in sh, for setuid scripts/programs.

-- 
hniksic@srce.hr              |  Student of electrical engineering
hniksic@fly.cc.fer.hr        |  University of Zagreb, Croatia
------------------------------------------------------------------
`VI' - An editor used by those heretics that don't subscribe to
       the Emacs religion.



^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: 8-bit patch for zle_tricky.c
  1996-05-20 21:09           ` Zefram
@ 1996-05-20 22:43             ` Hrvoje Niksic
  1996-05-20 22:55               ` Zefram
  0 siblings, 1 reply; 14+ messages in thread
From: Hrvoje Niksic @ 1996-05-20 22:43 UTC (permalink / raw)
  To: Zefram; +Cc: hzoli, schaefer, A.Main, zsh-workers

In your mail, you said:
> It is a security hole, but (a) setuid shell scripts are insecure anyway
> on most systems, and (b) there's a way to avoid it:

As far as I understand, the other problem is with setuid programs calling
other programs with system(), like:
system("/bin/date");
to output date. If the IFS contains '/', someone might have a program named
bin in their path, and then...

-- 
hniksic@srce.hr              |  Student of electrical engineering
hniksic@fly.cc.fer.hr        |  University of Zagreb, Croatia
------------------------------------------------------------------
`VI' - An editor used by those heretics that don't subscribe to
       the Emacs religion.



^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: 8-bit patch for zle_tricky.c
  1996-05-20 22:43             ` Hrvoje Niksic
@ 1996-05-20 22:55               ` Zefram
  1996-05-20 23:08                 ` Hrvoje Niksic
  0 siblings, 1 reply; 14+ messages in thread
From: Zefram @ 1996-05-20 22:55 UTC (permalink / raw)
  To: hniksic; +Cc: A.Main, hzoli, schaefer, zsh-workers

>As far as I understand, the other problem is with setuid programs calling
>other programs with system(), like:
>system("/bin/date");
>to output date. If the IFS contains '/', someone might have a program named
>bin in their path, and then...

There's a simple solution to that.  Set IFS before using system.  IMO,
setuid programs shouldn't be using system(3), but it is possible to do
it safely.

-zefram



^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: 8-bit patch for zle_tricky.c
  1996-05-20 22:55               ` Zefram
@ 1996-05-20 23:08                 ` Hrvoje Niksic
  1996-05-20 23:36                   ` Zefram
  0 siblings, 1 reply; 14+ messages in thread
From: Hrvoje Niksic @ 1996-05-20 23:08 UTC (permalink / raw)
  To: Zefram; +Cc: hniksic, A.Main, hzoli, schaefer, zsh-workers

In your mail, you said:
[...]
> There's a simple solution to that.  Set IFS before using system.  IMO,
> setuid programs shouldn't be using system(3), but it is possible to do
> it safely.

Of course. But the point I was trying to make is that not only setuid
scripts, but also setuid C programs calling system (and thus unintentionally
invoking sh) can represent security problems. Which is why IFS is used the
way it is in bash/ksh.

-- 
hniksic@srce.hr              |  Student of electrical engineering
hniksic@fly.cc.fer.hr        |  University of Zagreb, Croatia
------------------------------------------------------------------
`VI' - An editor used by those heretics that don't subscribe to
       the Emacs religion.



^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: 8-bit patch for zle_tricky.c
  1996-05-20 23:08                 ` Hrvoje Niksic
@ 1996-05-20 23:36                   ` Zefram
  0 siblings, 0 replies; 14+ messages in thread
From: Zefram @ 1996-05-20 23:36 UTC (permalink / raw)
  To: hniksic; +Cc: A.Main, hzoli, schaefer, zsh-workers

>Of course. But the point I was trying to make is that not only setuid
>scripts, but also setuid C programs calling system (and thus unintentionally
>invoking sh) can represent security problems. Which is why IFS is used the
>way it is in bash/ksh.

As I said, it *is* possible for a privileged script to be secure.  IMO
it's up to the person writing such scripts to use the methods
available.  We shouldn't disable a feature just to make this easier.  I
think field splitting should be off by default in zsh, but
SH_WORD_SPLIT or some other option should turn it on.  (Maybe
SH_WORD_SPLIT should do field splitting on words, and SH_FIELD_SPLIT
should do the current filed splitting on parameters.)

In any case, this is not a critical issue, and can wait until after 3.0.

-zefram



^ permalink raw reply	[flat|nested] 14+ messages in thread

end of thread, other threads:[~1996-05-21  0:00 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
1996-05-18 11:51 8-bit patch for zle_tricky.c Zefram
1996-05-19 22:34 ` Zoltan Hidvegi
1996-05-20 15:58   ` Zefram
1996-05-20 17:21     ` Zoltan Hidvegi
1996-05-20 17:03       ` Bart Schaefer
1996-05-20 18:36         ` Zoltan Hidvegi
1996-05-20 21:09           ` Zefram
1996-05-20 22:43             ` Hrvoje Niksic
1996-05-20 22:55               ` Zefram
1996-05-20 23:08                 ` Hrvoje Niksic
1996-05-20 23:36                   ` Zefram
1996-05-20 17:54       ` Zefram
1996-05-20 22:25         ` Hrvoje Niksic
1996-05-20  1:01 ` Zoltan Hidvegi

Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/zsh/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).