Доброе время суток.
Мне необходимо написать скрипт, который принимает два значения (пользователь и пароль) и регистрирует пользователя в системе.
>Доброе время суток.
>Мне необходимо написать скрипт, который принимает два значения (пользователь и пароль) и
>регистрирует пользователя в системе.Необходимо написать - напишите! Только непонятно зачем...
>Необходимо написать - напишите! Только непонятно зачем...
Я незнаю как.
>>Необходимо написать - напишите! Только непонятно зачем...
>Я незнаю как.ЗАЧЕМ Вам это нужно? Какая задача? Опишите подробнее.
>ЗАЧЕМ Вам это нужно? Какая задача? Опишите подробнее.
Нужно чтобы пользователи получили учетки на САМБА сервере. Хочу сделать это автоматически. Через ВЕБ-интерфейс. Написал интерфейс на РНР. Интерфейс регистрации есть. А дальше незнаю как.
Вот решил из РНР вызывать команды шела. Никак.
>>ЗАЧЕМ Вам это нужно? Какая задача? Опишите подробнее.
>Нужно чтобы пользователи получили учетки на САМБА сервере. Хочу сделать это автоматически.
>Через ВЕБ-интерфейс. Написал интерфейс на РНР. Интерфейс регистрации есть. А дальше
>незнаю как.
>Вот решил из РНР вызывать команды шела. Никак.http://tldp.org/LDP/abs/html/ - руководство по программированию на bash.
Удачи!
>Мне необходимо написать скрипт, который принимает два значения (пользователь и пароль) и
>регистрирует пользователя в системе.Что вы подразумеваете под "регистрирует пользователя в системе"? Заводит аккаунт для него, добавляя запись в /etc/passwd и другие файлы или что-то другое?
>Что вы подразумеваете под "регистрирует пользователя в системе"? Заводит аккаунт для него,
>добавляя запись в /etc/passwd и другие файлы или что-то другое?
Да. Именно заводит аккаунт для пользователя.
>>Что вы подразумеваете под "регистрирует пользователя в системе"? Заводит аккаунт для него,
>>добавляя запись в /etc/passwd и другие файлы или что-то другое?
>
>Да. Именно заводит аккаунт для пользователя.Гм. Ну попробую помочь, ведь задача весьма проста:
#!/bin/sh
# проверяем количество аргументов: должно быть два
if [ $# -ne 2]; then
echo "Usage: $0 username password" >&2
exit 1
fiUSER="$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
fiecho "User $USER was successfully created."
Скрипт я не проверял, но работать должен. Задание пароля через пайп может работать не везде, так как не все passwd это поддерживают. Но, знаю точно, что на CentOS 4.3 это работать должно.
В принципе код весьма простой и понятный, как по мне :)
Вот тут я допустил синтаксическую ошибку:>if [ $# -ne 2]; then
Нужно добавить пробел после двойки, перед закрывающей квадратной скобкой.
Большое тебе спасибо. Все работает.
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
Тоже ошибка
-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
>+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се работает.
http://www.publichouse.nuhttp://www.litox.ru/index.php?name=News&file=article&sid=573