URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 29518
[ Назад ]

Исходное сообщение
"qmail + быстрое создание пользователей"

Отправлено ajiko , 03-Май-03 10:10 
есть файл со списком новых пользователей и паролей
есть ли возможность быстро создать пользователей через скрипт или другой механизм
сервер qmail ось freebsd
дайте какую нибудь идею!

Содержание

Сообщения в этом обсуждении
"qmail + быстрое создание пользователей"
Отправлено amber46 , 03-Май-03 13:26 
>есть файл со списком новых пользователей и паролей
>есть ли возможность быстро создать пользователей через скрипт или другой механизм
>сервер qmail ось freebsd
>дайте какую нибудь идею!


виртуальные или системные юзера?

если виртуальные то совсем просто:
~vpopmail/bin/vadduser user@domain.com password
~vpopmail/bin/vadduser user2@domain.com password
~vpopmail/bin/vadduser user3@domain1.com password


"виртуальные или системные юзера?"
Отправлено ajiko , 03-Май-03 16:52 
виртуальные
тока есть файл типа

name              password
someone01         password_of_someone_01  
someone02         password_of_someone_02
someone03         password_of_someone_03
someone04         password_of_someone_04

etc. и того 5000 записей

как вот создать зтих всех пользователей?
какого содержания будет примерный скрипт, может кому не лень подкинуть идею?


"виртуальные или системные юзера?"
Отправлено amber46 , 03-Май-03 17:22 
>виртуальные
>тока есть файл типа
>
>name            
>  password
>someone01         password_of_someone_01
>someone02         password_of_someone_02
>someone03         password_of_someone_03
>someone04         password_of_someone_04
>
>etc. и того 5000 записей
>
>как вот создать зтих всех пользователей?
>какого содержания будет примерный скрипт, может кому не лень подкинуть идею?
:))
Ок. Идея такая:
-------------------- Script -------------
#!/определяем чем исполяется данный скрипт

пока (читаем файл со спиcком пока не кончится) # исполняем все что далее
{
username = берем первое слово от начала строки;
email = добавляем к username имя домена;
password = берем второе слово из строки;
исполняем(~vpopmail/bin/vadduser $email $password);
}


"amber'у"
Отправлено ajiko , 03-Май-03 18:49 
спасибо! я попробую наверное где-то в понедельник, возможно понадобится твоя помощь.

"виртуальные или системные юзера?"
Отправлено nevi , 04-Май-03 18:06 
>Ок. Идея такая:
>-------------------- Script -------------
>#!/определяем чем исполяется данный скрипт
>
>пока (читаем файл со спиcком пока не кончится) # исполняем все что
>далее
>{
>username = берем первое слово от начала строки;
>email = добавляем к username имя домена;
>password = берем второе слово из строки;
>исполняем(~vpopmail/bin/vadduser $email $password);
>}

;]
Ок. Реализация идеи:
>-------------------- Script -------------

#!/usr/bin/perl -w

while(<>){
  chomp;
  ($email,$password)=split;
  system("~vpopmail/bin/vadduser $email $password")==0 || die "\nERR: $?\n";
}


"виртуальные или системные юзера?"
Отправлено amber46 , 04-Май-03 18:10 
>>Ок. Идея такая:
>>-------------------- Script -------------
>>#!/определяем чем исполяется данный скрипт
>>
>>пока (читаем файл со спиcком пока не кончится) # исполняем все что
>>далее
>>{
>>username = берем первое слово от начала строки;
>>email = добавляем к username имя домена;
>>password = берем второе слово из строки;
>>исполняем(~vpopmail/bin/vadduser $email $password);
>>}
>
>;]
>Ок. Реализация идеи:
>>-------------------- Script -------------
>
>#!/usr/bin/perl -w
>
>while(<>){
>  chomp;
>  ($email,$password)=split;
>  system("~vpopmail/bin/vadduser $email $password")==0 || die "\nERR: $?\n";
>}

Отлично! только вот при работе с vadduser ОБЯЗАТЕЛЬНО указывать имя домена. Соответственно  если в списке нет доменов, а есть только имена юзеров то надо добавить их в скрипте.


"поступил таким образом..."
Отправлено ajiko , 06-Май-03 12:26 
createmailusers.pl
//---------script start----

#!/usr/bin/perl -w
open (FILE, "userslist.txt") or die ("Cannot open filename: $!");
while(<FILE>)
{
  chomp;
  ($email,$password,$realname) = split '\t';
   $emailfull = (substr($email,9,0) = "@myhost.com");
  system("~vpopmail/bin/vadduser -c $realname $emailfull $password")==0 || die "\nERR: $?\n";
}
//---------script end ----

