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

Исходное сообщение
"bash + регистрация"

Отправлено lnick , 27-Фев-07 11:37 
Доброе время суток.
Мне необходимо написать скрипт, который принимает два значения (пользователь и пароль) и регистрирует пользователя в системе.

Содержание

Сообщения в этом обсуждении
"bash + регистрация"
Отправлено newser , 27-Фев-07 11:52 
>Доброе время суток.
>Мне необходимо написать скрипт, который принимает два значения (пользователь и пароль) и
>регистрирует пользователя в системе.

Необходимо написать - напишите! Только непонятно зачем...


"bash + регистрация"
Отправлено lnick , 27-Фев-07 12:02 
>Необходимо написать - напишите! Только непонятно зачем...
Я незнаю как.



"bash + регистрация"
Отправлено newser , 27-Фев-07 12:41 
>>Необходимо написать - напишите! Только непонятно зачем...
>Я незнаю как.

ЗАЧЕМ Вам это нужно? Какая задача? Опишите подробнее.


"bash + регистрация"
Отправлено lnick , 27-Фев-07 12:51 
>ЗАЧЕМ Вам это нужно? Какая задача? Опишите подробнее.
Нужно чтобы пользователи получили учетки на САМБА сервере. Хочу сделать это автоматически. Через ВЕБ-интерфейс. Написал интерфейс на РНР. Интерфейс регистрации есть. А дальше незнаю как.
Вот решил из РНР вызывать команды шела. Никак.


"bash + регистрация"
Отправлено newser , 27-Фев-07 13:27 
>>ЗАЧЕМ Вам это нужно? Какая задача? Опишите подробнее.
>Нужно чтобы пользователи получили учетки на САМБА сервере. Хочу сделать это автоматически.
>Через ВЕБ-интерфейс. Написал интерфейс на РНР. Интерфейс регистрации есть. А дальше
>незнаю как.
>Вот решил из РНР вызывать команды шела. Никак.

http://tldp.org/LDP/abs/html/ - руководство по программированию на bash.

Удачи!


"bash + регистрация"
Отправлено phpcoder , 27-Фев-07 14:20 
>Мне необходимо написать скрипт, который принимает два значения (пользователь и пароль) и
>регистрирует пользователя в системе.

Что вы подразумеваете под "регистрирует пользователя в системе"? Заводит аккаунт для него, добавляя запись в /etc/passwd и другие файлы или что-то другое?



"bash + регистрация"
Отправлено lnick , 27-Фев-07 20:10 
>Что вы подразумеваете под "регистрирует пользователя в системе"? Заводит аккаунт для него,
>добавляя запись в /etc/passwd и другие файлы или что-то другое?


Да. Именно заводит аккаунт для пользователя.


"bash + регистрация"
Отправлено phpcoder , 28-Фев-07 12:28 
>>Что вы подразумеваете под "регистрирует пользователя в системе"? Заводит аккаунт для него,
>>добавляя запись в /etc/passwd и другие файлы или что-то другое?
>
>Да. Именно заводит аккаунт для пользователя.

Гм. Ну попробую помочь, ведь задача весьма проста:

#!/bin/sh

# проверяем количество аргументов: должно быть два
if [ $# -ne 2]; then
  echo "Usage: $0 username password" >&2
  exit 1
fi

USER="$1"
PASS="$2"

# проверяем, чтобы имя пользователя и пароль не были пустыми
if [ -z "$USER" -o -z "$PASS" ]; then
  echo "User name or password shouldn't be empty!" >&2
  exit 1
fi

# добавляет пользователя
useradd -c "Autocreated user" "$USER"
if [ $? -ne 0 ]; then
  echo "Can't create user $USER: useradd fails." >&2
  exit 1
fi

# устанавливает пароль для него
printf '%s\n' "$PASS" | /usr/bin/passwd "$USER" --stdin >/dev/null
if [ $? -ne 0 ]; then
  echo "Can't set password for user $USER: passwd fails." >&2
  exit 1
fi

echo "User $USER was successfully created."

Скрипт я не проверял, но работать должен. Задание пароля через пайп может работать не везде, так как не все passwd это поддерживают. Но, знаю точно, что на CentOS 4.3 это работать должно.

В принципе код весьма простой и понятный, как по мне :)


"bash + регистрация"
Отправлено phpcoder , 28-Фев-07 12:30 

Вот тут я допустил синтаксическую ошибку:

>if [ $# -ne 2]; then

Нужно добавить пробел после двойки, перед закрывающей квадратной скобкой.


"bash + регистрация"
Отправлено lnick , 28-Фев-07 14:53 
Большое тебе спасибо. Все работает.

"bash + регистрация"
Отправлено lnick , 28-Фев-07 16:25 
printf '%s\n' "$PASS" | smbpasswd -a  $USER -s>/dev/null
if [ $? -ne 0 ]; then
  echo "Can't set password for user $USER: passwd fails." >&2
  exit 1
fi

это идет регистрация на самбе. Что то тут не то.

Mismatch - password unchanged.
Unable to get new password.
Can't set password for user asd: passwd fails.

Выдает

printf '%s\n' "$PASS" | smbpasswd -a -s $USER >/dev/null

Тоже ошибка


"bash + регистрация"
Отправлено phpcoder , 28-Фев-07 17:17 
-printf '%s\n' "$PASS" | smbpasswd -a  $USER -s>/dev/null
+printf '\n%s\n' "$PASS" | smbpasswd -a  $USER -s >/dev/null
if [ $? -ne 0 ]; then
-  echo "Can't set password for user $USER: passwd fails." >&2
-  echo "Can't set password for user $USER: smbpasswd fails." >&2
  exit 1
fi

Так должно работать. (С Самбой и паролями не работал, так что пришлось вместо вас читать man smbpasswd: http://www.hmug.org/man/8/smbpasswd.php

Неработало потому, что smbpasswd ждал ввода двух паролей -- старого и нового. А вы ему передавали только одну строчку (он воспринимал её как старый пароль). Согласно ману, при опции -a нужно просто нажать Enter (что эквивалентно символу новой строки -- '\n') для старого пароля.

HTH


"bash + регистрация"
Отправлено lnick , 01-Мрт-07 16:41 
>+printf '\n%s\n' "$PASS" | smbpasswd -a  $USER -s >/dev/null

С одним отличием.
printf '%s\n%s\n' "$PASS" "$PASS" | smbpasswd -a  $USER -s >/dev/null

Но всеравно огромное спасибо.
Bсе работает.


"bash + регистрация"
Отправлено Xalio , 11-Июн-07 02:33 
http://www.publichouse.nu

http://www.litox.ru/index.php?name=News&file=article&sid=573