[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Auto Login at Boot?



IN trying to find out if there was a way to automatically login during
boot or to login to different terminals at boot I ran across this
program.  Not being a C programmer I don't really understand what is
happening in this program. It looks as if a password can be accepted as
an argument but in the example there is no password mentioned

     dboot tty userid command 

Can this be used to auto login under numerous terminal under different
user id's and passwords.
i.e.

     dboot tty userid password command 


  I usually keep three terminal open.  One as root, one as user under a
command shell and one as user under an X terminal.  I use root because I
haven't found out which files I need to give user rights to in order to
PPP.





/* dboot.c - program for inittab to execute and start processes.
             Arguments are:
                tty to use for console
                program to run (most likely login)
                [any program args]

example:

c1:respawn:/usr/local/bin/dboot tty1 login -f sysadmin

will startup user 'sysadmin' on console 1

By Dave Bennet, from Linux Journal Issue 33 January 1997


 o Modified by Jeremy Impson, to take one more argument, a uid that will 
   be changed to.  It is optional, assuming that the userid doesn't
start with
   a '/', and assuming that the command does.  July 10, 1997

   usage is now 
     /* dboot.c - program for inittab to execute and start processes.
             Arguments are:
                tty to use for console
                program to run (most likely login)
                [any program args]

example:

c1:respawn:/usr/local/bin/dboot tty1 login -f sysadmin

will startup user 'sysadmin' on console 1

By Dave Bennet, from Linux Journal Issue 33 January 1997


 o Modified by Jeremy Impson, to take one more argument, a uid that will 
   be changed to.  It is optional, assuming that the userid doesn't
start with
   a '/', and assuming that the command does.  July 10, 1997

   usage is now 
     dboot tty userid command
   -or-
     dboot tty command

   Also, added syslogging facility.  Jul 10, 1997

*/

#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <errno.h>
#include <unistd.h>
#include <pwd.h>
#include <syslog.h>

int main(int argc, char **argv)
{
        char    cdev[50];
        char    buf[50];
        int     fd, whicharg;
        pid_t   pid;
        struct  passwd  *pw_ptr;

        openlog("dboot", LOG_PID, LOG_USER);

        if ( argv[2][0] == '/') {
                whicharg = 2;
        } else {
                whicharg = 3;
        }

        strcpy(cdev,"/dev/");
        strcat(cdev,argv[1]);   /* console device */
        if (-1 == (fd = open(cdev, O_RDWR))) {
                syslog(LOG_ERR,"open failure\n");
                /* perror("open failure"); */
                exit(0);
        }

        close(0);

        if (-1 == (dup(fd))) {
                syslog(LOG_ERR,"dup 0 failure\n");
                /* perror("dup 0 failure"); */
                exit(0);
        }

        close(1);

        if (-1 == (dup(fd))) {
                syslog(LOG_ERR,"dup 1 failure\n");
                /* perror("dup 1 failure"); */
                exit(0);
        }

        close(2);

        if (-1 == (dup(fd))) {
                syslog(LOG_ERR,"dup 2 failure\n");
                /* perror("dup 2 failure"); */
                exit(0);
        }

        if (3 == whicharg) {
                if (NULL == (pw_ptr = getpwnam(argv[2]))) {
                        syslog(LOG_ERR,"no pwent for %s\n",argv[2]);
                        /* sprintf(buf,"no pwent for %s",argv[2]);
                        perror(buf); */
                        exit(0);
                }

                if (-1 == setuid(pw_ptr->pw_uid)) {
                        syslog(LOG_ERR,"setuid failure\n");
                        perror("setuid failure");
                        exit(0);
                }
        }


        closelog();

        if (-1 == execvp(argv[whicharg], &argv[whicharg])) {
                syslog(LOG_ERR,"execvp failure\n");
                /* perror("execvp failure"); */
                exit(0);
        }

} /* end of main */


Reply to: