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

Re: [Debian] Start-Script



On Mon, Jan 22, 2001 at 07:26:14 +0100, Erich Baur wrote:
> Hallo Liste!

hiho,

> 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
 *                                     herp@wildsau.idv.uni-linz.ac.at
 *
 * 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;

	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]--

--
-----------------------------------------------------------
Um sich aus der Liste auszutragen schicken Sie bitte eine
E-Mail an debian-user-de-request@lehmanns.de die im Subject
"unsubscribe <deine_email_adresse>" enthaelt.
Bei Problemen bitte eine Mail an: Jan.Otto@Lehmanns.de
-----------------------------------------------------------

684 eingetragene Mitglieder in dieser Liste.


Reply to: