Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 19 Dec 2002 19:22:24 +0200
From:      Giorgos Keramidas <keramida@ceid.upatras.gr>
To:        Aaron Burke <aburke@nullplusone.com>
Cc:        freebsd-questions@FreeBSD.ORG
Subject:   Re: Problems with a C application that changes users and run 'screen -x'
Message-ID:  <20021219172224.GB985@gothmog.gr>
In-Reply-To: <NGBBLCIHCLNJAIGIFFHJEEOMCOAA.aburke@nullplusone.com>
References:  <NGBBLCIHCLNJAIGIFFHJEEOMCOAA.aburke@nullplusone.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On 2002-12-19 02:50, Aaron Burke <aburke@nullplusone.com> wrote:
> I have an application that simply logs in as another user and runs
> "screen -x". The problem I am having with the followin code is that
> the results of execution is a message from (I am guessing the shell)
> saying that I dont have access to the "/dev/ttyp?" where ? is the
> current virtual terminal that I am running on.
>
> Here is my application:
>
> #include <stdlib.h>
> int main(int argc, char* pszArgs[])
> {
>         int result;
>         result= system("/usr/bin/su ppp -m --login -c " &
>                          "/usr/local/bin/screen -x");
>         return result;
> }

You are using the & operator in a very strange manner here.  It most
certainly doesn't work the way you might think it does.

You should also avoid using system, if possible.

> And here is the output:
> bash-2.05$ ./a.out

You're not running the executable as `root'.  Since you are not the
superuser, you do not have permissions to operate on the pseudo-tty
that login attempts to work with, and this is why you get the
following error message:

> Cannot open your terminal '/dev/ttyp0' - please check.

Three possibilities that you might wish to investigate further are:

1. Write a shell script that does the equivalent of the system() call
   you are using now.  This should be fairly easy and will work fine
   if you execute the script from a root shell.

2. Fix your program by removing the bad use of `&'.

3. Avoid using system() which I vaguely recall being described with a
   lot of bad words in various places and use fork(), exec(), _exit(),
   waitpid() and exit() instead.

- Giorgos


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-questions" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20021219172224.GB985>