Janto Trappe schrieb am Sam, Jul 07, 2001 05:23:54 +0200:
> IIRC gab es hier vor laengerer Zeit mal einen Thread in dem ein
> Script gepostet wurde, dass es ermoeglicht mit einem (1) login
> mehrere shells zu starten. Man loggt sich z.B. auf tty1 ein und
> anschliessend ist man auf tty2-8 ebenfalls eingeloggt. Kann sich
> noch jemand daran errinnern? Im Archiv habe ich leider nichts
> gefunden, ein Subject oder so waere also hilfreich.
Hi Janto,
ich glaube, Du meinst das hier?
<Zitat>
Date: Mon, 22 Jan 2001 20:44:06 +0100
From: Mathias Gygax <[EMAIL PROTECTED]>
To: [EMAIL PROTECTED]
Organization: ENIAC
Subject: Re: Start-Script
> Gibt es eine M�glichkeit, ein Script zu schreiben, welches automatisch
beim
> Starten von Linux sechs Konsolen �ffnet, damit man nicht von Hand �berall
> Loginname und Passwort eingeben mu�? Ideal w�re noch, wenn man den
> Benuzternamen im Script jeweils angeben k�nnte.
ja. da es nur ein rel. kurzes c programm ist, poste ich es mal. sorry
schon mal an alle die, die sich jetzt wegen der gr�sse aufregen :-/
--[snippelsnappel]--
/*
* utty.c Fri Jun 23 14:12:24 GMT 2000 Herbert Rosmanith
* [EMAIL PROTECTED]
*
* bringt eine login shell auf einem tty, ohne dass man sich
* anmelden muss
*
* compile: cc -s -o utty utty.c
*
* Usage: utty <user> <tty>
*
* der geeignetste platz fuer dieses programm ist die inittab,
* etwa so:
*
* /etc/inittab
* [...]
* t6:23:respawn:/sbin/utty herp /dev/tty6
* t7:23:respawn:/sbin/utty herp /dev/tty7
* t8:23:respawn:/sbin/utty herp /dev/tty8
* t9:23:respawn:/sbin/utty herp /dev/tty9
* ta:23:respawn:/sbin/utty herp /dev/tty10
* tb:23:respawn:/sbin/utty herp /dev/tty11
* tc:23:respawn:/sbin/utty herp /dev/tty12
* [...]
* # End of /etc/inittab
*/
#include <stdio.h>
#include <sys/types.h>
#include <sys/ioctl.h>
#include <sys/stat.h>
#include <string.h>
#include <pwd.h>
#include <grp.h>
#include <fcntl.h>
#include <unistd.h>
#include <errno.h>
void die(char *s) {
if (errno) perror(s);
else fprintf(stderr,"%s\n",s);
exit(-1);
}
int main(int argc,char *argv[]) {
struct passwd *pwd;
struct group *gr;
char *args[2] = { "-bash", NULL };
char *envp[3]={ "TERM=vt100", NULL, NULL };
char msg[]="\nYou are now on \0\0\0\0\0\0\0\0\0\0\0\0";
char *ch;
int fd;
int i=1;
int main(int argc,char *argv[]) {
struct passwd *pwd;
struct group *gr;
char *args[2] = { "-bash", NULL };
char *envp[3]={ "TERM=vt100", NULL, NULL };
char msg[]="\nYou are now on \0\0\0\0\0\0\0\0\0\0\0\0";
char *ch;
int fd;
int i=1;
if (argc!=3) die("usage: utty <user> <tty>");
if ((pwd=getpwnam(argv[1]))==NULL) die("user unknown");
if ((gr=getgrnam("tty"))==NULL) die("group 'tty' unknown");
close(0);
close(1);
close(2);
if ((fd=open(argv[2],O_RDWR))!=0) die("open");
if (dup2(0,1)!=1) die("dup2 1");
if (dup2(0,2)!=2) die("dup2 2");
if (ioctl(fd,TIOCSCTTY,&i)==-1) die("ioctl TIOCSCTTY");
if (fchown(fd,pwd->pw_uid,gr->gr_gid)==-1) die("fchown");
if (fchmod(fd,0620)==-1) die("fchmod");
strcat(msg,(ch=rindex(argv[2],'/'))?ch+1:argv[2]);
write(fd,msg,strlen(msg));
envp[1]=(char *)malloc(5+/*HOME=*/strlen(pwd->pw_dir)+1);
sprintf(envp[1],"HOME=%s",pwd->pw_dir);
chdir(pwd->pw_dir);
setgid(pwd->pw_gid);
setuid(pwd->pw_uid);
execve("/bin/bash",args,envp);
die("execve");
--[snippelsnappel]--
</Zitat>
Gru� und viel Erfolg beim basteln,
--
Matthias Haehn <[EMAIL PROTECTED]>.
--
-----------------------------------------------------------
Um sich aus der Liste auszutragen schicken Sie bitte eine
E-Mail an [EMAIL PROTECTED] die im Subject
"unsubscribe <deine_email_adresse>" enthaelt.
Bei Problemen bitte eine Mail an: [EMAIL PROTECTED]
-----------------------------------------------------------
850 eingetragene Mitglieder in dieser Liste.