Perl или Bash cкрипт

Модератор: Модераторы разделов

Аватара пользователя
Karen
Сообщения: 160
ОС: Slackware 11.0

Perl или Bash cкрипт

Сообщение Karen »

Доброе время суток уважаемые форумчане,

Я настроил WebDAV хранилище с авторизацией пользователей из mysql, также в базе хранятся другие описания.

Сам конфигурационный файл хранится в виде alias файла в каталоге /etc/apache2/sites-enabled/sites :

Код: Выделить всё

Alias /user1 "/home/davusers/user1"
<Directory "/home/davusers/user1">
                    DAV On
                    ForceType text/plain
                    AddDefaultCharset UTF-8
                    DAVSATMaxAreaSize 10240
                    Options Indexes MultiViews
                    AddType "text" .html .htm .php .cgi .pl .fcgi .fpl .phtml .shtml .php2 .php3 .php4 .php5 .asp .jsp
                    RemoveHandler .phtml .php .php3 .php4 .php5 .php6 .phps .cgi .exe .pl .asp .aspx .shtml .shtm .fcgi .fpl .jsp .htm .html .wml
                    AddType application/x-httpd-php-source .phtml .php .php3 .php4 .php5 .php6 .phps .cgi .exe .pl .asp .aspx .shtml .shtm .fcgi .fpl .jsp .htm .html .wml
                    AllowOverride None
                    Order allow,deny
                    allow from all

    AuthDigestProvider dbd
    AuthType Digest
    AuthName "LocalNet"
    Require user user1
    AuthDBDUserRealmQuery "select Digestpass from dav_users where Username = %s"
</Directory>



вот структура моей базы:

Изображение

Изображение

друг помог на php написать web-интерфейс для добавления пользователей в базу. При добавление новой учетной записи, она получает в поле "Isprocess" значение 1, это означает что она еще не создана в системе. Теперь мне нужен bash или perl скрипт, который запускался бы каждый час через cron и проверял базу на наличие учетных записей с значением поля "Isprocess" 1, и в случае обнаружения создал alias используя значения Username и Quota, в принципе все остальное тоже самое. После добавления надо чтоб поле "Isprocess" поменяло значение на 0, и Apache перечитал бы конфигурацию ( apachectl graceful )

Не поможете ли написать данный скрип уважаемые гуру?

Заранее благодарю за помощь ;)
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Perl или Bash cкрипт

Сообщение drBatty »

Karen писал(а):
16.10.2012 07:02
Теперь мне нужен bash или perl скрипт, который запускался бы каждый час через cron и проверял базу на наличие учетных записей с значением поля "Isprocess" 1, и в случае обнаружения создал alias используя значения Username и Quota, в принципе все остальное тоже самое. После добавления надо чтоб поле "Isprocess" поменяло значение на 0, и Apache перечитал бы конфигурацию ( apachectl graceful )

Karen писал(а):
16.10.2012 07:02
Не поможете ли написать данный скрип уважаемые гуру?

легко.
только я не понял, вам ПОМОЧЬ? или за вас написать? Если помочь, то пишите.
скрипт
на bash
Вы можете всё это сделать в консоли?
Если нет, то в чём проблема?
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
Karen
Сообщения: 160
ОС: Slackware 11.0

Re: Perl или Bash cкрипт

Сообщение Karen »

если понадобиться кому-нибудь ;) реализация данной задачи на php.

Код: Выделить всё

<?
$DB = mysql_connect("localhost",[color="#FF0000"]"<login>[/color]","[color="#FF0000"]<password>[/color]");  //mysql connect
mysql_select_db("[color="#FF0000"]<db_name>[/color]");  // select db
$query = "select * from `[color="#FF0000"]<table_name>[/color]` where `Isprocessed`='0' and `Status_id`='0'" ; // your query
$getq = mysql_query($query) or die(mysql_error()); //execute query
$conf="
Alias /{%USERNAME%} \"/[color="#FF0000"]<users_files_location>[/color]/{%USERNAME%}\"
<Directory \"/<users_files_location>/{%USERNAME%}\">
                    DAV On
                    ForceType text/plain
                    AddDefaultCharset UTF-8
                    DAVSATMaxAreaSize {%QUOTA_SIZE%}
                    Options Indexes MultiViews
                    AddType \"text\" .html .htm .php .cgi .pl .fcgi .fpl .phtml .shtml .php2 .php3 .php4 .php5 .asp .jsp
                    RemoveHandler .phtml .php .php3 .php4 .php5 .php6 .phps .cgi .exe .pl .asp .aspx .shtml .shtm .fcgi .fpl .jsp .htm .html .wml
                    AddType application/x-httpd-php-source .phtml .php .php3 .php4 .php5 .php6 .phps .cgi .exe .pl .asp .aspx .shtml .shtm .fcgi .fpl .jsp .htm .html .wml
                    AllowOverride None
                    Order allow,deny
                    allow from all

    AuthDigestProvider dbd
    AuthType Digest
    AuthName \"[color="#FF0000"]<realm>[/color]\"
    Require user {%USERNAME%}
    AuthDBDUserRealmQuery \"select Digestpass from [color="#FF0000"]<table_name>[/color] where Username = %s\"
</Directory>
";   // your configuration(DAV) template
while($res = mysql_fetch_assoc($getq)) //get each value from query
{
    $query = "update `[color="#FF0000"]<table_name>[/color]` set `Isprocessed`='1' where `id`='".$res['id'].                                                                                        "'";
    mysql_query($query);
    $conf = str_replace("{%USERNAME%}",$res['Username'],$conf); // if you want r                                                                                        eplace some value or string conf file you can mark that string or value {%%} and replace here.
    $username = $res['Username'];
    $quota_size = mysql_result(mysql_query("select p.quota from [color="#FF0000"]<table_name>[/color] u join                                                                                         dav_profiles p on p.id=u.profile_id where u.username='".$username."'"), 0);
    $conf = str_replace("{%QUOTA_SIZE%}",$quota_size,$conf); // if you want repl                                                                                        ace some value or string conf file you can mark that string or value {%%} and re                                                                                        place here.
    echo $username;
    $hand = fopen("/[color="#FF0000"]<virtual_aliases_location>[/color]/".$username.".conf",'w+'); /                                                                                        /create or reopen for rewriting conf file named account username
    fwrite($hand,$conf); // write conf into this file, clearing prviuos content
    fclose($hand); // close file
    mkdir("[color="#FF0000"]<users_files_location>[/color]".$username, 0775);
    //chown("[color="#FF0000"]<users_files_location>[/color]".$username,"www-data:www-data");
    $success = 1; // if xotya bi odno sdelanoe
}
mysql_close($DB);
if($success==1)
exec("apache2ctl -k restart");   //restart or reload apache
?>
Спасибо сказали: