Portál AbcLinuxu, 20. prosince 2025 06:18
snprintf( change_passwd, sizeof( change_passwd ), "passwd %s", login ); system( change_passwd ); // zde cekaNevite jak mu mam to heslo predat? Tento program pobezi na solarisu ne na linuxu, tudiz prikaz useradd v solarisu neumoznuje pri vytvoreni uzivatele pridat jako parametr heslo. Prilozeny program (viz nize) neni kompletni, protoze jednotlivi uzivatele pro vytvoreni a jejich parametry se budou nacitat z externiho souboru. Tohle je demonstracni priklad. O radu abych si vytvoril skript v perlu nebo bashi nestojim.
#include < stdio.h>
#define USERADD "/usr/sbin/useradd"
#define BASH "/bin/bash"
int main( void )
{
char create_user[ 200 ];
char change_passwd[ 200 ];
const char *uid = "691";
const char *gid = "100";
const char *home_dir = "/home/jenik";
const char *first_name = "Adam";
const char *last_name = "Jenik";
const char *login = "jenik";
const char *password = "heslo";
snprintf( create_user, sizeof( create_user ), "%s -u %s -g %s -d %s -m -s %s -c \"PRAHA / %s %s\" %s", USERADD, uid, gid, home_dir, BASH, first_name, last_name, login );
snprintf( change_passwd, sizeof( change_passwd ), "passwd %s", login );
printf( "%s\n%s\n", create_user, change_passwd );
system( create_user );
system( change_passwd );
return 0;
}
crypt(), getspent(), putspent()
t.j. ak použijete len základné veci, skript pobeží aj pod vašim sh, aj pod bash
sh neměl stačit.
system, kde máš vo výslednom reťazci uvodzovky?skús niečo na tento spôsob ...
if (! fork ()) {
execlp ("adduser", "-u", username, "-p", password, "-u", uid, NULL);
}
o radu "bash" nestojíš? to si radšej ten trojriadkový skript v bash-i chybovo naprogramuješ v C?Ono asi ten "trojriadkovy skript" ma byt sucastou niecoho ovela vacsieho, co bude napisane v C.
Tento program pobezi na solarisu ne na linuxu, tudiz prikaz useradd v solarisu neumoznuje pri vytvoreni uzivatele pridat jako parametr heslo.
#define USERADD "/usr/sbin/useradd" #define BASH "/bin/bash" snprintf( create_user, sizeof( create_user ), "%s -u %s -g %s -d %s -m -s %s -c \"PRAHA / %s %s\" %s", USERADD, uid, gid, home_dir, BASH, first_name, last_name, login ); system( create_user );
chpasswd?
chpasswd, ne passwd.
passwd user </subor/s/heslom.txt
Zhlediska programu pgmje jedno, jestli napíšete
pgm < file
nebo
cat file | pgm
Program v tom neuvidí žádný rozdíl. Zaznamenáte ho jen vy, protože ve druhém případě se vyrojí zástup lidí s rádoby vtipnými poznámkymi o soutěži ve zbytečném používání příkazu cat.
cat spomína, si ty.
Kdyz uz to pisete takhle blbe, tak opravdu neni duvod nepouzit shell skript. Na editaci zaznamu o uzivatelich funkcemi k tomu urcenymi, jak vas nasmeroval "14.8. 14:29 Michal Kubeček", taky neni nic tezkeho.
Ale pokud tedy trvate na spousteni prikazu s presmerovanym I/O, tak si probehnete man pro fork/wait/exec, dup/pipe/select. A myslim, ze passwd vyzaduje, aby byl vstup z tty (pty), takze jeste man pts.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.