#241: --interactive mode fails to reopen stdout as another user (not root)
----------------------+---------------------
  Reporter:  raphink  |       Owner:  lutter
      Type:  defect   |      Status:  new
  Priority:  minor    |   Milestone:  next
 Component:  Augeas   |     Version:  devel
Resolution:           |    Keywords:
  Blocking:           |  Blocked By:
----------------------+---------------------

Comment (by mchapman):

 The problem here is that `augtool` tries to open `/dev/stdout`. This can
 be a symlink (via `/proc/self/fd/1`) to a device to which the user does
 not have access.

 The straight-forward fix is:

 {{{
 diff --git a/src/augtool.c b/src/augtool.c
 index e9c1422..4f4be1d 100644
 --- a/src/augtool.c
 +++ b/src/augtool.c
 @@ -462,7 +462,7 @@ static int main_loop(void) {
                     fclose(rl_outstream);
                     rl_outstream = NULL;
                 }
 -               if ((rl_outstream = fopen("/dev/stdout", "w")) == NULL) {
 +               if ((rl_outstream = fdopen(STDOUT_FILENO, "w")) == NULL) {
                     perror("Failed to reopen stdout");
                     return -1;
                 }
 }}}

 However I'm wondering whether `rl_outstream` should also be connected to
 `/dev/tty`, as `rl_instream` is a few lines above this. What is the
 intended behaviour when standard output is redirected?

 {{{
 echo "ls /" | augtool -i >outfile
 }}}

-- 
Ticket URL: <https://fedorahosted.org/augeas/ticket/241#comment:2>
Augeas <http://augeas.net/>
a configuration API

_______________________________________________
augeas-devel mailing list
[email protected]
https://www.redhat.com/mailman/listinfo/augeas-devel

Reply via email to