userslist.txt
// --- listing start ---
001001001    pass1     Name1 Surname1
002002002    pass2     Name2 Surname2
003003003    pass3     Name3 Surname3
// --- listing end ---

структура userslist.txt такая
1. имя пользователя(состоит из 9 символов)
2. табуляция
3. пароль(5 символов)
4. табуляция
5. Имя Фамилия

теперь из консоли
perl createmailusers.pl

все время выдает такую ошибку
Error! Username exists
Err: 65024

возможно в скрипте есть какая ошибка?


"поступил таким образом..."
Отправлено DogEater , 06-Май-03 12:44 
>createmailusers.pl
>//---------script start----
>
>#!/usr/bin/perl -w
>open (FILE, "userslist.txt") or die ("Cannot open filename: $!");
>while(<FILE>)
>{
>  chomp;
>  ($email,$password,$realname) = split '\t';
>   $emailfull = (substr($email,9,0) = "@myhost.com");
>  system("~vpopmail/bin/vadduser -c $realname $emailfull $password")==0 || die "\nERR: $?\n";
>}
>//---------script end ----
>
>userslist.txt
>// --- listing start ---
>001001001    pass1     Name1 Surname1
>002002002    pass2     Name2 Surname2
>003003003    pass3     Name3 Surname3
>// --- listing end ---
>
>структура userslist.txt такая
>1. имя пользователя(состоит из 9 символов)
>2. табуляция
>3. пароль(5 символов)
>4. табуляция
>5. Имя Фамилия
>
>теперь из консоли
>perl createmailusers.pl
>
>все время выдает такую ошибку
>Error! Username exists
>Err: 65024
>
>возможно в скрипте есть какая ошибка?

А если ручками команду запусить - она повторится?
Параметры в командную строку передаются верно?
Может и правда уже есть такие пользователи?
Тогда vdeluser  твой лучший друг :-)!


"поступил таким образом..."
Отправлено ajiko , 06-Май-03 15:28 
да дело в том что ошибка происходит в этом месте я думаю,

($email,$password,$realname) = split '\t';
$emailfull = (substr($email,9,0) = "@myhost.com");

но если добавить такую строку

echo $email;

ошибка такая:
Name "main:realname" used only once: possible typo at createmailusers.pl line 6.
Name "main:password" used only once: possible typo at createmailusers.pl line 6.
Name "main:emailfull" used only once: possible typo at createmailusers.pl line 6.

can't locate object method "echo" via package "001001001@myhost.com" at createmailusers.pl line8, <FILE> chunk 1.

понять бы на что ругается?


"поступил таким образом..."
Отправлено ajiko , 06-Май-03 18:23 
все вроде разобрался...

#!/usr/bin/perl -w
open (FILE, "userslist.txt") or die ("Cannot open filename: $!");
while(<FILE>)
{
  chomp;
  ($email,$password,$realname) = split '\t';
   $emailfull = $email.'@myhost.com';
  system("~vpopmail/bin/vadduser -c $realname -q 3 $emailfull $password")==0 || die "\nERR: $?\n";

но вот беда ->

так вот переменная $realname следующего вида "Name1 Surname1"
(т.е содержит пробел), если без пробела то все нормально проходит.

а как можно чтоб в строке
system("~vpopmail/bin/vadduser -c $realname -q 3 $emailfull $password")
можно передать значение с пробелом в содержимом?


"поступил таким образом..."
Отправлено DogEater , 08-Май-03 10:36 
>все вроде разобрался...
>
>#!/usr/bin/perl -w
>open (FILE, "userslist.txt") or die ("Cannot open filename: $!");
>while(<FILE>)
>{
>  chomp;
>  ($email,$password,$realname) = split '\t';
>   $emailfull = $email.'@myhost.com';
>  system("~vpopmail/bin/vadduser -c $realname -q 3 $emailfull $password")==0 || die "\nERR:
>$?\n";
>
>но вот беда ->
>
>так вот переменная $realname следующего вида "Name1 Surname1"
>(т.е содержит пробел), если без пробела то все нормально проходит.
>
>а как можно чтоб в строке
>system("~vpopmail/bin/vadduser -c $realname -q 3 $emailfull $password")
>можно передать значение с пробелом в содержимом?

попробуй так:
system("~vpopmail/bin/vadduser -c $realname -q 3 \"$emailfull\" \"$password\"")


"всем спасибо за участие"
Отправлено ajiko , 08-Май-03 11:12 
да я как раз перед сном и догадался что нужно было просто этот символ экранировать Ж)