Portál AbcLinuxu, 10. května 2025 05:10
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 pgm
je 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.